]> gitweb.fperrin.net Git - GpsPrune.git/commitdiff
Add option to use GTK theme on linux, thanks to fperrin dev_20.1 upstream/dev_20.1
authoractivityworkshop <mail@activityworkshop.net>
Sat, 25 Apr 2020 10:10:42 +0000 (12:10 +0200)
committeractivityworkshop <mail@activityworkshop.net>
Sat, 25 Apr 2020 10:10:42 +0000 (12:10 +0200)
src/tim/prune/function/settings/SetDisplaySettings.java
src/tim/prune/gui/DisplayUtils.java
src/tim/prune/lang/prune-texts_en.properties

index fd15a5097399cacd20ff8640954746889c045504..0a9efd985cd7734b54a8599d0f28ddb57d4e3e57 100644 (file)
@@ -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();
index 25640d8e5072bfc2e70acfc3e26c7de208a494e3..2300296760fa1febfeb8f2dc59d393ca35bb639a 100644 (file)
@@ -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";
        }
index dbc4be4a59d3cff49a9dbea409a07beab1dca1cc..5ccf88cf471e005f854103346ab7a21382323fb4 100644 (file)
@@ -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