nicer icons
This commit is contained in:
parent
3471f7ad68
commit
bc95ce2e39
@ -415,8 +415,7 @@ public class MainWindow extends JFrame {
|
||||
|
||||
// Refresh button
|
||||
JButton btnRefresh = new JButton("↻");
|
||||
btnRefresh.setToolTipText("Refresh active panel");
|
||||
btnRefresh.setFocusable(false);
|
||||
setupMainToolbarButton(btnRefresh, "Refresh active panel", new Color(140, 190, 140));
|
||||
btnRefresh.addActionListener(e -> {
|
||||
if (activePanel != null && activePanel.getCurrentDirectory() != null) {
|
||||
activePanel.refresh(true);
|
||||
@ -425,20 +424,18 @@ public class MainWindow extends JFrame {
|
||||
toolBar.add(btnRefresh);
|
||||
toolBar.addSeparator();
|
||||
|
||||
// Button for BRIEF mode
|
||||
JButton btnBrief = new JButton("☰");
|
||||
btnBrief.setToolTipText("Brief mode - multiple columns (Ctrl+F1)");
|
||||
btnBrief.setFocusable(false);
|
||||
// Button for BRIEF mode
|
||||
JButton btnBrief = new JButton("☰");
|
||||
setupMainToolbarButton(btnBrief, "Brief mode - multiple columns (Ctrl+F1)", new Color(230, 180, 130));
|
||||
btnBrief.addActionListener(e -> {
|
||||
if (activePanel != null) {
|
||||
activePanel.setViewMode(ViewMode.BRIEF);
|
||||
}
|
||||
});
|
||||
|
||||
// Button for FULL mode
|
||||
JButton btnFull = new JButton("▤");
|
||||
btnFull.setToolTipText("Full mode - full information (Ctrl+F2)");
|
||||
btnFull.setFocusable(false);
|
||||
// Button for FULL mode
|
||||
JButton btnFull = new JButton("▤");
|
||||
setupMainToolbarButton(btnFull, "Full mode - full information (Ctrl+F2)", new Color(140, 170, 220));
|
||||
btnFull.addActionListener(e -> {
|
||||
if (activePanel != null) {
|
||||
activePanel.setViewMode(ViewMode.FULL);
|
||||
@ -452,15 +449,13 @@ public class MainWindow extends JFrame {
|
||||
|
||||
// Search button
|
||||
JButton btnSearch = new JButton("🔍");
|
||||
btnSearch.setToolTipText("Search files (Alt+F7)");
|
||||
btnSearch.setFocusable(false);
|
||||
setupMainToolbarButton(btnSearch, "Search files (Alt+F7)", new Color(200, 160, 200));
|
||||
btnSearch.addActionListener(e -> showSearchDialog());
|
||||
toolBar.add(btnSearch);
|
||||
|
||||
// Sync button
|
||||
JButton btnSync = new JButton("⚖");
|
||||
btnSync.setToolTipText("Compare directories");
|
||||
btnSync.setFocusable(false);
|
||||
setupMainToolbarButton(btnSync, "Compare directories", new Color(150, 200, 200));
|
||||
btnSync.addActionListener(e -> showSyncDialog());
|
||||
toolBar.add(btnSync);
|
||||
|
||||
@ -477,9 +472,7 @@ public class MainWindow extends JFrame {
|
||||
|
||||
for (AppConfig.ToolbarShortcut s : shortcuts) {
|
||||
JButton btn = new JButton();
|
||||
btn.setPreferredSize(new Dimension(btnSize, btnSize));
|
||||
btn.setMinimumSize(new Dimension(btnSize, btnSize));
|
||||
btn.setMaximumSize(new Dimension(btnSize, btnSize));
|
||||
setupShortcutButton(btn, s.label + " (" + s.command + ")");
|
||||
|
||||
boolean hasIcon = false;
|
||||
boolean isDirectory = false;
|
||||
@ -521,13 +514,12 @@ public class MainWindow extends JFrame {
|
||||
} catch (Exception ignore) {}
|
||||
}
|
||||
|
||||
// If no icon found, use the label text, otherwise use label as tooltip
|
||||
// If no icon found, use the label text
|
||||
if (!hasIcon) {
|
||||
btn.setText(s.label);
|
||||
btn.setFont(btn.getFont().deriveFont(Font.BOLD, 12f));
|
||||
}
|
||||
btn.setToolTipText(s.label + " (" + s.command + ")");
|
||||
|
||||
btn.setFocusable(false);
|
||||
btn.addActionListener(e -> {
|
||||
// If command is a directory that exists, change active panel directory
|
||||
File dir = new File(s.command);
|
||||
@ -592,6 +584,70 @@ public class MainWindow extends JFrame {
|
||||
toolBar.revalidate();
|
||||
toolBar.repaint();
|
||||
}
|
||||
|
||||
private void setupMainToolbarButton(JButton btn, String tooltip, Color color) {
|
||||
int btnSize = config != null ? config.getToolbarButtonSize() : 35;
|
||||
if (btnSize < 35) btnSize = 35;
|
||||
|
||||
btn.setPreferredSize(new Dimension(btnSize, btnSize));
|
||||
btn.setMinimumSize(new Dimension(btnSize, btnSize));
|
||||
btn.setMaximumSize(new Dimension(btnSize, btnSize));
|
||||
btn.setToolTipText(tooltip);
|
||||
btn.setFont(btn.getFont().deriveFont(Font.BOLD, 18f));
|
||||
btn.setFocusPainted(false);
|
||||
|
||||
Color bg = config != null ? config.getBackgroundColor() : Color.WHITE;
|
||||
boolean dark = isDark(bg);
|
||||
|
||||
Color foregroundColor = dark ? color.brighter() : color.darker();
|
||||
btn.setForeground(foregroundColor);
|
||||
|
||||
btn.setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3));
|
||||
|
||||
btn.addMouseListener(new MouseAdapter() {
|
||||
@Override
|
||||
public void mouseEntered(MouseEvent e) {
|
||||
btn.setBackground(color);
|
||||
btn.setForeground(isDark(color) ? Color.WHITE : Color.BLACK);
|
||||
btn.setOpaque(true);
|
||||
}
|
||||
@Override
|
||||
public void mouseExited(MouseEvent e) {
|
||||
btn.setBackground(null);
|
||||
btn.setForeground(foregroundColor);
|
||||
btn.setOpaque(false);
|
||||
}
|
||||
});
|
||||
btn.setContentAreaFilled(false);
|
||||
}
|
||||
|
||||
private void setupShortcutButton(JButton btn, String tooltip) {
|
||||
int btnSize = config != null ? config.getToolbarButtonSize() : 35;
|
||||
btn.setPreferredSize(new Dimension(btnSize, btnSize));
|
||||
btn.setMinimumSize(new Dimension(btnSize, btnSize));
|
||||
btn.setMaximumSize(new Dimension(btnSize, btnSize));
|
||||
btn.setToolTipText(tooltip);
|
||||
btn.setFocusable(false);
|
||||
btn.setFocusPainted(false);
|
||||
btn.setContentAreaFilled(false);
|
||||
|
||||
Color bg = config != null ? config.getBackgroundColor() : Color.WHITE;
|
||||
boolean dark = isDark(bg);
|
||||
|
||||
btn.setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3));
|
||||
|
||||
btn.addMouseListener(new MouseAdapter() {
|
||||
@Override
|
||||
public void mouseEntered(MouseEvent e) {
|
||||
btn.setBackground(dark ? new Color(80, 80, 80) : new Color(230, 230, 230));
|
||||
btn.setOpaque(true);
|
||||
}
|
||||
@Override
|
||||
public void mouseExited(MouseEvent e) {
|
||||
btn.setOpaque(false);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void showAddToolbarShortcutDialog(File file) {
|
||||
showToolbarShortcutEditor(null, file);
|
||||
|
||||
@ -102,21 +102,39 @@ public class SyncDirectoriesDialog extends JDialog {
|
||||
optionsPanel.add(Box.createHorizontalStrut(20));
|
||||
optionsPanel.add(new JLabel("Show:"));
|
||||
|
||||
showLeftOnlyBtn = new JToggleButton("➡");
|
||||
showLeftOnlyBtn = new JToggleButton("▶");
|
||||
showEqualBtn = new JToggleButton("=");
|
||||
showDiffBtn = new JToggleButton("≠");
|
||||
showRightOnlyBtn = new JToggleButton("⬅");
|
||||
showRightOnlyBtn = new JToggleButton("◀");
|
||||
|
||||
Dimension btnSize = new Dimension(45, 30);
|
||||
setupToolbarButton(showLeftOnlyBtn, btnSize, "Show files only on left or newer on left", new Color(0, 130, 0));
|
||||
setupToolbarButton(showEqualBtn, btnSize, "Show equal files", Color.GRAY);
|
||||
setupToolbarButton(showDiffBtn, btnSize, "Show different files", Color.RED);
|
||||
setupToolbarButton(showRightOnlyBtn, btnSize, "Show files only on right or newer on right", Color.BLUE);
|
||||
|
||||
showLeftOnlyBtn.setSelected(config.getSyncShowLeftOnly());
|
||||
showEqualBtn.setSelected(config.getSyncShowEqual());
|
||||
showDiffBtn.setSelected(config.getSyncShowDiff());
|
||||
showRightOnlyBtn.setSelected(config.getSyncShowRightOnly());
|
||||
|
||||
// Update background/foreground for buttons based on initial selection
|
||||
updateButtonSelection(showLeftOnlyBtn, new Color(0, 130, 0));
|
||||
updateButtonSelection(showEqualBtn, Color.GRAY);
|
||||
updateButtonSelection(showDiffBtn, Color.RED);
|
||||
updateButtonSelection(showRightOnlyBtn, Color.BLUE);
|
||||
|
||||
java.awt.event.ActionListener filterAl = e -> {
|
||||
config.setSyncShowLeftOnly(showLeftOnlyBtn.isSelected());
|
||||
config.setSyncShowEqual(showEqualBtn.isSelected());
|
||||
config.setSyncShowDiff(showDiffBtn.isSelected());
|
||||
config.setSyncShowRightOnly(showRightOnlyBtn.isSelected());
|
||||
|
||||
updateButtonSelection(showLeftOnlyBtn, new Color(0, 130, 0));
|
||||
updateButtonSelection(showEqualBtn, Color.GRAY);
|
||||
updateButtonSelection(showDiffBtn, Color.RED);
|
||||
updateButtonSelection(showRightOnlyBtn, Color.BLUE);
|
||||
|
||||
applyFilters();
|
||||
};
|
||||
showLeftOnlyBtn.addActionListener(filterAl);
|
||||
@ -140,6 +158,12 @@ public class SyncDirectoriesDialog extends JDialog {
|
||||
config.setSyncShowEqual(true);
|
||||
config.setSyncShowDiff(true);
|
||||
config.setSyncShowRightOnly(false);
|
||||
|
||||
updateButtonSelection(showLeftOnlyBtn, new Color(0, 130, 0));
|
||||
updateButtonSelection(showEqualBtn, Color.GRAY);
|
||||
updateButtonSelection(showDiffBtn, Color.RED);
|
||||
updateButtonSelection(showRightOnlyBtn, Color.BLUE);
|
||||
|
||||
applyFilters();
|
||||
});
|
||||
JButton singlesBtn = new JButton("singles");
|
||||
@ -152,6 +176,12 @@ public class SyncDirectoriesDialog extends JDialog {
|
||||
config.setSyncShowEqual(false);
|
||||
config.setSyncShowDiff(false);
|
||||
config.setSyncShowRightOnly(true);
|
||||
|
||||
updateButtonSelection(showLeftOnlyBtn, new Color(0, 130, 0));
|
||||
updateButtonSelection(showEqualBtn, Color.GRAY);
|
||||
updateButtonSelection(showDiffBtn, Color.RED);
|
||||
updateButtonSelection(showRightOnlyBtn, Color.BLUE);
|
||||
|
||||
applyFilters();
|
||||
});
|
||||
optionsPanel.add(duplicatesBtn);
|
||||
@ -195,6 +225,30 @@ public class SyncDirectoriesDialog extends JDialog {
|
||||
add(bottomPanel, BorderLayout.SOUTH);
|
||||
}
|
||||
|
||||
private void setupToolbarButton(JToggleButton btn, Dimension size, String tooltip, Color color) {
|
||||
btn.setPreferredSize(size);
|
||||
btn.setMinimumSize(size);
|
||||
btn.setMaximumSize(size);
|
||||
btn.setToolTipText(tooltip);
|
||||
btn.setFont(btn.getFont().deriveFont(Font.BOLD, 16f));
|
||||
btn.setFocusPainted(false);
|
||||
btn.setBorder(BorderFactory.createCompoundBorder(
|
||||
BorderFactory.createLineBorder(color.darker(), 1),
|
||||
BorderFactory.createEmptyBorder(2, 5, 2, 5)
|
||||
));
|
||||
btn.setForeground(color);
|
||||
}
|
||||
|
||||
private void updateButtonSelection(JToggleButton btn, Color color) {
|
||||
if (btn.isSelected()) {
|
||||
btn.setBackground(color);
|
||||
btn.setForeground(isDark(color) ? Color.WHITE : Color.BLACK);
|
||||
} else {
|
||||
btn.setBackground(null);
|
||||
btn.setForeground(color);
|
||||
}
|
||||
}
|
||||
|
||||
private void saveSettings() {
|
||||
if (config != null) {
|
||||
config.saveSyncDialogState(this);
|
||||
@ -219,13 +273,15 @@ public class SyncDirectoriesDialog extends JDialog {
|
||||
Color selColor = config != null ? config.getSelectionColor() : null;
|
||||
|
||||
for (Component c : container.getComponents()) {
|
||||
if (c instanceof JPanel || c instanceof JScrollPane || c instanceof JViewport || c instanceof JTabbedPane || c instanceof JButton || c instanceof JComboBox || c instanceof JTable) {
|
||||
if (c instanceof JPanel || c instanceof JScrollPane || c instanceof JViewport || c instanceof JTabbedPane || c instanceof AbstractButton || c instanceof JComboBox || c instanceof JTable) {
|
||||
if (!(c instanceof JToggleButton)) {
|
||||
c.setBackground(bg);
|
||||
}
|
||||
}
|
||||
if (c instanceof JLabel || c instanceof JCheckBox || c instanceof JRadioButton || c instanceof JButton) {
|
||||
c.setForeground(dark ? Color.WHITE : Color.BLACK);
|
||||
if (c instanceof JLabel || c instanceof JCheckBox || c instanceof JRadioButton || c instanceof AbstractButton) {
|
||||
if (!(c instanceof JToggleButton)) {
|
||||
c.setForeground(dark ? Color.WHITE : Color.BLACK);
|
||||
}
|
||||
}
|
||||
if (c instanceof javax.swing.text.JTextComponent) {
|
||||
javax.swing.text.JTextComponent tc = (javax.swing.text.JTextComponent) c;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user