From 62c2370017457117336c78065b52ef9b28a3441c Mon Sep 17 00:00:00 2001 From: activityworkshop Date: Sat, 25 Apr 2020 12:10:42 +0200 Subject: [PATCH] Add option to use GTK theme on linux, thanks to fperrin --- .../function/settings/SetDisplaySettings.java | 46 ++++++++++++++++--- src/tim/prune/gui/DisplayUtils.java | 3 +- src/tim/prune/lang/prune-texts_en.properties | 1 + 3 files changed, 43 insertions(+), 7 deletions(-) diff --git a/src/tim/prune/function/settings/SetDisplaySettings.java b/src/tim/prune/function/settings/SetDisplaySettings.java index fd15a50..0a9efd9 100644 --- a/src/tim/prune/function/settings/SetDisplaySettings.java +++ b/src/tim/prune/function/settings/SetDisplaySettings.java @@ -97,6 +97,7 @@ public class SetDisplaySettings extends GenericFunction private JButton _okButton = null; private static final String STYLEKEY_NIMBUS = "javax.swing.plaf.nimbus.NimbusLookAndFeel"; + private static final String STYLEKEY_GTK = "com.sun.java.swing.plaf.gtk.GTKLookAndFeel"; /** @@ -188,14 +189,17 @@ public class SetDisplaySettings extends GenericFunction windowStylePanel.add(new JLabel(I18nManager.getText("dialog.displaysettings.windowstyle"))); windowStylePanel.add(Box.createHorizontalStrut(10)); ButtonGroup styleGroup = new ButtonGroup(); - final String[] styleKeys = {"default", "nimbus"}; - _windowStyleRadios = new JRadioButton[2]; - for (int i=0; i<2; i++) + final String[] styleKeys = {"default", "nimbus", "gtk"}; + _windowStyleRadios = new JRadioButton[3]; + for (int i=0; i<3; i++) { _windowStyleRadios[i] = new JRadioButton( I18nManager.getText("dialog.displaysettings.windowstyle." + styleKeys[i])); styleGroup.add(_windowStyleRadios[i]); - windowStylePanel.add(_windowStyleRadios[i]); + if (i != 2 || platformHasPlaf(STYLEKEY_GTK)) + { + windowStylePanel.add(_windowStyleRadios[i]); + } } midPanel.add(windowStylePanel); mainPanel.add(midPanel, BorderLayout.CENTER); @@ -223,6 +227,19 @@ public class SetDisplaySettings extends GenericFunction return mainPanel; } + /** + * @return true if the specified style name is available on this platform + */ + private static boolean platformHasPlaf(String styleName) + { + for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) + { + if (info.getClassName().equals(styleName)) { + return true; + } + } + return false; + } /** * Show window @@ -274,6 +291,10 @@ public class SetDisplaySettings extends GenericFunction { selectedRadio = 1; } + else if (inValue != null && inValue.equals(STYLEKEY_GTK) && _windowStyleRadios[2] != null) + { + selectedRadio = 2; + } _windowStyleRadios[selectedRadio].setSelected(true); } @@ -292,6 +313,20 @@ public class SetDisplaySettings extends GenericFunction return 1; // default is medium } + /** + * @return the style string according to the selected radio button + */ + private String getSelectedStyleString() + { + if (_windowStyleRadios[1].isSelected()) { + return STYLEKEY_NIMBUS; + } + if (_windowStyleRadios[2] != null && _windowStyleRadios[2].isSelected()) { + return STYLEKEY_GTK; + } + return null; + } + /** * Save settings and close */ @@ -304,8 +339,7 @@ public class SetDisplaySettings extends GenericFunction Config.setConfigBoolean(Config.KEY_ANTIALIAS, _antialiasCheckbox.isSelected()); Config.setConfigInt(Config.KEY_WAYPOINT_ICONS, _wpIconCombobox.getSelectedIndex()); Config.setConfigInt(Config.KEY_WAYPOINT_ICON_SIZE, getSelectedIconSize()); - final String styleString = (_windowStyleRadios[1].isSelected() ? STYLEKEY_NIMBUS : null); - Config.setConfigString(Config.KEY_WINDOW_STYLE, styleString); + Config.setConfigString(Config.KEY_WINDOW_STYLE, getSelectedStyleString()); // refresh display UpdateMessageBroker.informSubscribers(DataSubscriber.MAPSERVER_CHANGED); _dialog.dispose(); diff --git a/src/tim/prune/gui/DisplayUtils.java b/src/tim/prune/gui/DisplayUtils.java index 25640d8..2300296 100644 --- a/src/tim/prune/gui/DisplayUtils.java +++ b/src/tim/prune/gui/DisplayUtils.java @@ -36,7 +36,8 @@ public abstract class DisplayUtils if (inNumSecs < 86400L) return "" + (inNumSecs / 60 / 60) + I18nManager.getText("display.range.time.hours") + " " + ((inNumSecs / 60) % 60) + I18nManager.getText("display.range.time.mins"); if (inNumSecs < 432000L) return "" + (inNumSecs / 86400L) + I18nManager.getText("display.range.time.days") - + " " + (inNumSecs / 60 / 60) % 24 + I18nManager.getText("display.range.time.hours"); + + " " + (inNumSecs / 60 / 60) % 24 + I18nManager.getText("display.range.time.hours") + + " " + ((inNumSecs / 60) % 60) + I18nManager.getText("display.range.time.mins"); if (inNumSecs < 86400000L) return "" + (inNumSecs / 86400L) + I18nManager.getText("display.range.time.days"); return "big"; } diff --git a/src/tim/prune/lang/prune-texts_en.properties b/src/tim/prune/lang/prune-texts_en.properties index dbc4be4..5ccf88c 100644 --- a/src/tim/prune/lang/prune-texts_en.properties +++ b/src/tim/prune/lang/prune-texts_en.properties @@ -553,6 +553,7 @@ dialog.displaysettings.size.large=Large dialog.displaysettings.windowstyle=Window style (requires restart) dialog.displaysettings.windowstyle.default=Default dialog.displaysettings.windowstyle.nimbus=Nimbus +dialog.displaysettings.windowstyle.gtk=GTK dialog.downloadosm.desc=Confirm to download the raw OSM data for the specified area: dialog.searchwikipedianames.search=Search for: dialog.weather.location=Location -- 2.43.0