Skip to content

Commit dff672c

Browse files
committed
add separate setup tab, further simplify create_common function
1 parent 6d4bca9 commit dff672c

1 file changed

Lines changed: 153 additions & 165 deletions

File tree

viaconstructor/viaconstructor.py

Lines changed: 153 additions & 165 deletions
Original file line numberDiff line numberDiff line change
@@ -2130,21 +2130,19 @@ def create_global_setup(self, tabwidget) -> None:
21302130
titles = {
21312131
"mill": _("M&ill"),
21322132
"tool": _("&Tool"),
2133-
"workpiece": _("&Workpiece"),
21342133
"pockets": _("P&ockets"),
21352134
"tabs": _("Ta&bs"),
21362135
"leads": _("Lea&ds"),
2136+
}
2137+
self.create_common(tabwidget, "widget", titles, self.global_changed)
2138+
2139+
def create_settings_tabs(self, tabwidget) -> None:
2140+
titles = {
2141+
"workpiece": _("&Workpiece"),
21372142
"machine": _("M&achine"),
21382143
"view": _("&View"),
21392144
}
2140-
for sname in self.project["setup_defaults"]:
2141-
# show_section = False
2142-
# for entry in self.project["setup_defaults"][sname].values():
2143-
# if entry.get("per_object", False):
2144-
# show_section = True
2145-
# if not show_section:
2146-
# continue
2147-
self.create_common(tabwidget, "widget", titles, sname, self.global_changed)
2145+
self.create_common(tabwidget, "widget", titles, self.global_changed)
21482146

21492147
def object_info_text(self, object_active_obj):
21502148
if object_active_obj:
@@ -2314,146 +2312,146 @@ def update_layer_setup(self) -> None:
23142312
self.tabobjwidget.setTabText(tab_idx, f"{titles.get(sname, sname)}")
23152313
tab_idx += 1
23162314

