anatomy widgets propagate child modifications down the hierarchy

This commit is contained in:
iLLiCiTiT 2020-09-08 18:38:52 +02:00
parent d22371d0f5
commit b03687ea05

View file

@ -70,6 +70,7 @@ class AnatomyWidget(QtWidgets.QWidget, ConfigObject):
body_widget.set_content_widget(content_widget) body_widget.set_content_widget(content_widget)
self.body_widget = body_widget
self.label_widget = body_widget.label_widget self.label_widget = body_widget.label_widget
self.root_widget.value_changed.connect(self._on_value_change) self.root_widget.value_changed.connect(self._on_value_change)
@ -122,8 +123,10 @@ class AnatomyWidget(QtWidgets.QWidget, ConfigObject):
child_state = "child-{}".format(child_state) child_state = "child-{}".format(child_state)
if child_state != self._child_state: if child_state != self._child_state:
self.setProperty("state", child_state) self.body_widget.side_line_widget.setProperty("state", child_state)
self.style().polish(self) self.body_widget.side_line_widget.style().polish(
self.body_widget.side_line_widget
)
self._child_state = child_state self._child_state = child_state
def hierarchical_style_update(self): def hierarchical_style_update(self):
@ -239,6 +242,7 @@ class RootsWidget(QtWidgets.QWidget, ConfigObject):
main_layout.setContentsMargins(0, 0, 0, 0) main_layout.setContentsMargins(0, 0, 0, 0)
main_layout.addWidget(body_widget) main_layout.addWidget(body_widget)
self.body_widget = body_widget
self.multiroot_label = multiroot_label self.multiroot_label = multiroot_label
self.multiroot_checkbox = multiroot_checkbox self.multiroot_checkbox = multiroot_checkbox
self.singleroot_widget = singleroot_widget self.singleroot_widget = singleroot_widget
@ -342,8 +346,10 @@ class RootsWidget(QtWidgets.QWidget, ConfigObject):
else: else:
child_state = "" child_state = ""
self.setProperty("state", child_state) self.body_widget.side_line_widget.setProperty("state", child_state)
self.style().polish(self) self.body_widget.side_line_widget.style().polish(
self.body_widget.side_line_widget
)
self.label_widget.setProperty("state", state) self.label_widget.setProperty("state", state)
self.label_widget.style().polish(self.label_widget) self.label_widget.style().polish(self.label_widget)
@ -455,6 +461,8 @@ class TemplatesWidget(QtWidgets.QWidget, ConfigObject):
self._parent = parent self._parent = parent
self._state = None
self._is_group = True self._is_group = True
self.any_parent_is_group = False self.any_parent_is_group = False
self.key = "templates" self.key = "templates"
@ -467,6 +475,7 @@ class TemplatesWidget(QtWidgets.QWidget, ConfigObject):
template_input_data = { template_input_data = {
"key": self.key "key": self.key
} }
self.body_widget = body_widget
self.label_widget = body_widget.label_widget self.label_widget = body_widget.label_widget
self.value_input = RawJsonWidget( self.value_input = RawJsonWidget(
template_input_data, self, template_input_data, self,
@ -481,13 +490,38 @@ class TemplatesWidget(QtWidgets.QWidget, ConfigObject):
layout.addWidget(body_widget) layout.addWidget(body_widget)
def update_global_values(self, values): def update_global_values(self, values):
self._state = None
self.value_input.update_global_values(values) self.value_input.update_global_values(values)
def apply_overrides(self, parent_values): def apply_overrides(self, parent_values):
self._state = None
self.value_input.apply_overrides(parent_values) self.value_input.apply_overrides(parent_values)
def hierarchical_style_update(self): def hierarchical_style_update(self):
self.value_input.hierarchical_style_update() self.value_input.hierarchical_style_update()
self.update_style()
def update_style(self):
state = self.style_state(
self.child_invalid, self.child_overriden, self.child_modified
)
if self._state == state:
return
if state:
child_state = "child-{}".format(state)
else:
child_state = ""
print(child_state)
self.body_widget.side_line_widget.setProperty("state", child_state)
self.body_widget.side_line_widget.style().polish(
self.body_widget.side_line_widget
)
self.label_widget.setProperty("state", state)
self.label_widget.style().polish(self.label_widget)
self._state = state
@property @property
def is_modified(self): def is_modified(self):