- 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();
- }
- }
- }