From 81f8dedb76089d1730830f0052f97774f2395add Mon Sep 17 00:00:00 2001 From: tomvanmele Date: Fri, 6 Sep 2024 23:10:15 +0200 Subject: [PATCH] fix settings form --- src/compas_rui/forms/settings.py | 41 +++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 9 deletions(-) diff --git a/src/compas_rui/forms/settings.py b/src/compas_rui/forms/settings.py index 9abf416..1f36c00 100644 --- a/src/compas_rui/forms/settings.py +++ b/src/compas_rui/forms/settings.py @@ -88,6 +88,8 @@ def on_value_changed(sender, e): class SettingsForm(Eto.Forms.Dialog[bool]): def __init__(self, settings, title="Settings", width=500, height=500, use_tab=False): + super().__init__() + self._names = None self._values = None self.settings = settings @@ -114,7 +116,8 @@ def __init__(self, settings, title="Settings", width=500, height=500, use_tab=Fa if not isinstance(settings, Settings): raise ValueError("Settings must be a dictionary of compas_ui.values.Settings objects.") - tab = Eto.Forms.TabPage(Text=key) + tab = Eto.Forms.TabPage() + tab.Text = key control.Pages.Add(tab) table = self.map_tree(settings) tab.Content = self.tables[key] = table @@ -139,20 +142,21 @@ def map_tree(self, settings): table = Eto.Forms.TreeGridView() treecollection = Eto.Forms.TreeGridItemCollection() table.ShowHeader = True + column = Eto.Forms.GridColumn() column.HeaderText = "Key" column.Editable = False column.Sortable = True column.Expand = True - column.DataCell = Eto.Forms.TextBoxCell(table.Columns.Count) + column.DataCell = Eto.Forms.TextBoxCell(0) table.Columns.Add(column) column = Eto.Forms.GridColumn() column.HeaderText = "Value" column.Editable = True column.Sortable = False + column.DataCell = Eto.Forms.TextBoxCell(0) column.DataCell = CustomCell() - table.Columns.Add(column) def add_items(parent, items): @@ -161,25 +165,30 @@ def add_items(parent, items): for key in keys: value = items[key] if isinstance(value, Value): - item = Eto.Forms.TreeGridItem(Values=(key, value.value, value)) + item = Eto.Forms.TreeGridItem() + item.Values = (key, value.value, value) elif isinstance(value, dict): - item = Eto.Forms.TreeGridItem(Values=(key, None, None)) + item = Eto.Forms.TreeGridItem() + item.Values = (key, None, None) add_items(item.Children, value) parent.Add(item) add_items(treecollection, settings.grouped_items) + table.DataStore = treecollection return table @property def ok(self): - self.DefaultButton = Eto.Forms.Button(Text="OK") + self.DefaultButton = Eto.Forms.Button() + self.DefaultButton.Text = "OK" self.DefaultButton.Click += self.on_ok return self.DefaultButton @property def cancel(self): - self.AbortButton = Eto.Forms.Button(Text="Cancel") + self.AbortButton = Eto.Forms.Button() + self.AbortButton.Text = "Cancel" self.AbortButton.Click += self.on_cancel return self.AbortButton @@ -205,15 +214,16 @@ def set_value(items, setting): set_value(item.Children, setting[key]) if not self.use_tab: - set_value(self.table.DataStore, self.settings.grouped_items) + set_value(self.table.DataStore.Items, self.settings.grouped_items) else: for key in self.settings: - set_value(self.tables[key].DataStore, self.settings[key].grouped_items) + set_value(self.tables[key].DataStore.Items, self.settings[key].grouped_items) except Exception as e: traceback.print_exc() print("ERROR:", e) self.Close(False) + print("OK") self.Close(True) @@ -222,3 +232,16 @@ def on_cancel(self, sender, event): def show(self): return self.ShowModal(Rhino.UI.RhinoEtoApp.MainWindow) + + +if __name__ == "__main__": + from compas_rui.values import BoolValue + from compas_rui.values import ColorValue + from compas_rui.values import Settings + + settings = { + "Session": Settings({"session.A": BoolValue(True), "tna.B": ColorValue(Color.red())}), + } + + form = SettingsForm(settings, use_tab=True) + form.show()