From d49f8a87e6aa1bdbbecdfe23ebb6eb22a9e34364 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Wed, 25 Nov 2020 23:06:20 +0200 Subject: [PATCH] - in Tools Database added a new column showing the intended target and also added in the context menu an entry that will sort the tools by tool diameter - fixed in Tools Database the message pop-up that tools are modified but not saved on Toos Database tab closing --- CHANGELOG.md | 2 + appDatabase.py | 63 ++++++++++++++++-- appGUI/preferences/PreferencesUIManager.py | 6 +- app_Main.py | 6 +- .../resources/dark_resources/desc_sort32.png | Bin 0 -> 751 bytes assets/resources/desc_sort32.png | Bin 0 -> 680 bytes 6 files changed, 64 insertions(+), 13 deletions(-) create mode 100644 assets/resources/dark_resources/desc_sort32.png create mode 100644 assets/resources/desc_sort32.png diff --git a/CHANGELOG.md b/CHANGELOG.md index 4edf640a..8071bc33 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,8 @@ CHANGELOG for FlatCAM beta - added a text placeholder in the Tcl Shell - added Find function in Tcl Shell (will search for either the selected text in the command line or for the one stored on the clipboard) - using 'Escape' key shortcut while the focus is in the Tcl Shell command line will set focus on the main canvas +- in Tools Database added a new column showing the intended target and also added in the context menu an entry that will sort the tools by tool diameter +- fixed in Tools Database the message pop-up that tools are modified but not saved on Toos Database tab closing 24.11.2020 diff --git a/appDatabase.py b/appDatabase.py index 3f285d94..3fddeed9 100644 --- a/appDatabase.py +++ b/appDatabase.py @@ -40,8 +40,8 @@ class ToolsDB2UI: tree_layout = QtWidgets.QVBoxLayout() self.g_lay.addLayout(tree_layout, 0, 0) - self.tree_widget = FCTree(columns=2, header_hidden=False, protected_column=[0]) - self.tree_widget.setHeaderLabels([_("ID"), _("Tool Name")]) + self.tree_widget = FCTree(columns=3, header_hidden=False, protected_column=[0, 2]) + self.tree_widget.setHeaderLabels([_("ID"), _("Tool Name"), _("Target")]) self.tree_widget.setIndentation(0) self.tree_widget.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) self.tree_widget.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection) @@ -1388,7 +1388,7 @@ class ToolsDB2(QtWidgets.QWidget): self.on_tool_request = callback_on_tool_request - self.tools_db_changed_flag = False + self.app.tools_db_changed_flag = False ''' dict to hold all the tools in the Tools DB @@ -1624,6 +1624,16 @@ class ToolsDB2(QtWidgets.QWidget): def on_menu_request(self, pos): menu = QtWidgets.QMenu() + + # sort_by_id = menu.addAction(QtGui.QIcon(self.app.resource_location + '/plus16.png'), _("Sort by Operation")) + # sort_by_id.triggered.connect(self.on_sort_operation) + + sort_by_dia = menu.addAction(QtGui.QIcon + (self.app.resource_location + '/desc_sort32.png'), _("Sort by Diameter")) + sort_by_dia.triggered.connect(self.on_sort_dia) + + menu.addSeparator() + add_tool = menu.addAction(QtGui.QIcon(self.app.resource_location + '/plus16.png'), _("Add to DB")) add_tool.triggered.connect(self.on_tool_add) @@ -1633,7 +1643,7 @@ class ToolsDB2(QtWidgets.QWidget): delete_tool = menu.addAction(QtGui.QIcon(self.app.resource_location + '/delete32.png'), _("Delete from DB")) delete_tool.triggered.connect(self.on_tool_delete) - # sep = menu.addSeparator() + menu.addSeparator() save_changes = menu.addAction(QtGui.QIcon(self.app.resource_location + '/save_as.png'), _("Save changes")) save_changes.triggered.connect(self.on_save_changes) @@ -1662,8 +1672,37 @@ class ToolsDB2(QtWidgets.QWidget): def on_list_item_edited(self, item, column): if column == 0: return + elif column == 1: + self.ui.name_entry.set_value(item.text(1)) - self.ui.name_entry.set_value(item.text(1)) + def on_sort_operation(self): + for tool in self.db_tool_dict.values(): + dia = tool['tooldia'] + target = tool['data']['tool_target'] + + ordered_by_target = sorted(self.db_tool_dict.items(), key=lambda x: x[1]['data']['tool_target']) + for td, k in ordered_by_target: + print(td,k) + + self.build_db_ui() + self.on_tools_db_edited() + + def on_sort_dia(self): + dias = [tool['tooldia'] for tool in self.db_tool_dict.values()] + if dias: + dias.sort() + + new_dict = {} + t_id = 0 + for dia in dias: + for tool in self.db_tool_dict.values(): + if tool['tooldia'] == dia: + t_id += 1 + new_dict[str(t_id)] = tool + + self.db_tool_dict = deepcopy(new_dict) + self.build_db_ui() + self.on_tools_db_edited() def storage_to_form(self, dict_storage): self.ui_disconnect() @@ -1744,11 +1783,21 @@ class ToolsDB2(QtWidgets.QWidget): nr_crt += 1 t_name = dict_val['name'] + op_name = { + 0: _("General"), + 1: _("Milling"), + 2: _("Drilling"), + 3: _('Isolation'), + 4: _('Paint'), + 5: _('NCC'), + 6: _('Cutout') + }[dict_val['data']['tool_target']] try: # self.add_tool_table_line(row, name=t_name, tooldict=dict_val) self.ui.tree_widget.blockSignals(True) try: - self.ui.tree_widget.addParentEditable(parent=parent, title=[str(row+1), t_name], editable=True) + self.ui.tree_widget.addParentEditable( + parent=parent, title=[str(row+1), t_name, op_name], editable=True) except Exception as e: print('FlatCAMCoomn.ToolDB2.build_db_ui() -> ', str(e)) self.ui.tree_widget.blockSignals(False) @@ -2584,7 +2633,7 @@ class ToolsDB2(QtWidgets.QWidget): self.ui.save_db_btn.setStyleSheet("QPushButton {color: red;}") - self.tools_db_changed_flag = True + self.app.tools_db_changed_flag = True if silent is None: msg = '[WARNING_NOTCL] %s' % _("Tools in Tools Database edited but not saved.") self.app.inform[str, bool].emit(msg, False) diff --git a/appGUI/preferences/PreferencesUIManager.py b/appGUI/preferences/PreferencesUIManager.py index 44638cf7..9c167349 100644 --- a/appGUI/preferences/PreferencesUIManager.py +++ b/appGUI/preferences/PreferencesUIManager.py @@ -1153,7 +1153,7 @@ class PreferencesUIManager: self.preferences_changed_flag = True - def on_close_preferences_tab(self): + def on_close_preferences_tab(self, parent): if self.ignore_tab_close_event: return @@ -1190,9 +1190,9 @@ class PreferencesUIManager: # Prompt user to save if self.preferences_changed_flag is True: - msgbox = QtWidgets.QMessageBox() + msgbox = QtWidgets.QMessageBox(parent=parent) msgbox.setText(_("One or more values are changed.\n" - "Do you want to save the Preferences?")) + "Do you want to save?")) msgbox.setWindowTitle(_("Save Preferences")) msgbox.setWindowIcon(QtGui.QIcon(self.ui.app.resource_location + '/save_as.png')) msgbox.setIcon(QtWidgets.QMessageBox.Question) diff --git a/app_Main.py b/app_Main.py index d8d12471..3b759c2d 100644 --- a/app_Main.py +++ b/app_Main.py @@ -6095,15 +6095,15 @@ class App(QtCore.QObject): """ if tab_obj_name == "preferences_tab": - self.preferencesUiManager.on_close_preferences_tab() + self.preferencesUiManager.on_close_preferences_tab(parent=self.ui) elif tab_obj_name == "database_tab": # disconnect the signals from the table widget in tab self.tools_db_tab.ui_disconnect() if self.tools_db_changed_flag is True: - msgbox = QtWidgets.QMessageBox() + msgbox = QtWidgets.QMessageBox(parent=self.ui) msgbox.setText(_("One or more Tools are edited.\n" - "Do you want to update the Tools Database?")) + "Do you want to save?")) msgbox.setWindowTitle(_("Save Tools Database")) msgbox.setWindowIcon(QtGui.QIcon(self.resource_location + '/save_as.png')) msgbox.setIcon(QtWidgets.QMessageBox.Question) diff --git a/assets/resources/dark_resources/desc_sort32.png b/assets/resources/dark_resources/desc_sort32.png new file mode 100644 index 0000000000000000000000000000000000000000..8748cff2331617481caf1ad800df521344f4e75f GIT binary patch literal 751 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10f+@+{-GzZ+Rj;xUkjGiz z5n0T@z;^_M8K-LVNdpDhOFVsD*`IJrin54JoO=2n0|Vn;PZ!4!kKF z^ledIQyV%jHSOShwQNU-dbHqCF0MsQ7B3cccmIgz&|CLN>&n6v7fx<$n(eClLO?TV zYTOc$g_l;@w*ScxT7RMB()5Q9e!u(uaPRS_jQ{OA%2q6%VX!3X=WBzQXR&%+Nu36I z?!Lic|GB#NSeMKLe9Y^^XQZB5l+Ugvoohu!*^H6?+yj6pNNVN1K zzJz&B^F!C|`%<@q=|YP^{?xybJf`dy+C5a-^>*ht-dNLndxyCmV{Bwftl#;2POle+ ze|W)f)%Gp+?atf}Ih73wOq;*8u)os#HY?gevojdKmZ}se14tq9S ztW9B@z`X6$$LA@ocbmkMJuYTmu4}SzSXRJtz^*dx3G+TWWuEMoX`}z%(fM+ zOJuiX;Fxazyx`;Qys!fvo=<+e7T@`g`~zbJWXT<6|`kF973KwZt`| zBqgyV)hf9t6-Y4{85kMp8XD>vnT8k{S{ayF85wCC7+4t?e7I_DjiMnpKP5A*61RrN zj^=it21$?&!TD(=<%vb94CUqJdYO6I#mR{Use1WE>9gP2NC6cwc)I$ztaD0e0sy2z BD;fX* literal 0 HcmV?d00001 diff --git a/assets/resources/desc_sort32.png b/assets/resources/desc_sort32.png new file mode 100644 index 0000000000000000000000000000000000000000..6267c05af38516c28626cfee3d8f2f7c817bbe77 GIT binary patch literal 680 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10f+@+{-GzZ+Rj;xUkjGiz z5n0T@z;^_M8K-LVNdpDhOFVsD*`IJriZUw*=ABr;z`$7M>EamTas29({rb*Dk#~;NhYork3`PzdLjd+r(djJi968b40)UkBY5yLNg zuYb>bH+7#l^K(A+pYw|Mf3G>e^ZTLw+h;sxm-x1UOFCrBP0ct#+ljqDuJxFu^Co(; z&X$S)lo*<~mBrR!eWcgy?K;lq3=b{kIwq^X$0d7__XVGDhW*cVWiI+H=yX~b$eAZ> zEwaaWO^a$9(~r=ICZ(eqx@){Ua`ISpzi3X>y1p!X_2$}CuBHvEp8TPPFN%_Gm#%D!X7S86hvrzS{<>D;+ znWPwT(CYInu2WMY)Xpim_gF_X<*GFrnn??1PIMN?$!U@PCeTuROZxrfqn%1;w%?sw zYrnYdExX8u8_JIrD~)VcXKq{Ad1ztKQP&Ue3*I~4)L0<4(!iDPgz=%t_A;MqPB{ep z&(Tdg>Grqg|At!TgPXcL%eXFT03$`U#5JNMC9x#cD!C{XNHG{07#Zjq8tNLEh8P)I z85mm`8)+LDSQ!}HTdZ&gMMG|WN@iLmZVl`I%}4-hkObKfoS#-wo>-L1P+nfHmzkGc coSayYs+V7sKKq@G6i^X^r>mdKI;Vst0R9{NDF6Tf literal 0 HcmV?d00001