+/*
+ * Instantlauncher. Copyright ©2012-2019, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of version 3 of the GNU Lesser General Public License
+ * or later as published by the Free Software Foundation.
+ */
+
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 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_LINK = new Color(60, 60, 0);
- public static final Color BUTTON_BG_LINK_SELECTED = new Color(100, 100, 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_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_LINK_SELECTED = new Color(100, 100, 0);
+ private static final Color BUTTON_BG_EXECUTABLE_FILE = new Color(60, 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);
+ 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>
* 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));
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;
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);
}
}
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);
}
}