Skip to content

Commit 5635759

Browse files
committed
Gmoccapy: better handling of unsaved changes in tooltable
- show message on leaving tool table with unsaved changes - reload tooltable from file when showing the table
1 parent 027c75a commit 5635759

1 file changed

Lines changed: 49 additions & 5 deletions

File tree

src/emc/usr_intf/gmoccapy/gmoccapy.py

Lines changed: 49 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)