From ff90545281c047505e3bee36af09f815edaa8690 Mon Sep 17 00:00:00 2001 From: Joacim Breiler Date: Wed, 8 Nov 2023 17:02:10 +0100 Subject: [PATCH] Usability fixes (#2362) * Add placeholder to better indicate that you can type commands in the command box * Added error message when the GLPanel couldn't be loaded and added possibility to open log directory * Fixed problem when user chooses a new file that exists and decides not to overwrite the file. * Displays a warning message when the user must save gcode file befor it can be sent. * Added more descriptive tooltips * Updated library versions * Added action for creating shortcuts * Added windows icons * Fixed icon for MacOSX and in the settings panel * Delete key can now remove objects in the designer --- pom.xml | 11 +- .../components/CommandTextArea.java | 13 +- .../TextFieldPlaceholderFocusListener.java | 41 ++ .../utils/GUIHelpers.java | 40 +- .../utils/NarrowOptionPane.java | 6 +- .../resources/MessagesBundle_cs_CZ.properties | 2 +- .../resources/MessagesBundle_en_US.properties | 9 +- ugs-platform/application/pom.xml | 23 ++ .../src/main/app-resources/icon.ico | Bin 0 -> 9662 bytes .../src/main/app-resources/icon.svg | 365 ++++++++++++++++++ .../src/main/app-resources/ugsplatform.icns | Bin 7450 -> 151723 bytes .../application/src/main/resources/Info.plist | 2 +- .../netbeans/core/startup/Bundle.properties | 4 +- .../org/netbeans/core/startup/frame.gif | Bin 384 -> 340 bytes .../org/netbeans/core/startup/frame.png | Bin 0 -> 631 bytes .../org/netbeans/core/startup/frame32.gif | Bin 763 -> 727 bytes .../org/netbeans/core/startup/frame32.png | Bin 0 -> 1150 bytes .../org/netbeans/core/startup/frame48.gif | Bin 1124 -> 1346 bytes .../org/netbeans/core/startup/frame48.png | Bin 0 -> 1644 bytes .../core/windows/view/ui/Bundle.properties | 4 +- .../org/netbeans/core/ui/Bundle.properties | 2 +- ugs-platform/pom.xml | 4 +- .../nbp/editor/actions/NewGcodeAction.java | 16 +- .../nbp/designer/platform/PlatformUtils.java | 6 +- ugs-platform/ugs-platform-ugscore/pom.xml | 7 + .../core/actions/CreateShortcutAction.java | 97 +++++ .../ugs/nbp/core/actions/HomingAction.java | 3 +- .../core/actions/OpenLogDirectoryAction.java | 46 +++ .../ugs/nbp/core/actions/OutlineAction.java | 10 +- .../ugs/nbp/core/actions/ProgramAction.java | 26 +- .../ugs/nbp/core/actions/SoftResetAction.java | 2 + .../ugs/nbp/core/actions/StartAction.java | 4 +- .../ugs/nbp/core/actions/UnlockAction.java | 7 +- .../resources/MessagesBundle.properties | 2 + .../ugs/nbp/core/actions/StartActionTest.java | 6 +- .../ugs/nbp/lib/options/package-info.java | 2 +- .../nbp/lib/services/LocalizingService.java | 2 + .../willwinder/ugs/nbp/lib/options/CNC.png | Bin 971 -> 0 bytes .../willwinder/ugs/nbp/lib/options/CNC.svg | 23 ++ .../visualizer/Visualizer2TopComponent.java | 56 ++- 40 files changed, 755 insertions(+), 86 deletions(-) create mode 100644 ugs-core/src/com/willwinder/universalgcodesender/uielements/components/TextFieldPlaceholderFocusListener.java create mode 100644 ugs-platform/application/src/main/app-resources/icon.ico create mode 100644 ugs-platform/application/src/main/app-resources/icon.svg create mode 100644 ugs-platform/branding/src/main/nbm-branding/core/core.jar/org/netbeans/core/startup/frame.png create mode 100644 ugs-platform/branding/src/main/nbm-branding/core/core.jar/org/netbeans/core/startup/frame32.png create mode 100644 ugs-platform/branding/src/main/nbm-branding/core/core.jar/org/netbeans/core/startup/frame48.png create mode 100644 ugs-platform/ugs-platform-ugscore/src/main/java/com/willwinder/ugs/nbp/core/actions/CreateShortcutAction.java create mode 100644 ugs-platform/ugs-platform-ugscore/src/main/java/com/willwinder/ugs/nbp/core/actions/OpenLogDirectoryAction.java delete mode 100644 ugs-platform/ugs-platform-ugslib/src/main/resources/com/willwinder/ugs/nbp/lib/options/CNC.png create mode 100644 ugs-platform/ugs-platform-ugslib/src/main/resources/com/willwinder/ugs/nbp/lib/options/CNC.svg diff --git a/pom.xml b/pom.xml index d6bc2e3260..cdb6427d33 100644 --- a/pom.xml +++ b/pom.xml @@ -50,16 +50,16 @@ UTF-8 9.4.41.v20210516 2.29.1 - 2.5.0-rc-20230523 - 2.5.0-rc-20230523 + 2.5.0 + 2.5.0 3.7.4 28.1-jre 2.8.0 2.9.2 3.12.0 - 2.11.0 + 2.14.0 1.9.0 - 2.10 + 2.10.1 2.1.1e 3.4.0 1.4 @@ -68,8 +68,7 @@ 3.0.0-M5 1.3.0 3.2.4 - 1.16 - 0.1a + 1.17 1.19.0 3.1.0 3.2.0 diff --git a/ugs-core/src/com/willwinder/universalgcodesender/uielements/components/CommandTextArea.java b/ugs-core/src/com/willwinder/universalgcodesender/uielements/components/CommandTextArea.java index dad07d2c4c..37e44e851e 100644 --- a/ugs-core/src/com/willwinder/universalgcodesender/uielements/components/CommandTextArea.java +++ b/ugs-core/src/com/willwinder/universalgcodesender/uielements/components/CommandTextArea.java @@ -39,6 +39,7 @@ This file is part of Universal Gcode Sender (UGS). * @author wwinder */ public class CommandTextArea extends JTextField implements KeyEventDispatcher, UGSEventListener { + public static final String PLACEHOLDER_TEXT = " >\t"; private final transient CommandHistory commandHistory = new CommandHistory(); // This is needed for unit testing. protected boolean focusNotNeeded = false; @@ -58,6 +59,7 @@ public CommandTextArea(BackendAPI backend) { // Make it possible to send multiple lines getDocument().putProperty("filterNewlines", Boolean.FALSE); + addFocusListener(new TextFieldPlaceholderFocusListener(this, PLACEHOLDER_TEXT)); } public final void init(BackendAPI backend) { @@ -118,13 +120,10 @@ private void sendCommands(String[] commands) throws Exception { } private boolean isArrowKey(KeyEvent e) { - switch (e.getKeyCode()) { - case KeyEvent.VK_UP: - case KeyEvent.VK_DOWN: - return true; - default: - return false; - } + return switch (e.getKeyCode()) { + case KeyEvent.VK_UP, KeyEvent.VK_DOWN -> true; + default -> false; + }; } /** diff --git a/ugs-core/src/com/willwinder/universalgcodesender/uielements/components/TextFieldPlaceholderFocusListener.java b/ugs-core/src/com/willwinder/universalgcodesender/uielements/components/TextFieldPlaceholderFocusListener.java new file mode 100644 index 0000000000..ab7744885b --- /dev/null +++ b/ugs-core/src/com/willwinder/universalgcodesender/uielements/components/TextFieldPlaceholderFocusListener.java @@ -0,0 +1,41 @@ +package com.willwinder.universalgcodesender.uielements.components; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.FocusEvent; +import java.awt.event.FocusListener; + +/** + * Register this as a listener to a text field and it will show a placeholder + */ +public class TextFieldPlaceholderFocusListener implements FocusListener { + + private final JTextField textField; + private final Color textColor; + private final Color placeholderColor; + private final String placeholderText; + + public TextFieldPlaceholderFocusListener(JTextField textArea, String placeholderText) { + this.textField = textArea; + textColor = textArea.getForeground(); + placeholderColor = textArea.getDisabledTextColor(); + this.placeholderText = placeholderText; + focusLost(null); + } + + @Override + public void focusGained(FocusEvent e) { + if (textField.getText().equals(placeholderText)) { + textField.setText(""); + textField.setForeground(textColor); + } + } + + @Override + public void focusLost(FocusEvent e) { + if (textField.getText().isEmpty()) { + textField.setForeground(placeholderColor); + textField.setText(placeholderText); + } + } +} diff --git a/ugs-core/src/com/willwinder/universalgcodesender/utils/GUIHelpers.java b/ugs-core/src/com/willwinder/universalgcodesender/utils/GUIHelpers.java index 339c112311..25df742c8c 100644 --- a/ugs-core/src/com/willwinder/universalgcodesender/utils/GUIHelpers.java +++ b/ugs-core/src/com/willwinder/universalgcodesender/utils/GUIHelpers.java @@ -20,12 +20,18 @@ This file is part of Universal Gcode Sender (UGS). import com.willwinder.universalgcodesender.i18n.Localization; import com.willwinder.universalgcodesender.model.BackendAPI; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.exception.ExceptionUtils; + +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.SwingUtilities; +import java.awt.Component; +import java.awt.EventQueue; +import java.awt.Window; import java.io.File; import java.util.logging.Level; import java.util.logging.Logger; -import javax.swing.JOptionPane; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.exception.ExceptionUtils; /** * @@ -63,19 +69,29 @@ public static void displayErrorDialog(final String errorMessage, boolean modal) LOGGER.warning("Something tried to display an error message with an empty message: " + ExceptionUtils.getStackTrace(new Throwable())); return; } + String title = Localization.getString("error"); + displayMessageDialog(new JPanel(), title, errorMessage, JOptionPane.ERROR_MESSAGE, modal); + } - Runnable r = () -> { - //JOptionPane.showMessageDialog(new JFrame(), errorMessage, - // Localization.getString("error"), JOptionPane.ERROR_MESSAGE); - NarrowOptionPane.showNarrowDialog(250, errorMessage.replaceAll("\\.\\.", "\\."), - Localization.getString("error"), - JOptionPane.ERROR_MESSAGE); - }; + /** + * Displays a message dialog + * + * @param parent the parent component + * @param title the title string for the dialog + * @param message the Object to display + * @param messageType the type of message to be displayed: ERROR_MESSAGE, INFORMATION_MESSAGE, WARNING_MESSAGE, QUESTION_MESSAGE, or PLAIN_MESSAGE + * @param modal toggle whether the message should block or fire and forget. + */ + public static void displayMessageDialog(Component parent, String title, String message, int messageType, boolean modal) { + Window windowAncestor = SwingUtilities.getWindowAncestor(parent == null ? new JPanel() : parent); + Runnable r = () -> NarrowOptionPane.showNarrowDialog(windowAncestor, 250, StringUtils.defaultString(message).replaceAll("\\.\\.", "\\."), + title, + messageType); if (modal) { r.run(); } else { - java.awt.EventQueue.invokeLater(r); + EventQueue.invokeLater(r); } } @@ -83,8 +99,6 @@ public static void displayHelpDialog(final String helpMessage) { java.awt.EventQueue.invokeLater(() -> { NarrowOptionPane.showNarrowConfirmDialog(250, helpMessage, Localization.getString("help"), JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE); - //JOptionPane.showMessageDialog(new JFrame(), helpMessage, - // Localization.getString("help"), JOptionPane.INFORMATION_MESSAGE); }); } diff --git a/ugs-core/src/com/willwinder/universalgcodesender/utils/NarrowOptionPane.java b/ugs-core/src/com/willwinder/universalgcodesender/utils/NarrowOptionPane.java index 0636e00503..760547859f 100644 --- a/ugs-core/src/com/willwinder/universalgcodesender/utils/NarrowOptionPane.java +++ b/ugs-core/src/com/willwinder/universalgcodesender/utils/NarrowOptionPane.java @@ -22,9 +22,9 @@ This file is part of Universal Gcode Sender (UGS). import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; +import java.awt.Component; /** * @author wwinder @@ -33,10 +33,10 @@ public class NarrowOptionPane extends JOptionPane { public static String pattern = "

%s

"; - public static void showNarrowDialog(int textWidthInPixels, + public static void showNarrowDialog(Component parentComponent, int textWidthInPixels, String message, String title, int messageType) throws HeadlessException { - JOptionPane.showMessageDialog(new JFrame(), + JOptionPane.showMessageDialog(parentComponent, String.format(pattern, textWidthInPixels, message.replaceAll("\n", "
")), title, messageType); } diff --git a/ugs-core/src/resources/MessagesBundle_cs_CZ.properties b/ugs-core/src/resources/MessagesBundle_cs_CZ.properties index a646413d37..2e2d139c18 100644 --- a/ugs-core/src/resources/MessagesBundle_cs_CZ.properties +++ b/ugs-core/src/resources/MessagesBundle_cs_CZ.properties @@ -390,7 +390,7 @@ autoleveler.option.offset-y = Posun měřící sondy Y autoleveler.option.offset-z = Posun měřící sondy Z experimental.feature = Toto je experimentální funkce. Prosím buďte opatrní a nahlaste všechny chyby, které najdete na GitHubu. # Window title for platform GUI -platform-title = Universal Gcode Platform\n +platform-title = Universal Gcode Sender\n mainWindow.swing.alarmLock = Odemnout mainWindow.swing.checkMode = Režim kontroly mainWindow.swing.getState = Stav diff --git a/ugs-core/src/resources/MessagesBundle_en_US.properties b/ugs-core/src/resources/MessagesBundle_en_US.properties index 76adb5af10..db1d2ab85b 100644 --- a/ugs-core/src/resources/MessagesBundle_en_US.properties +++ b/ugs-core/src/resources/MessagesBundle_en_US.properties @@ -241,7 +241,12 @@ platform.menu.jog.feed = Feed rate platform.menu.actions = Actions platform.menu.macros = Macros platform.menu.machine = Machine +platform.actions.program.not.saved.message = You must save the file first +platform.actions.program.not.saved.title = Not saved +platform.actions.homing.enabled.tooltip = Use this to perform a homing operation to find the machine zero position platform.actions.homing.disabled.tooltip = Homing needs to be enabled in the firmware settings +platform.actions.unlock.tooltip = Clear the alarm state and unlock the machine +platform.actions.softreset.tooltip = Reboot the controller incomplete.localization.title = Not fully translated incomplete.localization = Universal Gcode Sender is not fully localized for this language. \nPlease visit https://translate.universalgcodesender.com to see how you can help. incomplete.localization.doNotShowAgain = Do not show this message again @@ -498,7 +503,7 @@ autoleveler.probe-failed = Probe failed autoleveler.panel.clear = Clear scan experimental.feature = This is an experimental feature. Please use caution and report any bugs you find on GitHub. # Window title for platform GUI -platform-title = Universal Gcode Platform +platform-title = Universal Gcode Sender mainWindow.swing.alarmLock = Unlock mainWindow.swing.checkMode = Check Mode mainWindow.swing.getState = Get State @@ -660,6 +665,8 @@ platform.plugin.jog.stealKeyboardFocus = Making sure that keyboard controls are platform.window.edit.macros = Edit macros... platform.action.outline = Outline platform.action.outline.tooltip = Move the machine around the model using the current depth +platform.action.openLogDirectory = Open log directory +platform.action.createShortcut = Create shortcut platform.plugin.joystick.activate = Activate joystick platform.plugin.joystick.buttonControls = Button controls: platform.plugin.joystick.analogControls = Analog controls: diff --git a/ugs-platform/application/pom.xml b/ugs-platform/application/pom.xml index d38734d435..a9f6d6a99e 100644 --- a/ugs-platform/application/pom.xml +++ b/ugs-platform/application/pom.xml @@ -308,9 +308,16 @@ + + + + + + + @@ -382,9 +389,16 @@ + + + + + + + @@ -686,6 +700,9 @@ + + + @@ -766,6 +783,9 @@ + + + @@ -846,6 +866,9 @@ + + + diff --git a/ugs-platform/application/src/main/app-resources/icon.ico b/ugs-platform/application/src/main/app-resources/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..23f032316923862bbf18a472a4edb9daed50d2a9 GIT binary patch literal 9662 zcmdU#3s6+o8OP5)2(b97LDNiHd?bxAX*<@Y37Sxn*um8FF*T{iX=4Rhc6kVhFIHgL zMdYO|hyjzPsBtoFld6-ZV^eFBkXFT4(LTK=B&K!Zi)5RaZA;eT6#61wA#0rSxrQcmb{A+?su82|kYp)mD z%@~w)ybI$2?1|#x7&A_4H2ICY^u?E%pD-R-8XlLiz|Vf3dww$f=9I+0sgc0GU)XAc zzVtq1ufsY6ep~H#ux4J?ms}zE5%d37*y?T{JN$LavGxqO_#43A@HyC{B>v5#GY3p2 zlVBwzBm^Y)ayt9RLW8{vwl3$n%l?D8ED7u>%>VL|DIWD3jYh!=v|abTB+#r4Mqt7GVrj0&RoJh7jkmLia+< zbc-p$_~deP+VfGXceFmdeh)pgZa2-(_#Mq(Q$>%aZ*N#>N~}OWu9wSZLen9(e<;EX zs2uXuE|)2Q=BK2jNWS95AA__@5Cy2?$bSd)OXw<>H6_H8*(i&zA@ohH-h;^h73far z6D~Up)gjOKAO&9;&!SceNUdBT{QJyia}es81vRSF=aZlPeqKfuO|_n+73NfMTr&rl|FPKE zSb;Y5ZqgxsB6LKhJ?>8+{Cksn=7{GJuL)rH`9N9 zkM=y)3ZB1_n7@;U#~+OHbD-}-QBVwY8uF-9z7J^r4(0#x38tku8~n+;tpND-C|e9& zfp|}2@m}5!jXM9+iR)J`N!nQBy*>_;pY44=)aHYARQa(-_52{M)V^p{(FN}_j*EXM z-I{%ZVofQoGZB1>baAih>(^^S8QAD^`bmn^=9e4QWm`tu*Kbj@A!(th-z z$HnypgNwh4##!H|1!-lpFm(&Xq;BPK;1`K&YtY}9(e7+$A*9AXfOz()ix8hJo1jW) z5_CiO!O%Nv!)vt*(zeNV_2i$2^E1x=6lDE~bh+n9Yp*4(t(JmpXH9q>;C+Q{$LBXS z{wBmf4&4WR3%VN$hNN{$>41DcBKsQ?OwKzqU+*7^Uz>ZDG`Sz6FAhaJ9!W13I2ZZj zcYtl0!s{L07=AO&%={bt!@vDq{AU$*4v#_;o=VOhihm|^`}@iL8lnA}|8+n7Rd|NP zI|%rWurhyxqGplTbRVA8hT`{Wf2Cie#n0z{p0`u7kI`+Gf6{H4Z_(7O8d*pCr&$gy z8-l+XY(InedFugL42d!<fP%sOgJx>{mZe&Z02u2X$g|M?{h_ zmi?jCyKX=CzeO64n>&9#?%SajH}U<8GXD%*e*keiQl2h>6NvMSM?E|7jY%W* zVPsUpFXiI@Hrl%6&Og4WkycmtlKlkHGT1+)3`g0mgQ;e=dIZ*YocD+B^r%d$EN!9C1=|HBrPaCmAY%nE6+K}?@o5ioJK^#tk zo`7~kjrdkab9S}U;sZ{a@`9@mhVm{7-FB7PonSs^s2nKA7(|C`>oOotU@Sz?);1Ab zdUf>ql@@p$wqw0;`4fjaXg0J?U(kH?o4Y$Z@7}{cG(hm3cG&qJhKhkiuuc~<77JVp z_>UN0K|){FuGD(-Lp%T94D>}&9{RMYDLkySZCONB-(Sa7_V0zQe;m5KXTrGWNEl%2 z;IgX%win_p{vvjLKcenvLNy4dsfVp{eCtG4x_4M7$JYgOdNt$d@ClMb&Gm(ma(N}Z h-ugte%mXxuFVGM?)GEX@wim*QBMJM3h~{##{tuTfWW4|Y literal 0 HcmV?d00001 diff --git a/ugs-platform/application/src/main/app-resources/icon.svg b/ugs-platform/application/src/main/app-resources/icon.svg new file mode 100644 index 0000000000..a51e0d7d3d --- /dev/null +++ b/ugs-platform/application/src/main/app-resources/icon.svg @@ -0,0 +1,365 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/ugs-platform/application/src/main/app-resources/ugsplatform.icns b/ugs-platform/application/src/main/app-resources/ugsplatform.icns index 67a185f1f7d6dac04a307de445cdc67952eb5f1b..a9712c647d5f31e3cd031b41a8a9d764bd0d1098 100644 GIT binary patch literal 151723 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

#BM2gB%4-OI*?mJD6t^GuK3gFyK_m% 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Ⓢ(;G0M0+3VQQEjW45fe!uYMdoHZzNZop{%^{=QA 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 diff --git a/ugs-platform/application/src/main/resources/Info.plist b/ugs-platform/application/src/main/resources/Info.plist index 7739b5a3b8..5abdf0d908 100644 --- a/ugs-platform/application/src/main/resources/Info.plist +++ b/ugs-platform/application/src/main/resources/Info.plist @@ -3,7 +3,7 @@ CFBundleName - Universal Gcode Platform + Universal Gcode Sender CFBundleVersion ${project.version} diff --git a/ugs-platform/branding/src/main/nbm-branding/core/core.jar/org/netbeans/core/startup/Bundle.properties b/ugs-platform/branding/src/main/nbm-branding/core/core.jar/org/netbeans/core/startup/Bundle.properties index 934cedbbd1..338e014700 100644 --- a/ugs-platform/branding/src/main/nbm-branding/core/core.jar/org/netbeans/core/startup/Bundle.properties +++ b/ugs-platform/branding/src/main/nbm-branding/core/core.jar/org/netbeans/core/startup/Bundle.properties @@ -1,5 +1,5 @@ -currentVersion=Universal Gcode Platform {0} -LBL_splash_window_title=Starting Universal Gcode Platform +currentVersion=Universal Gcode Sender {0} +LBL_splash_window_title=Starting Universal Gcode Sender SPLASH_HEIGHT=295 SPLASH_WIDTH=600 SplashProgressBarBounds=0,270,600,6 diff --git a/ugs-platform/branding/src/main/nbm-branding/core/core.jar/org/netbeans/core/startup/frame.gif b/ugs-platform/branding/src/main/nbm-branding/core/core.jar/org/netbeans/core/startup/frame.gif index b888c65316b7413dddae0d232f713ffb7c781baf..911c0d87e5e06fef542acd7a348f605d57a634ee 100644 GIT binary patch literal 340 zcmZ?wbhEHb6krfwxXJ(msi~=HX{qVyKr$^oJv}2WB|AMiH$6TlBOxz6AwMIoAS13g zGp0BzrX(x2EHk1Uh_WJTvx950Ls|<$=M-7aDYjftVzH>$WKF5&#xkw#Wy+`PM9)^T zU#?`hS^gYZnJKZIZk&Pg@ zaCbU$r$P(eb=eMFX6`qcbI;s~BuNr}8UF&ZEPn%E^NgZEWx?kwQ`x@4Lc6k7tA!v4 zC^1bF%jFXC=V8}%v0AO*c^+}=a)IyrB+~Eqkt7N2-*>x^>Wu~^&1Mta&G~$$9;9iCFbt{6>2$(uI>lzQ zfvT!>9X=jnds&aS{Z(NOe%FAk;yjwvy7uQ1V5-Zti`LLz7z4*r8{8e>~^m zJ?98RYAHv2LU@=wbo8camx9oSvx%yolN{|qRtAIR9M@dKv-q)dvAAgvZ2q9qRK}xP zZwB3~hwt%jC+`jlT*JC5vB+4Ga&e7zwL`59-BA)KgTS^|Zvw z^#iXOe!Up$gb~_y1RqfRjpI4}mCa_S`px-#z9Q*#`izKt1=dydu82H87}>0hMoeF;jcSPhi&;llb)KCF{RpW1M>R;x0-gnRQW&yvS?HplJ zL~ivTA&w8kRys$vflMaz2uJ~A{mi(oyDB1!zy@#vSO(sTgm0$Y8oqS_T><8M&6j|J zs(uWDVC{bs08o7F6n;ODZ+kIAuh1`rPpVqnzd&@sarm=uLD;eL4pjDH{sQKM&v>)z R^l$(G002ovPDHLkV1m7~AR_<( literal 0 HcmV?d00001 diff --git a/ugs-platform/branding/src/main/nbm-branding/core/core.jar/org/netbeans/core/startup/frame32.gif b/ugs-platform/branding/src/main/nbm-branding/core/core.jar/org/netbeans/core/startup/frame32.gif index 7bf36ab5c93474c69efcc8c734a9bcb99dce8be7..f7db388c3aa285b860c2db0707862c63b6a6d0a4 100644 GIT binary patch literal 727 zcmZ?wbhEHbRA5kGc*Xz%si~>ysi|pcY3b=el%AQMnvtHCot~7No=}<@S&|uDo)uA< z6<(ViRGS@KpA*!O9nhHL-<;#yp6k_~>)n>?+m`3kk>}H0;5)g{aeATc+#<^b#b%33 zOjeZYuPxQyRIYxaoa09S)zC5w@le01q^@hal=%TO!$W3S1(qid( p1}_f^ZCEPdStg-Z%5waXw`-owHW8QODQ*r$G55~g3{qgQ1^~R$6e$1z literal 763 zcmV#pviL{DXtA$)sfk&d<*w%}C(p=0;z4QYO6ScDn_>TrQ*0uCK4FM2W=a z<|dw=p3usgT5xuD){+1pC{40HJv|lg7Z(=@27@}*@Ao5@%ZX>F(}~;LTY=l(-`6o* z<;%;<_YvUUb5_#0q_5o_u9CEk_4T?vn^wtp5s=xlDIFcKw6#^84>h=}yBm*>j{?VS z*xlX5>gp;CUnmsn`kPLt;qB~1%1|w%{W&@^5MVu%mkgPS zj94n?tE(#=^LuYklcC20 zg`{(EaPX!I?(Xj3ph~4uDIGU4F;Ul7BLSAG>T=ed<)8{mD;^)iD(8TWe0h0U-^^q( zB7n6mrIyd6l+TJ5>U_ z;ne`!+uKdLWdetXhp=k>W)hur!%t35n&!aE%L^VJ9`JK*4IZj2x2@5hpPxl+drb+o z@yeqz(BF^n%nYLQ^9Yg50)ar2#H`v(|4NfELRtM-SP&EQ`^X4SMsG(31G_{xz(%Qyknq)Hb z-n;i67ip5|WG0=LM8DlV_nhy1@0@$@JBkfJj^j^iee}Ku9(+d!GlkH|XU#`~FE+xZ z;y7PD&K_TJQiK;L>%oXXzbWa zx??YD>}wE9A#&u4LR+JU2n3NG3j=qo`GfGQyK(z93VmH^zB}8BNGtH<8sg5TQ92uc z9_jAxenv!ou-3Lz5|B=(4*}oSdInZ-d2t6K)%PcZZFq`d=iIA6#pD25>-|vsHC%y| zHNV-Lr``*20$PC)?JnQsl2YpBvd~$j)Ya0^*aED0b3jw6t+Q#AJ@sP*MyT@zrMS@X zAwedyCVZ%`ukVd=W2_b|O5J3&Jx?w5#Yt`Ve?tNm%smwaI27J0Q#Ap}Y&P4H&1Ua7 z7qME9vrUtAI$UEvm)pUl{|xZv@;Z~ri~}9zez6~-z$F&q#;k|f0wR*@^)@!DwIG$v zX15z-8kD+oXcClz)wg)j)e*_s@9632c~nFa%WG?G#az_{JY}u@vpjhv4BdLJqTLvC z8hGVy@ypV0-8B=Sl*-lOtF@km^#>BIbq;PEhEpBF)Z%RvwfB$LTq!1EP&L~DJax3~8^#2m{@F@A#In(Grg z^MS=!ckZ!cytEOX*tehr!%miFL8<=!|EB^*oD-I+UfTe=r2>>@*ex~P)(byvlxI`8 z{;79!@*_368IIWhf>Ma^i$h&4eVG1N0XX?liMz5Hip^EPcSB0?*Je2W1@5V_rGP;< Q>;M1&07*qoM6N<$f=(S1ApigX literal 0 HcmV?d00001 diff --git a/ugs-platform/branding/src/main/nbm-branding/core/core.jar/org/netbeans/core/startup/frame48.gif b/ugs-platform/branding/src/main/nbm-branding/core/core.jar/org/netbeans/core/startup/frame48.gif index 314b512f132e4ec88dd2703e1e38f02a05bb58ec..90f063b8a18aa0ac79144713deb96e357e414c63 100644 GIT binary patch literal 1346 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 yyyy.MM.dd.HH.mm RELEASE180 - Universal Gcode Platform ${project.version} - Universal Gcode Platform + Universal Gcode Sender ${project.version} + Universal Gcode Sender 2 0 0 diff --git a/ugs-platform/ugs-platform-gcode-editor/src/main/java/com/willwinder/ugs/nbp/editor/actions/NewGcodeAction.java b/ugs-platform/ugs-platform-gcode-editor/src/main/java/com/willwinder/ugs/nbp/editor/actions/NewGcodeAction.java index 142d897b76..44ff2de399 100644 --- a/ugs-platform/ugs-platform-gcode-editor/src/main/java/com/willwinder/ugs/nbp/editor/actions/NewGcodeAction.java +++ b/ugs-platform/ugs-platform-gcode-editor/src/main/java/com/willwinder/ugs/nbp/editor/actions/NewGcodeAction.java @@ -44,6 +44,7 @@ This file is part of Universal Gcode Sender (UGS). import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; +import java.util.Optional; @ActionID( category = LocalizingService.OpenCategory, @@ -80,7 +81,12 @@ public void actionPerformed(ActionEvent e) { } try { - File file = chooseFile(); + Optional optional = chooseFile(); + if (optional.isEmpty()) { + return; + } + + File file = optional.get(); if (!file.createNewFile()) { throw new IOException("Could not create temporary file " + file); } @@ -92,7 +98,7 @@ public void actionPerformed(ActionEvent e) { } } - private File chooseFile() throws IOException { + private Optional chooseFile() throws IOException { FileChooserBuilder fcb = new FileChooserBuilder(NewGcodeAction.class); fcb.setTitle("Create Gcode file"); fcb.setFileFilter(new GcodeFileTypeFilter()); @@ -100,7 +106,7 @@ private File chooseFile() throws IOException { fileChooser.setFileHidingEnabled(true); if (fileChooser.showSaveDialog(null) != JFileChooser.APPROVE_OPTION) { - throw new IOException(); + return Optional.empty(); } // Removing the old file @@ -109,10 +115,10 @@ private File chooseFile() throws IOException { if (JOptionPane.showConfirmDialog(null, "Are you sure you want to overwrite the file " + file.getName(), "Overwrite existing file", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE) == JOptionPane.YES_OPTION) { file.delete(); } else { - throw new IOException(); + return Optional.empty(); } } - return file; + return Optional.of(file); } private void writeExampleToFile(File file) throws IOException { diff --git a/ugs-platform/ugs-platform-plugin-designer/src/main/java/com/willwinder/ugs/nbp/designer/platform/PlatformUtils.java b/ugs-platform/ugs-platform-plugin-designer/src/main/java/com/willwinder/ugs/nbp/designer/platform/PlatformUtils.java index 513ca88c4f..1053731367 100644 --- a/ugs-platform/ugs-platform-plugin-designer/src/main/java/com/willwinder/ugs/nbp/designer/platform/PlatformUtils.java +++ b/ugs-platform/ugs-platform-plugin-designer/src/main/java/com/willwinder/ugs/nbp/designer/platform/PlatformUtils.java @@ -46,6 +46,8 @@ public class PlatformUtils { public static final String UNDO_KEY = "undo"; public static final String REDO_KEY = "redo"; public static final String DELETE_KEY = "delete"; + public static final String ERASE_KEY = "erase"; + private static final DeleteAction DELETE_ACTION = new DeleteAction(); private static final SelectAllAction SELECT_ALL_ACTION = new SelectAllAction(); @@ -59,6 +61,7 @@ private PlatformUtils() { public static void registerActions(ActionMap actionMap, TopComponent component) { actionMap.put(DELETE_KEY, DELETE_ACTION); + actionMap.put(ERASE_KEY, DELETE_ACTION); actionMap.put(DefaultEditorKit.selectAllAction, SELECT_ALL_ACTION); actionMap.put(DefaultEditorKit.copyAction, COPY_ACTION); actionMap.put(DefaultEditorKit.pasteAction, PASTE_ACTION); @@ -67,7 +70,8 @@ public static void registerActions(ActionMap actionMap, TopComponent component) // Need to make special input maps as this normally is handled by the texteditor InputMap inputMap = component.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW); - inputMap.put(Utilities.stringToKey("BACK_SPACE"), DELETE_KEY); + inputMap.put(Utilities.stringToKey("BACK_SPACE"), ERASE_KEY); + inputMap.put(Utilities.stringToKey("DELETE"), DELETE_KEY); inputMap.put(Utilities.stringToKey("D-C"), DefaultEditorKit.copyAction); inputMap.put(Utilities.stringToKey("D-V"), DefaultEditorKit.pasteAction); inputMap.put(Utilities.stringToKey("D-A"), DefaultEditorKit.selectAllAction); diff --git a/ugs-platform/ugs-platform-ugscore/pom.xml b/ugs-platform/ugs-platform-ugscore/pom.xml index 7be15ce610..e901ce55e6 100644 --- a/ugs-platform/ugs-platform-ugscore/pom.xml +++ b/ugs-platform/ugs-platform-ugscore/pom.xml @@ -48,6 +48,13 @@ jar + + + com.github.vatbub + mslinks + 1.0.6.2 + + org.netbeans.api org-openide-filesystems diff --git a/ugs-platform/ugs-platform-ugscore/src/main/java/com/willwinder/ugs/nbp/core/actions/CreateShortcutAction.java b/ugs-platform/ugs-platform-ugscore/src/main/java/com/willwinder/ugs/nbp/core/actions/CreateShortcutAction.java new file mode 100644 index 0000000000..fdfd9c9f7e --- /dev/null +++ b/ugs-platform/ugs-platform-ugscore/src/main/java/com/willwinder/ugs/nbp/core/actions/CreateShortcutAction.java @@ -0,0 +1,97 @@ +package com.willwinder.ugs.nbp.core.actions; + +import com.willwinder.ugs.nbp.lib.services.LocalizingService; +import com.willwinder.universalgcodesender.i18n.Localization; +import mslinks.ShellLink; +import org.apache.commons.io.FileUtils; +import org.apache.commons.lang3.SystemUtils; +import org.openide.awt.ActionID; +import org.openide.awt.ActionReference; +import org.openide.awt.ActionReferences; +import org.openide.awt.ActionRegistration; + +import javax.swing.AbstractAction; +import java.awt.event.ActionEvent; +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Path; +import java.nio.file.Paths; + +@ActionID( + category = LocalizingService.CATEGORY_TOOLS, + id = "com.willwinder.ugs.nbp.core.actions.CreateShortcutAction") +@ActionRegistration( + displayName = "resources.MessagesBundle#platform.action.createShortcut", + lazy = false) +@ActionReferences({ + @ActionReference( + path = LocalizingService.MENU_TOOLS, + position = 2110) +}) +public class CreateShortcutAction extends AbstractAction { + + public static final String LINUX_DESKTOP_FILE = System.getProperty("user.home") + "/.local/share/applications/ugs.desktop"; + + public CreateShortcutAction() { + setEnabled(isEnabled()); + putValue(NAME, Localization.getString("platform.action.createShortcut")); + } + + private static void createLinuxShortcut() { + Path currentRelativePath = Paths.get(""); + String ugsDirectory = currentRelativePath.toAbsolutePath().toString(); + String desktopFile = "[Desktop Entry]\n" + + "Type=Application\n" + + "Version=1.0\n" + + "Name=Universal Gcode Sender\n" + + "Comment=Control your CNC machine\n" + + "Path=" + ugsDirectory + "\n" + + "Exec=" + ugsDirectory + File.separator + "ugsplatform %F\n" + + "Icon=" + ugsDirectory + File.separator + "icon.svg\n" + + "MimeType=text/x-gcode\n" + + "Terminal=false\n" + + "StartupWMClass=Universal Gcode Sender\n" + + "Categories=Engineering\n" + + "Keywords=ugs\n"; + try { + FileUtils.write(new File(LINUX_DESKTOP_FILE), desktopFile, StandardCharsets.UTF_8); + } catch (IOException ex) { + throw new RuntimeException(ex); + } + } + + @Override + public void actionPerformed(ActionEvent e) { + if (SystemUtils.IS_OS_LINUX) { + createLinuxShortcut(); + } else if (SystemUtils.IS_OS_WINDOWS) { + createWindowsShortcut(); + } + } + + private static void createWindowsShortcut() { + try { + String shortcutPath = System.getProperty("user.home") + File.separator + "Desktop" + File.separator + "Universal Gcode Sender.lnk"; + Path currentRelativePath = Paths.get(""); + + String basePath = currentRelativePath.toAbsolutePath() + File.separator + "bin" + File.separator; + String executablePath = basePath + "ugsplatform64.exe"; + if (!new File(executablePath).exists()) { + executablePath = basePath + "ugsplatform.exe"; + } + + ShellLink.createLink(executablePath) + .setWorkingDir(currentRelativePath.toAbsolutePath().toString()) + .setIconLocation(basePath + "icon.ico") + .saveTo(shortcutPath); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + @Override + public boolean isEnabled() { + return SystemUtils.IS_OS_LINUX || SystemUtils.IS_OS_WINDOWS; + } +} diff --git a/ugs-platform/ugs-platform-ugscore/src/main/java/com/willwinder/ugs/nbp/core/actions/HomingAction.java b/ugs-platform/ugs-platform-ugscore/src/main/java/com/willwinder/ugs/nbp/core/actions/HomingAction.java index ab2d8234ed..07ad7e992d 100644 --- a/ugs-platform/ugs-platform-ugscore/src/main/java/com/willwinder/ugs/nbp/core/actions/HomingAction.java +++ b/ugs-platform/ugs-platform-ugscore/src/main/java/com/willwinder/ugs/nbp/core/actions/HomingAction.java @@ -68,6 +68,7 @@ public HomingAction() { putValue("menuText", LocalizingService.HomeTitle); putValue(NAME, LocalizingService.HomeTitle); setEnabled(isEnabled()); + updateToolTip(); } @Override @@ -113,7 +114,7 @@ private void updateToolTip() { !isHomingEnabled()) { putValue(Action.SHORT_DESCRIPTION, Localization.getString("platform.actions.homing.disabled.tooltip")); } else { - putValue(Action.SHORT_DESCRIPTION, LocalizingService.HomeTitle); + putValue(Action.SHORT_DESCRIPTION, Localization.getString("platform.actions.homing.enabled.tooltip")); } } } diff --git a/ugs-platform/ugs-platform-ugscore/src/main/java/com/willwinder/ugs/nbp/core/actions/OpenLogDirectoryAction.java b/ugs-platform/ugs-platform-ugscore/src/main/java/com/willwinder/ugs/nbp/core/actions/OpenLogDirectoryAction.java new file mode 100644 index 0000000000..d7b0848964 --- /dev/null +++ b/ugs-platform/ugs-platform-ugscore/src/main/java/com/willwinder/ugs/nbp/core/actions/OpenLogDirectoryAction.java @@ -0,0 +1,46 @@ +package com.willwinder.ugs.nbp.core.actions; + +import com.willwinder.ugs.nbp.lib.services.LocalizingService; +import com.willwinder.universalgcodesender.i18n.Localization; +import org.openide.awt.ActionID; +import org.openide.awt.ActionReference; +import org.openide.awt.ActionReferences; +import org.openide.awt.ActionRegistration; +import org.openide.modules.Places; + +import javax.swing.AbstractAction; +import java.awt.Desktop; +import java.awt.event.ActionEvent; +import java.io.File; +import java.io.IOException; +import java.util.logging.Level; +import java.util.logging.Logger; + +@ActionID( + category = LocalizingService.CATEGORY_TOOLS, + id = "com.willwinder.ugs.nbp.core.actions.OpenLogDirectoryAction") +@ActionRegistration( + displayName = "resources.MessagesBundle#platform.action.openLogDirectory", + lazy = false) +@ActionReferences({ + @ActionReference( + path = LocalizingService.MENU_TOOLS, + position = 2100) +}) +public class OpenLogDirectoryAction extends AbstractAction { + private static final Logger LOGGER = Logger.getLogger(OpenLogDirectoryAction.class.getName()); + + public OpenLogDirectoryAction() { + putValue(NAME, Localization.getString("platform.action.openLogDirectory")); + } + + + @Override + public void actionPerformed(ActionEvent actionEvent) { + try { + Desktop.getDesktop().open(new File(Places.getUserDirectory().getAbsolutePath() + File.separator + "var" + File.separator + "log")); + } catch (IOException ex) { + LOGGER.log(Level.SEVERE, "Could not open the log directory", ex); + } + } +} diff --git a/ugs-platform/ugs-platform-ugscore/src/main/java/com/willwinder/ugs/nbp/core/actions/OutlineAction.java b/ugs-platform/ugs-platform-ugscore/src/main/java/com/willwinder/ugs/nbp/core/actions/OutlineAction.java index 36a6d1509f..73df3aab63 100644 --- a/ugs-platform/ugs-platform-ugscore/src/main/java/com/willwinder/ugs/nbp/core/actions/OutlineAction.java +++ b/ugs-platform/ugs-platform-ugscore/src/main/java/com/willwinder/ugs/nbp/core/actions/OutlineAction.java @@ -57,7 +57,6 @@ This file is part of Universal Gcode Sender (UGS). import java.io.IOException; import java.util.List; import java.util.logging.Logger; -import java.util.stream.Collectors; /** * An action that will parse the loaded gcode file and generate a movement path for outlining @@ -109,12 +108,11 @@ public void UGSEvent(UGSEvent cse) { public boolean isEnabled() { return backend != null && backend.getControllerState() == ControllerState.IDLE && - backend.getGcodeFile() != null && - super.isEnabled(); + backend.getGcodeFile() != null; } @Override - public void actionPerformed(ActionEvent e) { + public void execute(ActionEvent e) { ThreadHelper.invokeLater(() -> { try { LOGGER.finest("Generating the outline of the gcode model"); @@ -141,7 +139,7 @@ public List generateOutlineCommands(File gcodeFile) throws IOExcep .filter(lineSegment -> !lineSegment.isFastTraverse()) .flatMap(new LineSegmentToPartialPositionMapper()) .distinct() - .collect(Collectors.toList()); + .toList(); return generateConvexHullCommands(pointList); } @@ -151,7 +149,7 @@ private List generateConvexHullCommands(List poin ICommandCreator commandCreator = backend.getCommandCreator(); return outline.stream() .map(point -> commandCreator.createCommand(GcodeUtils.generateMoveToCommand(Code.G90.name() + Code.G1.name(), point, getJogFeedRate()))) - .collect(Collectors.toList()); + .toList(); } private double getJogFeedRate() { diff --git a/ugs-platform/ugs-platform-ugscore/src/main/java/com/willwinder/ugs/nbp/core/actions/ProgramAction.java b/ugs-platform/ugs-platform-ugscore/src/main/java/com/willwinder/ugs/nbp/core/actions/ProgramAction.java index 65d4bf9bb1..55e9bfb64b 100644 --- a/ugs-platform/ugs-platform-ugscore/src/main/java/com/willwinder/ugs/nbp/core/actions/ProgramAction.java +++ b/ugs-platform/ugs-platform-ugscore/src/main/java/com/willwinder/ugs/nbp/core/actions/ProgramAction.java @@ -18,21 +18,25 @@ This file is part of Universal Gcode Sender (UGS). */ package com.willwinder.ugs.nbp.core.actions; +import com.willwinder.universalgcodesender.i18n.Localization; +import com.willwinder.universalgcodesender.utils.GUIHelpers; import org.openide.cookies.SaveCookie; import org.openide.nodes.Node; +import static org.openide.nodes.Node.PROP_COOKIE; import org.openide.nodes.NodeEvent; import org.openide.nodes.NodeListener; import org.openide.nodes.NodeMemberEvent; import org.openide.nodes.NodeReorderEvent; import org.openide.windows.TopComponent; +import static org.openide.windows.TopComponent.Registry.PROP_ACTIVATED_NODES; import javax.swing.AbstractAction; +import javax.swing.JOptionPane; import javax.swing.SwingUtilities; +import java.awt.Component; +import java.awt.event.ActionEvent; import java.beans.PropertyChangeEvent; -import static org.openide.nodes.Node.PROP_COOKIE; -import static org.openide.windows.TopComponent.Registry.PROP_ACTIVATED_NODES; - /** * An abstract action that will be active only if the current program contains unsaved * changes. @@ -40,6 +44,8 @@ This file is part of Universal Gcode Sender (UGS). * @author Joacim Breiler */ public abstract class ProgramAction extends AbstractAction implements NodeListener { + private final String notSavedText = Localization.getString("platform.actions.program.not.saved.message"); + private final String notSavedTitle = Localization.getString("platform.actions.program.not.saved.title"); /** * If the current document contains unsaved changes this will become false. */ @@ -56,6 +62,7 @@ public void propertyChange(PropertyChangeEvent evt) { SwingUtilities.invokeLater(() -> setEnabled(isEnabled())); } else if (evt.getPropertyName().equals(PROP_ACTIVATED_NODES)) { registerNodeListener(evt); + SwingUtilities.invokeLater(() -> setEnabled(isEnabled())); } } @@ -69,6 +76,7 @@ private void registerNodeListener(PropertyChangeEvent event) { if (event.getOldValue() != null && ((Node[]) event.getOldValue()).length > 0) { Node oldNode = ((Node[]) event.getOldValue())[0]; oldNode.removeNodeListener(this); + isSaved = true; } if (event.getNewValue() != null && ((Node[]) event.getNewValue()).length > 0) { @@ -78,10 +86,18 @@ private void registerNodeListener(PropertyChangeEvent event) { } @Override - public boolean isEnabled() { - return isSaved; + public final void actionPerformed(ActionEvent e) { + if (!isSaved) { + Component source = e != null ? (Component) e.getSource() : null; + GUIHelpers.displayMessageDialog(source, notSavedTitle, notSavedText, JOptionPane.INFORMATION_MESSAGE, true); + return; + } + + execute(e); } + public abstract void execute(ActionEvent e); + @Override public void childrenAdded(NodeMemberEvent ev) { // Not used diff --git a/ugs-platform/ugs-platform-ugscore/src/main/java/com/willwinder/ugs/nbp/core/actions/SoftResetAction.java b/ugs-platform/ugs-platform-ugscore/src/main/java/com/willwinder/ugs/nbp/core/actions/SoftResetAction.java index 17fafb5278..021fd6ea61 100644 --- a/ugs-platform/ugs-platform-ugscore/src/main/java/com/willwinder/ugs/nbp/core/actions/SoftResetAction.java +++ b/ugs-platform/ugs-platform-ugscore/src/main/java/com/willwinder/ugs/nbp/core/actions/SoftResetAction.java @@ -21,6 +21,7 @@ This file is part of Universal Gcode Sender (UGS). import com.willwinder.ugs.nbp.lib.lookup.CentralLookup; import com.willwinder.ugs.nbp.lib.services.LocalizingService; +import com.willwinder.universalgcodesender.i18n.Localization; import com.willwinder.universalgcodesender.listeners.ControllerState; import com.willwinder.universalgcodesender.listeners.UGSEventListener; import com.willwinder.universalgcodesender.model.BackendAPI; @@ -66,6 +67,7 @@ public SoftResetAction() { putValue(SMALL_ICON, ImageUtilities.loadImageIcon(ICON_BASE, false)); putValue("menuText", LocalizingService.SoftResetTitle); putValue(NAME, LocalizingService.SoftResetTitle); + putValue(Action.SHORT_DESCRIPTION, Localization.getString("platform.actions.softreset.tooltip")); setEnabled(isEnabled()); } diff --git a/ugs-platform/ugs-platform-ugscore/src/main/java/com/willwinder/ugs/nbp/core/actions/StartAction.java b/ugs-platform/ugs-platform-ugscore/src/main/java/com/willwinder/ugs/nbp/core/actions/StartAction.java index 87e24be638..41df1ef39c 100644 --- a/ugs-platform/ugs-platform-ugscore/src/main/java/com/willwinder/ugs/nbp/core/actions/StartAction.java +++ b/ugs-platform/ugs-platform-ugscore/src/main/java/com/willwinder/ugs/nbp/core/actions/StartAction.java @@ -80,11 +80,11 @@ public void UGSEvent(UGSEvent cse) { @Override public boolean isEnabled() { - return (backend.canSend() && super.isEnabled()) || backend.isPaused(); + return backend.canSend() || backend.isPaused(); } @Override - public void actionPerformed(ActionEvent e) { + public void execute(ActionEvent e) { try { if (backend.isPaused()) { backend.pauseResume(); diff --git a/ugs-platform/ugs-platform-ugscore/src/main/java/com/willwinder/ugs/nbp/core/actions/UnlockAction.java b/ugs-platform/ugs-platform-ugscore/src/main/java/com/willwinder/ugs/nbp/core/actions/UnlockAction.java index 08d0c3c55d..cc1fc2a020 100644 --- a/ugs-platform/ugs-platform-ugscore/src/main/java/com/willwinder/ugs/nbp/core/actions/UnlockAction.java +++ b/ugs-platform/ugs-platform-ugscore/src/main/java/com/willwinder/ugs/nbp/core/actions/UnlockAction.java @@ -21,6 +21,7 @@ This file is part of Universal Gcode Sender (UGS). import com.willwinder.ugs.nbp.lib.lookup.CentralLookup; import com.willwinder.ugs.nbp.lib.services.LocalizingService; +import com.willwinder.universalgcodesender.i18n.Localization; import com.willwinder.universalgcodesender.listeners.ControllerState; import com.willwinder.universalgcodesender.listeners.UGSEventListener; import com.willwinder.universalgcodesender.model.BackendAPI; @@ -34,6 +35,7 @@ This file is part of Universal Gcode Sender (UGS). import org.openide.util.ImageUtilities; import javax.swing.*; +import java.awt.EventQueue; import java.awt.event.ActionEvent; @ActionID( @@ -55,7 +57,7 @@ public final class UnlockAction extends AbstractAction implements UGSEventListen public static final String ICON_BASE = "resources/icons/lock.svg"; - private BackendAPI backend; + private final transient BackendAPI backend; public UnlockAction() { this.backend = CentralLookup.getDefault().lookup(BackendAPI.class); @@ -65,13 +67,14 @@ public UnlockAction() { putValue(SMALL_ICON, ImageUtilities.loadImageIcon(ICON_BASE, false)); putValue("menuText", LocalizingService.UnlockTitle); putValue(NAME, LocalizingService.UnlockTitle); + putValue(Action.SHORT_DESCRIPTION, Localization.getString("platform.actions.unlock.tooltip")); setEnabled(isEnabled()); } @Override public void UGSEvent(UGSEvent cse) { if (cse instanceof ControllerStateEvent) { - java.awt.EventQueue.invokeLater(() -> setEnabled(isEnabled())); + EventQueue.invokeLater(() -> setEnabled(isEnabled())); } } diff --git a/ugs-platform/ugs-platform-ugscore/src/main/resources/resources/MessagesBundle.properties b/ugs-platform/ugs-platform-ugscore/src/main/resources/resources/MessagesBundle.properties index 754b6af4eb..7b1d273550 100644 --- a/ugs-platform/ugs-platform-ugscore/src/main/resources/resources/MessagesBundle.properties +++ b/ugs-platform/ugs-platform-ugscore/src/main/resources/resources/MessagesBundle.properties @@ -4,6 +4,8 @@ platform.menu.reload = Reload platform.menu.toggleUnit = Toggle units platform.window.edit.macros = Edit Macros platform.action.outline = Outline +platform.action.openLogDirectory = Open log directory +platform.action.createShortcut = Create shortcut mainWindow.swing.pauseButton = Pause mainWindow.swing.sendButton = Send mainWindow.swing.stopButton = Stop diff --git a/ugs-platform/ugs-platform-ugscore/src/test/java/com/willwinder/ugs/nbp/core/actions/StartActionTest.java b/ugs-platform/ugs-platform-ugscore/src/test/java/com/willwinder/ugs/nbp/core/actions/StartActionTest.java index 67b8a1aaaa..f48b3cabea 100644 --- a/ugs-platform/ugs-platform-ugscore/src/test/java/com/willwinder/ugs/nbp/core/actions/StartActionTest.java +++ b/ugs-platform/ugs-platform-ugscore/src/test/java/com/willwinder/ugs/nbp/core/actions/StartActionTest.java @@ -7,7 +7,6 @@ import java.beans.PropertyChangeEvent; -import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -32,7 +31,7 @@ public void isEnabledShouldReturnFalseOnUnsavedChanges() { StartAction startAction = new StartAction(backendAPI); startAction.propertyChange(createUnsavedChangesEvent()); - assertFalse(startAction.isEnabled()); + assertTrue(startAction.isEnabled()); } @Test @@ -56,7 +55,6 @@ private PropertyChangeEvent createUnsavedChangesEvent() { Node node = mock(Node.class); SaveCookie saveCookie = mock(SaveCookie.class); when(node.getCookie(SaveCookie.class)).thenReturn(saveCookie); - PropertyChangeEvent event = new PropertyChangeEvent(node, PROP_COOKIE, null, null); - return event; + return new PropertyChangeEvent(node, PROP_COOKIE, null, null); } } diff --git a/ugs-platform/ugs-platform-ugslib/src/main/java/com/willwinder/ugs/nbp/lib/options/package-info.java b/ugs-platform/ugs-platform-ugslib/src/main/java/com/willwinder/ugs/nbp/lib/options/package-info.java index 11a3dc24f9..4c33878e83 100644 --- a/ugs-platform/ugs-platform-ugslib/src/main/java/com/willwinder/ugs/nbp/lib/options/package-info.java +++ b/ugs-platform/ugs-platform-ugslib/src/main/java/com/willwinder/ugs/nbp/lib/options/package-info.java @@ -20,7 +20,7 @@ This file is part of Universal Gcode Sender (UGS). @OptionsPanelController.ContainerRegistration( id = "UGS", categoryName = "UGS", - iconBase = "com/willwinder/ugs/nbp/lib/options/CNC.png", + iconBase = "com/willwinder/ugs/nbp/lib/options/CNC.svg", keywords = "UGS", keywordsCategory = "UGS") package com.willwinder.ugs.nbp.lib.options; diff --git a/ugs-platform/ugs-platform-ugslib/src/main/java/com/willwinder/ugs/nbp/lib/services/LocalizingService.java b/ugs-platform/ugs-platform-ugslib/src/main/java/com/willwinder/ugs/nbp/lib/services/LocalizingService.java index 1d2382d1d1..34927fef89 100644 --- a/ugs-platform/ugs-platform-ugslib/src/main/java/com/willwinder/ugs/nbp/lib/services/LocalizingService.java +++ b/ugs-platform/ugs-platform-ugslib/src/main/java/com/willwinder/ugs/nbp/lib/services/LocalizingService.java @@ -37,6 +37,7 @@ public class LocalizingService { public static final String MENU_WINDOW_CLASSIC = MENU_WINDOW + "/Classic"; public static final String MENU_FILE = "Menu/File"; public static final String MENU_EDIT = "Menu/Edit"; + public static final String MENU_TOOLS = "Menu/Tools"; public static final String MENU_MACHINE = "Menu/Machine"; public static final String MENU_MACHINE_PROBE = "Menu/Machine/Probe"; public static final String MENU_PROGRAM = "Menu/Program"; @@ -53,6 +54,7 @@ public class LocalizingService { public static final String CATEGORY_VISUALIZER = "Visualizer"; public static final String CATEGORY_EDIT = "Edit"; public static final String CATEGORY_DESIGNER = "Designer"; + public static final String CATEGORY_TOOLS = "Tools"; // Initialize backend (locale setting) before we load localized strings. public static final String lang = CentralLookup.getDefault().lookup(BackendAPI.class).getSettings().getLanguage(); diff --git a/ugs-platform/ugs-platform-ugslib/src/main/resources/com/willwinder/ugs/nbp/lib/options/CNC.png b/ugs-platform/ugs-platform-ugslib/src/main/resources/com/willwinder/ugs/nbp/lib/options/CNC.png deleted file mode 100644 index 3ae3a2b53caae6a837a5a433c17292e9cd6d779e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 971 zcmV;+12p`JP)=zL^3!GhCTs#%W z@$3!3JxYoIQ53ywW*-1|tq}VUaKwB6QC|SY#>VbhSXej-?9Yu~1I__IiO3~0dyMvM z>;NS7`Ph4Z;FbVH#Hs2TGt<=mTdUQ2C641CtYnSq^?KB5wLSxO0+`v0)6>&mtp>mW zgkiWpSNzjvvl-6J%zR%~9H7x?{0M}=MF8jA@zoRuaO30SLn4wTm<0|bNpfwaK=1t( zGkXWX%rp$c?W+Qqo15DQJd`Fn;l2MCKvgGH^>i49)v`co>$#;w&V3h#;WHh4T@*#{ z*J`y%RlRK)fQUSmwl9s2j((CGdjl8`g5XG5(kP0m!0w#s;UEYOb?|-E%npmlJ`vfK z9~%Nj)Ap}ZQ&Wq%v32SDaaDb-B=3%*!OR{h^A(Y;x$YgE0DdpTZAgYb8c_9f!_Noz_y&}UGM#y zJp))+z%etM>a{quzk~o^0IvdfkBp2w4}8-D#9ON=oXG*q&(EJG z{Xm#m*UQikIe;Wdu8YXmscoWCsjPG#?3;#i?GJ&Mfc3+}!v{%EEi>Drs;o z@&n6m#i|+uPtrb^w(c&!lX0tg7{57D$neGH$ zF9k@F7%102i)G)V7(Ya|0E{{z#7Bdd&`|Cay&002ovPDHLkV1g*~yp8|> diff --git a/ugs-platform/ugs-platform-ugslib/src/main/resources/com/willwinder/ugs/nbp/lib/options/CNC.svg b/ugs-platform/ugs-platform-ugslib/src/main/resources/com/willwinder/ugs/nbp/lib/options/CNC.svg new file mode 100644 index 0000000000..e99f3808b3 --- /dev/null +++ b/ugs-platform/ugs-platform-ugslib/src/main/resources/com/willwinder/ugs/nbp/lib/options/CNC.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ugs-platform/ugs-platform-visualizer/src/main/java/com/willwinder/ugs/nbm/visualizer/Visualizer2TopComponent.java b/ugs-platform/ugs-platform-visualizer/src/main/java/com/willwinder/ugs/nbm/visualizer/Visualizer2TopComponent.java index 286578728d..560205b566 100644 --- a/ugs-platform/ugs-platform-visualizer/src/main/java/com/willwinder/ugs/nbm/visualizer/Visualizer2TopComponent.java +++ b/ugs-platform/ugs-platform-visualizer/src/main/java/com/willwinder/ugs/nbm/visualizer/Visualizer2TopComponent.java @@ -19,12 +19,15 @@ This file is part of Universal Gcode Sender (UGS). package com.willwinder.ugs.nbm.visualizer; import com.jogamp.opengl.GLCapabilities; +import com.jogamp.opengl.GLException; import com.jogamp.opengl.awt.GLJPanel; import com.jogamp.opengl.util.FPSAnimator; import com.willwinder.ugs.nbm.visualizer.options.VisualizerOptionsPanel; import com.willwinder.ugs.nbm.visualizer.shared.GcodeRenderer; +import com.willwinder.ugs.nbp.core.actions.OpenLogDirectoryAction; import com.willwinder.ugs.nbp.lib.lookup.CentralLookup; import com.willwinder.ugs.nbp.lib.services.LocalizingService; +import static com.willwinder.ugs.nbp.lib.services.LocalizingService.lang; import com.willwinder.ugs.nbp.lib.services.TopComponentLocalizer; import com.willwinder.universalgcodesender.i18n.Localization; import com.willwinder.universalgcodesender.model.BackendAPI; @@ -40,13 +43,13 @@ This file is part of Universal Gcode Sender (UGS). import javax.swing.*; import java.awt.*; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; import java.io.File; import java.util.logging.Level; import java.util.logging.Logger; import java.util.prefs.Preferences; -import static com.willwinder.ugs.nbp.lib.services.LocalizingService.lang; - /** * Setup JOGL canvas, GcodeRenderer and RendererInputHandler. */ @@ -61,28 +64,19 @@ This file is part of Universal Gcode Sender (UGS). preferredID = "VisualizerTopComponent" ) public final class Visualizer2TopComponent extends TopComponent { - private static final Logger logger = Logger.getLogger(Visualizer2TopComponent.class.getName()); - - private GLJPanel panel; - private RendererInputHandler rih; - private final BackendAPI backend; - public final static String VisualizerTitle = Localization.getString("platform.window.visualizer", lang); public final static String VisualizerTooltip = Localization.getString("platform.window.visualizer.tooltip", lang); public final static String VisualizerWindowPath = LocalizingService.MENU_WINDOW; public final static String VisualizerActionId = "com.willwinder.ugs.nbm.visualizer.Visualizer2TopComponent"; public final static String VisualizerCategory = LocalizingService.CATEGORY_WINDOW; - - @OnStart - public static class Localizer extends TopComponentLocalizer { - public Localizer() { - super(VisualizerCategory, VisualizerActionId, VisualizerTitle); - } - } + private static final Logger logger = Logger.getLogger(Visualizer2TopComponent.class.getName()); + private final BackendAPI backend; + private GLJPanel panel; + private RendererInputHandler rih; public Visualizer2TopComponent() { backend = CentralLookup.getDefault().lookup(BackendAPI.class); - + setMinimumSize(new java.awt.Dimension(50, 50)); setPreferredSize(new java.awt.Dimension(200, 200)); setLayout(new java.awt.BorderLayout()); @@ -109,15 +103,30 @@ protected void componentOpened() { removeAll(); add(new VisualizerToolBar(), BorderLayout.NORTH); - panel = makeWindow(); JPanel borderedPanel = new JPanel(); borderedPanel.setLayout(new BorderLayout()); borderedPanel.setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY, 1)); - borderedPanel.add(panel, BorderLayout.CENTER); + borderedPanel.add(initializeVisualizationPanel(), BorderLayout.CENTER); add(borderedPanel, BorderLayout.CENTER); } + private JComponent initializeVisualizationPanel() { + try { + panel = makeWindow(); + return panel; + } catch (GLException exception) { + JLabel errorMessage = new JLabel("Could not initialize OpenGL visualization, please check the log file for details messages.log", JLabel.CENTER); + errorMessage.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + new OpenLogDirectoryAction().actionPerformed(null); + } + }); + return errorMessage; + } + } + @Override protected void componentClosed() { super.componentClosed(); @@ -149,8 +158,8 @@ protected void componentActivated() { } } } - - private GLJPanel makeWindow() { + + private GLJPanel makeWindow() throws GLException { GLCapabilities glCaps = new GLCapabilities(null); final GLJPanel p = new GLJPanel(glCaps); @@ -190,4 +199,11 @@ private GLJPanel makeWindow() { return p; } + + @OnStart + public static class Localizer extends TopComponentLocalizer { + public Localizer() { + super(VisualizerCategory, VisualizerActionId, VisualizerTitle); + } + } }