possibility to open file with emacs using with middle mouse click
[instantlauncher.git] / src / main / java / eu / svjatoslav / instantlauncher / menu / Menu.java
index 948672a..916f8ef 100755 (executable)
@@ -22,216 +22,223 @@ 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) {
-        }
+       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() == 2)
+                                       parentMenu.menuItemSelectedAlternative2(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) {
+               }
 
-        @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_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_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_NONEXECUTABLE_FILE = new Color(0, 60, 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;;
+
+       private final Set<MenuListener> menuListeners = new HashSet<MenuListener>();
+
+       public Menu(final File directory) {
+               buildContentPanel(directory);
+       }
+
+       public void addMenuListener(final MenuListener menuListener) {
+               menuListeners.add(menuListener);
+       }
+
+       public JButton buildButton(final File file) {
+               JButton button;
+               if (file.isDirectory())
+                       button = new JButton("[ " + file.getName() + " ]");
+               else
+                       button = new JButton(file.getName());
+
+               button.setBackground(getFileColor(file, false));
+               button.setForeground(new Color(255, 255, 255));
+
+               button.setBorder(new EmptyBorder(5, 10, 5, 10));
+
+               final Menu.ButtonMouseListener mouseListener = new ButtonMouseListener(button, this, file);
+               button.addMouseListener(mouseListener);
+
+               button.setHorizontalTextPosition(SwingConstants.CENTER);
+
+               // set button size
+               Utils.setComponentSize(button, SIZE_BUTTON);
+
+               return button;
+       }
+
+       private void buildContentPanel(final File directory) {
+               menuPanel = new JPanel();
+
+               Utils.setComponentSize(menuPanel, SIZE_MENU_PANEL);
+
+               final BoxLayout layout = new BoxLayout(menuPanel, BoxLayout.Y_AXIS);
+               menuPanel.setLayout(layout);
+               menuPanel.setBackground(Color.BLACK);
+
+               final File[] listFiles = directory.listFiles();
+
+               // Sort files by name
+               Arrays.sort(listFiles, new Comparator<File>() {
+                       @Override
+                       public int compare(final File f1, final File f2) {
+
+                               // 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());
+                       }
+               });
+
+               // add files to the panel
+               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() {
+               return selectedButton;
+       }
+
+       public File getSelectedFile() {
+               return selectedFile;
+       }
+
+       public void menuItemHighlighted(final File chosenFile) {
+               for (final MenuListener menuListener : menuListeners)
+                       menuListener.menuItemHighlighted(this, chosenFile);
+       }
 
-    }
+       public void menuItemSelected(final File chosenFile) {
+               for (final MenuListener menuListener : menuListeners)
+                       menuListener.menuItemSelected(this, chosenFile);
+       }
 
-    public static final Color BUTTON_BG_DIRECTORY = new Color(0, 0, 60);
+       public void menuItemSelectedAlternative(final File chosenFile) {
+               for (final MenuListener menuListener : menuListeners)
+                       menuListener.menuItemSelectedAlternative(this, chosenFile);
+       }
 
-    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_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_NONEXECUTABLE_FILE = new Color(0, 60, 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;;
-
-    private final Set<MenuListener> menuListeners = new HashSet<MenuListener>();
-
-    public Menu(final File directory) {
-        buildContentPanel(directory);
-    }
-
-    public void addMenuListener(final MenuListener menuListener) {
-        menuListeners.add(menuListener);
-    }
-
-    public JButton buildButton(final File file) {
-        JButton button;
-        if (file.isDirectory())
-            button = new JButton("[ " + file.getName() + " ]");
-        else
-            button = new JButton(file.getName());
-
-        button.setBackground(getFileColor(file, false));
-        button.setForeground(new Color(255, 255, 255));
-
-        button.setBorder(new EmptyBorder(5, 10, 5, 10));
-
-        final Menu.ButtonMouseListener mouseListener = new ButtonMouseListener(button, this, file);
-        button.addMouseListener(mouseListener);
-
-        button.setHorizontalTextPosition(SwingConstants.CENTER);
-
-        // set button size
-        Utils.setComponentSize(button, SIZE_BUTTON);
-
-        return button;
-    }
-
-    private void buildContentPanel(final File directory) {
-        menuPanel = new JPanel();
-
-        Utils.setComponentSize(menuPanel, SIZE_MENU_PANEL);
-
-        final BoxLayout layout = new BoxLayout(menuPanel, BoxLayout.Y_AXIS);
-        menuPanel.setLayout(layout);
-        menuPanel.setBackground(Color.BLACK);
-
-        final File[] listFiles = directory.listFiles();
-
-        // Sort files by name
-        Arrays.sort(listFiles, new Comparator<File>() {
-            @Override
-            public int compare(final File f1, final File f2) {
-
-                // 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());
-            }
-        });
-
-        // add files to the panel
-        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() {
-        return selectedButton;
-    }
-
-    public File getSelectedFile() {
-        return selectedFile;
-    }
-
-    public void menuItemHighlighted(final File chosenFile) {
-        for (final MenuListener menuListener : menuListeners)
-            menuListener.menuItemHighlighted(this, chosenFile);
-    }
-
-    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) {
-        this.selectedButton = selectedButton;
-        this.selectedFile = selectedFile;
-    }
+       public void menuItemSelectedAlternative2(final File chosenFile) {
+               for (final MenuListener menuListener : menuListeners)
+                       menuListener.menuItemSelectedAlternative2(this, chosenFile);
+       }
+
+       public void setSelected(final JButton selectedButton, final File selectedFile) {
+               this.selectedButton = selectedButton;
+               this.selectedFile = selectedFile;
+       }
 
 }
\ No newline at end of file