From 3993eed5a06ccc47bff9223f100f7c0469148bd5 Mon Sep 17 00:00:00 2001 From: David Date: Mon, 7 Jul 2025 08:22:41 +0200 Subject: [PATCH 1/2] Gmoccapy: Move tool table buttons to table frame, add toggle button for calculator use --- .../icons/classic/32x32/actions/add.png | Bin 0 -> 7109 bytes .../icons/classic/32x32/actions/delete.png | Bin 0 -> 8347 bytes .../material/32x32/actions/add.symbolic.png | Bin 0 -> 147 bytes .../32x32/actions/delete.symbolic.png | Bin 0 -> 242 bytes src/emc/usr_intf/gmoccapy/gmoccapy.glade | 64 ++++++++---------- src/emc/usr_intf/gmoccapy/gmoccapy.py | 53 ++++++++++++++- 6 files changed, 79 insertions(+), 38 deletions(-) create mode 100644 share/gmoccapy/icons/classic/32x32/actions/add.png create mode 100644 share/gmoccapy/icons/classic/32x32/actions/delete.png create mode 100644 share/gmoccapy/icons/material/32x32/actions/add.symbolic.png create mode 100644 share/gmoccapy/icons/material/32x32/actions/delete.symbolic.png diff --git a/share/gmoccapy/icons/classic/32x32/actions/add.png b/share/gmoccapy/icons/classic/32x32/actions/add.png new file mode 100644 index 0000000000000000000000000000000000000000..1098f031c9c31017f22a0169f60f7ea90a9c9ae6 GIT binary patch literal 7109 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 z z7!kv|ZRpH7RR#t>lc4YS$=A#$@n1Q%hhlDq|JC2fg1Z0JcO(48S2mC0o8*pbXy38P zP8t!bFVXs!9I_Ehm}>uFx5DY)L$R|8a_uX`1U0oQqw`5${*R-IBG1LY)Oh;{sa)=c zp;>>^SVy+{R{Z-MqCb``+H_fo`@c*4tJZxP6`StBE!s&&U(s$sNpwH!?GqA$_L^_V zUQLA{asFnxyD5xRT-s}{TfcN*?(bOM&D@B?O=05QsSgiEkL15AijO}SIHdPI?`!N! z)h)W|0E(Wus;HMx%$WU};I|1cwfsd&tUm2rt_Zo?4t0yZPLHQT`h5ZUX4iv6Z_$sN zv|bA`VlL5S>f)mc?{f2;o2DV1cCfVeUO@izTFut+#Llnp6ZOn9-099fni$>e%|BE2l>^;2a%`T6K{{g+1`4#{G literal 0 HcmV?d00001 diff --git a/share/gmoccapy/icons/classic/32x32/actions/delete.png b/share/gmoccapy/icons/classic/32x32/actions/delete.png new file mode 100644 index 0000000000000000000000000000000000000000..34eb0eef2401a5efb721920d244bfd3343057472 GIT binary patch literal 8347 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 literal 0 HcmV?d00001 diff --git a/share/gmoccapy/icons/material/32x32/actions/add.symbolic.png b/share/gmoccapy/icons/material/32x32/actions/add.symbolic.png new file mode 100644 index 0000000000000000000000000000000000000000..b739cab0c4c8b960c849c2b4b7b73953c2123aa9 GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJC{Gv1kO=p;(+#>VL? so7oLO;t#Z$1tZM2{nBSxkdwg7p(~;Ic;fQoKwB6*UHx3vIVCg!03Q-E82|tP literal 0 HcmV?d00001 diff --git a/share/gmoccapy/icons/material/32x32/actions/delete.symbolic.png b/share/gmoccapy/icons/material/32x32/actions/delete.symbolic.png new file mode 100644 index 0000000000000000000000000000000000000000..5074b9011547654193a4dd3c6d4695df01c1ee9f GIT binary patch literal 242 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJot`d^ArbD$DG~_>EDn4#?y+jP zA|SxvcC(u4qT8gIJ4EiYM=f%A`lXO5W1i}+na$T2qa3E6V*Y5hqMP?5Pw(e|+Bk<_ zasu~N%vc;=IRr9vaS14B#!b}u$)Bpt^pgFCP2>3oj;|SJte0u9v*P$V)qcXg2GuPY zLQISKBzPMy3P1_Qpjm7tD|_7fm>uj|Srs++sjYnIykcc2i^True False + + True + False + + + True + False + + + True + False + + + True + False + + + True + False + @@ -7405,18 +7425,11 @@ MDI history True False - - Delete - False + 90 56 True - True - True - delete selected tool or tools - center - center - + False False @@ -7425,18 +7438,11 @@ MDI history - - Add - False + 90 56 True - True - True - add a new tool to tool table - center - center - + False False @@ -7445,18 +7451,11 @@ MDI history - - Reload - False + 90 56 True - True - True - reload tool table from file - center - center - + False False @@ -7465,18 +7464,11 @@ MDI history - - Apply - False + 90 56 True - True - True - apply the changes you made, G43 will be executed only if it is active G-code - center - center - + False False diff --git a/src/emc/usr_intf/gmoccapy/gmoccapy.py b/src/emc/usr_intf/gmoccapy/gmoccapy.py index f217fc0d57f..0d352ddf89a 100644 --- a/src/emc/usr_intf/gmoccapy/gmoccapy.py +++ b/src/emc/usr_intf/gmoccapy/gmoccapy.py @@ -1954,7 +1954,47 @@ def _init_tooleditor(self): if not self.get_ini_info.get_lathe_wear_offsets(): # hide the wear offset tabs self.widgets.tooledit1.set_lathe_display(False) - self.widgets.tooledit1.hide_buttonbox(True) + # Modify the button box at the bottom + buttonbox = self.widgets.tooledit1.wTree.get_object("buttonbox") + buttonbox.set_layout(Gtk.ButtonBoxStyle.EDGE) + buttonbox.set_property("homogeneous", True) + # Delete button + btn_delete = self.widgets.tooledit1.wTree.get_object("delete") + btn_delete.set_size_request(56, 56) + btn_delete.set_label("") + btn_delete.set_image(self.widgets.img_tool_delete) + btn_delete.set_always_show_image(True) + # Add button + btn_add = self.widgets.tooledit1.wTree.get_object("add") + btn_add.set_size_request(56, 56) + btn_add.set_label("") + btn_add.set_image(self.widgets.img_tool_add) + btn_add.set_always_show_image(True) + # Reload button + btn_reload = self.widgets.tooledit1.wTree.get_object("reload") + btn_reload.set_size_request(56, 56) + btn_reload.set_label("") + btn_reload.set_image(self.widgets.img_tool_reload) + btn_reload.set_always_show_image(True) + # Save button + btn_save = self.widgets.tooledit1.wTree.get_object("apply") + btn_save.set_size_request(56, 56) + btn_save.set_label("") + btn_save.set_image(self.widgets.img_tool_save) + btn_save.set_always_show_image(True) + # Empty space in between + spacer = Gtk.Label() + spacer.show_all() + buttonbox.pack_start(spacer,True,True,0) + # Calculator button + btn_calculator = Gtk.ToggleButton() + btn_calculator.set_size_request(56, 56) + btn_calculator.set_image(self.widgets.img_tool_calculator) + btn_calculator.set_tooltip_text(_("Use calculator to edit numeric values")) + btn_calculator.show_all() + btn_calculator.set_active(self.toolpage_use_calc) + btn_calculator.connect("toggled", self.on_use_calculator_toggled) + buttonbox.pack_start(btn_calculator,False,False,50) column_cell_ids = ["toggle", "tool#1", "pos1", "x1", "y1", "z1", "a1", "b1", "c1", "u1", "v1", "w1", "d1", "front1", "back1", "orient1", "cell_comments1"] for col, name in enumerate(column_cell_ids): @@ -1962,6 +2002,9 @@ def _init_tooleditor(self): temp = self.widgets.tooledit1.wTree.get_object("cell_%s" % name) temp.connect('editing-started', self.on_tool_col_edit_started, col) + def on_use_calculator_toggled(self,widget): + self.toolpage_use_calc = widget.get_active() + def on_tool_col_edit_started(self, widget, filtered_path, new_text, col): if not self.toolpage_use_calc: return @@ -4731,6 +4774,12 @@ def _set_icon_theme(self, name): ("img_tool_clear", "clear", 24), ("img_tool_path", "toolpath", 24), ("img_dimensions", "dimensions", 24), + # tooledit frame controls + ("img_tool_delete", "delete", 32), + ("img_tool_add", "add", 32), + ("img_tool_reload", "refresh", 32), + ("img_tool_save", "save", 32), + ("img_tool_calculator", "calculator_open", 32), # coolant ("img_coolant_on", "coolant_flood_active", 48), ("img_coolant_off", "coolant_flood_inactive", 48), @@ -5224,7 +5273,7 @@ def on_btn_reload_tooltable_clicked(self, widget, data=None): self.widgets.tooledit1.reload(None) self.widgets.tooledit1.set_selected_tool(self.stat.tool_in_spindle) - def on_btn_apply_tool_changes_clicked(self, widget, data=None): + def on_btn_save_tool_changes_clicked(self, widget, data=None): self.widgets.tooledit1.save(None) self.widgets.tooledit1.set_selected_tool(self.stat.tool_in_spindle) From b553a295f435e3e711cebb30d4d477271ef5202e Mon Sep 17 00:00:00 2001 From: David Date: Mon, 7 Jul 2025 11:01:54 +0200 Subject: [PATCH 2/2] Gladevcp: tooledit_widget, auto scroll to the end of the list when adding tool --- lib/python/gladevcp/tooledit_widget.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/python/gladevcp/tooledit_widget.py b/lib/python/gladevcp/tooledit_widget.py index 9fdb6ccfcfe..cedceaf229b 100644 --- a/lib/python/gladevcp/tooledit_widget.py +++ b/lib/python/gladevcp/tooledit_widget.py @@ -231,6 +231,8 @@ def match_tool(model, path, iter, pathlist): def add(self,widget,data=[1,0,0,'0','0','0','0','0','0','0','0','0','0','0','0',0,"comment"]): self.model.append(data) self.num_of_col +=1 + liststore = self.model + self.wTree.get_object("treeview1").scroll_to_cell(len(liststore)-1) # this is for adding a filename path after the tooleditor is already loaded. def set_filename(self,filename):