X-Git-Url: http://www2.svjatoslav.eu/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Feu%2Fsvjatoslav%2Finstantlauncher%2Fmenu%2FMenu.java;h=252abbf786d0fe8d6f8253f0bad1997c30dea5f4;hb=617c93e31fc6f020323b503fe0028a8e10c746b6;hp=a99c7c026850f2afdfd1ac93652c019f2a75595d;hpb=7afbbed8e0cef27a47dd7599aadc5c2c814c7dea;p=instantlauncher.git diff --git a/src/main/java/eu/svjatoslav/instantlauncher/menu/Menu.java b/src/main/java/eu/svjatoslav/instantlauncher/menu/Menu.java index a99c7c0..252abbf 100755 --- a/src/main/java/eu/svjatoslav/instantlauncher/menu/Menu.java +++ b/src/main/java/eu/svjatoslav/instantlauncher/menu/Menu.java @@ -1,64 +1,85 @@ package eu.svjatoslav.instantlauncher.menu; -import java.awt.Color; -import java.awt.Dimension; +import eu.svjatoslav.commons.gui.dialog.ExceptionDialog; +import eu.svjatoslav.instantlauncher.Utils; + +import javax.swing.*; +import javax.swing.border.EmptyBorder; +import java.awt.*; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.io.File; import java.util.Arrays; -import java.util.Comparator; import java.util.HashSet; import java.util.Set; -import javax.swing.Box; -import javax.swing.BoxLayout; -import javax.swing.JButton; -import javax.swing.JPanel; -import javax.swing.SwingConstants; -import javax.swing.border.EmptyBorder; - -import eu.svjatoslav.commons.gui.dialog.ExceptionDialog; -import eu.svjatoslav.instantlauncher.Utils; - -public class Menu { +class Menu { - public static final Color BUTTON_BG_DIRECTORY = new Color(0, 0, 60); - public static final Color BUTTON_BG_DIRECTORY_SELECTED = new Color(0, 0, 100); - - public static final Color BUTTON_BG_LINK = new Color(60, 60, 0); - public static final Color BUTTON_BG_LINK_SELECTED = new Color(100, 100, 0); + public static final Dimension SIZE_MENU_PANEL = new Dimension(210, 900); + private static final Color BUTTON_BG_DIRECTORY = new Color(0, 0, 60); - public static final Color BUTTON_BG_EXECUTABLE_FILE = new Color(60, 0, 0); - public static final Color BUTTON_BG_EXECUTABLE_FILE_SELECTED = new Color(100, 0, 0); + private static final Color BUTTON_BG_DIRECTORY_SELECTED = new Color(0, 0, 100); + private static final Color BUTTON_BG_LINK = new Color(60, 60, 0); - public static final Color BUTTON_BG_NONEXECUTABLE_FILE = new Color(0, 60, 0); - public static final Color BUTTON_BG_NONEXECUTABLE_FILE_SELECTED = new Color(0, 100, 0); + private static final Color BUTTON_BG_LINK_SELECTED = new Color(100, 100, 0); + private static final Color BUTTON_BG_EXECUTABLE_FILE = new Color(60, 0, 0); - public static final Dimension SIZE_BUTTON = new Dimension(200, 30); - public static final Dimension SIZE_MENU_PANEL = new Dimension(210, 900); + private static final Color BUTTON_BG_EXECUTABLE_FILE_SELECTED = new Color(100, 0, 0); + private static final Color BUTTON_BG_NONEXECUTABLE_FILE = new Color(0, 60, 0); + private static final Color BUTTON_BG_NONEXECUTABLE_FILE_SELECTED = new Color(0, 100, 0); + private static final Dimension SIZE_BUTTON = new Dimension(200, 30); + private final Set menuListeners = new HashSet<>(); private JPanel menuPanel; - - public JButton selectedButton; - public File selectedFile; - - private final Set menuListeners = new HashSet(); + private JButton selectedButton; + private File selectedFile; public Menu(final File directory) { buildContentPanel(directory); - }; + } + + /** + *
+     * Assign specific colors to:
+     *    Directory
+     *    Executable file
+     *    Non executable file
+     * 
+ */ + private static Color getFileColor(final File file, final boolean selected) { + if (file.isDirectory()) + if (selected) + return BUTTON_BG_DIRECTORY_SELECTED; + else + return BUTTON_BG_DIRECTORY; + + if (file.isFile()) + if (file.canExecute()) { + if (selected) + return BUTTON_BG_EXECUTABLE_FILE_SELECTED; + else + return BUTTON_BG_EXECUTABLE_FILE; + } else if (selected) + return BUTTON_BG_NONEXECUTABLE_FILE_SELECTED; + else + return BUTTON_BG_NONEXECUTABLE_FILE; + + if (selected) + return BUTTON_BG_LINK_SELECTED; + else + return BUTTON_BG_LINK; + } public void addMenuListener(final MenuListener menuListener) { menuListeners.add(menuListener); } - public JButton buildButton(final File file) { + private JButton buildButton(final File file) { JButton button; - if (file.isDirectory()) { + if (file.isDirectory()) button = new JButton("[ " + file.getName() + " ]"); - } else { + else button = new JButton(file.getName()); - } button.setBackground(getFileColor(file, false)); button.setForeground(new Color(255, 255, 255)); @@ -88,107 +109,69 @@ public class Menu { final File[] listFiles = directory.listFiles(); // Sort files by name - Arrays.sort(listFiles, new Comparator() { - @Override - public int compare(final File f1, final File f2) { + Arrays.sort(listFiles, (f1, f2) -> { - // directories come before files - if (f1.isFile() && f2.isDirectory()) { - return 1; - } - if (f2.isFile() && f1.isDirectory()) { - return -1; - } + // directories come before files + if (f1.isFile() && f2.isDirectory()) + return 1; + if (f2.isFile() && f1.isDirectory()) + return -1; - // order by file name - return f1.getName().toUpperCase().compareTo(f2.getName().toUpperCase()); - } + // order by file name + return f1.getName().toUpperCase().compareTo(f2.getName().toUpperCase()); }); // add files to the panel - for (final File file : listFiles) { + for (final File file : listFiles) // ignore hidden files if (!file.getName().startsWith(".")) { menuPanel.add(Box.createVerticalStrut(10)); menuPanel.add(buildButton(file)); } - } } public JPanel getMenuPanel() { return menuPanel; } - public JButton getSelectedButton() { + private JButton getSelectedButton() { return selectedButton; } - public File getSelectedFile() { + private File getSelectedFile() { return selectedFile; } - public void notifyAlternativeEventListeners(final File chosenFile) { - for (final MenuListener menuListener : menuListeners) { - menuListener.menuItemSelectedAlternative(this, chosenFile); - } + private void menuItemHighlighted(final File chosenFile) { + for (final MenuListener menuListener : menuListeners) + menuListener.menuItemHighlighted(this, chosenFile); } - public void notifyEventListeners(final File chosenFile) { - for (final MenuListener menuListener : menuListeners) { - menuListener.menuItemSelected(this, chosenFile); - } + private void menuItemSelected(final File chosenFile) { + for (final MenuListener menuListener : menuListeners) + menuListener.menuItemSelected(chosenFile); } - public void setSelected(final JButton selectedButton, final File selectedFile) { - this.selectedButton = selectedButton; - this.selectedFile = selectedFile; + private void menuItemSelectedAlternative(final File chosenFile) { + for (final MenuListener menuListener : menuListeners) + menuListener.menuItemSelectedAlternative(chosenFile); } - /** - *
-     * Assign specific colors to:
-     *    Directory
-     *    Executable file
-     *    Non executable file
-     * 
- */ - public static Color getFileColor(final File file, final boolean selected) { - if (file.isDirectory()) { - if (selected) { - return BUTTON_BG_DIRECTORY_SELECTED; - } else { - return BUTTON_BG_DIRECTORY; - } - } - - if (file.isFile()) { - if (file.canExecute()) { - if (selected) { - return BUTTON_BG_EXECUTABLE_FILE_SELECTED; - } else { - return BUTTON_BG_EXECUTABLE_FILE; - } - } else { - if (selected) { - return BUTTON_BG_NONEXECUTABLE_FILE_SELECTED; - } else { - return BUTTON_BG_NONEXECUTABLE_FILE; - } - } - } + private void menuItemSelectedAlternative2(final File chosenFile) { + for (final MenuListener menuListener : menuListeners) + menuListener.menuItemSelectedAlternative2(chosenFile); + } - if (selected) { - return BUTTON_BG_LINK_SELECTED; - } else { - return BUTTON_BG_LINK; - } + private void setSelected(final JButton selectedButton, final File selectedFile) { + this.selectedButton = selectedButton; + this.selectedFile = selectedFile; } public static class ButtonMouseListener implements MouseListener { - JButton parentButton; - Menu parentMenu; - File file; + final JButton parentButton; + final Menu parentMenu; + final File file; public ButtonMouseListener(final JButton button, final Menu parentMenu, final File file) { parentButton = button; @@ -200,12 +183,12 @@ public class Menu { public void mouseClicked(final MouseEvent e) { try { - if (e.getButton() == 1) { - parentMenu.notifyEventListeners(file); - } - if (e.getButton() == 3) { - parentMenu.notifyAlternativeEventListeners(file); - } + if (e.getButton() == 1) // left mouse click + parentMenu.menuItemSelected(file); + if (e.getButton() == 2) // middle mouse click + parentMenu.menuItemSelectedAlternative2(file); + if (e.getButton() == 3) //right mouse click + parentMenu.menuItemSelectedAlternative(file); } catch (final Exception ex) { new ExceptionDialog(ex); } @@ -216,16 +199,13 @@ public class Menu { try { if (parentButton != parentMenu.getSelectedButton()) { - if (parentMenu.getSelectedButton() != null) { + if (parentMenu.getSelectedButton() != null) parentMenu.getSelectedButton().setBackground(getFileColor(parentMenu.getSelectedFile(), false)); - } parentMenu.setSelected(parentButton, file); parentButton.setBackground(getFileColor(file, true)); - if (file.isDirectory()) { - parentMenu.notifyEventListeners(file); - } + parentMenu.menuItemHighlighted(file); } } catch (final Exception ex) { new ExceptionDialog(ex);