diff --git a/examples/example2/main.py b/examples/example2/main.py index 0eccfc7693cfca2a4a44372979d44e45bc9e5531..907ec724144ef4bedd24d26040ce70dafaf13133 100644 --- a/examples/example2/main.py +++ b/examples/example2/main.py @@ -7,6 +7,8 @@ from PySide6.QtCore import Signal, QObject from PySide6.QtWidgets import QApplication, QMainWindow, QWidget, QTreeWidget from rich.logging import RichHandler +sys.path.append('../../src') +import confighandler from ApplicationConfig import ApplicationConfig class TestClass(QObject): @@ -56,10 +58,8 @@ if __name__ == "__main__": #grd.addWidget(config.view.widget(), 1, 0) tree = QTreeWidget() - - - tree.setColumnCount(3) - tree.setHeaderLabels(["Name", "Type", "asdf"]) + #tree.setColumnCount(3) + tree.setHeaderLabels(confighandler.tree_view_header()) tree.addTopLevelItem(config.view.ui_tree_widget_item(tree, max_level=1)) grd.addWidget(tree, 2, 0) diff --git a/src/confighandler/__init__.py b/src/confighandler/__init__.py index d75e4036400f4b8acb96cb198e242d782ada56d3..b7d25573720615d3ac7832e0489db22e041969f5 100644 --- a/src/confighandler/__init__.py +++ b/src/confighandler/__init__.py @@ -3,7 +3,9 @@ import sys sys.path.append(os.path.join(os.path.dirname(__file__), '../')) from .controller.Field import Field +from .controller.Field import T from .controller.ConfigNode import ConfigNode +from .view.ConfigView import ConfigView from .view.FieldView import FieldView @@ -13,4 +15,7 @@ from .controller.SelectableList import SelectableList from .controller.fields.FieldSelectableList import FieldSelectableList from .view.fields.FieldViewSelectableList import FieldViewSelectableList +# define a tree view header +def tree_view_header(): + return ["Name", "Value", "Description", "Type"] diff --git a/src/confighandler/controller/ConfigNode.py b/src/confighandler/controller/ConfigNode.py index 26100ae902b6f93b164a8f1aceaa2e531bd35c8b..e0601834cdae184a2d9bc3d99377941e58bb1fc8 100644 --- a/src/confighandler/controller/ConfigNode.py +++ b/src/confighandler/controller/ConfigNode.py @@ -13,10 +13,11 @@ import pathlib import yaml +import confighandler from .CObject import CObject from .CSignal import CSignal from .Field import Field -from ..view.ConfigView import ConfigView +#from ..view.ConfigView import ConfigView class ConfigNode(CObject): @@ -29,6 +30,7 @@ class ConfigNode(CObject): self._autosave = False self.name = self.__class__.__name__ + self.config_file: pathlib.Path = pathlib.Path(f"./{self.name}.yaml") @@ -37,7 +39,7 @@ class ConfigNode(CObject): self.owner = None self._level = 0 - self.view = ConfigView(self) + self.view = confighandler.ConfigView(self) self.fields = {} self.configs = {} @@ -155,6 +157,11 @@ class ConfigNode(CObject): def level(self): return self._level + @property + def autosave_enable(self): + return self._autosave + + # ================================================================================================================== # Registering the fields and configs # ================================================================================================================== diff --git a/src/confighandler/controller/Field.py b/src/confighandler/controller/Field.py index a2ae326239f3a6ec3ea10be0db2c85c72da425d6..f66c402b9000f9da0b095c40dcabc3e0ae6a8ce0 100644 --- a/src/confighandler/controller/Field.py +++ b/src/confighandler/controller/Field.py @@ -17,12 +17,13 @@ from PySide6.QtWidgets import QApplication import confighandler from confighandler.controller.CObject import CObject from confighandler.controller.CSignal import CSignal -from confighandler.view.FieldView import FieldView +#from confighandler.view.FieldView import FieldView class FieldData(object): def __init__(self, name: str, value, friendly_name: str, description: str): self.name = name + self._friendly_name = "Not Set or field not registered" self.value = [value, friendly_name, description] @@ -59,7 +60,7 @@ class Field(Generic[T], CObject): @abstractmethod def create_view(self): - return FieldView(self) + return confighandler.FieldView(self) def __new__(cls, value, friendly_name: str = None, description: str = None): # print(f"Field {cls.__name__} created with value {value} of type {type(value)} -> {isinstance(value, int)}") diff --git a/src/confighandler/view/ConfigView.py b/src/confighandler/view/ConfigView.py index 01e3257d48766e3d67c411de8a17c1b154a7f585..42a6cb3f9d1a728f4af7f6f8d36a088020433a5b 100644 --- a/src/confighandler/view/ConfigView.py +++ b/src/confighandler/view/ConfigView.py @@ -16,7 +16,7 @@ import confighandler class ConfigView(QObject): keywords_changed = Signal(dict) - def __init__(self, parent): + def __init__(self, parent: confighandler.ConfigNode): super().__init__() self.parent = parent self.keywords = {} @@ -32,7 +32,7 @@ class ConfigView(QObject): def ui_tree_widget_item(self, tree_widget, max_level=1): top_item = QtWidgets.QTreeWidgetItem() - top_item.setText(0, f"{self.__class__.__name__}") + top_item.setText(0, f"{self.parent.name}") for attr, val in self.parent.fields.items(): item, le = val.view.ui_tree_widget_item() @@ -44,8 +44,40 @@ class ConfigView(QObject): if val.level <= max_level: top_item.addChild(val.view.ui_tree_widget_item(tree_widget)) + # Create + if self.parent.level == 0: + top_item.addChild(self._autosave_widget()) + return top_item + def _autosave_widget(self): + """ + Creates a widget for the autosave option. + :return: + """ + widget = QtWidgets.QTreeWidgetItem() + #layout = QtWidgets.QHBoxLayout() + #widget.setLayout(layout) + + #lbl = QLabel("Autosave") + #layout.addWidget(lbl) + + cbx = QtWidgets.QCheckBox() + #cbx.setChecked(self.parent._autosave) + #cbx.stateChanged.connect(self.parent._on_autosave_changed) + widget.setText(0, f"Config Settings") + widget.addChild( + QtWidgets.QTreeWidgetItem( + ["File:", str(self.parent.config_file), None, None], + ) + ) + widget.addChild( + QtWidgets.QTreeWidgetItem( + ["Autosave:", str(self.parent.autosave_enable), None, None], + ) + ) + return widget + def _create_config_layout(self, max_level): """ Creates a pyside 6 layout based on the fields of the class.""" grd_layout = QtWidgets.QGridLayout() diff --git a/src/confighandler/view/FieldView.py b/src/confighandler/view/FieldView.py index 1c79611f5404df363a0ebc07a82182abd29e617c..fa0c1cd6b9b47019eef8cc266047ca96e79c794e 100644 --- a/src/confighandler/view/FieldView.py +++ b/src/confighandler/view/FieldView.py @@ -5,19 +5,19 @@ Created: 2023-10-19 12:35 Package Version: 0.0.1 Description: """ - - +from typing import TypeVar from PySide6.QtCore import Signal from PySide6.QtWidgets import QWidget, QTreeWidgetItem, QMessageBox -import confighandler.controller.Field as Field +import confighandler +#import confighandler.controller.Field as Field class FieldView(QWidget): - value_changed = Signal(Field.T) + value_changed = Signal(confighandler.T) - def __init__(self, parent_field): + def __init__(self, parent_field: confighandler.Field): super().__init__() self.parent_field = parent_field @@ -29,7 +29,7 @@ class FieldView(QWidget): self.value_changed.connect(self._on_value_changed) #self.setToolTip(parent_field._description) - if isinstance(Field.T, str): + if isinstance(confighandler.T, str): print(">>> String") def _on_value_changed(self, value): @@ -63,7 +63,7 @@ class FieldView(QWidget): def ui_tree_widget_item(self): """Returns a QItem for the QTreeView""" item = self.ui_field() - tree_view_item = QTreeWidgetItem([self.parent_field.name, None, self.parent_field.description]) + tree_view_item = QTreeWidgetItem([self.parent_field.field_name, None, self.parent_field.description, self.parent_field.name]) # tree_view_item = QTreeWidgetItem([self.ui_field()]) self.tree_items.append(tree_view_item) # tree_view_item.set