Skip to content

Commit

Permalink
fix settings form
Browse files Browse the repository at this point in the history
  • Loading branch information
tomvanmele committed Sep 6, 2024
1 parent dfb3049 commit 81f8ded
Showing 1 changed file with 32 additions and 9 deletions.
41 changes: 32 additions & 9 deletions src/compas_rui/forms/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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):
Expand All @@ -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

Expand All @@ -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)

Expand All @@ -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()

0 comments on commit 81f8ded

Please sign in to comment.