-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathaddnet_dialog.py
116 lines (100 loc) · 3.6 KB
/
addnet_dialog.py
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#!/usr/bin/env python
# AddNet for pcbnew
# This is the plugin WX dialog
# (c) Michele Santucci 2019
#
import wx
import pcbnew
from addnet_gui import addnet_gui
__version__ = "0.1"
class AddNetDialog(addnet_gui):
"""Class that gathers all the Gui control"""
def __init__(self, board):
"""Init the brand new instance"""
super(AddNetDialog, self).__init__(None)
self.SetTitle("AddNet v{0}".format(__version__))
self.Bind(wx.EVT_CLOSE, self.onCloseWindow)
self.m_cbModule.Bind(wx.EVT_COMBOBOX, self.onModuleSelect)
self.m_cbPad.Bind(wx.EVT_COMBOBOX, self.onPadSelect)
self.m_btnCancel.Bind(wx.EVT_BUTTON, self.onCloseWindow)
self.m_btnOk.Bind(wx.EVT_BUTTON, self.onProcessAction)
self.board = pcbnew.GetBoard()
self.modules = self.board.GetModules()
self.SelectedModule = None
self.SelectedPad = None
self.PopulateModules()
def onProcessAction(self, event):
self.AddNet()
def onCloseWindow(self, event):
self.Destroy()
def onModuleSelect(self, event):
self.PopulatePads()
def onPadSelect(self, event):
self.SelectPad()
def GetSelectedMod(self):
for mod in self.modules:
if mod.IsSelected():
return mod
else:
return None
def SelectPad(self):
if not self.SelectedModule == None:
pads = self.SelectedModule.Pads()
for pad in pads:
if pad.GetName() == self.m_cbPad.GetStringSelection():
self.SelectedPad = pad
self.m_txtPadNet.ChangeValue(pad.GetNetname())
break
else:
self.SelectedPad = None
def PopulatePads(self):
self.m_cbPad.Clear()
self.m_txtPadNet.Clear()
self.SelectedModule = None
self.SelectedPad = None
for mod in self.modules:
if mod.GetReference() == self.m_cbModule.GetStringSelection():
self.SelectedModule = mod
pads = mod.Pads()
for pad in pads:
pad_name = pad.GetName()
if pad_name != "" and pad_name != None:
self.m_cbPad.Append(pad_name)
if not self.m_cbPad.IsEmpty():
self.m_cbPad.SetSelection(0)
self.SelectPad()
break
def PopulateModules(self):
for mod in self.modules:
self.m_cbModule.Append(mod.GetReference())
if not self.m_cbModule.IsEmpty():
self.m_cbModule.SetSelection(0)
self.PopulatePads()
def AddNet(self):
netname = self.m_txtNetName.GetLineText(0)
if netname == "":
wx.MessageBox("Set a netname")
return
if self.SelectedModule == None or self.SelectedPad == None:
wx.MessageBox("Select a module and a pad")
return
netcode = -1
for mod in self.modules:
pads = mod.Pads()
for pad in pads:
net = pad.GetNet()
nc = net.GetNet()
if nc > netcode:
netcode = nc
netcode += 1
newnet = pcbnew.NETINFO_ITEM(self.board, netname, netcode)
self.board.Add(newnet)
self.SelectedPad.SetNet(newnet)
wx.MessageBox("Net %s assigned to: %s->%s" % (netname, self.SelectedModule.GetReference(), self.SelectedPad.GetName()))
pcbnew.Refresh()
self.Destroy()
def InitAddNetDialog(board):
"""Launch the dialog"""
dlg = AddNetDialog(board)
dlg.Show(True)
return dlg