8000 UI-related fixes for MacOS · scijava/script-editor@dee20fb · GitHub
[go: up one dir, main page]

Skip to content

Commit dee20fb

Browse files
committed
UI-related fixes for MacOS
Namely exaggerated width of file tree panel and lack of menu separators While at it, fix some minor inconsistencies
1 parent 033abf3 commit dee20fb

File tree

3 files changed

+53
-16
lines changed

3 files changed

+53
-16
lines changed

src/main/java/org/scijava/ui/swing/script/ErrorParser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -301,7 +301,7 @@ private void parseJava(final String filename, final String line, final Collectio
301301
private void abort(final String msg, final boolean offsetNotice) {
302302
if (writer != null) {
303303
String finalMsg = "[WARNING] " + msg + "\n";
304-
finalMsg += "[WARNING] Error line(s) below may not match line numbers in the editor\n";
304+
finalMsg += "[WARNING] Reported error line(s) may not match line numbers in the editor\n";
305305
writer.textArea.insert(finalMsg, lengthOfJTextAreaWriter);
306306
}
307307
errorLines = null;

src/main/java/org/scijava/ui/swing/script/FileSystemTreePanel.java

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
import java.util.regex.PatternSyntaxException;
5353
import java.util.stream.Collectors;
5454

55+
import javax.swing.BorderFactory;
5556
import javax.swing.FocusManager;
5657
import javax.swing.JButton;
5758
import javax.swing.JCheckBoxMenuItem;
@@ -62,6 +63,7 @@
6263
import javax.swing.JPopupMenu;
6364
import javax.swing.JScrollPane;
6465
import javax.swing.JTextField;
66+
import javax.swing.UIManager;
6567
import javax.swing.tree.DefaultMutableTreeNode;
6668
import javax.swing.tree.TreePath;
6769

@@ -199,11 +201,23 @@ public void keyPressed(final KeyEvent ke) {
199201

200202
private JButton thinButton(final String label) {
201203
final JButton b = new JButton(label);
202-
final double FACTOR = .25;
203-
final Insets insets =b.getMargin();
204-
b.setMargin(new Insets(insets.top, (int) (insets.left *
205-
FACTOR), insets.bottom, (int) (insets.right * FACTOR)));
206-
//b.setBorder(null);
204+
try {
205+
if ("com.apple.laf.AquaLookAndFeel".equals(UIManager.getLookAndFeel().getClass().getName())) {
206+
b.setOpaque(true);
207+
b.setBackground(new JPanel().getBackground());
208+
b.setBorderPainted(false);
209+
b.setBorder(BorderFactory.createEmptyBorder());
210+
b.setMargin(new Insets(0, 2, 0, 2));
211+
} else {
212+
final double FACTOR = .25;
213+
final Insets insets = b.getMargin();
214+
b.setMargin(new Insets(insets.top, (int) (insets.left * FACTOR), insets.bottom,
215+
(int) (insets.right * FACTOR)));
216+
}
217+
} catch (final Exception ignored) {
218+
// do nothing
219+
}
220+
// b.setBorder(null);
207221
// set height to that of searchField. Do not allow vertical resizing
208222
b.setPreferredSize(new Dimension(b.getPreferredSize().width, (int) searchField.getPreferredSize().getHeight()));
209223
b.setMaximumSize(new Dimension(b.getMaximumSize().width, (int) searchField.getPreferredSize().getHeight()));
@@ -360,7 +374,7 @@ private void expandImmediateNodes() {
360374
}
361375

362376
private void showHelpMsg() {
363-
final String msg = "<HTML><div WIDTH=650>" //
377+
final String msg = "<HTML><div WIDTH=500>" //
364378
+ "<p><b>Overview</b></p>" //
365379
+ "<p>The File Explorer pane provides a direct view of selected folders. Changes in " //
366380
+ "the native file system are synchronized in real time.</p>" //

src/main/java/org/scijava/ui/swing/script/TextEditor.java

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import java.awt.Cursor;
3434
import java.awt.Desktop;
3535
import java.awt.Dimension;
36+
import java.awt.Font;
3637
import java.awt.GridBagConstraints;
3738
import java.awt.GridBagLayout;
3839
import java.awt.Toolkit;
@@ -314,6 +315,15 @@ public TextEditor(final Context context) {
314315
tabbed = new JTabbedPane();
315316
tree = new FileSystemTree(log);
316317
body = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, new FileSystemTreePanel(tree, context), tabbed);
318+
try {// on Aqua L&F, 'one touch arrows' collide with borderless options button, which in turn are
319+
// needed for proper resize of the search panel. Grrrrr....
320+
if ("com.apple.laf.AquaLookAndFeel".equals(UIManager.getLookAndFeel().getClass().getName())) {
321+
body.setOneTouchExpandable(false);
322+
}
323+
} catch (final Exception ignored) {
324+
// do nothing
325+
}
326+
317327
// These items are dynamic and need to be initialized before EditorPane creation
318328
initializeDynamicMenuComponents();
319329

@@ -549,7 +559,7 @@ public TextEditor(final Context context) {
549559

550560
toolsMenu = new JMenu("Tools");
551561
toolsMenu.setMnemonic(KeyEvent.VK_O);
552-
addSeparator(toolsMenu, "Imports");
562+
addSeparator(toolsMenu, "Imports:");
553563
addImport = addToMenu(toolsMenu, "Add Import...", 0, 0);
554564
addImport.setMnemonic(KeyEvent.VK_I);
555565
respectAutoImports = prefService.getBoolean(getClass(), AUTO_IMPORT_PREFS, false);
@@ -3781,7 +3791,7 @@ protected void applyConsolePopupMenu(final JTextArea textArea) {
37813791
});
37823792
popup.addSeparator();
37833793

3784-
jmi = new JMenuItem("Clear Selected Text...");
3794+
jmi = new JMenuItem("Clear Selected Text");
37853795
popup.add(jmi);
37863796
jmi.addActionListener(e -> {
37873797
if (textArea.getSelectedText() == null)
@@ -3791,7 +3801,7 @@ protected void applyConsolePopupMenu(final JTextArea textArea) {
37913801
});
37923802
final DefaultHighlighter highlighter = (DefaultHighlighter)textArea.getHighlighter();
37933803
highlighter.setDrawsLayeredHighlights(false);
3794-
jmi = new JMenuItem("Highlight Selected Text...");
3804+
jmi = new JMenuItem("Highlight Selected Text");
37953805
popup.add(jmi);
37963806
jmi.addActionListener(e -> {
37973807
try {
@@ -3804,7 +3814,7 @@ protected void applyConsolePopupMenu(final JTextArea textArea) {
38043814
UIManager.getLookAndFeel().provideErrorFeedback(textArea);
38053815
}
38063816
});
3807-
jmi = new JMenuItem("Clear highlights...");
3817+
jmi = new JMenuItem("Clear Highlights");
38083818
popup.add(jmi);
38093819
jmi.addActionListener(e -> {
38103820
textArea.getHighlighter().removeAllHighlights();
@@ -3813,14 +3823,27 @@ protected void applyConsolePopupMenu(final JTextArea textArea) {
38133823
}
38143824

38153825
private static void addSeparator(final JMenu menu, final String header) {
3816-
final JLabel label = new JLabel(header);
3817-
// label.setHorizontalAlignment(SwingConstants.LEFT);
3818-
label.setEnabled(false);
3819-
label.setForeground(getDisabledComponentColor());
38203826
if (menu.getMenuComponentCount() > 1) {
38213827
menu.addSeparator();
38223828
}
3823-
menu.add(label);
3829+
try { // on Aqua L&F the label is never rendered. It seems only menu items with an actual
3830+
// actionlistener are registered on the menubar!?
3831+
if ("com.apple.laf.AquaLookAndFeel".equals(UIManager.getLookAndFeel().getClass().getName())) {
3832+
final JMenuItem label = new JMenuItem("↓ " + header);
3833+
label.setEnabled(false);
3834+
label.setFont(label.getFont().deriveFont(Font.ITALIC)); // ignored
3835+
label.addActionListener(e -> label.setActionCommand("dummy"));
3836+
menu.add(label);
3837+
} else {
3838+
final JLabel label = new JLabel(header);
3839+
// label.setHorizontalAlignment(SwingConstants.LEFT);
3840+
label.setEnabled(false);
3841+
label.setForeground(getDisabledComponentColor());
3842+
menu.add(label);
3843+
}
3844+
} catch (final Exception ignored) {
3845+
// do nothing
3846+
}
38243847
}
38253848

38263849
private static Collection<File> assembleFlatFileCollection(final Collection<File> collection, final File[] files) {

0 commit comments

Comments
 (0)
0