diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f028c2e..aef360f5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ - Enhancement: Log connect and manual disconnect with the connection method and address - Enhancement: Add a "Network..." option under Scan Wi-Fi in the connection dropdown to enter a machine network address - Enhancement: Reconnect supports USB as well as WiFi. Configure preferred method for app-launch auto-connect +- Enhancement: added green question mark help buttons to the UI that link to the relevant documentation page - Fixed: Restore Keyboard Jogging state after Probing Popup is closed - Fixed: Repeated firmware checks now happen just once - Fixed: UI widget updates from the SerialMonitor() now dispatched via the main thread. This should reduce the number of RecycleView related crashes @@ -41,13 +42,13 @@ - Fixed: Config download / MD5-match cache path could fail to load settings and block later USB baud upgrade - Fixed: Status and diagnose parsers mishandled trailing newlines in Makera payloads (e.g. RSSI parse warnings) - Fixed: Fresh USB-only connects could immediately show "Connection to machine lost" while the machine was still booting after DTR reset; "Connection to machine lost" is now also logged -- Change: Misleading "Download canceled by Controller!" MDI message is suppressed, in logs a message is recorded that cached version of the config.txt was used - Fixed: Elapsed and remaining job timers now pause while playback is paused +- Change: Misleading "Download canceled by Controller!" MDI message is suppressed, in logs a message is recorded that cached version of the config.txt was used - Change: Remove remaining "Can not load config, Key:" messages from the MDI - Change: Resume playback will now use gcode loaded in the controller instead of cached local file - Change: Upgrade screen now will show the letter "c" at the end of the current firmware version if it's present. This indicates that it's Community firmware - Change: Auto-connect on app launch now is only performed if auto-reconnect is enabled -- Change: Reconnect uses the last successful connection method. On fresh app launch it uses the configured prefered connection method +- Change: Reconnect uses the last successful connection method. On fresh app launch it uses the configured preferred connection method - Change: USB devices in connection dropdown are filtered to only show devices specifically with the FTDI chip found on the Makera machines - Change: USB devices are now selected and stored by stable VID:PID:serial identity (instead of generic COM path) diff --git a/carveracontroller/addons/facing/FacingWizardPopup.kv b/carveracontroller/addons/facing/FacingWizardPopup.kv index 3829df51..0993f6d6 100644 --- a/carveracontroller/addons/facing/FacingWizardPopup.kv +++ b/carveracontroller/addons/facing/FacingWizardPopup.kv @@ -638,3 +638,6 @@ font_size: dp(12) text: tr._('Close') on_release: root.dismiss() + + HelpButton: + helpPath: "https://carvera-community.gitbook.io/docs/controller/features/facing-widget" diff --git a/carveracontroller/addons/probe_scan/ui/ProbeScanPopup.kv b/carveracontroller/addons/probe_scan/ui/ProbeScanPopup.kv index 183653d7..be30d240 100644 --- a/carveracontroller/addons/probe_scan/ui/ProbeScanPopup.kv +++ b/carveracontroller/addons/probe_scan/ui/ProbeScanPopup.kv @@ -999,6 +999,8 @@ text: tr._('Close') size_hint_x: 1 on_release: root.dismiss() + HelpButton: + helpPath: "https://carvera-community.gitbook.io/docs/controller/features/probe_scan" BoxLayout: id: probing_banner diff --git a/carveracontroller/addons/probing/ProbingPopup.kv b/carveracontroller/addons/probing/ProbingPopup.kv index a47ed7a1..ae0a72d4 100644 --- a/carveracontroller/addons/probing/ProbingPopup.kv +++ b/carveracontroller/addons/probing/ProbingPopup.kv @@ -664,17 +664,14 @@ Label: size_hint_min_x: dp(90) padding: '5dp' - halign: 'center' + halign: 'right' valign: 'middle' text_size: self.size multiline: False text: tr._('Note: Most of these operations require a true 3 axis probe, not the manual probe supplied with the Carvera. See the documentation for more info') - Button: - text: "More Info" - size_hint_x: None - width: dp(100) - on_release: root.open_probe_info_url() + HelpButton: + helpPath: "https://carvera-community.gitbook.io/docs/firmware/features/3d-probe-support" BoxLayout: spacing: '5dp' diff --git a/carveracontroller/addons/probing/ProbingPopup.py b/carveracontroller/addons/probing/ProbingPopup.py index 0c93256d..afaafbc7 100644 --- a/carveracontroller/addons/probing/ProbingPopup.py +++ b/carveracontroller/addons/probing/ProbingPopup.py @@ -30,8 +30,6 @@ logger = logging.getLogger(__name__) -import webbrowser - from kivy.app import App @@ -65,9 +63,6 @@ def allows_external_jog(self) -> bool: """Allow keyboard/pendant jog while the probing screen is open.""" return self._is_open - def open_probe_info_url(self): - webbrowser.open("https://carvera-community.gitbook.io/docs/firmware/features/3d-probe-support") - def delayed_bind(self, dt): self.outside_corner_settings = self.ids.outside_corner_settings self.inside_corner_settings = self.ids.inside_corner_settings diff --git a/carveracontroller/addons/probing/operations/Angle/AngleSettings.kv b/carveracontroller/addons/probing/operations/Angle/AngleSettings.kv index e428182c..df9c6234 100644 --- a/carveracontroller/addons/probing/operations/Angle/AngleSettings.kv +++ b/carveracontroller/addons/probing/operations/Angle/AngleSettings.kv @@ -253,4 +253,12 @@ pos: self.pos size: self.size active: root.get_setting('UseProbeNormallyClosed') == "1" - on_active: root.setting_changed('UseProbeNormallyClosed', "1" if self.active else "0") \ No newline at end of file + on_active: root.setting_changed('UseProbeNormallyClosed', "1" if self.active else "0") + BoxLayout: + ProbeSettingLabel: + label_text: 'More Info:' + hint_text: '' + BoxLayout: + size_hint_x: 0.4 + HelpButton: + helpPath: "https://carvera-community.gitbook.io/docs/controller/features/wcs-rotation#clearing-a-rotation" \ No newline at end of file diff --git a/carveracontroller/addons/probing/operations/Calibration/CalibrationSettings.kv b/carveracontroller/addons/probing/operations/Calibration/CalibrationSettings.kv index 529d84ce..83f1a546 100644 --- a/carveracontroller/addons/probing/operations/Calibration/CalibrationSettings.kv +++ b/carveracontroller/addons/probing/operations/Calibration/CalibrationSettings.kv @@ -179,4 +179,12 @@ pos: self.pos size: self.size active: root.get_setting('UseProbeNormallyClosed') == "1" - on_active: root.setting_changed('UseProbeNormallyClosed', "1" if self.active else "0") \ No newline at end of file + on_active: root.setting_changed('UseProbeNormallyClosed', "1" if self.active else "0") + BoxLayout: + ProbeSettingLabel: + label_text: 'More Info:' + hint_text: '' + BoxLayout: + size_hint_x: 0.4 + HelpButton: + helpPath: "https://carvera-community.gitbook.io/docs/firmware/supported-commands/mcodes/self-calibration" \ No newline at end of file diff --git a/carveracontroller/addons/probing/operations/FourthAxis/FourthAxisSettings.kv b/carveracontroller/addons/probing/operations/FourthAxis/FourthAxisSettings.kv index 39dc7c55..74f51d17 100644 --- a/carveracontroller/addons/probing/operations/FourthAxis/FourthAxisSettings.kv +++ b/carveracontroller/addons/probing/operations/FourthAxis/FourthAxisSettings.kv @@ -156,3 +156,12 @@ size: self.size active: root.get_setting('SaveAOffset') == "1" on_active: root.setting_changed('SaveAOffset', "1" if self.active else "0") + BoxLayout: + ProbeSettingLabel: + label_text: 'More Info:' + hint_text: '' + BoxLayout: + size_hint_x: 0.4 + HelpButton: + halign: 'center' + helpPath: "https://carvera-community.gitbook.io/docs/firmware/supported-commands/mcodes/self-calibration" \ No newline at end of file diff --git a/carveracontroller/addons/tooltips/Tooltips.kv b/carveracontroller/addons/tooltips/Tooltips.kv index 8fa35417..c0042bb6 100644 --- a/carveracontroller/addons/tooltips/Tooltips.kv +++ b/carveracontroller/addons/tooltips/Tooltips.kv @@ -80,3 +80,28 @@ Rectangle: size: self.size pos: self.pos + + + id: help_button + orientation: 'vertical' + halign: 'center' + pos_hint: {'center_x': 0.5, 'center_y': 0.5} + size_hint: None, None + height: self.parent.height + width: self.parent.height * 2 + state_image: self.background_normal if self.state == 'normal' else self.background_down + disabled_image: self.background_disabled_normal if self.state == 'normal' else self.background_disabled_down + canvas: + Color: + rgba: 0, 1, 0, 1 + BorderImage: + border: self.border + pos: self.pos + size: self.size + source: self.disabled_image if self.disabled else self.state_image + Image: + id: image + source: root.image_source + fit_mode: 'scale-down' + size_hint: 0.3,0.3 + pos_hint: {'center_x': 0.5, 'center_y': 0.5} \ No newline at end of file diff --git a/carveracontroller/addons/tooltips/Tooltips.py b/carveracontroller/addons/tooltips/Tooltips.py index 91a9a916..e7d5fe5b 100644 --- a/carveracontroller/addons/tooltips/Tooltips.py +++ b/carveracontroller/addons/tooltips/Tooltips.py @@ -1,11 +1,13 @@ import sys +import webbrowser from kivy.app import App from kivy.clock import Clock from kivy.compat import string_types from kivy.core.window import Window from kivy.factory import Factory -from kivy.properties import BooleanProperty, NumericProperty, ObjectProperty, StringProperty +from kivy.properties import BooleanProperty, ListProperty, NumericProperty, ObjectProperty, StringProperty +from kivy.uix.behaviors import ButtonBehavior from kivy.uix.boxlayout import BoxLayout from kivy.uix.button import Button from kivy.uix.dropdown import DropDown @@ -823,3 +825,21 @@ def close_tooltip(self, *args): def display_tooltip(self, *args): Window.add_widget(self._tooltip) + + +class HelpButton(ButtonBehavior, BoxLayout): + image_source = StringProperty("data/open_iconic_UI/oi--question-mark.png") + helpPath = StringProperty("https://carvera-community.gitbook.io/docs") + background_normal = StringProperty("atlas://data/images/defaulttheme/button") + background_down = StringProperty("atlas://data/images/defaulttheme/button_pressed") + background_disabled_normal = StringProperty("atlas://data/images/defaulttheme/button_disabled") + background_disabled_down = StringProperty("atlas://data/images/defaulttheme/button_disabled_pressed") + border = ListProperty([16, 16, 16, 16]) + + def __init__(self, **kwargs): + super().__init__(**kwargs) + self.bind(on_release=self.open_link) + fbind = self.fbind + + def open_link(self, *args): + webbrowser.open(self.helpPath) diff --git a/carveracontroller/makera.kv b/carveracontroller/makera.kv index e0752bfc..a4c67e0e 100644 --- a/carveracontroller/makera.kv +++ b/carveracontroller/makera.kv @@ -514,6 +514,12 @@ on_release: root.select('Third Item') app.root.controller.clearAutoLeveling() + BoxLayout: + size_hint_y: None + height: '48dp' + HelpButton: + helpPath: "https://carvera-community.gitbook.io/docs/controller/features/auto-leveling" + : @@ -1508,6 +1514,12 @@ root.dismiss() if root.unlock_safe_z:\ root.unlock_safe_z() + BoxLayout: + size_hint_x: 0.25 + HelpButton: + size_hint: 1,1 + helpPath: "https://carvera-community.gitbook.io/docs/controller/common-error-messages" + : lb_title: lb_title @@ -1736,6 +1748,7 @@ id: btn_ok text: tr._('Ok') on_release: root.on_ok_pressed() + TabbedPanelItem: text: tr._('Set By XYZ Probe') @@ -3790,6 +3803,7 @@ text: tr._('Macro 3') height: '35dp' on_release: app.root.run_macro(3) + Widget: size_hint_y: 0.15 BoxLayout: @@ -3936,7 +3950,6 @@ text: tr._('Jog Mode:Step') height: '35dp' on_release: app.root.toggle_jog_mode() - GridBoxLayout: ToggleButton: id: kb_jog_btn @@ -3944,7 +3957,6 @@ height: '35dp' state: app.jog_keyboard_enable on_release: app.root.toggle_keyboard_jog_control() - GridBoxLayout: ToggleButton: id: pendant_jogging_en_btn @@ -5444,6 +5456,11 @@ on_release: root.apply_changes() root.dismiss() + BoxLayout: + size_hint_x: 0.2 + HelpButton: + helpPath: "https://carvera-community.gitbook.io/docs/controller/features/workspace-management" + : size_hint: 0.5, 0.4 @@ -5506,6 +5523,11 @@ text: tr._('Ok') on_release: on_release: root.on_ok_pressed() + BoxLayout: + size_hint_x: 0.2 + HelpButton: + helpPath: "https://carvera-community.gitbook.io/docs/controller/features/wcs-rotation" + # Solid disabled look (no faded theme atlas / no ghost text): mute bg + text vs enabled row. :