Exit program when running external application.
[instantlauncher.git] / src / main / java / eu / svjatoslav / instantlauncher / menu / MultiLevelMenu.java
index 308f5ba..0134ce4 100755 (executable)
@@ -1,33 +1,25 @@
 package eu.svjatoslav.instantlauncher.menu;
 
-import java.awt.BorderLayout;
-import java.awt.Color;
-import java.awt.Dimension;
+import eu.svjatoslav.instantlauncher.InstantLauncher;
+import eu.svjatoslav.instantlauncher.Utils;
+
+import javax.swing.*;
+import java.awt.*;
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
 
-import javax.swing.Box;
-import javax.swing.BoxLayout;
-import javax.swing.JPanel;
-
-import eu.svjatoslav.commons.gui.dialog.ExceptionDialog;
-import eu.svjatoslav.instantlauncher.FileAssociationManager;
-import eu.svjatoslav.instantlauncher.InstantLauncher;
-import eu.svjatoslav.instantlauncher.Utils;
+import static eu.svjatoslav.instantlauncher.Utils.executeCommand;
 
 public class MultiLevelMenu implements MenuListener {
 
-    private final InstantLauncher instantLauncher;
-
     private static final int VERTICAL_MENUS_COUNT = 7;
+    private static final Dimension CONTENT_PANEL_SIZE = new Dimension(1024, 900);
+    private final InstantLauncher instantLauncher;
+    private final ArrayList<Menu> menus = new ArrayList<>();
 
-    public static final Dimension CONTENT_PANEL_SIZE = new Dimension(1024, 900);
-
-    ArrayList<Menu> menus = new ArrayList<Menu>();
-
-    ArrayList<JPanel> panels = new ArrayList<JPanel>();
-    JPanel contentPane;
+    private final ArrayList<JPanel> panels = new ArrayList<>();
+    private JPanel contentPane;
 
     public MultiLevelMenu(final InstantLauncher instantLauncher) {
         this.instantLauncher = instantLauncher;
@@ -35,15 +27,16 @@ public class MultiLevelMenu implements MenuListener {
 
     /**
      * Adds new vertical menu.
-     * 
+     *
      * @return <code>true</code> if operation succeeded, or <code>false</code>
-     *         if there was not enough space left for a new menu.
+     * if there was not enough space left for a new menu.
      */
-    public boolean addMenu(final File directory) {
+    private boolean addMenu(final File directory) {
         final int newMenuHorizontalIndex = menus.size();
 
-        if (newMenuHorizontalIndex >= VERTICAL_MENUS_COUNT)
+        if (newMenuHorizontalIndex >= VERTICAL_MENUS_COUNT) {
             return false;
+        }
 
         final Menu menu = new Menu(directory);
         menu.addMenuListener(this);
@@ -76,24 +69,25 @@ public class MultiLevelMenu implements MenuListener {
             contentPane.add(panel);
         }
 
-        final File directory = instantLauncher.configuration.getRootDirectory();
+        final File directory = instantLauncher.configurationManager.getConfiguration().getNavigationRootDirectory();
         addMenu(directory);
 
         return contentPane;
     }
 
-    public int getMenuIndex(final Menu menu) {
+    private int getMenuIndex(final Menu menu) {
         int i = 0;
         for (final Menu m : menus) {
-            if (m == menu)
+            if (m == menu) {
                 return i;
+            }
             i++;
         }
         return -1;
     }
 
     @Override
-    public void menuItemSelected(final Menu menu, final File chosenFile) {
+    public void menuItemHighlighted(final Menu menu, final File chosenFile) {
 
         if (chosenFile.isDirectory()) {
             final int menuIndex = getMenuIndex(menu);
@@ -107,54 +101,48 @@ public class MultiLevelMenu implements MenuListener {
             }
         }
 
-        if (chosenFile.isFile()) {
+    }
 
+    @Override
+    public void menuItemSelected(final File chosenFile) {
+        if (chosenFile.isFile()) {
             if (chosenFile.canExecute()) {
+                executeCommand(chosenFile.getAbsolutePath());
+                InstantLauncher.exitProgram();
+            } else {
+                boolean fileOpened;
                 try {
-                    // Execute a command without arguments
-                    final String command = chosenFile.getAbsolutePath();
-
-                    final String[] c = new String[1];
-                    c[0] = command;
+                    fileOpened = instantLauncher.openFile(chosenFile.getCanonicalFile());
+                    if (fileOpened)
+                        InstantLauncher.exitProgram();
 
-                    Runtime.getRuntime().exec(c);
-                    InstantLauncher.exitProgram();
-                } catch (final IOException e) {
-                    new ExceptionDialog(e);
-                }
-
-            } else {
-                final boolean fileOpened = FileAssociationManager.openFile(chosenFile);
-                if (fileOpened) {
-                    InstantLauncher.exitProgram();
+                } catch (IOException e) {
+                    e.printStackTrace();
                 }
             }
         }
-    }
 
-    @Override
-    public void menuItemSelectedAlternative(final Menu menu, final File chosenFile) {
         if (chosenFile.isDirectory()) {
-            // Execute a command without arguments
-            final String directoryPath = chosenFile.getAbsolutePath();
-
-            final String[] c = new String[2];
-            c[0] = "nautilus";
-            c[1] = directoryPath;
-
             try {
-                Runtime.getRuntime().exec(c);
+                instantLauncher.openDirectory(chosenFile.getCanonicalFile());
                 InstantLauncher.exitProgram();
-
-            } catch (final IOException e) {
-                new ExceptionDialog(e);
+            } catch (IOException e) {
+                e.printStackTrace();
             }
-        } else {
+        }
+    }
+
+    @Override
+    public void menuItemSelectedAlternative(final File chosenFile) {
+        if (chosenFile.isFile())
             chosenFile.setExecutable(!chosenFile.canExecute());
+        else {
+            instantLauncher.openDirectoryInTerminal(chosenFile);
+            InstantLauncher.exitProgram();
         }
     }
 
-    public void removeMenus(final int fromIndex) {
+    private void removeMenus(final int fromIndex) {
 
         for (int i = fromIndex; i < menus.size(); i++) {
             final JPanel jPanel = panels.get(i);
@@ -166,4 +154,10 @@ public class MultiLevelMenu implements MenuListener {
         }
     }
 
+    @Override
+    public void menuItemSelectedAlternative2(File chosenFile) {
+        // TODO: define some middle mouse click functions
+    }
+
+
 }