2317-
def create_common(self, tabwidget, widget_name, titles, sname, change_func):
2318-
scrollarea = QScrollArea()
2319-
scrollarea.setWidgetResizable(True)
2320-
vcontainer = QWidget()
2321-
vlayout = QVBoxLayout(vcontainer)
2322-
vlayout.setContentsMargins(0, 10, 0, 0)
2323-
scrollarea.setWidget(vcontainer)
2324-
tabwidget.addTab(scrollarea, titles.get(sname, sname))
2325-
2326-
streched = False
2327-
for ename, entry in self.project["setup_defaults"][sname].items():
2328-
# if not entry.get("per_object", False):
2329-
# continue
2330-
helptext = entry.get("tooltip", f"{sname}/{ename}")
2331-
container = QWidget()
2332-
hlayout = QHBoxLayout(container)
2333-
hlayout.setContentsMargins(10, 0, 10, 0)
2334-
entry[widget_name + "_label"] = QLabel(entry.get("title", ename))
2335-
entry[widget_name + "_label"].setToolTip(helptext)
2336-
hlayout.addWidget(entry[widget_name + "_label"])
2337-
vlayout.addWidget(container)
2338-
hlayout.addStretch(1)
2339-
if entry["type"] == "bool":
2340-
checkbox = QCheckBox()
2341-
checkbox.setChecked(self.project["setup"][sname][ename])
2342-
checkbox.setToolTip(helptext)
2343-
checkbox.stateChanged.connect(change_func) # type: ignore
2344-
hlayout.addWidget(checkbox)
2345-
entry[widget_name] = checkbox
2346-
elif entry["type"] == "select":
2347-
combobox = QComboBox()
2348-
for option in entry["options"]:
2349-
combobox.addItem(option[0])
2350-
combobox.setCurrentText(self.project["setup"][sname][ename])
2351-
combobox.setToolTip(helptext)
2352-
combobox.currentTextChanged.connect(change_func) # type: ignore
2353-
hlayout.addWidget(combobox)
2354-
entry[widget_name] = combobox
2355-
elif entry["type"] == "color":
2356-
color = self.project["setup"][sname][ename]
2357-
rgb = f"{color[0] * 255:1.0f},{color[1] * 255:1.0f},{color[2] * 255:1.0f}"
2358-
button = QPushButton(rgb)
2359-
button.setStyleSheet(f"background-color:rgb({rgb})")
2360-
button.setToolTip(helptext)
2361-
button.clicked.connect(partial(self.color_select, sname, ename)) # type: ignore
2362-
hlayout.addWidget(button)
2363-
entry[widget_name] = button
2364-
elif entry["type"] == "float":
2365-
dspinbox = QDoubleSpinBox()
2366-
dspinbox.setDecimals(entry.get("decimals", 4))
2367-
dspinbox.setSingleStep(entry.get("step", 1.0))
2368-
dspinbox.setMinimum(entry["min"])
2369-
dspinbox.setMaximum(entry["max"])
2370-
dspinbox.setValue(self.project["setup"][sname][ename])
2371-
dspinbox.setToolTip(helptext)
2372-
dspinbox.valueChanged.connect(change_func) # type: ignore
2373-
hlayout.addWidget(dspinbox)
2374-
entry[widget_name] = dspinbox
2375-
elif entry["type"] == "int":
2376-
spinbox = QSpinBox()
2377-
spinbox.setSingleStep(entry.get("step", 1))
2378-
spinbox.setMinimum(entry["min"])
2379-
spinbox.setMaximum(entry["max"])
2380-
spinbox.setValue(self.project["setup"][sname][ename])
2381-
spinbox.setToolTip(helptext)
2382-
spinbox.valueChanged.connect(change_func) # type: ignore
2383-
hlayout.addWidget(spinbox)
2384-
entry[widget_name] = spinbox
2385-
elif entry["type"] == "str":
2386-
lineedit = QLineEdit()
2387-
lineedit.setText(self.project["setup"][sname][ename])
2388-
lineedit.setToolTip(helptext)
2389-
lineedit.textChanged.connect(change_func) # type: ignore
2390-
hlayout.addWidget(lineedit)
2391-
entry[widget_name] = lineedit
2392-
elif entry["type"] == "mstr":
2393-
mlineedit = QPlainTextEdit()
2394-
mlineedit.setPlainText(self.project["setup"][sname][ename])
2395-
mlineedit.setToolTip(helptext)
2396-
mlineedit.textChanged.connect(change_func) # type: ignore
2397-
mlineedit.setFixedHeight(27)
2398-
hlayout.addWidget(mlineedit)
2399-
entry[widget_name] = mlineedit
2400-
elif entry["type"] == "table":
2401-
# add empty row if not exist
2402-
first_element = list(entry["columns"].keys())[0]
2403-
if entry.get("column_defaults") is not None and str(self.project["setup"][sname][ename][-1][first_element]) != "":
2404-
new_row = {}
2405-
for key, default in entry["column_defaults"].items():
2406-
new_row[key] = default
2407-
self.project["setup"][sname][ename].append(new_row)
2408-
2409-
table = QTableWidget()
2410-
table.setToolTip(helptext)
2411-
table.setRowCount(len(self.project["setup"][sname][ename]))
2412-
idxf_offset = 0
2413-
table.setColumnCount(len(entry["columns"]))
2414-
if entry["selectable"]:
2415-
table.setColumnCount(len(entry["columns"]) + 1)
2416-
table.setHorizontalHeaderItem(0, QTableWidgetItem("Select"))
2417-
idxf_offset = 1
2418-
for col_idx, title in enumerate(entry["columns"]):
2419-
title = entry["columns"][title].get("title", title)
2420-
table.setHorizontalHeaderItem(col_idx + idxf_offset, QTableWidgetItem(title))
2421-
for row_idx, row in enumerate(self.project["setup"][sname][ename]):
2422-
if entry["selectable"]:
2423-
button = QPushButton()
2424-
button.setIcon(QIcon(os.path.join(self.module_root, "icons", "select.png")))
2425-
button.setToolTip(_("select this row"))
2426-
button.clicked.connect(partial(self.table_select, sname, ename, row_idx)) # type: ignore
2427-
table.setCellWidget(row_idx, 0, button)
2428-
table.resizeColumnToContents(0)
2429-
for col_idx, key in enumerate(entry["columns"]):
2430-
item = QTableWidgetItem(str(row[key]))
2431-
table.setItem(
2432-
row_idx,
2433-
col_idx + idxf_offset,
2434-
item,
2435-
)
2436-
# if entry["columns"][key].get("ro", False):
2437-
# item.setFlags(Qt.ItemIsEditable)
2438-
table.resizeColumnToContents(col_idx + idxf_offset)
2439-
table.itemChanged.connect(change_func) # type: ignore
2440-
vlayout.addWidget(table, stretch=1)
2441-
streched = True
2442-
entry[widget_name] = table
2443-
else:
2444-
eprint(f"Unknown setup-type: {entry['type']}")
2445-
2446-
unit = entry.get("unit", "")
2447-
if unit == "LINEARMEASURE":
2448-
unit = self.project["setup"]["machine"]["unit"]
2449-
2450-
ulabel = QLabel(unit)
2451-
ulabel.setMinimumWidth(36)
2452-
ulabel.setFont(QFont("Arial", 9))
2453-
hlayout.addWidget(ulabel)
2454-
if not streched:
2455-
vlayout.addStretch(1)
2456-
2315+
def create_common(self, tabwidget, widget_name, titles, change_func):
2316+
for sname in self.project["setup_defaults"]:
2317+
if sname in titles:
2318+
scrollarea = QScrollArea()
2319+
scrollarea.setWidgetResizable(True)
2320+
vcontainer = QWidget()
2321+
vlayout = QVBoxLayout(vcontainer)
2322+
vlayout.setContentsMargins(0, 10, 0, 0)
2323+
scrollarea.setWidget(vcontainer)
2324+
tabwidget.addTab(scrollarea, titles.get(sname, sname))
2325+
2326+
streched = False
2327+
for ename, entry in self.project["setup_defaults"][sname].items():
2328+
helptext = entry.get("tooltip", f"{sname}/{ename}")
2329+
container = QWidget()
2330+
hlayout = QHBoxLayout(container)
2331+
hlayout.setContentsMargins(10, 0, 10, 0)
2332+
entry[widget_name + "_label"] = QLabel(entry.get("title", ename))
2333+
entry[widget_name + "_label"].setToolTip(helptext)
2334+
hlayout.addWidget(entry[widget_name + "_label"])
2335+
vlayout.addWidget(container)
2336+
hlayout.addStretch(1)
2337+
if entry["type"] == "bool":
2338+
checkbox = QCheckBox()
2339+
checkbox.setChecked(self.project["setup"][sname][ename])
2340+
checkbox.setToolTip(helptext)
2341+
checkbox.stateChanged.connect(change_func) # type: ignore
2342+
hlayout.addWidget(checkbox)
2343+
entry[widget_name] = checkbox
2344+
elif entry["type"] == "select":
2345+
combobox = QComboBox()
2346+
for option in entry["options"]:
2347+
combobox.addItem(option[0])
2348+
combobox.setCurrentText(self.project["setup"][sname][ename])
2349+
combobox.setToolTip(helptext)
2350+
combobox.currentTextChanged.connect(change_func) # type: ignore
2351+
hlayout.addWidget(combobox)
2352+
entry[widget_name] = combobox
2353+
elif entry["type"] == "color":
2354+
color = self.project["setup"][sname][ename]
2355+
rgb = f"{color[0] * 255:1.0f},{color[1] * 255:1.0f},{color[2] * 255:1.0f}"
2356+
button = QPushButton(rgb)
2357+
button.setStyleSheet(f"background-color:rgb({rgb})")
2358+
button.setToolTip(helptext)
2359+
button.clicked.connect(partial(self.color_select, sname, ename)) # type: ignore
2360+
hlayout.addWidget(button)
2361+
entry[widget_name] = button
2362+
elif entry["type"] == "float":
2363+
dspinbox = QDoubleSpinBox()
2364+
dspinbox.setDecimals(entry.get("decimals", 4))
2365+
dspinbox.setSingleStep(entry.get("step", 1.0))
2366+
dspinbox.setMinimum(entry["min"])
2367+
dspinbox.setMaximum(entry["max"])
2368+
dspinbox.setValue(self.project["setup"][sname][ename])
2369+
dspinbox.setToolTip(helptext)
2370+
dspinbox.valueChanged.connect(change_func) # type: ignore
2371+
hlayout.addWidget(dspinbox)
2372+
entry[widget_name] = dspinbox
2373+
elif entry["type"] == "int":
2374+
spinbox = QSpinBox()
2375+
spinbox.setSingleStep(entry.get("step", 1))
2376+
spinbox.setMinimum(entry["min"])
2377+
spinbox.setMaximum(entry["max"])
2378+
spinbox.setValue(self.project["setup"][sname][ename])
2379+
spinbox.setToolTip(helptext)
2380+
spinbox.valueChanged.connect(change_func) # type: ignore
2381+
hlayout.addWidget(spinbox)
2382+
entry[widget_name] = spinbox
2383+
elif entry["type"] == "str":
2384+
lineedit = QLineEdit()
2385+
lineedit.setText(self.project["setup"][sname][ename])
2386+
lineedit.setToolTip(helptext)
2387+
lineedit.textChanged.connect(change_func) # type: ignore
2388+
hlayout.addWidget(lineedit)
2389+
entry[widget_name] = lineedit
2390+
elif entry["type"] == "mstr":
2391+
mlineedit = QPlainTextEdit()
2392+
mlineedit.setPlainText(self.project["setup"][sname][ename])
2393+
mlineedit.setToolTip(helptext)
2394+
mlineedit.textChanged.connect(change_func) # type: ignore
2395+
mlineedit.setFixedHeight(27)
2396+
hlayout.addWidget(mlineedit)
2397+
entry[widget_name] = mlineedit
2398+
elif entry["type"] == "table":
2399+
# add empty row if not exist
2400+
first_element = list(entry["columns"].keys())[0]
2401+
if entry.get("column_defaults") is not None and str(self.project["setup"][sname][ename][-1][first_element]) != "":
2402+
new_row = {}
2403+
for key, default in entry["column_defaults"].items():
2404+
new_row[key] = default
2405+
self.project["setup"][sname][ename].append(new_row)
2406+
2407+
table = QTableWidget()
2408+
table.setToolTip(helptext)
2409+
table.setRowCount(len(self.project["setup"][sname][ename]))
2410+
idxf_offset = 0
2411+
table.setColumnCount(len(entry["columns"]))
2412+
if entry["selectable"]:
2413+
table.setColumnCount(len(entry["columns"]) + 1)
2414+
table.setHorizontalHeaderItem(0, QTableWidgetItem("Select"))
2415+
idxf_offset = 1
2416+
for col_idx, title in enumerate(entry["columns"]):
2417+
title = entry["columns"][title].get("title", title)
2418+
table.setHorizontalHeaderItem(col_idx + idxf_offset, QTableWidgetItem(title))
2419+
for row_idx, row in enumerate(self.project["setup"][sname][ename]):
2420+
if entry["selectable"]:
2421+
button = QPushButton()
2422+
button.setIcon(QIcon(os.path.join(self.module_root, "icons", "select.png")))
2423+
button.setToolTip(_("select this row"))
2424+
button.clicked.connect(partial(self.table_select, sname, ename, row_idx)) # type: ignore
2425+
table.setCellWidget(row_idx, 0, button)
2426+
table.resizeColumnToContents(0)
2427+
for col_idx, key in enumerate(entry["columns"]):
2428+
item = QTableWidgetItem(str(row[key]))
2429+
table.setItem(
2430+
row_idx,
2431+
col_idx + idxf_offset,
2432+
item,
2433+
)
2434+
# if entry["columns"][key].get("ro", False):
2435+
# item.setFlags(Qt.ItemIsEditable)
2436+
table.resizeColumnToContents(col_idx + idxf_offset)
2437+
table.itemChanged.connect(change_func) # type: ignore
2438+
vlayout.addWidget(table, stretch=1)
2439+
streched = True
2440+
entry[widget_name] = table
2441+
else:
2442+
eprint(f"Unknown setup-type: {entry['type']}")
2443+
2444+
unit = entry.get("unit", "")
2445+
if unit == "LINEARMEASURE":
2446+
unit = self.project["setup"]["machine"]["unit"]
2447+
2448+
ulabel = QLabel(unit)
2449+
ulabel.setMinimumWidth(36)
2450+
ulabel.setFont(QFont("Arial", 9))
2451+
hlayout.addWidget(ulabel)
2452+
if not streched:
2453+
vlayout.addStretch(1)
2454+
24572455
def create_layer_setup(self, tabwidget) -> None:
24582456
titles = {
24592457
"mill": _("M&ill"),
@@ -2462,14 +2460,7 @@ def create_layer_setup(self, tabwidget) -> None:
24622460
"tabs": _("Ta&bs"),
24632461
"leads": _("Lea&ds"),
24642462
}
2465-
for sname in self.project["setup_defaults"]:
2466-
show_section = False
2467-
for entry in self.project["setup_defaults"][sname].values():
2468-
if entry.get("per_object", False):
2469-
show_section = True
2470-
if not show_section:
2471-
continue
2472-
self.create_common(tabwidget, "widget_lay", titles, sname, self.layer_changed)
2463+
self.create_common(tabwidget, "widget_lay", titles, self.layer_changed)
24732464

24742465
def setup_select_object(self, value):
24752466
if self.project["status"] != "READY":
@@ -2594,14 +2585,7 @@ def create_object_setup(self, tabwidget) -> None:
25942585
"tabs": _("Ta&bs"),
25952586
"leads": _("Lea&ds"),
25962587
}
2597-
for sname in self.project["setup_defaults"]:
2598-
show_section = False
2599-
for entry in self.project["setup_defaults"][sname].values():
2600-
if entry.get("per_object", False):
2601-
show_section = True
2602-
if not show_section:
2603-
continue
2604-
self.create_common(tabwidget, "widget_obj", titles, sname, self.object_changed)
2588+
self.create_common(tabwidget, "widget_obj", titles, self.object_changed)
26052589

26062590
def object_move(spinbox_steps, checkbox_childs, direction):
26072591
object_active = self.project["object_active"]
@@ -3466,12 +3450,16 @@ def __init__(self) -> None:
34663450

34673451
self.infotext_widget = QPlainTextEdit()
34683452
self.infotext_widget.setPlainText("info:")
3453+
3454+
self.settings_widget = QTabWidget()
3455+
self.create_settings_tabs(self.settings_widget)
34693456

34703457
ltabwidget = QTabWidget()
34713458
ltabwidget.addTab(self.tabwidget, _("&Global"))
34723459
ltabwidget.addTab(self.laywidget, _("&Layers"))
34733460
ltabwidget.addTab(self.objwidget, _("&Objects"))
34743461
ltabwidget.addTab(self.infotext_widget, _("&Infos"))
3462+
ltabwidget.addTab(self.settings_widget, _("&Setup"))
34753463
ltabwidget.currentChanged.connect(self.tab_changed)
34763464

34773465
left_gridlayout.addWidget(ltabwidget)

0 commit comments

Comments
 (0)