Skip to content

Commit 250549e

Browse files
authored
Merge pull request #3706 from Sigma1912/Gmoccapy-tooltable_Restore_button_tooltips
Gmoccapy: tooltable fixes + get rid of select-checkbox column
2 parents 9594ac6 + 0f8348d commit 250549e

File tree

2 files changed

+101
-17
lines changed

2 files changed

+101
-17
lines changed

lib/python/gladevcp/tooledit_widget.py

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ def match_type(self, model, iter, data):
181181
return not data
182182
return data
183183

184-
# delete the selected tools
184+
# delete tools selected by checkbox
185185
def delete(self,widget):
186186
liststore = self.model
187187
def match_value_cb(model, path, iter, pathlist):
@@ -196,6 +196,11 @@ def match_value_cb(model, path, iter, pathlist):
196196
for path in pathlist:
197197
liststore.remove(liststore.get_iter(path))
198198

199+
# delete tool of selected row
200+
def delete_selected_row(self,widget):
201+
model, iter = self.view1.get_selection().get_selected()
202+
model.remove(iter)
203+
199204
# return tool numbers of all rows with checked checkboxes
200205
def get_selected_tool(self):
201206
liststore = self.model
@@ -206,10 +211,16 @@ def match_value_cb(model, path, iter, pathlist):
206211
pathlist = []
207212
liststore.foreach(match_value_cb, pathlist)
208213
# foreach works in a depth first fashion
209-
if len(pathlist) != 1:
214+
if len(pathlist) == 0:
210215
return None
211-
else:
216+
elif len(pathlist) == 1:
212217
return(liststore.get_value(liststore.get_iter(pathlist[0]),1))
218+
else:
219+
selected_tools = []
220+
for path in pathlist:
221+
tool = (liststore.get_value(liststore.get_iter(path[0]),1))
222+
selected_tools.append(tool)
223+
return selected_tools
213224

214225
# return tool number of the highlighted (ie selected) row
215226
def get_selected_row(self):
@@ -222,7 +233,7 @@ def get_selected_row(self):
222233

223234
def set_selected_tool(self,toolnumber):
224235
try:
225-
treeselection = self.view2.get_selection()
236+
treeselection = self.view1.get_selection()
226237
liststore = self.model
227238
def match_tool(model, path, iter, pathlist):
228239
if model.get_value(iter, 1) == toolnumber:
@@ -234,6 +245,7 @@ def match_tool(model, path, iter, pathlist):
234245
if len(pathlist) == 1:
235246
liststore.set_value(liststore.get_iter(pathlist[0]),0,1)
236247
treeselection.select_path(pathlist[0])
248+
self.view1.scroll_to_cell(pathlist[0], None, True, 0.5, 0.0)
237249
except:
238250
print(_("tooledit_widget error: cannot select tool number"),toolnumber)
239251

src/emc/usr_intf/gmoccapy/gmoccapy.py

