base widgets moved to base.py

This commit is contained in:
iLLiCiTiT 2021-01-27 18:45:10 +01:00
parent e8d629b736
commit 7896113e5a
2 changed files with 94 additions and 91 deletions

View file

@ -0,0 +1,94 @@
from Qt import QtWidgets
class BaseWidget(QtWidgets.QWidget):
def __init__(self, entity, entity_widget):
self.entity = entity
self.entity_widget = entity_widget
self.ignore_input_changes = entity_widget.ignore_input_changes
self._style_state = None
super(BaseWidget, self).__init__(entity_widget.content_widget)
self.entity.on_change_callbacks.append(self._on_entity_change)
self.label_widget = None
self.create_ui()
@staticmethod
def get_style_state(
is_invalid, is_modified, has_project_override, has_studio_override
):
"""Return stylesheet state by intered booleans."""
if is_invalid:
return "invalid"
if is_modified:
return "modified"
if has_project_override:
return "overriden"
if has_studio_override:
return "studio"
return ""
def show_actions_menu(self, event):
print("Show actions for {}".format(self.entity.path))
class InputWidget(BaseWidget):
def update_style(self):
state = self.get_style_state(
self.entity.is_invalid,
self.entity.has_unsaved_changes,
self.entity.has_project_override,
self.entity.has_studio_override
)
if self._style_state == state:
return
self._style_state = state
self.input_field.setProperty("input-state", state)
self.input_field.style().polish(self.input_field)
if self.label_widget:
self.label_widget.setProperty("state", state)
self.label_widget.style().polish(self.label_widget)
class GUIWidget(BaseWidget):
separator_height = 2
def create_ui(self):
entity_type = self.entity["type"]
if entity_type == "label":
self._create_label_ui()
elif entity_type in ("separator", "splitter"):
self._create_separator_ui()
else:
raise KeyError("Unknown GUI type {}".format(entity_type))
self.entity_widget.add_widget_to_layout(self)
def _create_label_ui(self):
self.setObjectName("LabelWidget")
label = self.entity["label"]
label_widget = QtWidgets.QLabel(label, self)
layout = QtWidgets.QHBoxLayout(self)
layout.setContentsMargins(0, 5, 0, 5)
layout.addWidget(label_widget)
def _create_separator_ui(self):
splitter_item = QtWidgets.QWidget(self)
splitter_item.setObjectName("SplitterItem")
splitter_item.setMinimumHeight(self.separator_height)
splitter_item.setMaximumHeight(self.separator_height)
layout = QtWidgets.QHBoxLayout(self)
layout.setContentsMargins(5, 5, 5, 5)
layout.addWidget(splitter_item)
def _on_entity_change(self):
pass

View file

@ -31,97 +31,6 @@ from .lib import CHILD_OFFSET
BTN_FIXED_SIZE = 20
class BaseWidget(QtWidgets.QWidget):
def __init__(self, entity, entity_widget):
self.entity = entity
self.entity_widget = entity_widget
self.ignore_input_changes = entity_widget.ignore_input_changes
self._style_state = None
super(BaseWidget, self).__init__(entity_widget.content_widget)
self.entity.on_change_callbacks.append(self._on_entity_change)
self.label_widget = None
self.create_ui()
@staticmethod
def get_style_state(
is_invalid, is_modified, has_project_override, has_studio_override
):
"""Return stylesheet state by intered booleans."""
if is_invalid:
return "invalid"
if is_modified:
return "modified"
if has_project_override:
return "overriden"
if has_studio_override:
return "studio"
return ""
def show_actions_menu(self, event):
print("Show actions for {}".format(self.entity.path))
class InputWidget(BaseWidget):
def update_style(self):
state = self.get_style_state(
self.entity.is_invalid,
self.entity.has_unsaved_changes,
self.entity.has_project_override,
self.entity.has_studio_override
)
if self._style_state == state:
return
self._style_state = state
self.input_field.setProperty("input-state", state)
self.input_field.style().polish(self.input_field)
if self.label_widget:
self.label_widget.setProperty("state", state)
self.label_widget.style().polish(self.label_widget)
class GUIWidget(BaseWidget):
separator_height = 2
def create_ui(self):
entity_type = self.entity["type"]
if entity_type == "label":
self._create_label_ui()
elif entity_type in ("separator", "splitter"):
self._create_separator_ui()
else:
raise KeyError("Unknown GUI type {}".format(entity_type))
self.entity_widget.add_widget_to_layout(self)
def _create_label_ui(self):
self.setObjectName("LabelWidget")
label = self.entity["label"]
label_widget = QtWidgets.QLabel(label, self)
layout = QtWidgets.QHBoxLayout(self)
layout.setContentsMargins(0, 5, 0, 5)
layout.addWidget(label_widget)
def _create_separator_ui(self):
splitter_item = QtWidgets.QWidget(self)
splitter_item.setObjectName("SplitterItem")
splitter_item.setMinimumHeight(self.separator_height)
splitter_item.setMaximumHeight(self.separator_height)
layout = QtWidgets.QHBoxLayout(self)
layout.setContentsMargins(5, 5, 5, 5)
layout.addWidget(splitter_item)
def _on_entity_change(self):
pass
class DictImmutableKeysWidget(BaseWidget):