New: new functions in UiUtils and IOUtils
authorNiki Roo <niki@nikiroo.be>
Tue, 22 Dec 2020 13:29:07 +0000 (14:29 +0100)
committerNiki Roo <niki@nikiroo.be>
Tue, 22 Dec 2020 13:29:07 +0000 (14:29 +0100)
src/be/nikiroo/utils/IOUtils.java
src/be/nikiroo/utils/ui/UIUtils.java

index 3d252eac126df091a7fa8abf55999d95af6f288f..439964dfc11dee8a317bf4e63a5251deaef7f17f 100644 (file)
@@ -403,6 +403,34 @@ public class IOUtils {
 
                return loader.getResourceAsStream(name);
        }
+       
+       /**
+        * Return the running directory/file, that is, the root binary directory for
+        * running java classes or the running JAR file for JAR files.
+        * 
+        * @param clazz
+        *            a Class from the running program (will only have an impact
+        *            when not running from a JAR file)
+        * @param base
+        *            return the base directory (the one where the binary root or
+        *            the JAR file resides)
+        * 
+        * @return the directory or file
+        */
+       public static File getRunningDirectory(
+                       @SuppressWarnings("rawtypes") Class clazz, boolean base) {
+               String uri = clazz.getProtectionDomain().getCodeSource().getLocation()
+                               .toString();
+               if (uri.startsWith("file:"))
+                       uri = uri.substring("file:".length());
+               File root = new File(uri);
+
+               if (base) {
+                       root = root.getParentFile();
+               }
+
+               return root;
+       }
 
        /**
         * Return a resetable {@link InputStream} from this stream, and reset it.
index e4eb000c6876f0a2b610da928fb16592cd1d3a4e..ce7bcc1e866ff1ca7ec31ae35a11a0be94924a37 100644 (file)
@@ -12,6 +12,7 @@ import java.awt.RenderingHints;
 import java.io.IOException;
 import java.net.URISyntaxException;
 
+import javax.swing.JButton;
 import javax.swing.JComponent;
 import javax.swing.JEditorPane;
 import javax.swing.JLabel;
@@ -31,6 +32,9 @@ import be.nikiroo.utils.VersionCheck;
  * @author niki
  */
 public class UIUtils {
+       static private Color buttonNormal;
+       static private Color buttonPressed;
+       
        /**
         * Set a fake "native Look &amp; Feel" for the application if possible
         * (check for the one currently in use, then try GTK).
@@ -331,4 +335,37 @@ public class UIUtils {
                return JOptionPane.showConfirmDialog(parentComponent, updateMessage,
                                title, JOptionPane.DEFAULT_OPTION) == JOptionPane.OK_OPTION;
        }
+       
+       /**
+        * Set the given {@link JButton} as "pressed" (selected, but with more UI
+        * visibility).
+        * <p>
+        * The {@link JButton} will answer {@link JButton#isSelected()} if it is
+        * pressed.
+        * 
+        * @param button
+        *            the button to select/press
+        * @param pressed
+        *            the new "pressed" state
+        */
+       static public void setButtonPressed(JButton button, boolean pressed) {
+               if (buttonNormal == null) {
+                       JButton defButton = new JButton(" ");
+                       buttonNormal = defButton.getBackground();
+                       if (buttonNormal.getBlue() >= 128) {
+                               buttonPressed = new Color( //
+                                               Math.max(buttonNormal.getRed() - 100, 0), //
+                                               Math.max(buttonNormal.getGreen() - 100, 0), //
+                                               Math.max(buttonNormal.getBlue() - 100, 0));
+                       } else {
+                               buttonPressed = new Color( //
+                                               Math.min(buttonNormal.getRed() + 100, 255), //
+                                               Math.min(buttonNormal.getGreen() + 100, 255), //
+                                               Math.min(buttonNormal.getBlue() + 100, 255));
+                       }
+               }
+
+               button.setSelected(pressed);
+               button.setBackground(pressed ? buttonPressed : buttonNormal);
+       }
 }