toolbar fixes

This commit is contained in:
Radek Davidek 2026-01-16 16:32:16 +01:00
parent f63636eae3
commit 2de5cf6bc4
4 changed files with 87 additions and 2 deletions

View File

@ -9,7 +9,7 @@ import javax.swing.*;
*/ */
public class MainApp { public class MainApp {
public static final String APP_VERSION = "0.0.2"; public static final String APP_VERSION = "0.0.3";
public static void main(String[] args) { public static void main(String[] args) {
// Set look and feel to system default // Set look and feel to system default

View File

@ -213,6 +213,23 @@ public class AppConfig {
setEditorFontStyle(font.getStyle()); setEditorFontStyle(font.getStyle());
} }
// Toolbar configuration
public int getToolbarButtonSize() {
return Integer.parseInt(properties.getProperty("toolbar.button.size", "30"));
}
public void setToolbarButtonSize(int size) {
properties.setProperty("toolbar.button.size", String.valueOf(size));
}
public int getToolbarIconSize() {
return Integer.parseInt(properties.getProperty("toolbar.icon.size", "24"));
}
public void setToolbarIconSize(int size) {
properties.setProperty("toolbar.icon.size", String.valueOf(size));
}
// --- External editor configuration --- // --- External editor configuration ---
/** Path to external editor binary (empty = use internal editor) */ /** Path to external editor binary (empty = use internal editor) */
public String getExternalEditorPath() { public String getExternalEditorPath() {

View File

@ -333,14 +333,21 @@ public class MainWindow extends JFrame {
// Load custom shortcuts from config // Load custom shortcuts from config
List<AppConfig.ToolbarShortcut> shortcuts = config.getToolbarShortcuts(); List<AppConfig.ToolbarShortcut> shortcuts = config.getToolbarShortcuts();
int btnSize = config.getToolbarButtonSize();
int iconSize = config.getToolbarIconSize();
for (AppConfig.ToolbarShortcut s : shortcuts) { for (AppConfig.ToolbarShortcut s : shortcuts) {
JButton btn = new JButton(); JButton btn = new JButton();
btn.setPreferredSize(new Dimension(btnSize, btnSize));
btn.setMinimumSize(new Dimension(btnSize, btnSize));
btn.setMaximumSize(new Dimension(btnSize, btnSize));
boolean hasIcon = false; boolean hasIcon = false;
if (s.iconPath != null && !s.iconPath.isEmpty()) { if (s.iconPath != null && !s.iconPath.isEmpty()) {
try { try {
File iconFile = new File(s.iconPath); File iconFile = new File(s.iconPath);
if (iconFile.exists()) { if (iconFile.exists()) {
btn.setIcon(new ImageIcon(new ImageIcon(s.iconPath).getImage().getScaledInstance(16, 16, Image.SCALE_SMOOTH))); btn.setIcon(new ImageIcon(new ImageIcon(s.iconPath).getImage().getScaledInstance(iconSize, iconSize, Image.SCALE_SMOOTH)));
hasIcon = true; hasIcon = true;
} }
} catch (Exception ignore) {} } catch (Exception ignore) {}
@ -652,6 +659,9 @@ public class MainWindow extends JFrame {
if (rightPanel != null) rightPanel.applyMarkedColor(mark); if (rightPanel != null) rightPanel.applyMarkedColor(mark);
} }
// Refresh toolbar if sizes changed
SwingUtilities.invokeLater(() -> createToolBar());
// Re-propagate AppConfig to panels so they can pick up sorting and other config changes // Re-propagate AppConfig to panels so they can pick up sorting and other config changes
SwingUtilities.invokeLater(() -> { SwingUtilities.invokeLater(() -> {
try { try {

View File

@ -27,6 +27,8 @@ public class SettingsDialog extends JDialog {
private final Font originalGlobalFont; private final Font originalGlobalFont;
private final Font originalEditorFont; private final Font originalEditorFont;
private final String originalExternalEditorPath; private final String originalExternalEditorPath;
private final int originalToolbarButtonSize;
private final int originalToolbarIconSize;
// Appearance controls // Appearance controls
private JButton appearanceFontBtn; private JButton appearanceFontBtn;
@ -54,6 +56,8 @@ public class SettingsDialog extends JDialog {
this.originalGlobalFont = config.getGlobalFont(); this.originalGlobalFont = config.getGlobalFont();
this.originalEditorFont = config.getEditorFont(); this.originalEditorFont = config.getEditorFont();
this.originalExternalEditorPath = config.getExternalEditorPath(); this.originalExternalEditorPath = config.getExternalEditorPath();
this.originalToolbarButtonSize = config.getToolbarButtonSize();
this.originalToolbarIconSize = config.getToolbarIconSize();
setDefaultCloseOperation(DISPOSE_ON_CLOSE); setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setSize(700, 420); setSize(700, 420);
@ -64,6 +68,7 @@ public class SettingsDialog extends JDialog {
model.addElement("Appearance"); model.addElement("Appearance");
model.addElement("Editor"); model.addElement("Editor");
model.addElement("Sorting"); model.addElement("Sorting");
model.addElement("Toolbar");
categoryList = new JList<>(model); categoryList = new JList<>(model);
categoryList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); categoryList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
categoryList.setSelectedIndex(0); categoryList.setSelectedIndex(0);
@ -75,6 +80,7 @@ public class SettingsDialog extends JDialog {
cards.add(buildAppearancePanel(), "Appearance"); cards.add(buildAppearancePanel(), "Appearance");
cards.add(buildEditorPanel(), "Editor"); cards.add(buildEditorPanel(), "Editor");
cards.add(buildSortingPanel(), "Sorting"); cards.add(buildSortingPanel(), "Sorting");
cards.add(buildToolbarPanel(), "Toolbar");
categoryList.addListSelectionListener(e -> { categoryList.addListSelectionListener(e -> {
if (!e.getValueIsAdjusting()) { if (!e.getValueIsAdjusting()) {
@ -152,6 +158,17 @@ public class SettingsDialog extends JDialog {
} }
} catch (Exception ignore) {} } catch (Exception ignore) {}
} }
// Collect Toolbar settings
JPanel toolbarHolder = (JPanel) panels.get("Toolbar");
if (toolbarHolder != null) {
try {
JSpinner bs = (JSpinner) toolbarHolder.getClientProperty("buttonSize");
JSpinner is = (JSpinner) toolbarHolder.getClientProperty("iconSize");
if (bs != null) config.setToolbarButtonSize((Integer) bs.getValue());
if (is != null) config.setToolbarIconSize((Integer) is.getValue());
} catch (Exception ignore) {}
}
// Save external editor path // Save external editor path
if (externalEditorField != null) { if (externalEditorField != null) {
@ -173,6 +190,8 @@ public class SettingsDialog extends JDialog {
config.setGlobalFont(originalGlobalFont); config.setGlobalFont(originalGlobalFont);
config.setEditorFont(originalEditorFont); config.setEditorFont(originalEditorFont);
config.setExternalEditorPath(originalExternalEditorPath); config.setExternalEditorPath(originalExternalEditorPath);
config.setToolbarButtonSize(originalToolbarButtonSize);
config.setToolbarIconSize(originalToolbarIconSize);
// Notify UI to revert changes // Notify UI to revert changes
if (onChange != null) onChange.run(); if (onChange != null) onChange.run();
@ -459,6 +478,45 @@ public class SettingsDialog extends JDialog {
return p; return p;
} }
private JPanel buildToolbarPanel() {
JPanel p = new JPanel(new BorderLayout(8, 8));
JPanel grid = new JPanel(new GridBagLayout());
grid.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12));
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.insets = new Insets(4, 4, 4, 4);
gbc.weightx = 1.0;
int row = 0;
// Button size
gbc.gridx = 0; gbc.gridy = row; gbc.weightx = 0.0;
grid.add(new JLabel("Button size (px):"), gbc);
JSpinner buttonSizeSpinner = new JSpinner(new SpinnerNumberModel(config.getToolbarButtonSize(), 16, 128, 1));
gbc.gridx = 1; gbc.gridy = row++; gbc.weightx = 1.0;
grid.add(buttonSizeSpinner, gbc);
// Icon size
gbc.gridx = 0; gbc.gridy = row; gbc.weightx = 0.0;
grid.add(new JLabel("Icon size (px):"), gbc);
JSpinner iconSizeSpinner = new JSpinner(new SpinnerNumberModel(config.getToolbarIconSize(), 16, 128, 1));
gbc.gridx = 1; gbc.gridy = row++; gbc.weightx = 1.0;
grid.add(iconSizeSpinner, gbc);
p.add(grid, BorderLayout.NORTH);
// Save action will be done on OK; store controls in a holder
JPanel holder = new JPanel();
holder.putClientProperty("buttonSize", buttonSizeSpinner);
holder.putClientProperty("iconSize", iconSizeSpinner);
panels.put("Toolbar", holder);
return p;
}
private static String capitalize(String s) { private static String capitalize(String s) {
if (s == null || s.isEmpty()) return s; if (s == null || s.isEmpty()) return s;
return s.substring(0,1).toUpperCase() + s.substring(1).toLowerCase(); return s.substring(0,1).toUpperCase() + s.substring(1).toLowerCase();