@@ -2008,6 +2008,8 @@ def _init_tooleditor(self):
20082008 btn_add .set_image (self .widgets .img_tool_add )
20092009 btn_add .set_tooltip_text (_ ("Add new tool" ))
20102010 btn_add .set_always_show_image (True )
2011+ btn_add .disconnect_by_func (self .widgets .tooledit1 .add )
2012+ btn_add .connect ("clicked" ,self .on_btn_add_tool_clicked )
20112013 # Reload button
20122014 btn_reload = self .widgets .tooledit1 .wTree .get_object ("reload" )
20132015 btn_reload .set_size_request (56 , 56 )
@@ -2024,6 +2026,8 @@ def _init_tooleditor(self):
20242026 btn_save .set_image (self .widgets .img_tool_save )
20252027 btn_save .set_tooltip_text (_ ("Save tool table to file" ))
20262028 btn_save .set_always_show_image (True )
2029+ btn_save .disconnect_by_func (self .widgets .tooledit1 .save )
2030+ btn_save .connect ("clicked" ,self .on_btn_save_tool_changes_clicked )
20272031 # Create a label for current tool in spindle
20282032 lbl_tool = Gtk .Label ()
20292033 self .widgets .tooledit1 .lbl_tool = lbl_tool
@@ -2038,12 +2042,16 @@ def _init_tooleditor(self):
20382042 btn_calculator .set_active (self .toolpage_use_calc )
20392043 btn_calculator .connect ("toggled" , self .on_toolpage_use_calc_toggled )
20402044 buttonbox .pack_start (btn_calculator ,False ,False ,50 )
2041- column_cell_ids = ["toggle" , "tool#1" , "pos1" , "x1" , "y1" , "z1" , "a1" , "b1" , "c1" , "u1" , "v1" , "w1" ,
2042- "d1" , "front1" , "back1" , "orient1" , "cell_comments1" ]
2045+ column_cell_ids = ["toggle" , "tool#1" , "pos1" ,
2046+ "x1" , "y1" , "z1" , "a1" , "b1" , "c1" , "u1" , "v1" , "w1" ,
2047+ "d1" , "front1" , "back1" , "orient1" , "comments1" ]
20432048 for col , name in enumerate (column_cell_ids ):
2044- if col > 0 and col < 16 :
2049+ if col > 0 and col < 17 :
20452050 temp = self .widgets .tooledit1 .wTree .get_object ("cell_%s" % name )
2046- temp .connect ('editing-started' , self .on_tool_col_edit_started , col )
2051+ if col < 16 : # calulator is only useful for nummeric columns (ie not for 'Comments')
2052+ temp .connect ('editing-started' , self .on_tool_col_edit_started , col )
2053+ temp .connect ('edited' , self .on_tool_col_edited )
2054+ self .widgets .tooledit1 .edited = False
20472055 # override 'tooledit_widget' method 'set_selected_tool'
20482056 self .widgets .tooledit1 .set_selected_tool = self .set_selected_tool
20492057
@@ -2124,13 +2132,17 @@ def on_tool_col_edit_started(self, widget, filtered_path, new_text, col):
21242132 store [row ][col ] = value
21252133 else :
21262134 store [row ][col ] = f"{ value :11.4f} "
2135+ self .widgets .tooledit1 .edited = True
21272136 # this is needed to get offsetview out of editing mode
21282137 GLib .timeout_add (50 ,
21292138 toolview .set_cursor ,
21302139 toolpage .model .get_path (row ),
21312140 toolview .get_columns ()[0 ],
21322141 True )
21332142
2143+ def on_tool_col_edited (self , * args ):
2144+ self .widgets .tooledit1 .edited = True
2145+
21342146 def _init_themes (self ):
21352147 # If there are themes then add them to combo box
21362148 model = self .widgets .theme_choice .get_model ()
@@ -2606,6 +2618,8 @@ def _show_tooledit_tab(self, state):
26062618 self .widgets .ntb_preview .set_property ("show-tabs" , not state )
26072619 self .widgets .vbx_jog .hide ()
26082620 self .widgets .ntb_preview .set_current_page (2 )
2621+ self .widgets .tooledit1 .reload (None )
2622+ self .widgets .tooledit1 .edited = False
26092623 self .widgets .tooledit1 .set_selected_tool (self .stat .tool_in_spindle )
26102624 if self .widgets .chk_use_kb_on_tooledit .get_active ():
26112625 self .widgets .ntb_info .set_current_page (1 )
@@ -4710,6 +4724,11 @@ def on_btn_back_clicked(self, widget, data=None):
47104724 self .widgets .tbtn_fullsize_preview0 .set_active (False )
47114725 self .on_tbtn_fullsize_preview_toggled (self .widgets .tbtn_fullsize_preview0 )
47124726 else : # else we go to main button on manual
4727+ if self .widgets .tooledit1 .edited :
4728+ message = _ ("Discard unsaved changes and exit?" )
4729+ result = self .dialogs .yesno_dialog (self , message , _ ("Attention!" ))
4730+ if not result : # user says no, he want to save
4731+ return
47134732 self .widgets .ntb_button .set_current_page (_BB_MANUAL )
47144733 self .widgets .ntb_main .set_current_page (0 )
47154734 self .widgets .ntb_preview .set_current_page (0 )
@@ -5453,11 +5472,26 @@ def on_btn_delete_tool_clicked(self, widget, data=None):
54535472 self .dialogs .warning_dialog (self , _ ("Warning Tool can not be deleted!" ), message )
54545473 return
54555474 self .widgets .tooledit1 .delete (widget )
5475+ self .widgets .tooledit1 .edited = True
5476+
5477+ def on_btn_add_tool_clicked (self , widget , data = None ):
5478+ self .widgets .tooledit1 .add (None )
5479+ self .widgets .tooledit1 .edited = True
54565480
54575481 def on_btn_reload_tooltable_clicked (self , widget , data = None ):
5482+ if self .widgets .tooledit1 .edited :
5483+ message = _ ("Discard unsaved changes and reload the table?" )
5484+ result = self .dialogs .yesno_dialog (self , message , _ ("Attention!" ))
5485+ if not result : # user says no, he want to save
5486+ return
54585487 self .widgets .tooledit1 .reload (None )
5488+ self .widgets .tooledit1 .edited = False
54595489 self .widgets .tooledit1 .set_selected_tool (self .stat .tool_in_spindle )
54605490
5491+ def on_btn_save_tool_changes_clicked (self , widget , data = None ):
5492+ self .widgets .tooledit1 .save (None )
5493+ self .widgets .tooledit1 .edited = False
5494+
54615495 def on_btn_tool_touchoff_clicked (self , widget , data = None ):
54625496 if not self .widgets .tooledit1 .get_selected_tool ():
54635497 message = _ ("No or multiple tools selected in the tool table. " )
@@ -5513,6 +5547,11 @@ def on_btn_tool_touchoff_clicked(self, widget, data=None):
55135547
55145548 # select a tool entering a number
55155549 def on_btn_select_tool_by_no_clicked (self , widget , data = None ):
5550+ if self .widgets .tooledit1 .edited :
5551+ message = _ ("Discard unsaved changes and change tool?" )
5552+ result = self .dialogs .yesno_dialog (self , message , _ ("Attention!" ))
5553+ if not result : # user says no, he want to save
5554+ return
55165555 value = self .dialogs .entry_dialog (self , data = None , header = _ ("Enter the tool number as integer " ),
55175556 label = _ ("Select the tool to change" ), integer = True )
55185557 if value == "ERROR" :
@@ -5535,9 +5574,14 @@ def on_btn_select_tool_by_no_clicked(self, widget, data=None):
55355574 # Next two lines fix issue #3129 caused by GStat missing changes in interpreter mode
55365575 command = "G4 P{0}" .format (self .get_ini_info .get_cycle_time ()/ 1000 )
55375576 self .command .mdi (command )
5538-
5577+
55395578 # set tool with M61 Q? or with T? M6
55405579 def on_btn_selected_tool_clicked (self , widget , data = None ):
5580+ if self .widgets .tooledit1 .edited :
5581+ message = _ ("Discard unsaved changes and change tool?" )
5582+ result = self .dialogs .yesno_dialog (self , message , _ ("Attention!" ))
5583+ if not result : # user says no, he want to save
5584+ return
55415585 tool = self .widgets .tooledit1 .get_selected_row ()
55425586 if tool == None :
55435587 message = _ ("you selected no or more than one tool, the tool selection must be unique" )
0 commit comments