Lines changed: 85 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1979,6 +1979,8 @@ def _init_tooleditor(self):
19791979
self.widgets.tooledit1.set_visible("abcxyzuvwijq", False)
19801980
for axis in self.axis_list:
19811981
self.widgets.tooledit1.set_visible("{0}".format(axis), True)
1982+
# hide select column
1983+
self.widgets.tooledit1.wTree.get_object("s1").set_visible(False)
19821984
# disconnect the key_press handler in the widget
19831985
tv = self.widgets.tooledit1.wTree.get_object("treeview1")
19841986
tv.disconnect_by_func(self.widgets.tooledit1.on_tree_navigate_key_press)
@@ -1997,25 +1999,37 @@ def _init_tooleditor(self):
19971999
btn_delete.set_size_request(56, 56)
19982000
btn_delete.set_label("")
19992001
btn_delete.set_image(self.widgets.img_tool_delete)
2002+
btn_delete.set_tooltip_text(_("Delete selected tools"))
20002003
btn_delete.set_always_show_image(True)
2004+
btn_delete.disconnect_by_func(self.widgets.tooledit1.delete)
2005+
btn_delete.connect("clicked",self.on_btn_delete_tool_clicked)
20012006
# Add button
20022007
btn_add = self.widgets.tooledit1.wTree.get_object("add")
20032008
btn_add.set_size_request(56, 56)
20042009
btn_add.set_label("")
20052010
btn_add.set_image(self.widgets.img_tool_add)
2011+
btn_add.set_tooltip_text(_("Add new tool"))
20062012
btn_add.set_always_show_image(True)
2013+
btn_add.disconnect_by_func(self.widgets.tooledit1.add)
2014+
btn_add.connect("clicked",self.on_btn_add_tool_clicked)
20072015
# Reload button
20082016
btn_reload = self.widgets.tooledit1.wTree.get_object("reload")
20092017
btn_reload.set_size_request(56, 56)
20102018
btn_reload.set_label("")
20112019
btn_reload.set_image(self.widgets.img_tool_reload)
2020+
btn_reload.set_tooltip_text(_("Reload tool table from file"))
20122021
btn_reload.set_always_show_image(True)
2022+
btn_reload.disconnect_by_func(self.widgets.tooledit1.reload)
2023+
btn_reload.connect("clicked",self.on_btn_reload_tooltable_clicked)
20132024
# Save button
20142025
btn_save = self.widgets.tooledit1.wTree.get_object("apply")
20152026
btn_save.set_size_request(56, 56)
20162027
btn_save.set_label("")
20172028
btn_save.set_image(self.widgets.img_tool_save)
2029+
btn_save.set_tooltip_text(_("Save tool table to file"))
20182030
btn_save.set_always_show_image(True)
2031+
btn_save.disconnect_by_func(self.widgets.tooledit1.save)
2032+
btn_save.connect("clicked",self.on_btn_save_tool_changes_clicked)
20192033
# Create a label for current tool in spindle
20202034
lbl_tool = Gtk.Label()
20212035
self.widgets.tooledit1.lbl_tool = lbl_tool
@@ -2030,18 +2044,31 @@ def _init_tooleditor(self):
20302044
btn_calculator.set_active(self.toolpage_use_calc)
20312045
btn_calculator.connect("toggled", self.on_toolpage_use_calc_toggled)
20322046
buttonbox.pack_start(btn_calculator,False,False,50)
2033-
column_cell_ids = ["toggle", "tool#1", "pos1", "x1", "y1", "z1", "a1", "b1", "c1", "u1", "v1", "w1",
2034-
"d1", "front1", "back1", "orient1", "cell_comments1"]
2047+
column_cell_ids = ["toggle", "tool#1", "pos1",
2048+
"x1", "y1", "z1", "a1", "b1", "c1", "u1", "v1", "w1",
2049+
"d1", "front1", "back1", "orient1", "comments1"]
20352050
for col, name in enumerate(column_cell_ids):
2036-
if col > 0 and col < 16:
2051+
if col > 0 and col < 17:
20372052
temp = self.widgets.tooledit1.wTree.get_object("cell_%s" % name)
2038-
temp.connect('editing-started', self.on_tool_col_edit_started, col)
2039-
# override 'tooledit_widget' method 'set_selected_tool'
2053+
if col < 16: # calulator is only useful for nummeric columns (ie not for 'Comments')
2054+
temp.connect('editing-started', self.on_tool_col_edit_started, col)
2055+
temp.connect('edited', self.on_tool_col_edited)
2056+
self.widgets.tooledit1.edited = False
2057+
# override 'tooledit_widget' method 'set_selected_tool' so we can set the label text
2058+
self.tooledit1_set_selected_tool = self.widgets.tooledit1.set_selected_tool
20402059
self.widgets.tooledit1.set_selected_tool = self.set_selected_tool
2060+
# override 'tooledit_widget' method 'toolfile_stale' so we can also update toolinfo
2061+
self.widgets.tooledit1.toolfile_stale = self.toolfile_stale
2062+
2063+
def toolfile_stale(self):
2064+
self._update_toolinfo(self.widgets.tooledit1.toolinfo_num)
2065+
self.widgets.tooledit1.reload(None)
2066+
self.widgets.tooledit1.set_selected_tool(self.widgets.tooledit1.toolinfo_num)
20412067

