-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathHarnessComponentProperties.py
More file actions
173 lines (143 loc) · 5.96 KB
/
Copy pathHarnessComponentProperties.py
File metadata and controls
173 lines (143 loc) · 5.96 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
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
"""
This module defines the property editor panels for connectors and wires.
"""
import tkinter as tk
import tkinter.ttk as ttk
try:
#import tktooltip
import TkToolTip as tktooltip
except Exception:
tktooltip = None
import HarnessITUtils
from HarnessComponents import Node
class ConnectorProperies():
"""
A property editor panel for connectors.
"""
def __init__(self, parent, app):
"""
Initializes the ConnectorProperies panel.
Args:
parent: The parent widget.
app: The main application instance.
"""
self.app = app
self.parent = parent
self.frame = tk.Frame(self.parent, height=200)
self.component = None
self.titleLabel = ttk.Label(self.frame, text="Connector prop.")
self.titleLabel.grid(column=0, row=0, sticky="n")
self.nameLabel = ttk.Label(self.frame,text="Name")
self.nameLabel.grid(column=0,row=1,sticky = "n")
self.nameTextBox = ttk.Entry(self.frame,width=20)
self.nameTextBox.grid(column=0,row=2,sticky = "n")
self.partNumberlabel = ttk.Label(self.frame,text = "part number")
self.partNumberlabel.grid(column=0, row=3, sticky="n")
self.partNumberTextBox =ttk.Entry(self.frame,width=20)
self.partNumberTextBox.grid(column=0, row=4, sticky="n")
self.saveButton = ttk.Button(self.frame,text = "save", command = self.save)
self.saveButton.grid(column=0,row=10,columnspan=2)
def load(self, component):
"""
Loads the properties of a connector into the panel.
Args:
component (Connector): The connector to load.
"""
self.component = component
self.nameTextBox.delete(0,30)
self.nameTextBox.insert(0,component.get_name())
self.partNumberTextBox.delete(0,30)
self.partNumberTextBox.insert(0, component.partNumber)
def save(self):
"""
Saves the properties of the connector.
"""
if self.component:
self.component.set_name(self.nameTextBox.get())
print("saved")
class WireProperies():
"""
A property editor panel for wires.
"""
def __init__(self, parent, app):
"""
Initializes the WireProperies panel.
Args:
parent: The parent widget.
app: The main application instance.
"""
self.app = app
self.parent = parent
self.frame = tk.Frame(self.parent, height=200)
self.length_entries = []
self.component = None
self.titleLabel = ttk.Label(self.frame, text="Wire prop.")
self.titleLabel.grid(column=0, row=0, sticky="n")
self.nameLabel = ttk.Label(self.frame,text="Name")
self.nameLabel.grid(column=0,row=1,sticky = "n")
self.nameTextBox = ttk.Entry(self.frame,width=20)
self.nameTextBox.grid(column=0,row=2,sticky = "n")
self.partNumberlabel = ttk.Label(self.frame,text = "part number")
self.partNumberlabel.grid(column=0, row=3, sticky="n")
self.partNumberTextBox =ttk.Entry(self.frame,width=20)
self.partNumberTextBox.grid(column=0, row=4, sticky="n")
self.colorLabel = ttk.Label(self.frame, text="color")
self.colorLabel.grid(column=0, row=5, sticky="n")
self.colorChooser = ttk.Combobox(self.frame, state= "readonly", values=list(HarnessITUtils.COLORS.keys()))
self.colorChooser.grid(column=0, row=6, sticky="n")
self.gaugeLabel = ttk.Label(self.frame, text="Gauge")
self.gaugeLabel.grid(column=0, row=7, sticky="n")
self.gaugeChooser = ttk.Combobox(self.frame, state= "readonly", values=list(HarnessITUtils.GAUGE.keys()))
self.gaugeChooser.grid(column=0, row=8, sticky="n")
self.addNodeButton = ttk.Button(self.frame, text="Add Node", command=self.add_node)
self.addNodeButton.grid(column=0, row=9, columnspan=2)
self.saveButton = ttk.Button(self.frame,text = "save", command = self.save)
self.saveButton.grid(column=0,row=10,columnspan=2)
def load(self, component):
"""
Loads the properties of a wire into the panel.
Args:
component (Wire): The wire to load.
"""
self.component = component
self.nameTextBox.delete(0,30)
self.nameTextBox.insert(0,component.get_name())
if hasattr(component, 'get_color'):
self.colorChooser.set(value=component.get_color())
if hasattr(component, 'get_gauge'):
self.gaugeChooser.set(value=component.get_gauge())
for entry in self.length_entries:
entry.destroy()
self.length_entries.clear()
row = 11
for i, length in enumerate(component.lengths):
label = ttk.Label(self.frame, text=f"Segment {i+1} Length")
label.grid(column=0, row=row, sticky="n")
entry = ttk.Entry(self.frame, width=20)
entry.grid(column=0, row=row+1, sticky="n")
entry.insert(0, str(length))
self.length_entries.append(entry)
row += 2
def save(self):
"""
Saves the properties of the wire.
"""
if self.component:
self.component.set_name(self.nameTextBox.get())
self.component.set_color(self.colorChooser.get())
self.component.set_gauge(self.gaugeChooser.get())
for i, entry in enumerate(self.length_entries):
self.component.lengths[i] = int(entry.get())
def add_node(self):
"""
Adds a new node to the selected wire.
"""
if self.component:
wire = self.component
if len(wire.nodes) >= 2:
pos = (wire.nodes[-2].rect.centerx + wire.nodes[-1].rect.centerx) / 2, \
(wire.nodes[-2].rect.centery + wire.nodes[-1].rect.centery) / 2
node = Node(pos, wire, 0, 0)
wire.nodes.insert(-1, node)
wire.lengths.append(0)
self.load(wire)