From 66adab95ca4dfc468cbee34a41e02ea9957cc4b6 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Wed, 15 Jul 2020 02:23:45 +0300 Subject: [PATCH] - added icons to some of the push buttons --- CHANGELOG.md | 4 +++ appDatabase.py | 5 ++++ appGUI/MainGUI.py | 12 ++++++--- appGUI/ObjectUI.py | 24 ++++++++++++++++++ appGUI/preferences/PreferencesUIManager.py | 2 ++ assets/resources/apply32.png | Bin 0 -> 444 bytes assets/resources/apply_red32.png | Bin 0 -> 543 bytes assets/resources/dark_resources/apply32.png | Bin 0 -> 543 bytes .../resources/dark_resources/apply_red32.png | Bin 0 -> 543 bytes .../dark_resources/drilling_tool32.png | Bin 0 -> 1229 bytes .../dark_resources/milling_tool32.png | Bin 0 -> 1535 bytes assets/resources/dark_resources/pref.png | Bin 793 -> 1044 bytes assets/resources/dark_resources/restore32.png | Bin 0 -> 1246 bytes assets/resources/drilling_tool32.png | Bin 0 -> 932 bytes assets/resources/milling_tool32.png | Bin 0 -> 1024 bytes assets/resources/pref.png | Bin 736 -> 854 bytes assets/resources/restore32.png | Bin 0 -> 836 bytes 17 files changed, 43 insertions(+), 4 deletions(-) create mode 100644 assets/resources/apply32.png create mode 100644 assets/resources/apply_red32.png create mode 100644 assets/resources/dark_resources/apply32.png create mode 100644 assets/resources/dark_resources/apply_red32.png create mode 100644 assets/resources/dark_resources/drilling_tool32.png create mode 100644 assets/resources/dark_resources/milling_tool32.png create mode 100644 assets/resources/dark_resources/restore32.png create mode 100644 assets/resources/drilling_tool32.png create mode 100644 assets/resources/milling_tool32.png create mode 100644 assets/resources/restore32.png diff --git a/CHANGELOG.md b/CHANGELOG.md index 9ea6c6b9..05b16ff1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ CHANGELOG for FlatCAM beta ================================================= +15.07.2020 + +- added icons to some of the push buttons + 14.07.2020 - Drilling Tool - now there is an Excellon preference that control the autoload of tools from the Tools Database diff --git a/appDatabase.py b/appDatabase.py index c30012a4..03ef3591 100644 --- a/appDatabase.py +++ b/appDatabase.py @@ -2054,6 +2054,7 @@ class ToolsDB2UI: self.buttons_frame.show() self.add_entry_btn = FCButton(_("Add Tool in DB")) + self.add_entry_btn.setIcon(QtGui.QIcon(self.app.resource_location + '/plus16.png')) self.add_entry_btn.setToolTip( _("Add a new tool in the Tools Database.\n" "It will be used in the Geometry UI.\n" @@ -2070,24 +2071,28 @@ class ToolsDB2UI: # self.buttons_box.addWidget(add_fct_entry_btn) self.remove_entry_btn = FCButton(_("Delete Tool from DB")) + self.remove_entry_btn.setIcon(QtGui.QIcon(self.app.resource_location + '/trash16.png')) self.remove_entry_btn.setToolTip( _("Remove a selection of tools in the Tools Database.") ) self.buttons_box.addWidget(self.remove_entry_btn) self.export_db_btn = FCButton(_("Export DB")) + self.export_db_btn.setIcon(QtGui.QIcon(self.app.resource_location + '/export.png')) self.export_db_btn.setToolTip( _("Save the Tools Database to a custom text file.") ) self.buttons_box.addWidget(self.export_db_btn) self.import_db_btn = FCButton(_("Import DB")) + self.import_db_btn.setIcon(QtGui.QIcon(self.app.resource_location + '/import.png')) self.import_db_btn.setToolTip( _("Load the Tools Database information's from a custom text file.") ) self.buttons_box.addWidget(self.import_db_btn) self.save_db_btn = FCButton(_("Save DB")) + self.save_db_btn.setIcon(QtGui.QIcon(self.app.resource_location + '/save_as.png')) self.save_db_btn.setToolTip( _("Save the Tools Database information's.") ) diff --git a/appGUI/MainGUI.py b/appGUI/MainGUI.py index 47a55c46..d7be9251 100644 --- a/appGUI/MainGUI.py +++ b/appGUI/MainGUI.py @@ -936,7 +936,7 @@ class MainGUI(QtWidgets.QMainWindow): self.isolation_btn = self.toolbartools.addAction( QtGui.QIcon(self.app.resource_location + '/iso_16.png'), _("Isolation Tool")) self.drill_btn = self.toolbartools.addAction( - QtGui.QIcon(self.app.resource_location + '/drill16.png'), _("Drilling Tool")) + QtGui.QIcon(self.app.resource_location + '/drilling_tool32.png'), _("Drilling Tool")) self.toolbartools.addSeparator() self.panelize_btn = self.toolbartools.addAction( @@ -1385,8 +1385,8 @@ class MainGUI(QtWidgets.QMainWindow): self.pref_tab_bottom_layout_1.setAlignment(QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter) self.pref_tab_bottom_layout.addLayout(self.pref_tab_bottom_layout_1) - self.pref_defaults_button = QtWidgets.QPushButton() - self.pref_defaults_button.setText(_("Restore Defaults")) + self.pref_defaults_button = FCButton(_("Restore Defaults")) + self.pref_defaults_button.setIcon(QtGui.QIcon(self.app.resource_location + '/restore32.png')) self.pref_defaults_button.setMinimumWidth(130) self.pref_defaults_button.setToolTip( _("Restore the entire set of default values\n" @@ -1395,6 +1395,7 @@ class MainGUI(QtWidgets.QMainWindow): self.pref_open_button = QtWidgets.QPushButton() self.pref_open_button.setText(_("Open Pref Folder")) + self.pref_open_button.setIcon(QtGui.QIcon(self.app.resource_location + '/pref.png')) self.pref_open_button.setMinimumWidth(130) self.pref_open_button.setToolTip( _("Open the folder where FlatCAM save the preferences files.")) @@ -1402,6 +1403,7 @@ class MainGUI(QtWidgets.QMainWindow): # Clear Settings self.clear_btn = FCButton('%s' % _('Clear GUI Settings')) + self.clear_btn.setIcon(QtGui.QIcon(self.app.resource_location + '/trash32.png')) self.clear_btn.setMinimumWidth(130) self.clear_btn.setToolTip( @@ -1416,6 +1418,7 @@ class MainGUI(QtWidgets.QMainWindow): self.pref_tab_bottom_layout.addLayout(self.pref_tab_bottom_layout_2) self.pref_apply_button = FCButton() + self.pref_apply_button.setIcon(QtGui.QIcon(self.app.resource_location + '/apply32.png')) self.pref_apply_button.setText(_("Apply")) self.pref_apply_button.setMinimumWidth(130) self.pref_apply_button.setToolTip( @@ -1423,6 +1426,7 @@ class MainGUI(QtWidgets.QMainWindow): self.pref_tab_bottom_layout_2.addWidget(self.pref_apply_button) self.pref_save_button = QtWidgets.QPushButton() + self.pref_save_button.setIcon(QtGui.QIcon(self.app.resource_location + '/save_as.png')) self.pref_save_button.setText(_("Save")) self.pref_save_button.setMinimumWidth(130) self.pref_save_button.setToolTip( @@ -2087,7 +2091,7 @@ class MainGUI(QtWidgets.QMainWindow): self.isolation_btn = self.toolbartools.addAction( QtGui.QIcon(self.app.resource_location + '/iso_16.png'), _("Isolation Tool")) self.drill_btn = self.toolbartools.addAction( - QtGui.QIcon(self.app.resource_location + '/drill16.png'), _("Drilling Tool")) + QtGui.QIcon(self.app.resource_location + '/drilling_tool32.png'), _("Drilling Tool")) self.toolbartools.addSeparator() self.panelize_btn = self.toolbartools.addAction( diff --git a/appGUI/ObjectUI.py b/appGUI/ObjectUI.py index 9de7289b..6feaa0a1 100644 --- a/appGUI/ObjectUI.py +++ b/appGUI/ObjectUI.py @@ -150,6 +150,7 @@ class ObjectUI(QtWidgets.QWidget): self.common_grid.addWidget(self.offset_button, 4, 1) self.transformations_button = QtWidgets.QPushButton(_('Transformations')) + self.transformations_button.setIcon(QtGui.QIcon(self.app.resource_location + '/transform.png')) self.transformations_button.setToolTip( _("Geometrical transformations of the current object.") ) @@ -311,6 +312,7 @@ class GerberObjectUI(ObjectUI): # Editor self.editor_button = QtWidgets.QPushButton(_('Gerber Editor')) + self.editor_button.setIcon(QtGui.QIcon(self.app.resource_location + '/edit_file32.png')) self.editor_button.setToolTip( _("Edit an Gerber object.") ) @@ -341,6 +343,7 @@ class GerberObjectUI(ObjectUI): # Isolation Tool - will create isolation paths around the copper features self.iso_button = QtWidgets.QPushButton(_('Isolation Routing')) + # self.iso_button.setIcon(QtGui.QIcon(self.app.resource_location + '/iso_16.png')) self.iso_button.setToolTip( _("Create a Geometry object with\n" "toolpaths to cut around polygons.") @@ -355,6 +358,7 @@ class GerberObjectUI(ObjectUI): # ## Clear non-copper regions self.generate_ncc_button = QtWidgets.QPushButton(_('NCC Tool')) + self.generate_ncc_button.setIcon(QtGui.QIcon(self.app.resource_location + '/eraser26.png')) self.generate_ncc_button.setToolTip( _("Create the Geometry Object\n" "for non-copper routing.") @@ -369,6 +373,7 @@ class GerberObjectUI(ObjectUI): # ## Board cutout self.generate_cutout_button = QtWidgets.QPushButton(_('Cutout Tool')) + self.generate_cutout_button.setIcon(QtGui.QIcon(self.app.resource_location + '/cut32_bis.png')) self.generate_cutout_button.setToolTip( _("Generate the geometry for\n" "the board cutout.") @@ -615,6 +620,8 @@ class ExcellonObjectUI(ObjectUI): # Editor self.editor_button = QtWidgets.QPushButton(_('Excellon Editor')) + self.editor_button.setIcon(QtGui.QIcon(self.app.resource_location + '/edit_file32.png')) + self.editor_button.setToolTip( _("Edit an Excellon object.") ) @@ -645,6 +652,7 @@ class ExcellonObjectUI(ObjectUI): # Drilling Tool - will create GCode for drill holes self.drill_button = QtWidgets.QPushButton(_('Drilling Tool')) + self.drill_button.setIcon(QtGui.QIcon(self.app.resource_location + '/drilling_tool32.png')) self.drill_button.setToolTip( _("Generate GCode out of drill holes in an Excellon object.") ) @@ -658,6 +666,7 @@ class ExcellonObjectUI(ObjectUI): # Milling Tool - will create GCode for slot holes self.milling_button = QtWidgets.QPushButton(_('Milling Tool')) + self.milling_button.setIcon(QtGui.QIcon(self.app.resource_location + '/milling_tool32.png')) self.milling_button.setToolTip( _("Generate GCode out of slot holes in an Excellon object.") ) @@ -914,6 +923,21 @@ class GeometryObjectUI(ObjectUI): # self.geo_tools_table.setSortingEnabled(False) # self.geo_tools_table.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows) + # Editor + self.editor_button = QtWidgets.QPushButton(_('Geometry Editor')) + self.editor_button.setIcon(QtGui.QIcon(self.app.resource_location + '/edit_file32.png')) + + self.editor_button.setToolTip( + _("Edit an Geometry object.") + ) + self.editor_button.setStyleSheet(""" + QPushButton + { + font-weight: bold; + } + """) + grid0.addWidget(self.editor_button, 3, 0, 1, 2) + # Tool Offset grid1 = QtWidgets.QGridLayout() self.geo_table_box.addLayout(grid1) diff --git a/appGUI/preferences/PreferencesUIManager.py b/appGUI/preferences/PreferencesUIManager.py index 955d9bca..497404a2 100644 --- a/appGUI/preferences/PreferencesUIManager.py +++ b/appGUI/preferences/PreferencesUIManager.py @@ -872,6 +872,7 @@ class PreferencesUIManager: # restore the default stylesheet by setting a blank one self.ui.pref_apply_button.setStyleSheet("") + self.ui.pref_apply_button.setIcon(QtGui.QIcon(self.ui.app.resource_location + '/apply32.png')) self.inform.emit('%s' % _("Preferences applied.")) @@ -1096,6 +1097,7 @@ class PreferencesUIManager: self.ui.plot_tab_area.tabBar.setTabTextColor(idx, QtGui.QColor('red')) self.ui.pref_apply_button.setStyleSheet("QPushButton {color: red;}") + self.ui.pref_apply_button.setIcon(QtGui.QIcon(self.ui.app.resource_location + '/apply_red32.png')) self.preferences_changed_flag = True diff --git a/assets/resources/apply32.png b/assets/resources/apply32.png new file mode 100644 index 0000000000000000000000000000000000000000..b3e82916fb512311454d83f61dfea6dad6559370 GIT binary patch literal 444 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*`KiUiOCC@Zu`Lu6zcMHaSZV|{`Qg~A7i2b+l6+I zu*J7;Ws2~*JeHH%Yn`J~)!DVWz}{9Imt-zTjtsCmnqnY%2~EAK~H)Eqyo zX8p&Dqc`wj>;DPiYIFD0-g3KoH~DqeyytIPHk>HRa#z&(yt=yYN5$uU!Ig*aDqkvJ zKeuH=eSYcsWghjh(i5KHk>T)#&8{;b4Hj2z|mKv$`jxJHzuB$lLFB^RXvDF!10 zBLiInb6rD|5F;ZiV?!%Lb8Q0yD+7bqS{hqWH00)|WTsW()-bDl0tZloB*=!~{Irtt o#G+J&^73-M%)IR4!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10A|${k#1%;Yrz!#(_|w}% z21rSj1o;IsFuF=G%|5ei+D=Xm`Q86Y_mzoWs=j=Z&yzK|Q$rP~iZRLC-G!lpRn`N@ z;VkfoEM{QfI|9OtQ?>b|fr9KMp1!W^PuTgy6m-^bo}U5~%J6h?46!)io zVL#36n}7eeFH&k*!P1t@|3s`e`KI8u3LkXFgxD zO8V4NR;y!2zZ`J*Jh$ukpZ2CNw?((?mu!5gHvhHb|8&tQ-Dgf~?K{UdLyYs4`*f8^ zpq;8Et`Q|Ei6yC4$wjF^iowXh$UxV?T-VSf#K_3X*vQJnMBBi?%D|vfwA~LyLvDUb zW?Cg~4ICc!pMV-9K{f>ErERK(!v>gTe~ HDWM4fQw^+Y literal 0 HcmV?d00001 diff --git a/assets/resources/dark_resources/apply32.png b/assets/resources/dark_resources/apply32.png new file mode 100644 index 0000000000000000000000000000000000000000..b76c109ad89bc371120f7857c8765496f14bff29 GIT binary patch literal 543 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10A|${k#1%;Y|NsBt%eVJm zy#g{Gzk2)R<-5l(f#e$?`S|hU`}glZd-nbjkPSlb9=`(0zI*=sGm!h}1z63?x3}NE z1&W^mYJd3_XrO)P$3h?_RTAVE%)sa>!8H5KvS~XxIplZ$E8SNnda3&INj^{3D?3;i8w=Ys^S;5kl%>P8JH~FUE$C@UCMK*pD_7$X@v1bqY z`1yUz^y_E;g=aorvP$~YQdX;DN533!_&m4k_@DNsFSkXv?3ZkOsW$($?)FK#IZ0z{o(?z+BhRB*e(b%Gl7#*i_rV zz{-L1P+nfHmzkGcoSayYs+V7s UKKq@G6i^X^r>mdKI;Vst01o-v9{>OV literal 0 HcmV?d00001 diff --git a/assets/resources/dark_resources/apply_red32.png b/assets/resources/dark_resources/apply_red32.png new file mode 100644 index 0000000000000000000000000000000000000000..875c84566353a125653c2bf023b69ddca14e4185 GIT binary patch literal 543 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10A|${k#1%;Yrz!#(_|w}% z21rSj1o;IsFuF=G%|5ei+D=Xm`Q86Y_mzoWs=j=Z&yzK|Q$rP~iZRLC-G!lpRn`N@ z;VkfoEM{QfI|9OtQ?>b|fr9KMp1!W^PuTgy6m-^bo}U5~%J6h?46!)io zVL#36n}7eeFH&k*!P1t@|3s`e`KI8u3LkXFgxD zO8V4NR;y!2zZ`J*Jh$ukpZ2CNw?((?mu!5gHvhHb|8&tQ-Dgf~?K{UdLyYs4`*f8^ zpq;8Et`Q|Ei6yC4$wjF^iowXh$UxV?T-VSf#K_3X*vQJnMBBi?%D|vfwA~LyLvDUb zW?Cg~4ICc!pMV-9K{f>ErERK(!v>gTe~ HDWM4fQw^+Y literal 0 HcmV?d00001 diff --git a/assets/resources/dark_resources/drilling_tool32.png b/assets/resources/dark_resources/drilling_tool32.png new file mode 100644 index 0000000000000000000000000000000000000000..d17b24f8cd4b59e9154a138037575a4d2a6ebbc0 GIT binary patch literal 1229 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+0817lKvPlzi}!RyzrAH90} z_~qM2FWfM9auYv3bFFrt=3K9gl>J5M%@5}u?yfFNO{tvr;CIeF-$i~q zU-Sy^(wJpvkRW5W7HB_XlDE4HLkFv@2av;A;1OBOz`%C|gc+x5^GO2**-JcqUD=SWVhy5fl5w5aU(tmS2= z{{HX(eyPRE{n3v2N!IVn@9j2r{=z?X3Rhc9p7a8r7R8Ns-f{73?YYNQk#m2=m!GO9 z->=@{AK3aTE5!21nuiX(%mLlIs;*cu@N%$Rcwy3&5FEVu^9HAd_h0L-eOM4-)Ue5H z(u~YpO}qT}4}^O*?Dt#Ht#qe!%k1{MwoM9)&80*|U%fu=pySsi(fiFwtYw}f8;6X% zmw;hHMM6t@fXkvI0_(YtF-=;W{6~weXScIv3uR%&XJbCM7au zuVP)3pHQrw%=jv*kWJ~o*;|&f%GuSsTTg|b@R3?sYvr*qQASQ^tE}whIxh8@`VN;j z3wHVyx|P&9mUMbgQo6ai@auD7)$8Wl*VN{|Q+xjJr^}ml4^G#fxO@Nkgm-#B+GkvS zws`0E)a$|@zWhnL6~6jx%A@L!AAfwWKXmKp?CWm%Y!lj>Kk-ytXN`U-|7E!yBh&Ki zep&xM4Pa!dmbgZgq$HN4S|t~y0x1R~10w@n19M$NlMo{#D^p`DQxk0i11kfAO()bq z=>wr5H$NpatrE9}!&B!80yRj2YzWRzD=AMbN@XZ7FW1Y=%Pvk%EJ)SMFG`>N&PEET Oh{4m<&t;ucLK6TG_L@5Y literal 0 HcmV?d00001 diff --git a/assets/resources/dark_resources/milling_tool32.png b/assets/resources/dark_resources/milling_tool32.png new file mode 100644 index 0000000000000000000000000000000000000000..3ce4a593443b2378e4ebfa7d69f5bc7ba72f1312 GIT binary patch literal 1535 zcmZ`%c~BE)6#pWGBSZ)UkV7h{L@qT%5lx*Im_&mD1L07a5feESEk_{~b$XbH7oMXd z)dsC7w0NMRBeqzbSQP{usZO!2s0rE4ve|47L~HAGq;C`bqknYg+wXh(-tYI`@4at# zXJ;*)%n9QlgeIrUByu<-nb*q=c1dev4;=36QZrK#>OA1{kCM#}I;H^fp6`UrMbz)*-1U!`0MA^ZQk&GXr;3rAa zNLdX8O%OJ4!WtbNXD|Q&7&eB%l7`QB%axX-A)%|Zk+MCr zxzYm6HarY697eMP@Iylr82ye5GB7j4f*xT(6k5Q|G+_ZGgK+|E7*oqdaT*kDARQP* zLkrK%X3S#8oON;Mh@eN81{{CE$RlZJAEzLvg`lBX0`y=MQ~~icMuP3^0(NK(xK05^ z3PQ}dfcw5Qh@{`M7z$&%rU5Xs%>=2K`9R3o2waw(xiXBRTrfRFF@t65f|Duav|V7E ze$)rz5PHzlZVZWeF_-W3omPq}g!@eMzwRZVZ3EIVukimy{ zwQN-_LcVvHmvtoGHyoUvs`N~$C+_JRJl`);SAGSdNq*^))VzfQ#fr!vp(u(~ma#dw zV8KjX|NfS(+Yay1?)=)1`xo1N`=uBj5$GSp_hfme&u7aYi7roVzBhe62gic~KaI_n zdj!Ot<#IPrVX~Cf{J6n$Z5^l2eLt67LWPEerK&rG)@1gzi^=Ev2WS= z8*Y0|em}uRypkL-N3;E36}(o*I`WGZW3`Syud&7x+#(mad)$f$Pv{8`=;sAL zU>QS}=$b?NymEQb{t^73@Lo6K&MaL6|3~HdR(w~WH1XunnGIZSxq!nlhjLO3TJMJ^ z+KyKo!M+{1cW{>S&>+#5t;lXa-`BgMHHZ7K=+K(}?1CcyUL7x-f0q|Cs5_bC)p+*Q zvi85zG+b_Be#;Pd*^}ofl{aT@%gpT3Xf}3u9ny4Xe5cyc?p35Xszq)$ZmQKSo!&&+ zAhFiow5ht}>Wl7c(V~;_ic7iWcG5lZ>GkPXuh*&fo>(}ev@5N3r74a|()7g5RK6@f z`f_PhEU*2z(0@^A#y1Jc?C7?P{DYU9cNnq`WLdT9Qz_bGQ5P?45j5nA>k7PYf07i) z9^$;^%9|qgjU7vl|7;ttWdav%0`I&M59J3pb3<{vDK zM4Z06+)Tl8Rp=%4lQu3lcECNPTJxrCK^JM_ZqjiCf}t3X02b<)S~*YD&6mL660MT1 zRFx=IrQ+h6QaF%EC=$*VCeKcspC=NDlSJagqP1%{had3jkU$f>e4w?HS4st#bE$K>C!C8g*1icUtKy-)Bpeg literal 0 HcmV?d00001 diff --git a/assets/resources/dark_resources/pref.png b/assets/resources/dark_resources/pref.png index fe15f4bf1cdaf92c406e484a2a42f8046ccb31d5..56f407880e3592107c806aa195034a7279571319 100644 GIT binary patch literal 1044 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10;&Xsch%1nO{P^SJmv0}x z0HarLpT2$#;=X+M=;en;FW%jI`SRJbcOa2h@18-WfU<9Z=*dfv_#>F$lUHvazWngy z$tR%rqgOx$Zy&yX4HSI#?ETZHZy$h_fuul20Zn-O=*63dA3gxtPhWt|fBE*wYbfIp zP}%c05JR54dVl}<`zK)Sw{QQyfB!znF+c#c9c;_v=ODYFY@n+kf-m3RfBzon=BKZK ze@s4}3{?_N z-!#iOL|#_%d|K_PH`Ri(ec!+H{(CdaH2ao;g4!x}j3p^r=85sDEfH31!Z9ZwBAbW|YuPgf#c0MtE!Q!9u zy?}Z;JzX3_EKauuzl>^f5Ru*P;K~wtH#fMzvsm-;oy(WjeEyd&%*-VAv9jLa`x)EA zcR4Mmdx&(ndh9ro=&5w4?r1~m!5CKElOeZ$6-j<*`Ea5@%wzeaeYV;TXFNACt!P=% zpyX{S=ya`G-(m5&h0it5yf(X_AmZ0zvqdRfD}2?v?yRLTkGiC?)aQs5%J#fwd$e}- z{fBlQ8j8ZibXQY~?fC`m~yNwrEYN(E93Mg~R(x(4RDh9)6KMph=~R)*%<1_o9J z2Iu*G3s5xV=BH$)RpQpLFX-zTpaw~h4Z-BuF?hQAxvXr4HXYF zWKNN50005}Nkl6{$>U`TiC8C&6_OHv^*h{(j$`vda4PfJ6k}G z#;t6!Z@R1FI-`eHHkq%}VS@w_Tp;OBF@ZxrF5u$fv=35q4thCBw9$HiB!4aekYJQV z*c{AyX%;Cm?jHj$$78bWCAU_PT3yApO$nhfTefAL6G~}Fqq?PxHYwT(;;PcRsq0D$ zo!2wHG1E)UXm@9bzpKPmKtR&p@4fS8I0}syvaW?@?b5teHK~}c*>~Mj-}0000bbVXQnWMOn=I&E)c zX=Zr$i$07ruWs5}9{ z6Bw#Q0VrVufMo#?qXWRZ@WMc9EC94>adKKB1Q=~Lvz0JoB!WT1W}zm5;H1f9vY>?B zwISA76NatZa5q~?Gmby9uHSB8{zXzGW|X8{j5K35)9fsQ%p)6Mihpfw&5Tlp8Jo4t z;C3V=Cr}iHDe#s8z;uX#0^p!>Nef0GRvQ#a;h_N|)U+9m>umOlu=m zS?|K$8iEni)ALjilCP`9pjx|Tl$f+yEhyARVD|Tf@1I=f%790OMk0~|rnu&dZ?2q5 za*q0IA$&{c->aYb^6`g5qchW0#j+LU*K%sZvGR=ghhjIfq_rZ>xYYvB4Um~dn@T6ADp853!vjtD99)VfO&^nwB`_|9}GHa zgei$mh!b=3Zr1Sbzy~nroRA-%7X4$hG*`Nb!`i#Z+S}N%bBVcU&r&TtEzXP1aNaEL z8uu&xZIBG&ow4NW)Ps5D;X`DSUcL6^+5231dvJPsTCjdo5AEmc?>4&`tnQ7u2c%zn z^;~W*sqP<5EDxGkgwXPcPO$E5A8}^mHJ=j)~ z&g0cAa^lp-#S;%$4c{qz>&5!RQ!=F`nsKqT%Ab>QSEpA!4A6Bv9_~s$&jStKt1J4} z(QV>JgBJf#`{rpzyGLuL+~sO;gaHt!xKEXnuw{Fdh|YQ~sLLU*#ppOL35ssz_zxVZ zywNG^ZI4b#kWZ?KE6XoD+8MJ;`-=8DCfmAE;lBE7sH7RVY6e{Y`IqX z=YJB86lALomH&T2_?VIUQGBQh(t<;pGDT4iC@U)qQ{}%?tW*@{gcTI!enQ6jLJ$xp Lium0LSylf4*LtvW literal 0 HcmV?d00001 diff --git a/assets/resources/drilling_tool32.png b/assets/resources/drilling_tool32.png new file mode 100644 index 0000000000000000000000000000000000000000..4fa167be1ae85321e8325d2fa328565c1d80f9ec GIT binary patch literal 932 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*`KiUiJ2;MGn)tkH5GZfIEHu}UwYL)J0x9%?L+*c znX_(8kTeOJm}KH8Ak6gWP{bdmZClHp9^=2@6d>sRT8*VN^j4GJtrSBg&#SEq$`X^g z?;deAkJWaOwBo$j&?Go3Eon|=?3uZ%Ut`mL(bwHucL=}VGdu9zN`)VM=8td5>Yn7|`w_+c&H7dO{zMnH-!a$MzL=JM zf@9wy@qJ&WACLI9+1)@Y`~GAmRbh+AYnR?==2V?fr2njcn)#(Po)_1ix+EQ4?{)gM z$;*h)Z@t31N~AUV*UXsl-KJ~S+rC9=$7`3|UHId|`-$OBa^0d;y6aB3GPB*ikmtAk z_r!#AQ=_U}A53WuG|5xxlH2iMW|MzTzmf8>MK2ZvYb!-M8bqo_n@!YR#(HpjsM<6` z%_;evUhL{~V@zi%&-)c|aKh@qQ^$Y~QN3ZI;-c zOU>%Pmj20_e)EOi4~PAlUn*2jWUsx~nX0pM{c&#n!rQ6owf*u+jm1`Xj(H1P*#@qd z=O4Dg*zj=K|0pwwuh-vfNwt($v#<_dcWX_;o#&lJ>m?n}%`mh)xP`g%SK(vN#s~dU z^SA##IY(i}=f%0ESM9Y=M+jQT$S#h0vtensm>aCY5WiHS_W1gTo$8c~vxSdwa$T$Bo=7>o>z40H|5 zbq!5IjEt;IjjfDLwG9lc3=A$^P??9KAvZrIGp!Q0hQ+;elzErERK(!v>gTe~DWM4fH$Qzx literal 0 HcmV?d00001 diff --git a/assets/resources/milling_tool32.png b/assets/resources/milling_tool32.png new file mode 100644 index 0000000000000000000000000000000000000000..d038984ff708f4d3d7f93edea5b2ed0b78e11ce5 GIT binary patch literal 1024 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*`KiUi5csheb&bY)O60%#WBR=_|mKSK37vk*gy2& z;TA7(78IPzxuW<&LCBZ<)u~5gHkVJ#*|{_I|Fx>u+y&aNS+Cw$^L0`0wyrGKbt!At zUfnWh7pK+a3u~jCG#>D_IWaHV6=AqY{EpuDxF40Vb3Z@(S$n>C-}CBu&nEGj#+}}wKP@FsTu(gX zsQvV(uSVaqor{7TXWiG;Dqr`k=2y61#Ny+T)dep56=lmZL$j66zTWafIrKuJe)Chm zohuINa=C=u%9!lUX4^jiGuQjN>YL%%JaG^u&ZT*%7}T5_$O`&8{ZwZF1cEZ>;v-&}m+Z(4xPBlVu$ z?$Y%Cq- zt5;>riz@DJKNXVk&G1~u!c)E<*LXhvr^=z6bV$TZB4nj_d{s@`TIId3 zL+$?2<&S4=J6{>@TczCSvM1}vj4bw;fvf5+evy4u+SSQA|L_dyfEPQ&w1bqq_pS(M zHPhx)%ebi4Ga*^cbam1iT|<))BO@zQ zLn{*#Z36=<1B0sR-}q28ny#KnF&`qQLwrw2&AYBw7T9E|Dl)V<~|L zfRG1B1!>_85FiDFkU(||P7$CY{PYOP2020$mhn)qY}Q^QS%1mdX78Mt*_|_Y?&bd| z+7QAAMccxPNS=G!2|uML)YOEYQ-iE-i6I>NxZWvlu^ zsDO$P`c^GlHxN3e^Iz`>-L&e^GMBP*S{bG*bQ~W}Feh{!P*(TUeKWZ~oN?b%b!7*1 zh1p@cWFQ=wNPphL!oZ=wi(QHFoAphXgxDpIKp|%>BuozZ5?aDS&hMu1dRz%xBK{kmMd6b@BO-ng zZjBQ$-^Tqq!lO)zy`Bhd`^L5LFAnRc^G{V@`0R#r&bjG}(03_e&j|he;0 zZl~cRTYq`03mZ6?uAV#Tj+VBzmfKExk#eQPdjxNV>n1^6SRXa+_&~X!VAD@!bu}ucL>J4fW0Od=jjL@G_tL8GZYO-g>-`TjKO&@lh!Us( z001R)MObuXVRU6WV{&C-bY%cCFfuSLFgGnRG!s-ZGCDLiIy5#bFfckWFwR;do|Aq8 z7ECfQEigANF*H;%GCDLiIy5#bFfckWFuwi2CgJwQz-3S{iymX{}55 zl8FroB7)q?D=w}$I757P&Npf9?Gw(v?%rm3_srbtXLpR#BM#QrD{oCuecrLQ?Tp@h z6Gpxt85i#DFH6$&xV7Hd$#1!{luvd3^kOxh+s)TFRB zZtfC}$hDh33!nMxldW1>xx|mrHm@T0Ome=<$F>tUG`h_utIc&Kp;y;6e3Ql2Nf?6S6guYNqEiRH3q_oKo$sMIlg-)rdH zT(S5yFp^bETq8ZA diff --git a/assets/resources/restore32.png b/assets/resources/restore32.png new file mode 100644 index 0000000000000000000000000000000000000000..cebcbf14484e958f12ef504435c76b94f9ac3a5d GIT binary patch literal 836 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*`KiUiK*%Q3eFG$Y7+8vaSZV|zV^y#@6bRIwh!~w zW_Sfkd}(5{YZDYn^>xwJ$Wn3@;MK~!vV`rdw28qYHOKmfrYEM394kExy4WrT7l>r= zcb(D@H2SRdGP9unc=4{P{;+EQb8*?V_an1wv-AHIis~lCuRZB^Rm<>Mulujm>0VLl z$zC6h%T3>?E4#;W`%Rk z#J_B*7CgE{*|VZEvvD2AKd-+{KTRciG=w6rsJ(i#q3EKJ_MINC&aaOWc;;KxytH-uMR;yk*d%hKI1=dIe$wS5+ahj_i_q=0=o zP4Wt}vmdc*)SUiwEtL7*&bihx0vsu!e|+t|4LH2sUf;}eByDTfl@)=ykBz2CigQe3 z$@lfi&0p6zxyo_#-IXlo&m8e{E|#}G!@&}#;k`7YGqoV?-W{>n=Zl&?2-zAo?fu-> z>*kbP&S-k7RJCe@>bo_cjZOHoVg&9bSoF*&I;t=Hki+fuhMXgJpD!t$n7;P1oLm0q zDT^&0RQ$7lRpYb7BI!VIzVP{9;=Zl3wm4R=IN?+scI;Qk+?=Z~tK}?Sx5fTE*xebn zDsZpXRHnskw%6tF9r(Yuj`{RnshFEuOR9khMzzE>q9i4;B-JXpC>2OC7#SED=o*;o z8k&R{8Ce-ySeck;8yHv_8049Yx1(st%}>cptHiBAK5M--P=h4MhT#0PlJdl&REF~M ia=pyF?Be9af>gcyqV(DCY@~pS7(8A5T-G@yGywoDZAU@? literal 0 HcmV?d00001