right click on directory opens it in terminal
[instantlauncher.git] / src / main / java / eu / svjatoslav / instantlauncher / menu / Menu.java
index a99c7c0..948672a 100755 (executable)
@@ -22,31 +22,122 @@ import eu.svjatoslav.instantlauncher.Utils;
 
 public class Menu {
 
+    public static class ButtonMouseListener implements MouseListener {
+
+        JButton parentButton;
+        Menu parentMenu;
+        File file;
+
+        public ButtonMouseListener(final JButton button, final Menu parentMenu, final File file) {
+            parentButton = button;
+            this.parentMenu = parentMenu;
+            this.file = file;
+        }
+
+        @Override
+        public void mouseClicked(final MouseEvent e) {
+            try {
+
+                if (e.getButton() == 1)
+                    parentMenu.menuItemSelected(file);
+                if (e.getButton() == 3)
+                    parentMenu.menuItemSelectedAlternative(file);
+            } catch (final Exception ex) {
+                new ExceptionDialog(ex);
+            }
+        }
+
+        @Override
+        public void mouseEntered(final MouseEvent e) {
+            try {
+                if (parentButton != parentMenu.getSelectedButton()) {
+
+                    if (parentMenu.getSelectedButton() != null)
+                        parentMenu.getSelectedButton().setBackground(getFileColor(parentMenu.getSelectedFile(), false));
+
+                    parentMenu.setSelected(parentButton, file);
+                    parentButton.setBackground(getFileColor(file, true));
+
+                    parentMenu.menuItemHighlighted(file);
+                }
+            } catch (final Exception ex) {
+                new ExceptionDialog(ex);
+            }
+        }
+
+        @Override
+        public void mouseExited(final MouseEvent e) {
+        }
+
+        @Override
+        public void mousePressed(final MouseEvent e) {
+        }
+
+        @Override
+        public void mouseReleased(final MouseEvent e) {
+        }
+
+    }
+
     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_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 Color BUTTON_BG_LINK_SELECTED = new Color(100, 100, 0);
     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);
 
+    public static final Color BUTTON_BG_EXECUTABLE_FILE_SELECTED = new Color(100, 0, 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);
 
+    public static final Color BUTTON_BG_NONEXECUTABLE_FILE_SELECTED = new Color(0, 100, 0);
     public static final Dimension SIZE_BUTTON = new Dimension(200, 30);
+
     public static final Dimension SIZE_MENU_PANEL = new Dimension(210, 900);
 
+    /**
+     * <pre>
+     * Assign specific colors to:
+     *    Directory
+     *    Executable file
+     *    Non executable file
+     * </pre>
+     */
+    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;
+
+        if (selected)
+            return BUTTON_BG_LINK_SELECTED;
+        else
+            return BUTTON_BG_LINK;
+    }
+
     private JPanel menuPanel;
 
     public JButton selectedButton;
-    public File selectedFile;
+
+    public File selectedFile;;
 
     private final Set<MenuListener> menuListeners = new HashSet<MenuListener>();
 
     public Menu(final File directory) {
         buildContentPanel(directory);
-    };
+    }
 
     public void addMenuListener(final MenuListener menuListener) {
         menuListeners.add(menuListener);
@@ -54,11 +145,10 @@ public class Menu {
 
     public 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));
@@ -93,12 +183,10 @@ public class Menu {
             public int compare(final File f1, final File f2) {
 
                 // directories come before files
-                if (f1.isFile() && f2.isDirectory()) {
+                if (f1.isFile() && f2.isDirectory())
                     return 1;
-                }
-                if (f2.isFile() && f1.isDirectory()) {
+                if (f2.isFile() && f1.isDirectory())
                     return -1;
-                }
 
                 // order by file name
                 return f1.getName().toUpperCase().compareTo(f2.getName().toUpperCase());
@@ -106,13 +194,12 @@ public class Menu {
         });
 
         // 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() {
@@ -127,16 +214,19 @@ public class Menu {
         return selectedFile;
     }
 
-    public void notifyAlternativeEventListeners(final File chosenFile) {
-        for (final MenuListener menuListener : menuListeners) {
-            menuListener.menuItemSelectedAlternative(this, chosenFile);
-        }
+    public 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) {
+    public void menuItemSelected(final File chosenFile) {
+        for (final MenuListener menuListener : menuListeners)
             menuListener.menuItemSelected(this, chosenFile);
-        }
+    }
+
+    public void menuItemSelectedAlternative(final File chosenFile) {
+        for (final MenuListener menuListener : menuListeners)
+            menuListener.menuItemSelectedAlternative(this, chosenFile);
     }
 
     public void setSelected(final JButton selectedButton, final File selectedFile) {
@@ -144,106 +234,4 @@ public class Menu {
         this.selectedFile = selectedFile;
     }
 
-    /**
-     * <pre>
-     * Assign specific colors to:
-     *    Directory
-     *    Executable file
-     *    Non executable file
-     * </pre>
-     */
-    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;
-                }
-            }
-        }
-
-        if (selected) {
-            return BUTTON_BG_LINK_SELECTED;
-        } else {
-            return BUTTON_BG_LINK;
-        }
-    }
-
-    public static class ButtonMouseListener implements MouseListener {
-
-        JButton parentButton;
-        Menu parentMenu;
-        File file;
-
-        public ButtonMouseListener(final JButton button, final Menu parentMenu, final File file) {
-            parentButton = button;
-            this.parentMenu = parentMenu;
-            this.file = file;
-        }
-
-        @Override
-        public void mouseClicked(final MouseEvent e) {
-            try {
-
-                if (e.getButton() == 1) {
-                    parentMenu.notifyEventListeners(file);
-                }
-                if (e.getButton() == 3) {
-                    parentMenu.notifyAlternativeEventListeners(file);
-                }
-            } catch (final Exception ex) {
-                new ExceptionDialog(ex);
-            }
-        }
-
-        @Override
-        public void mouseEntered(final MouseEvent e) {
-            try {
-                if (parentButton != parentMenu.getSelectedButton()) {
-
-                    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);
-                    }
-                }
-            } catch (final Exception ex) {
-                new ExceptionDialog(ex);
-            }
-        }
-
-        @Override
-        public void mouseExited(final MouseEvent e) {
-        }
-
-        @Override
-        public void mousePressed(final MouseEvent e) {
-        }
-
-        @Override
-        public void mouseReleased(final MouseEvent e) {
-        }
-
-    }
-
 }
\ No newline at end of file