From 0ff6a0aa1ec0a37d3fa0fbc4f76b9629fb2fd7ef Mon Sep 17 00:00:00 2001 From: Niki Roo Date: Tue, 22 Dec 2020 14:29:07 +0100 Subject: [PATCH] New: new functions in UiUtils and IOUtils --- src/be/nikiroo/utils/IOUtils.java | 28 +++++++++++++++++++++ src/be/nikiroo/utils/ui/UIUtils.java | 37 ++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) diff --git a/src/be/nikiroo/utils/IOUtils.java b/src/be/nikiroo/utils/IOUtils.java index 3d252ea..439964d 100644 --- a/src/be/nikiroo/utils/IOUtils.java +++ b/src/be/nikiroo/utils/IOUtils.java @@ -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. diff --git a/src/be/nikiroo/utils/ui/UIUtils.java b/src/be/nikiroo/utils/ui/UIUtils.java index e4eb000..ce7bcc1 100644 --- a/src/be/nikiroo/utils/ui/UIUtils.java +++ b/src/be/nikiroo/utils/ui/UIUtils.java @@ -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 & 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). + *

+ * 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); + } } -- 2.27.0