Skip to content

Commit 9a8ce80

Browse files
committed
Add general and vscore layer pages - WIP
1 parent 54a2f7d commit 9a8ce80

File tree

5 files changed

+789
-737
lines changed

5 files changed

+789
-737
lines changed

SparkFunKiCadPanelizer/dialog/dialog.py

Lines changed: 89 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,19 @@ def ParseFloat(InputString, DefaultValue=0.0):
4040
print("Value not valid")
4141
return value
4242

43-
class Dialog(dialog_text_base.DIALOG_TEXT_BASE):
43+
class Dialog(dialog_text_base.DialogPanelBase):
44+
def __init__(self, parent, config, layertable, ordering, panelizer, func):
45+
dialog_text_base.DialogPanelBase.__init__(self, None)
4446

47+
self.SetTitle(_APP_NAME + " - " + _APP_VERSION)
48+
self.panel = DialogPanel(self,config,layertable,ordering,panelizer,func)
49+
50+
51+
class DialogPanel(dialog_text_base.DialogPanel):
4552
# The names of the config items need to match the names in dialog_text_base minus the m_
53+
# - except for vScoreLayer
54+
vscore_layer = 'vScoreLayer'
55+
default_vscore_layer = 'User.Comments'
4656
config_defaults = {
4757
'dimensionsInchesBtn': 'true',
4858
'dimensionsMmBtn': 'false',
@@ -55,11 +65,12 @@ class Dialog(dialog_text_base.DIALOG_TEXT_BASE):
5565
'removeRightVerticalCheck': 'false',
5666
'productionBordersCheck': 'false',
5767
'productionFiducialsCheck': 'false',
58-
'productionExposeCheck': 'false'
68+
'productionExposeCheck': 'false',
69+
vscore_layer: default_vscore_layer
5970
}
6071

61-
def __init__(self, parent, config, ordering, panelizer, func):
62-
dialog_text_base.DIALOG_TEXT_BASE.__init__(self, parent)
72+
def __init__(self, parent, config, layertable, ordering, panelizer, func):
73+
dialog_text_base.DialogPanel.__init__(self, parent)
6374

6475
# hack for some gtk themes that incorrectly calculate best size
6576
#best_size = self.BestSize
@@ -68,6 +79,8 @@ def __init__(self, parent, config, ordering, panelizer, func):
6879

6980
self.config_file = config
7081

82+
self.layertable = layertable
83+
7184
self.ordering_instructions = ordering
7285

7386
self.panelizer = panelizer
@@ -76,8 +89,25 @@ def __init__(self, parent, config, ordering, panelizer, func):
7689

7790
self.error = None
7891

79-
self.SetTitle(_APP_NAME + " - " + _APP_VERSION)
80-
92+
self.general = GeneralPanel(self.notebook)
93+
self.vscore = VScorePanel(self.notebook)
94+
self.notebook.AddPage(self.general, "General")
95+
self.notebook.AddPage(self.vscore, "V-Score")
96+
97+
# Delete any existing rows in LayersGrid
98+
if self.vscore.LayersGrid.NumberRows:
99+
self.vscore.LayersGrid.DeleteRows(0, self.vscore.LayersGrid.NumberRows)
100+
# Append empty rows based on layertable
101+
self.vscore.LayersGrid.AppendRows(len(self.layertable))
102+
# Initialize them
103+
row = 0
104+
for layer in self.layertable.keys():
105+
self.vscore.LayersGrid.SetCellValue(row, 0, "0") # JSON style
106+
self.vscore.LayersGrid.SetCellRenderer(row, 0, wx.grid.GridCellBoolRenderer())
107+
self.vscore.LayersGrid.SetCellValue(row, 1, layer)
108+
self.vscore.LayersGrid.SetReadOnly(row, 1)
109+
row += 1
110+
81111
self.loadConfig()
82112

83113
def loadConfig(self):
@@ -108,34 +138,70 @@ def LoadSettings(self, params):
108138
if value is None:
109139
continue
110140

111-
try:
112-
obj = getattr(self, "m_{}".format(key))
113-
if hasattr(obj, "SetValue"):
114-
obj.SetValue(value)
115-
elif hasattr(obj, "SetStringSelection"):
116-
obj.SetStringSelection(value)
117-
else:
118-
raise Exception("Invalid item")
119-
except Exception as e:
120-
pass
141+
if self.vscore_layer in key:
142+
defaultLayerFound = False
143+
for row in range(self.vscore.LayersGrid.GetNumberRows()):
144+
if value in self.vscore.LayersGrid.GetCellValue(row, 1):
145+
b = "1"
146+
defaultLayerFound = True
147+
else:
148+
b = "0"
149+
self.vscore.LayersGrid.SetCellValue(row, 0, b)
150+
if not defaultLayerFound:
151+
self.vscore.LayersGrid.SetCellValue(0, 0, "1") # Default to the first layer
152+
else:
153+
try:
154+
obj = getattr(self, "m_{}".format(key))
155+
if hasattr(obj, "SetValue"):
156+
obj.SetValue(value)
157+
elif hasattr(obj, "SetStringSelection"):
158+
obj.SetStringSelection(value)
159+
else:
160+
raise Exception("Invalid item")
161+
except Exception as e:
162+
pass
163+
121164
return params
122165

123166
def CurrentSettings(self):
124167
params = {}
125168

126169
for item in self.config_defaults.keys():
127-
obj = getattr(self, "m_{}".format(item))
128-
if hasattr(obj, "GetValue"):
129-
params.update({item: obj.GetValue()})
130-
elif hasattr(obj, "GetStringSelection"):
131-
params.update({item: obj.GetStringSelection()})
170+
if self.vscore_layer in item:
171+
for row in range(self.vscore.LayersGrid.GetNumberRows()):
172+
if self.vscore.LayersGrid.GetCellValue(row, 0) == "1":
173+
params.update({'vScoreLayer': self.LayersGrid.GetCellValue(row, 1)})
132174
else:
133-
raise Exception("Invalid item")
175+
obj = getattr(self, "m_{}".format(item))
176+
if hasattr(obj, "GetValue"):
177+
params.update({item: obj.GetValue()})
178+
elif hasattr(obj, "GetStringSelection"):
179+
params.update({item: obj.GetStringSelection()})
180+
else:
181+
raise Exception("Invalid item")
182+
134183
return params
135184

136185
def OnPanelizeClick(self, e):
137186
self.saveConfig()
138187
self.func(self, self.panelizer)
139188

140189
def OnCancelClick(self, e):
141-
self.EndModal(wx.ID_CANCEL)
190+
self.GetParent().EndModal(wx.ID_CANCEL)
191+
192+
class GeneralPanel(dialog_text_base.GeneralPanelBase):
193+
def __init__(self, parent):
194+
dialog_text_base.GeneralPanelBase.__init__(self, parent)
195+
196+
class VScorePanel(dialog_text_base.VScorePanelBase):
197+
def __init__(self, parent):
198+
dialog_text_base.VScorePanelBase.__init__(self, parent)
199+
200+
def OnLayersGridCellClicked(self, event):
201+
self.LayersGrid.ClearSelection()
202+
#self.LayersGrid.SelectRow(event.Row)
203+
if event.Col == 0:
204+
for row in range(self.LayersGrid.GetNumberRows()):
205+
val = "1" if (row == event.Row) else "0" # JSON style
206+
self.LayersGrid.SetCellValue(event.Row, event.Col, val)
207+

0 commit comments

Comments
 (0)