-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathPrintLogSettingsVisibilityHandler.py
51 lines (39 loc) · 1.87 KB
/
PrintLogSettingsVisibilityHandler.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
from UM.Settings.Models.SettingVisibilityHandler import SettingVisibilityHandler
from UM.Application import Application
from UM.FlameProfiler import pyqtSlot
class PrintLogSettingsVisibilityHandler(SettingVisibilityHandler):
'''Create a custom visibility handler so we can hide/show settings in the dialogs.'''
def __init__(self, parent=None, *args, **kwargs):
super().__init__(parent=parent, *args, **kwargs)
self._preferences = Application.getInstance().getPreferences()
self._preferences.preferenceChanged.connect(self._onPreferencesChanged)
self._onPreferencesChanged("3d_print_log/logged_settings")
self.visibilityChanged.connect(self._updatePreference)
def _onPreferencesChanged(self, name: str) -> None:
if name != "3d_print_log/logged_settings":
return
visibility_string = self._preferences.getValue(
"3d_print_log/logged_settings")
if not visibility_string:
self._preferences.resetPreference(
"3d_print_log/logged_settings")
return
material_settings = set(visibility_string.split(";"))
if material_settings != self.getVisible():
self.setVisible(material_settings)
def _updatePreference(self) -> None:
visibility_string = ";".join(self.getVisible())
self._preferences.setValue(
"3d_print_log/logged_settings", visibility_string)
# Set a single SettingDefinition's visible state
@pyqtSlot(str, bool)
def setSettingVisibility(self, key: str, visible: bool) -> None:
visible_settings = self.getVisible()
if visible:
visible_settings.add(key)
else:
try:
visible_settings.remove(key)
except KeyError:
pass
self.setVisible(visible_settings)