better overridable control

This commit is contained in:
iLLiCiTiT 2020-07-28 17:28:14 +02:00
parent d234181f93
commit 57a040fadb
2 changed files with 128 additions and 71 deletions

View file

@ -50,6 +50,7 @@ class StudioWidget(QtWidgets.QWidget, PypeConfigurationWidget):
"config_gui_schema"
)
is_overidable = False
is_overriden = False
is_group = False
any_parent_is_group = False
@ -257,13 +258,14 @@ class ProjectWidget(QtWidgets.QWidget, PypeConfigurationWidget):
os.path.dirname(os.path.dirname(__file__)),
"config_gui_schema"
)
is_overidable = True
is_overriden = False
is_group = False
any_parent_is_group = False
def __init__(self, parent=None):
super(ProjectWidget, self).__init__(parent)
self.is_overidable = True
self.input_fields = []
scroll_widget = QtWidgets.QScrollArea(self)

View file

@ -41,7 +41,7 @@ class BooleanWidget(QtWidgets.QWidget, PypeConfigurationWidget):
self.is_group = is_group
self.is_modified = False
self.is_overriden = False
self._is_overriden = False
super(BooleanWidget, self).__init__(parent)
@ -92,26 +92,33 @@ class BooleanWidget(QtWidgets.QWidget, PypeConfigurationWidget):
@property
def child_overriden(self):
return self.is_overriden
return self._is_overriden
@property
def is_overidable(self):
return self._parent.is_overidable
@property
def is_overriden(self):
if self._is_overriden:
return self._is_overriden
return self._parent.is_overriden
def _on_value_change(self, value=None):
self.is_modified = self.item_value() != self.origin_value
self.is_overriden = True
if self.is_overidable:
self._is_overriden = True
self._update_style()
self.value_changed.emit()
def _update_style(self):
if self.is_overidable and self.is_overriden:
if self.is_modified:
state = "overriden-modified"
else:
state = "overriden"
is_overriden = self.is_overriden
if is_overriden and self.is_modified:
state = "overriden-modified"
elif is_overriden:
state = "overriden"
elif self.is_modified:
state = "modified"
else:
@ -154,7 +161,7 @@ class IntegerWidget(QtWidgets.QWidget, PypeConfigurationWidget):
self.is_group = is_group
self.is_modified = False
self.is_overriden = False
self._is_overriden = False
super(IntegerWidget, self).__init__(parent)
@ -192,12 +199,18 @@ class IntegerWidget(QtWidgets.QWidget, PypeConfigurationWidget):
@property
def child_overriden(self):
return self.is_overriden
return self._is_overriden
@property
def is_overidable(self):
return self._parent.is_overidable
@property
def is_overriden(self):
if self._is_overriden:
return self._is_overriden
return self._parent.is_overriden
def set_value(self, value, origin_value=False):
self.int_input.setValue(value)
if origin_value:
@ -212,18 +225,19 @@ class IntegerWidget(QtWidgets.QWidget, PypeConfigurationWidget):
def _on_value_change(self, value=None):
self.is_modified = self.item_value() != self.origin_value
self.is_overriden = True
if self.is_overidable:
self._is_overriden = True
self._update_style()
self.value_changed.emit()
def _update_style(self):
if self.is_overidable and self.is_overriden:
if self.is_modified:
state = "overriden-modified"
else:
state = "overriden"
is_overriden = self.is_overriden
if is_overriden and self.is_modified:
state = "overriden-modified"
elif is_overriden:
state = "overriden"
elif self.is_modified:
state = "modified"
else:
@ -268,7 +282,7 @@ class FloatWidget(QtWidgets.QWidget, PypeConfigurationWidget):
self.is_group = is_group
self.is_modified = False
self.is_overriden = False
self._is_overriden = False
super(FloatWidget, self).__init__(parent)
@ -316,12 +330,18 @@ class FloatWidget(QtWidgets.QWidget, PypeConfigurationWidget):
@property
def child_overriden(self):
return self.is_overriden
return self._is_overriden
@property
def is_overidable(self):
return self._parent.is_overidable
@property
def is_overriden(self):
if self._is_overriden:
return self._is_overriden
return self._parent.is_overriden
def set_value(self, value, origin_value=False):
self.float_input.setValue(value)
if origin_value:
@ -336,18 +356,19 @@ class FloatWidget(QtWidgets.QWidget, PypeConfigurationWidget):
def _on_value_change(self, value=None):
self.is_modified = self.item_value() != self.origin_value
self.is_overriden = True
if self.is_overidable:
self._is_overriden = True
self._update_style()
self.value_changed.emit()
def _update_style(self):
if self.is_overidable and self.is_overriden:
if self.is_modified:
state = "overriden-modified"
else:
state = "overriden"
is_overriden = self.is_overriden
if is_overriden and self.is_modified:
state = "overriden-modified"
elif is_overriden:
state = "overriden"
elif self.is_modified:
state = "modified"
else:
@ -392,7 +413,7 @@ class TextSingleLineWidget(QtWidgets.QWidget, PypeConfigurationWidget):
self.is_group = is_group
self.is_modified = False
self.is_overriden = False
self._is_overriden = False
super(TextSingleLineWidget, self).__init__(parent)
@ -430,12 +451,18 @@ class TextSingleLineWidget(QtWidgets.QWidget, PypeConfigurationWidget):
@property
def child_overriden(self):
return self.is_overriden
return self._is_overriden
@property
def is_overidable(self):
return self._parent.is_overidable
@property
def is_overriden(self):
if self._is_overriden:
return self._is_overriden
return self._parent.is_overriden
def set_value(self, value, origin_value=False):
self.text_input.setText(value)
if origin_value:
@ -450,18 +477,19 @@ class TextSingleLineWidget(QtWidgets.QWidget, PypeConfigurationWidget):
def _on_value_change(self, value=None):
self.is_modified = self.item_value() != self.origin_value
self.is_overriden = True
if self.is_overidable:
self._is_overriden = True
self._update_style()
self.value_changed.emit()
def _update_style(self):
if self.is_overidable and self.is_overriden:
if self.is_modified:
state = "overriden-modified"
else:
state = "overriden"
is_overriden = self.is_overriden
if is_overriden and self.is_modified:
state = "overriden-modified"
elif is_overriden:
state = "overriden"
elif self.is_modified:
state = "modified"
else:
@ -505,7 +533,7 @@ class TextMultiLineWidget(QtWidgets.QWidget, PypeConfigurationWidget):
self.is_group = is_group
self.is_modified = False
self.is_overriden = False
self._is_overriden = False
super(TextMultiLineWidget, self).__init__(parent)
@ -541,12 +569,18 @@ class TextMultiLineWidget(QtWidgets.QWidget, PypeConfigurationWidget):
@property
def child_overriden(self):
return self.is_overriden
return self._is_overriden
@property
def is_overidable(self):
return self._parent.is_overidable
@property
def is_overriden(self):
if self._is_overriden:
return self._is_overriden
return self._parent.is_overriden
def set_value(self, value, origin_value=False):
self.text_input.setPlainText(value)
if origin_value:
@ -561,18 +595,19 @@ class TextMultiLineWidget(QtWidgets.QWidget, PypeConfigurationWidget):
def _on_value_change(self, value=None):
self.is_modified = self.item_value() != self.origin_value
self.is_overriden = True
if self.is_overidable:
self._is_overriden = True
self._update_style()
self.value_changed.emit()
def _update_style(self):
if self.is_overidable and self.is_overriden:
if self.is_modified:
state = "overriden-modified"
else:
state = "overriden"
is_overriden = self.is_overriden
if is_overriden and self.is_modified:
state = "overriden-modified"
elif is_overriden:
state = "overriden"
elif self.is_modified:
state = "modified"
else:
@ -770,9 +805,12 @@ class TextListWidget(QtWidgets.QWidget, PypeConfigurationWidget):
if is_group and any_parent_is_group:
raise SchemeGroupHierarchyBug()
if not any_parent_is_group and not is_group:
is_group = True
self.is_modified = False
self.is_group = is_group
self.is_overriden = False
self._is_overriden = False
super(TextListWidget, self).__init__(parent)
self.setObjectName("TextListWidget")
@ -810,16 +848,22 @@ class TextListWidget(QtWidgets.QWidget, PypeConfigurationWidget):
@property
def child_overriden(self):
return self.is_overriden
return self._is_overriden
@property
def is_overidable(self):
return self._parent.is_overidable
@property
def is_overriden(self):
if self._is_overriden:
return self._is_overriden
return self._parent.is_overriden
def _on_value_change(self, value=None):
self.is_modified = self.item_value() != self.origin_value
if self.is_group and self.is_overidable:
self.is_overriden = True
if self.is_overidable:
self._is_overriden = True
self._update_style()
@ -838,11 +882,11 @@ class TextListWidget(QtWidgets.QWidget, PypeConfigurationWidget):
self.set_value([])
def _update_style(self):
if self.is_overidable and self.is_overriden:
if self.is_modified:
state = "overriden-modified"
else:
state = "overriden"
is_overriden = self.is_overriden
if is_overriden and self.is_modified:
state = "overriden-modified"
elif is_overriden:
state = "overriden"
elif self.is_modified:
state = "modified"
else:
@ -969,7 +1013,7 @@ class DictExpandWidget(QtWidgets.QWidget, PypeConfigurationWidget):
return self._parent.is_overriden
def _on_value_change(self, value=None):
if self.is_group:
if self.is_group and self.is_overidable:
self._is_overriden = True
self.value_changed.emit()
@ -992,13 +1036,10 @@ class DictExpandWidget(QtWidgets.QWidget, PypeConfigurationWidget):
self.setProperty("state", widget_state)
self.style().polish(self)
if self.is_overidable and self.is_overriden:
if self.is_modified:
state = "overriden-modified"
else:
state = "overriden"
elif self.is_modified:
state = "modified"
if child_modified and self.is_overriden:
state = "overriden-modified"
elif self.is_overriden:
state = "overriden"
else:
state = "original"
@ -1065,7 +1106,6 @@ class DictInvisible(QtWidgets.QWidget, PypeConfigurationWidget):
self.any_parent_is_group = any_parent_is_group
self.is_modified = False
self.is_overriden = False
self.is_group = is_group
super(DictInvisible, self).__init__(parent)
@ -1089,6 +1129,10 @@ class DictInvisible(QtWidgets.QWidget, PypeConfigurationWidget):
for child_data in input_data.get("children", []):
self.add_children_gui(child_data, values)
@property
def is_overriden(self):
return self._parent.is_overriden
@property
def is_overidable(self):
return self._parent.is_overidable
@ -1184,7 +1228,7 @@ class DictFormWidget(QtWidgets.QWidget):
@property
def child_overriden(self):
for input_field in self.input_fields:
for input_field in self.input_fields.values():
if input_field.child_overriden:
return True
return False
@ -1283,6 +1327,10 @@ class ModifiableDictItem(QtWidgets.QWidget, PypeConfigurationWidget):
def is_overidable(self):
return self._parent.is_overidable
@property
def is_overriden(self):
return self._parent.is_overriden
def is_key_modified(self):
return self._key() != self.origin_key
@ -1364,6 +1412,10 @@ class ModifiableDictSubWidget(QtWidgets.QWidget, PypeConfigurationWidget):
def is_overidable(self):
return self._parent.is_overidable
@property
def is_overriden(self):
return self._parent.is_overriden
@property
def is_group(self):
return self._parent.is_group
@ -1455,7 +1507,7 @@ class ModifiableDict(ExpandingWidget, PypeConfigurationWidget):
self.is_modified = False
self.child_modified = False
self.is_overriden = False
self._is_overriden = False
self.is_group = is_group
super(ModifiableDict, self).__init__(input_data["label"], parent)
@ -1475,19 +1527,25 @@ class ModifiableDict(ExpandingWidget, PypeConfigurationWidget):
def _on_value_change(self, value=None):
self.child_modified = self.item_value() != self.origin_value
if self.is_group:
self.is_overriden = True
if self.is_group and self.is_overidable:
self._is_overriden = True
self._update_style()
@property
def child_overriden(self):
return self.is_overriden
return self._is_overriden
@property
def is_overidable(self):
return self._parent.is_overidable
@property
def is_overriden(self):
if self._is_overriden:
return self._is_overriden
return self._parent.is_overriden
def _update_style(self):
child_modified = self.child_modified
child_overriden = self.child_overriden
@ -1504,13 +1562,10 @@ class ModifiableDict(ExpandingWidget, PypeConfigurationWidget):
self.setProperty("state", widget_state)
self.style().polish(self)
if self.is_overidable and self.is_overriden:
if self.is_modified:
state = "overriden-modified"
else:
state = "overriden"
elif self.is_modified:
state = "modified"
if child_modified and self.is_overriden:
state = "overriden-modified"
elif self.is_overriden:
state = "overriden"
else:
state = "original"