20422068
def set_selected_tool(self, toolnumber):
2043-
lbl_tool_text = "Tool loaded: " + str(toolnumber)
2069+
lbl_tool_text = _("Tool loaded: ") + str(toolnumber)
20442070
self.widgets.tooledit1.lbl_tool.set_text(lbl_tool_text)
2071+
self.tooledit1_set_selected_tool(toolnumber)
20452072

20462073
def on_tree_navigate_key_press(self, treeview, event, filter):
20472074
keyname = Gdk.keyval_name(event.keyval)
@@ -2116,13 +2143,17 @@ def on_tool_col_edit_started(self, widget, filtered_path, new_text, col):
21162143
store[row][col] = value
21172144
else:
21182145
store[row][col] = f"{value:11.4f}"
2146+
self.widgets.tooledit1.edited = True
21192147
# this is needed to get offsetview out of editing mode
21202148
GLib.timeout_add(50,
21212149
toolview.set_cursor,
21222150
toolpage.model.get_path(row),
21232151
toolview.get_columns()[0],
21242152
True)
21252153

2154+
def on_tool_col_edited (self, *args):
2155+
self.widgets.tooledit1.edited = True
2156+
21262157
def _init_themes(self):
21272158
# If there are themes then add them to combo box
21282159
model = self.widgets.theme_choice.get_model()
@@ -2598,6 +2629,8 @@ def _show_tooledit_tab(self, state):
25982629
self.widgets.ntb_preview.set_property("show-tabs", not state)
25992630
self.widgets.vbx_jog.hide()
26002631
self.widgets.ntb_preview.set_current_page(2)
2632+
self.widgets.tooledit1.reload(None)
2633+
self.widgets.tooledit1.edited = False
26012634
self.widgets.tooledit1.set_selected_tool(self.stat.tool_in_spindle)
26022635
if self.widgets.chk_use_kb_on_tooledit.get_active():
26032636
self.widgets.ntb_info.set_current_page(1)
@@ -4702,6 +4735,29 @@ def on_btn_back_clicked(self, widget, data=None):
47024735
self.widgets.tbtn_fullsize_preview0.set_active(False)
47034736
self.on_tbtn_fullsize_preview_toggled(self.widgets.tbtn_fullsize_preview0)
47044737
else: # else we go to main button on manual
4738+
if self.widgets.tooledit1.edited:
4739+
message = _("Discard unsaved changes and exit?")
4740+
result = self.dialogs.yesno_dialog(self, message, _("Attention!"))
4741+
if not result: # user says no, he want to save
4742+
return
4743+
# check if offset values for current tool have been changed
4744+
tt = self.stat.tool_table[0]
4745+
new_offset = (tt.xoffset, tt.yoffset, tt.zoffset,
4746+
tt.aoffset, tt.boffset, tt.coffset,
4747+
tt.uoffset, tt.voffset, tt.woffset)
4748+
if (new_offset != self.stat.tool_offset) and ("G43" in self.active_gcodes):
4749+
message = _("Offset values for the tool in the spindle\n" \
4750+
"have been changed whith tool compensation (G43) active.\n\n" \
4751+
"Do you want the new values to be applied as the currently\n" \
4752+
"active tool offset?")
4753+
result = self.dialogs.yesno_dialog(self, message, _("Attention!"))
4754+
if result: # user says YES
4755+
self.command.mode(linuxcnc.MODE_MDI)
4756+
self.command.wait_complete()
4757+
self.command.mdi("G43")
4758+
self.command.wait_complete()
4759+
self.command.mode(linuxcnc.MODE_MANUAL)
4760+
self.command.wait_complete()
47054761
self.widgets.ntb_button.set_current_page(_BB_MANUAL)
47064762
self.widgets.ntb_main.set_current_page(0)
47074763
self.widgets.ntb_preview.set_current_page(0)
@@ -5436,26 +5492,32 @@ def on_tool_change(self, widget):
54365492
self.halcomp['toolchange-changed'] = False
54375493

