Possibility to configure terminal emulator.
[instantlauncher.git] / src / main / java / eu / svjatoslav / instantlauncher / menu / Menu.java
index f14caef..252abbf 100755 (executable)
@@ -1,52 +1,42 @@
 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<MenuListener> menuListeners = new HashSet<>();
     private JPanel menuPanel;
-
-    public JButton selectedButton;
-    public File selectedFile;
-
-    private final Set<MenuListener> menuListeners = new HashSet<MenuListener>();
+    private JButton selectedButton;
+    private File selectedFile;
 
     public Menu(final File directory) {
         buildContentPanel(directory);
-    };
+    }
 
     /**
      * <pre>
@@ -56,49 +46,40 @@ public class Menu {
      *    Non executable file
      * </pre>
      */
-    public static Color getFileColor(final File file, final boolean selected) {
-        if (file.isDirectory()) {
-            if (selected) {
+    private static Color getFileColor(final File file, final boolean selected) {
+        if (file.isDirectory())
+            if (selected)
                 return BUTTON_BG_DIRECTORY_SELECTED;
-            } else {
+            else
                 return BUTTON_BG_DIRECTORY;
-            }
-        }
 
-        if (file.isFile()) {
+        if (file.isFile())
             if (file.canExecute()) {
-                if (selected) {
+                if (selected)
                     return BUTTON_BG_EXECUTABLE_FILE_SELECTED;
-                } else {
+                else
                     return BUTTON_BG_EXECUTABLE_FILE;
-                }
-            } else {
-                if (selected) {
-                    return BUTTON_BG_NONEXECUTABLE_FILE_SELECTED;
-                } else {
-                    return BUTTON_BG_NONEXECUTABLE_FILE;
-                }
-            }
-        }
+            } else if (selected)
+                return BUTTON_BG_NONEXECUTABLE_FILE_SELECTED;
+            else
+                return BUTTON_BG_NONEXECUTABLE_FILE;
 
-        if (selected) {
+        if (selected)
             return BUTTON_BG_LINK_SELECTED;
-        } else {
+        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));
@@ -128,67 +109,69 @@ public class Menu {
         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) {
+        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);
+    }
+
+    private void menuItemSelectedAlternative(final File chosenFile) {
+        for (final MenuListener menuListener : menuListeners)
+            menuListener.menuItemSelectedAlternative(chosenFile);
     }
 
-    public void setSelected(final JButton selectedButton, final File selectedFile) {
+    private void menuItemSelectedAlternative2(final File chosenFile) {
+        for (final MenuListener menuListener : menuListeners)
+            menuListener.menuItemSelectedAlternative2(chosenFile);
+    }
+
+    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,14 +183,14 @@ 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) {
-                ExceptionDialog.showException(ex);
+                new ExceptionDialog(ex);
             }
         }
 
@@ -216,19 +199,16 @@ 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) {
-                ExceptionDialog.showException(ex);
+                new ExceptionDialog(ex);
             }
         }