Possibility to configure terminal emulator.
[instantlauncher.git] / src / main / java / eu / svjatoslav / instantlauncher / menu / Menu.java
index 948672a..252abbf 100755 (executable)
 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 {
-
-    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));
+class Menu {
 
-                    parentMenu.setSelected(parentButton, file);
-                    parentButton.setBackground(getFileColor(file, true));
+    public static final Dimension SIZE_MENU_PANEL = new Dimension(210, 900);
+    private static final Color BUTTON_BG_DIRECTORY = new Color(0, 0, 60);
 
-                    parentMenu.menuItemHighlighted(file);
-                }
-            } catch (final Exception ex) {
-                new ExceptionDialog(ex);
-            }
-        }
+    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);
 
-        @Override
-        public void mouseExited(final MouseEvent e) {
-        }
+    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);
 
-        @Override
-        public void mousePressed(final MouseEvent e) {
-        }
+    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);
 
-        @Override
-        public void mouseReleased(final MouseEvent e) {
-        }
+    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;
+    private JButton selectedButton;
+    private File selectedFile;
 
+    public Menu(final File directory) {
+        buildContentPanel(directory);
     }
 
-    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:
@@ -103,7 +46,7 @@ public class Menu {
      *    Non executable file
      * </pre>
      */
-    public static Color getFileColor(final File file, final boolean selected) {
+    private static Color getFileColor(final File file, final boolean selected) {
         if (file.isDirectory())
             if (selected)
                 return BUTTON_BG_DIRECTORY_SELECTED;
@@ -127,23 +70,11 @@ public class Menu {
             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) {
+    private JButton buildButton(final File file) {
         JButton button;
         if (file.isDirectory())
             button = new JButton("[ " + file.getName() + " ]");
@@ -178,19 +109,16 @@ 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) {
-
-                // 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());
-            }
+        Arrays.sort(listFiles, (f1, 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
@@ -206,32 +134,96 @@ public class Menu {
         return menuPanel;
     }
 
-    public JButton getSelectedButton() {
+    private JButton getSelectedButton() {
         return selectedButton;
     }
 
-    public File getSelectedFile() {
+    private File getSelectedFile() {
         return selectedFile;
     }
 
-    public void menuItemHighlighted(final File chosenFile) {
+    private void menuItemHighlighted(final File chosenFile) {
         for (final MenuListener menuListener : menuListeners)
             menuListener.menuItemHighlighted(this, chosenFile);
     }
 
-    public void menuItemSelected(final File 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.menuItemSelected(this, chosenFile);
+            menuListener.menuItemSelectedAlternative(chosenFile);
     }
 
-    public void menuItemSelectedAlternative(final File chosenFile) {
+    private void menuItemSelectedAlternative2(final File chosenFile) {
         for (final MenuListener menuListener : menuListeners)
-            menuListener.menuItemSelectedAlternative(this, chosenFile);
+            menuListener.menuItemSelectedAlternative2(chosenFile);
     }
 
-    public void setSelected(final JButton selectedButton, final File selectedFile) {
+    private void setSelected(final JButton selectedButton, final File selectedFile) {
         this.selectedButton = selectedButton;
         this.selectedFile = selectedFile;
     }
 
+    public static class ButtonMouseListener implements MouseListener {
+
+        final JButton parentButton;
+        final Menu parentMenu;
+        final 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) // 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);
+            }
+        }
+
+        @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) {
+        }
+
+    }
+
 }
\ No newline at end of file