54385494
def on_btn_delete_tool_clicked(self, widget, data=None):
5439-
act_tool = self.stat.tool_in_spindle
5440-
if act_tool == self.widgets.tooledit1.get_selected_tool():
5495+
selected_tool = self.widgets.tooledit1.get_selected_row()
5496+
if self.stat.tool_in_spindle == selected_tool:
54415497
message = _("You are trying to delete the tool mounted in the spindle\n")
54425498
message += _("This is not allowed, please change tool prior to delete it")
54435499
self.dialogs.warning_dialog(self, _("Warning Tool can not be deleted!"), message)
54445500
return
5445-
5446-
self.widgets.tooledit1.delete(None)
5447-
self.widgets.tooledit1.set_selected_tool(act_tool)
5501+
self.widgets.tooledit1.delete_selected_row(widget)
5502+
self.widgets.tooledit1.edited = True
54485503

54495504
def on_btn_add_tool_clicked(self, widget, data=None):
54505505
self.widgets.tooledit1.add(None)
5506+
self.widgets.tooledit1.edited = True
54515507

54525508
def on_btn_reload_tooltable_clicked(self, widget, data=None):
5509+
if self.widgets.tooledit1.edited:
5510+
message = _("Discard unsaved changes and reload the table?")
5511+
result = self.dialogs.yesno_dialog(self, message, _("Attention!"))
5512+
if not result: # user says no, he want to save
5513+
return
54535514
self.widgets.tooledit1.reload(None)
5515+
self.widgets.tooledit1.edited = False
54545516
self.widgets.tooledit1.set_selected_tool(self.stat.tool_in_spindle)
54555517

54565518
def on_btn_save_tool_changes_clicked(self, widget, data=None):
54575519
self.widgets.tooledit1.save(None)
5458-
self.widgets.tooledit1.set_selected_tool(self.stat.tool_in_spindle)
5520+
self.widgets.tooledit1.edited = False
54595521

54605522
def on_btn_tool_touchoff_clicked(self, widget, data=None):
54615523
if not self.widgets.tooledit1.get_selected_tool():
@@ -5512,6 +5574,11 @@ def on_btn_tool_touchoff_clicked(self, widget, data=None):
55125574

55135575
# select a tool entering a number
55145576
def on_btn_select_tool_by_no_clicked(self, widget, data=None):
5577+
if self.widgets.tooledit1.edited:
5578+
message = _("Discard unsaved changes and change tool?")
5579+
result = self.dialogs.yesno_dialog(self, message, _("Attention!"))
5580+
if not result: # user says no, he want to save
5581+
return
55155582
value = self.dialogs.entry_dialog(self, data=None, header=_("Enter the tool number as integer "),
55165583
label=_("Select the tool to change"), integer=True)
55175584
if value == "ERROR":
@@ -5534,9 +5601,14 @@ def on_btn_select_tool_by_no_clicked(self, widget, data=None):
55345601
# Next two lines fix issue #3129 caused by GStat missing changes in interpreter mode
55355602
command = "G4 P{0}".format(self.get_ini_info.get_cycle_time()/1000)
55365603
self.command.mdi(command)
5537-
5604+
55385605
# set tool with M61 Q? or with T? M6
55395606
def on_btn_selected_tool_clicked(self, widget, data=None):
5607+
if self.widgets.tooledit1.edited:
5608+
message = _("Discard unsaved changes and change tool?")
5609+
result = self.dialogs.yesno_dialog(self, message, _("Attention!"))
5610+
if not result: # user says no, he want to save
5611+
return
55405612
tool = self.widgets.tooledit1.get_selected_row()
55415613
if tool == None:
55425614
message = _("you selected no or more than one tool, the tool selection must be unique")

0 commit comments

Comments
 (0)