- private final InstantLauncher instantLauncher;
-
- private static final int VERTICAL_MENUS_COUNT = 5;
-
- 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;
-
- public MultiLevelMenu(final InstantLauncher instantLauncher) {
- this.instantLauncher = instantLauncher;
- }
-
- /**
- * 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.
- */
- public boolean addMenu(final File directory) {
- final int newMenuHorizontalIndex = menus.size();
-
- if (newMenuHorizontalIndex >= VERTICAL_MENUS_COUNT)
- return false;
-
- final Menu menu = new Menu(directory);
- menu.addMenuListener(this);
-
- final JPanel placeholderPanel = panels.get(newMenuHorizontalIndex);
- final JPanel menuPanel = menu.getMenuPanel();
- placeholderPanel.add(menuPanel, BorderLayout.CENTER);
-
- menus.add(menu);
- return true;
- }
-
- public JPanel buildContentPanel() {
-
- contentPane = new JPanel();
- contentPane.setBackground(Color.BLACK);
- contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.X_AXIS));
- Utils.setComponentSize(contentPane, CONTENT_PANEL_SIZE);
-
- // initialize panels
- for (int i = 0; i < VERTICAL_MENUS_COUNT; i++) {
- contentPane.add(Box.createHorizontalStrut(10));
-
- final JPanel panel = new JPanel(new BorderLayout());
- panel.setBackground(Color.BLACK);
-
- Utils.setComponentSize(panel, Menu.SIZE_MENU_PANEL);
-
- panels.add(panel);
- contentPane.add(panel);
- }
-
- final File directory = instantLauncher.configuration.getRootDirectory();
- addMenu(directory);
-
- return contentPane;
- }
-
- public int getMenuIndex(final Menu menu) {
- int i = 0;
- for (final Menu m : menus) {
- if (m == menu)
- return i;
- i++;
- }
- return -1;
- }
-
- @Override
- public void menuItemSelected(final Menu menu, final File chosenFile) {
-
- if (chosenFile.isDirectory()) {
- final int menuIndex = getMenuIndex(menu);
-
- if (menuIndex >= 0) {
- removeMenus(menuIndex + 1);
- if (addMenu(chosenFile)) {
- contentPane.validate();
- contentPane.repaint();
- }
- }
- }
-
- if (chosenFile.isFile()) {
-
- if (chosenFile.canExecute()) {
- try {
- // Execute a command without arguments
- final String command = chosenFile.getAbsolutePath();
-
- final String[] c = new String[1];
- c[0] = command;
-
- Runtime.getRuntime().exec(c);
- InstantLauncher.exitProgram();
- } catch (final IOException e) {
- new ExceptionDialog(e);
- }
-
- } else {
- final boolean fileOpened = FileAssociationManager.openFile(chosenFile);
- if (fileOpened) {
- InstantLauncher.exitProgram();
- }
- }
- }
- }
-
- @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.exitProgram();
-
- } catch (final IOException e) {
- new ExceptionDialog(e);
- }
- } else {
- chosenFile.setExecutable(!chosenFile.canExecute());
- }
- }
-
- public void removeMenus(final int fromIndex) {
-
- for (int i = fromIndex; i < menus.size(); i++) {
- final JPanel jPanel = panels.get(i);
- jPanel.removeAll();
- }
-
- while (menus.size() > fromIndex) {
- menus.remove(fromIndex);
- }
- }
+ private final InstantLauncher instantLauncher;
+
+ private static final int VERTICAL_MENUS_COUNT = 7;
+
+ 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;
+
+ public MultiLevelMenu(final InstantLauncher instantLauncher) {
+ this.instantLauncher = instantLauncher;
+ }
+
+ /**
+ * 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.
+ */
+ public boolean addMenu(final File directory) {
+ final int newMenuHorizontalIndex = menus.size();
+
+ if (newMenuHorizontalIndex >= VERTICAL_MENUS_COUNT) {
+ return false;
+ }
+
+ final Menu menu = new Menu(directory);
+ menu.addMenuListener(this);
+
+ final JPanel placeholderPanel = panels.get(newMenuHorizontalIndex);
+ final JPanel menuPanel = menu.getMenuPanel();
+ placeholderPanel.add(menuPanel, BorderLayout.CENTER);
+
+ menus.add(menu);
+ return true;
+ }
+
+ public JPanel buildContentPanel() {
+
+ contentPane = new JPanel();
+ contentPane.setBackground(Color.BLACK);
+ contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.X_AXIS));
+ Utils.setComponentSize(contentPane, CONTENT_PANEL_SIZE);
+
+ // initialize panels
+ for (int i = 0; i < VERTICAL_MENUS_COUNT; i++) {
+ contentPane.add(Box.createHorizontalStrut(10));
+
+ final JPanel panel = new JPanel(new BorderLayout());
+ panel.setBackground(Color.BLACK);
+
+ Utils.setComponentSize(panel, Menu.SIZE_MENU_PANEL);
+
+ panels.add(panel);
+ contentPane.add(panel);
+ }
+
+ final File directory = instantLauncher.configuration.getRootDirectory();
+ addMenu(directory);
+
+ return contentPane;
+ }
+
+ public int getMenuIndex(final Menu menu) {
+ int i = 0;
+ for (final Menu m : menus) {
+ if (m == menu) {
+ return i;
+ }
+ i++;
+ }
+ return -1;
+ }
+
+ @Override
+ public void menuItemHighlighted(final Menu menu, final File chosenFile) {
+
+ if (chosenFile.isDirectory()) {
+ final int menuIndex = getMenuIndex(menu);
+
+ if (menuIndex >= 0) {
+ removeMenus(menuIndex + 1);
+ if (addMenu(chosenFile)) {
+ contentPane.validate();
+ contentPane.repaint();
+ }
+ }
+ }
+
+ }
+
+ @Override
+ public void menuItemSelected(final Menu menu, final File chosenFile) {
+ if (chosenFile.isFile()) {
+ if (chosenFile.canExecute()) {
+ executeCommand(chosenFile.getAbsolutePath());
+ } else {
+ boolean fileOpened;
+ try {
+ fileOpened = FileAssociationManager.openFile(chosenFile.getCanonicalFile());
+ if (fileOpened) {
+ InstantLauncher.exitProgram();
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ if (chosenFile.isDirectory()) {
+ try {
+ executeCommand("nautilus", "-w", chosenFile.getCanonicalFile().getAbsolutePath());
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ private void executeCommand(String... c) {
+ try {
+ Runtime.getRuntime().exec(c);
+ InstantLauncher.exitProgram();
+
+ } catch (final IOException e) {
+ new ExceptionDialog(e);
+ }
+ }
+
+ @Override
+ public void menuItemSelectedAlternative(final Menu menu, final File chosenFile) {
+ if (chosenFile.isFile()) {
+ chosenFile.setExecutable(!chosenFile.canExecute());
+ } else {
+ try {
+ executeCommand("gnome-terminal", "--working-directory="
+ + chosenFile.getCanonicalFile().getAbsolutePath());
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ public void removeMenus(final int fromIndex) {
+
+ for (int i = fromIndex; i < menus.size(); i++) {
+ final JPanel jPanel = panels.get(i);
+ jPanel.removeAll();
+ }
+
+ while (menus.size() > fromIndex) {
+ menus.remove(fromIndex);
+ }
+ }
+
+ @Override
+ public void menuItemSelectedAlternative2(Menu menu, File chosenFile) {
+ if (chosenFile.isFile()) {
+ try {
+ executeCommand("emacs", chosenFile.getCanonicalFile().getAbsolutePath());
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }