@@ -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