-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcustom_properties_sizer.py
More file actions
66 lines (51 loc) · 2.36 KB
/
custom_properties_sizer.py
File metadata and controls
66 lines (51 loc) · 2.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import wx
class CustomPropertiesSizer(wx.BoxSizer):
def __init__(self, parent):
super().__init__(wx.VERTICAL)
self.parent = parent
self.properties = {}
# Expand button
self.add_property_button = wx.Button(self.parent, label="Add Property")
self.add_property_button.Bind(wx.EVT_BUTTON, self.add_property)
self.Add(self.add_property_button, 0, wx.EXPAND, 0)
self.remove_property_button = wx.Button(self.parent, label="Remove Property")
self.remove_property_button.Bind(wx.EVT_BUTTON, self.remove_property)
self.Add(self.remove_property_button, 0, wx.EXPAND, 0)
self.property_list = wx.ListCtrl(self.parent, style=wx.LC_REPORT)
self.property_list.InsertColumn(0, "Name")
self.property_list.InsertColumn(1, "Value")
self.Add(self.property_list, 1, wx.EXPAND, 1)
def add_property(self, event):
name = wx.GetTextFromUser("Enter property name", "Add Property", parent=self.parent)
if not name:
return
value = wx.GetTextFromUser("Enter property value", "Add Property", parent=self.parent)
# Try to convert the value to an int or float
try:
if '.' in value:
value = float(value)
else:
value = int(value)
except ValueError:
pass # Keep value as string if conversion fails
index = self.property_list.InsertItem(self.property_list.GetItemCount(), name)
self.property_list.SetItem(index, 1, str(value))
self.properties[name] = value
def reload_properties(self, properties):
self.properties = properties
self.property_list.DeleteAllItems()
for name, value in properties.items():
if name == "type" or name == "color":
continue
index = self.property_list.InsertItem(self.property_list.GetItemCount(), name)
self.property_list.SetItem(index, 1, str(value))
def clear_properties(self, event):
self.properties = {}
self.property_list.DeleteAllItems()
def remove_property(self, event):
focused_item = self.property_list.GetFocusedItem()
if focused_item == -1:
return
name = self.property_list.GetItemText(focused_item)
self.properties.pop(name)
self.property_list.DeleteItem(focused_item)