浏览代码

- cleaned the Preferences classes and added the signals and signal slots in those classes, removing them from the main app class
- each FlatCAM object found in Preferences has it's own set of controls for changing the colors
- added a set of gray icons to be used when the theme is complete dark (for now it is useful only for MacOS with dark theme because at the moment the app is not styled to dark UI except the plot area)

Marius Stanciu 6 年之前
父节点
当前提交
55549c7ba5
共有 100 个文件被更改,包括 904 次插入507 次删除
  1. 124 373
      FlatCAMApp.py
  2. 12 11
      FlatCAMObj.py
  3. 3 0
      README.md
  4. 7 2
      camlib.py
  5. 1 1
      flatcamGUI/FlatCAMGUI.py
  6. 757 120
      flatcamGUI/PreferencesUI.py
  7. 二进制
      share/dark_resources/about32.png
  8. 二进制
      share/dark_resources/active.gif
  9. 二进制
      share/dark_resources/active_2.gif
  10. 二进制
      share/dark_resources/active_2_static.png
  11. 二进制
      share/dark_resources/active_3.gif
  12. 二进制
      share/dark_resources/active_3_static.png
  13. 二进制
      share/dark_resources/active_4.gif
  14. 二进制
      share/dark_resources/active_4_static.png
  15. 二进制
      share/dark_resources/active_static.png
  16. 二进制
      share/dark_resources/addarray16.png
  17. 二进制
      share/dark_resources/addarray20.png
  18. 二进制
      share/dark_resources/addarray32.png
  19. 二进制
      share/dark_resources/aero.png
  20. 二进制
      share/dark_resources/aero_arc.png
  21. 二进制
      share/dark_resources/aero_array.png
  22. 二进制
      share/dark_resources/aero_buffer.png
  23. 二进制
      share/dark_resources/aero_circle.png
  24. 二进制
      share/dark_resources/aero_circle_geo.png
  25. 二进制
      share/dark_resources/aero_disc.png
  26. 二进制
      share/dark_resources/aero_drill.png
  27. 二进制
      share/dark_resources/aero_drill_array.png
  28. 二进制
      share/dark_resources/aero_path1.png
  29. 二进制
      share/dark_resources/aero_path2.png
  30. 二进制
      share/dark_resources/aero_path3.png
  31. 二进制
      share/dark_resources/aero_path4.png
  32. 二进制
      share/dark_resources/aero_path5.png
  33. 二进制
      share/dark_resources/aero_semidisc.png
  34. 二进制
      share/dark_resources/aero_slot.png
  35. 二进制
      share/dark_resources/aero_text.png
  36. 二进制
      share/dark_resources/align_center32.png
  37. 二进制
      share/dark_resources/align_justify32.png
  38. 二进制
      share/dark_resources/align_left32.png
  39. 二进制
      share/dark_resources/align_right32.png
  40. 二进制
      share/dark_resources/aperture16.png
  41. 二进制
      share/dark_resources/aperture32.png
  42. 二进制
      share/dark_resources/arc16.png
  43. 二进制
      share/dark_resources/arc24.png
  44. 二进制
      share/dark_resources/arc32.png
  45. 二进制
      share/dark_resources/axis32.png
  46. 二进制
      share/dark_resources/backup24.png
  47. 二进制
      share/dark_resources/backup_export24.png
  48. 二进制
      share/dark_resources/backup_import24.png
  49. 二进制
      share/dark_resources/blocked16.png
  50. 二进制
      share/dark_resources/blue32.png
  51. 二进制
      share/dark_resources/bluelight12.png
  52. 二进制
      share/dark_resources/bold32.png
  53. 二进制
      share/dark_resources/bookmarks16.png
  54. 二进制
      share/dark_resources/bookmarks32.png
  55. 二进制
      share/dark_resources/brown32.png
  56. 二进制
      share/dark_resources/buffer16-2.png
  57. 二进制
      share/dark_resources/buffer16.png
  58. 二进制
      share/dark_resources/buffer20.png
  59. 二进制
      share/dark_resources/buffer24.png
  60. 二进制
      share/dark_resources/bug16.png
  61. 二进制
      share/dark_resources/bug32.png
  62. 二进制
      share/dark_resources/calculator16.png
  63. 二进制
      share/dark_resources/calculator24.png
  64. 二进制
      share/dark_resources/calibrate_16.png
  65. 二进制
      share/dark_resources/calibrate_32.png
  66. 二进制
      share/dark_resources/cancel_edit16.png
  67. 二进制
      share/dark_resources/cancel_edit32.png
  68. 二进制
      share/dark_resources/circle32.png
  69. 二进制
      share/dark_resources/clear_plot16.png
  70. 二进制
      share/dark_resources/clear_plot32.png
  71. 二进制
      share/dark_resources/close_edit_file16.png
  72. 二进制
      share/dark_resources/close_edit_file32.png
  73. 二进制
      share/dark_resources/cnc16.png
  74. 二进制
      share/dark_resources/cnc32.png
  75. 二进制
      share/dark_resources/code.png
  76. 二进制
      share/dark_resources/code_editor32.png
  77. 二进制
      share/dark_resources/convert24.png
  78. 二进制
      share/dark_resources/copperfill16.png
  79. 二进制
      share/dark_resources/copperfill32.png
  80. 二进制
      share/dark_resources/copy.png
  81. 二进制
      share/dark_resources/copy16.png
  82. 二进制
      share/dark_resources/copy32.png
  83. 二进制
      share/dark_resources/copy_16.png
  84. 二进制
      share/dark_resources/copy_file16.png
  85. 二进制
      share/dark_resources/copy_file32.png
  86. 二进制
      share/dark_resources/copy_geo.png
  87. 二进制
      share/dark_resources/corner32.png
  88. 二进制
      share/dark_resources/cut16.png
  89. 二进制
      share/dark_resources/cut16_bis.png
  90. 二进制
      share/dark_resources/cut32.png
  91. 二进制
      share/dark_resources/cut32_bis.png
  92. 二进制
      share/dark_resources/cutpath16.png
  93. 二进制
      share/dark_resources/cutpath24.png
  94. 二进制
      share/dark_resources/cutpath32.png
  95. 二进制
      share/dark_resources/database32.png
  96. 二进制
      share/dark_resources/defaults.png
  97. 二进制
      share/dark_resources/delete32.png
  98. 二进制
      share/dark_resources/delete_file16.png
  99. 二进制
      share/dark_resources/delete_file32.png
  100. 二进制
      share/dark_resources/deleteshape16.png

+ 124 - 373
FlatCAMApp.py

@@ -612,6 +612,8 @@ class App(QtCore.QObject):
             "excellon_save_filters": "Excellon File (*.txt);;Excellon File (*.drd);;Excellon File (*.drl);;"
                                      "Excellon File (*.exc);;Excellon File (*.ncd);;Excellon File (*.tap);;"
                                      "Excellon File (*.xln);;All Files (*.*)",
+            "excellon_plot_fill": '#C40000BF',
+            "excellon_plot_line": '#750000BF',
 
             # Excellon Options
             "excellon_drillz": -1.7,
@@ -672,6 +674,7 @@ class App(QtCore.QObject):
             "geometry_plot": True,
             "geometry_circle_steps": 64,
             "geometry_cnctooldia": "2.4",
+            "geometry_plot_line": "#FF0000",
 
             # Geometry Options
             "geometry_cutz": -2.4,
@@ -728,6 +731,10 @@ class App(QtCore.QObject):
                                    "G-Code Files (*.ngc);;G-Code Files (*.out);;G-Code Files (*.ply);;"
                                    "G-Code Files (*.sbp);;G-Code Files (*.tap);;G-Code Files (*.xpi);;"
                                    "All Files (*.*)",
+            "cncjob_plot_line": '#4650BDFF',
+            "cncjob_plot_fill": '#5E6CFFFF',
+            "cncjob_travel_line": '#B5AB3A4C',
+            "cncjob_travel_fill": '#F0E24D4C',
 
             # CNC Job Options
             "cncjob_prepend": "",
@@ -983,10 +990,10 @@ class App(QtCore.QObject):
         else:
             self.decimals = int(self.defaults['decimals_inch'])
 
-        if self.defaults["global_theme"] == 'white':
+        if self.defaults["global_gray_icons"] is False:
             self.resource_location = 'share'
         else:
-            self.resource_location = 'share'
+            self.resource_location = 'share/dark_resources'
 
         self.current_units = self.defaults['units']
 
@@ -1093,20 +1100,18 @@ class App(QtCore.QObject):
             "global_portable": self.ui.general_defaults_form.general_app_group.portability_cb,
             "global_language": self.ui.general_defaults_form.general_app_group.language_cb,
 
+            "global_systray_icon": self.ui.general_defaults_form.general_app_group.systray_cb,
+            "global_shell_at_startup": self.ui.general_defaults_form.general_app_group.shell_startup_cb,
+            "global_project_at_startup": self.ui.general_defaults_form.general_app_group.project_startup_cb,
             "global_version_check": self.ui.general_defaults_form.general_app_group.version_check_cb,
             "global_send_stats": self.ui.general_defaults_form.general_app_group.send_stats_cb,
 
             "global_worker_number": self.ui.general_defaults_form.general_app_group.worker_number_sb,
             "global_tolerance": self.ui.general_defaults_form.general_app_group.tol_entry,
 
-            "global_open_style": self.ui.general_defaults_form.general_app_group.open_style_cb,
-
             "global_compression_level": self.ui.general_defaults_form.general_app_group.compress_spinner,
             "global_save_compressed": self.ui.general_defaults_form.general_app_group.save_type_cb,
 
-            "global_bookmarks_limit": self.ui.general_defaults_form.general_app_group.bm_limit_spinner,
-            "global_machinist_setting": self.ui.general_defaults_form.general_app_group.machinist_cb,
-
             "global_tpdf_tmargin": self.ui.general_defaults_form.general_app_group.tmargin_entry,
             "global_tpdf_bmargin": self.ui.general_defaults_form.general_app_group.bmargin_entry,
             "global_tpdf_lmargin": self.ui.general_defaults_form.general_app_group.lmargin_entry,
@@ -1131,27 +1136,27 @@ class App(QtCore.QObject):
             "global_project_autohide": self.ui.general_defaults_form.general_gui_group.project_autohide_cb,
 
             # General GUI Settings
-            "global_gridx": self.ui.general_defaults_form.general_gui_set_group.gridx_entry,
-            "global_gridy": self.ui.general_defaults_form.general_gui_set_group.gridy_entry,
-            "global_snap_max": self.ui.general_defaults_form.general_gui_set_group.snap_max_dist_entry,
-            "global_workspace": self.ui.general_defaults_form.general_gui_set_group.workspace_cb,
-            "global_workspaceT": self.ui.general_defaults_form.general_gui_set_group.wk_cb,
-            "global_workspace_orientation": self.ui.general_defaults_form.general_gui_set_group.wk_orientation_radio,
-
-            "global_systray_icon": self.ui.general_defaults_form.general_gui_set_group.systray_cb,
-            "global_shell_at_startup": self.ui.general_defaults_form.general_gui_set_group.shell_startup_cb,
-            "global_project_at_startup": self.ui.general_defaults_form.general_gui_set_group.project_startup_cb,
-            "global_cursor_type": self.ui.general_defaults_form.general_gui_set_group.cursor_radio,
-            "global_cursor_size": self.ui.general_defaults_form.general_gui_set_group.cursor_size_entry,
-            "global_cursor_width": self.ui.general_defaults_form.general_gui_set_group.cursor_width_entry,
-            "global_cursor_color_enabled": self.ui.general_defaults_form.general_gui_set_group.mouse_cursor_color_cb,
-            "global_cursor_color": self.ui.general_defaults_form.general_gui_set_group.mouse_cursor_entry,
-            "global_pan_button": self.ui.general_defaults_form.general_gui_set_group.pan_button_radio,
-            "global_mselect_key": self.ui.general_defaults_form.general_gui_set_group.mselect_radio,
-            "global_delete_confirmation": self.ui.general_defaults_form.general_gui_set_group.delete_conf_cb,
-
-            "global_toggle_tooltips": self.ui.general_defaults_form.general_gui_set_group.toggle_tooltips_cb,
-            "global_activity_icon": self.ui.general_defaults_form.general_gui_set_group.activity_combo,
+            "global_gridx": self.ui.general_defaults_form.general_app_set_group.gridx_entry,
+            "global_gridy": self.ui.general_defaults_form.general_app_set_group.gridy_entry,
+            "global_snap_max": self.ui.general_defaults_form.general_app_set_group.snap_max_dist_entry,
+            "global_workspace": self.ui.general_defaults_form.general_app_set_group.workspace_cb,
+            "global_workspaceT": self.ui.general_defaults_form.general_app_set_group.wk_cb,
+            "global_workspace_orientation": self.ui.general_defaults_form.general_app_set_group.wk_orientation_radio,
+
+            "global_cursor_type": self.ui.general_defaults_form.general_app_set_group.cursor_radio,
+            "global_cursor_size": self.ui.general_defaults_form.general_app_set_group.cursor_size_entry,
+            "global_cursor_width": self.ui.general_defaults_form.general_app_set_group.cursor_width_entry,
+            "global_cursor_color_enabled": self.ui.general_defaults_form.general_app_set_group.mouse_cursor_color_cb,
+            "global_cursor_color": self.ui.general_defaults_form.general_app_set_group.mouse_cursor_entry,
+            "global_pan_button": self.ui.general_defaults_form.general_app_set_group.pan_button_radio,
+            "global_mselect_key": self.ui.general_defaults_form.general_app_set_group.mselect_radio,
+            "global_delete_confirmation": self.ui.general_defaults_form.general_app_set_group.delete_conf_cb,
+            "global_open_style": self.ui.general_defaults_form.general_app_set_group.open_style_cb,
+            "global_toggle_tooltips": self.ui.general_defaults_form.general_app_set_group.toggle_tooltips_cb,
+            "global_machinist_setting": self.ui.general_defaults_form.general_app_set_group.machinist_cb,
+
+            "global_bookmarks_limit": self.ui.general_defaults_form.general_app_set_group.bm_limit_spinner,
+            "global_activity_icon": self.ui.general_defaults_form.general_app_set_group.activity_combo,
 
             # Gerber General
             "gerber_plot": self.ui.gerber_defaults_form.gerber_gen_group.plot_cb,
@@ -1232,6 +1237,8 @@ class App(QtCore.QObject):
             "excellon_update": self.ui.excellon_defaults_form.excellon_gen_group.update_excellon_cb,
             "excellon_optimization_type": self.ui.excellon_defaults_form.excellon_gen_group.excellon_optimization_radio,
             "excellon_search_time": self.ui.excellon_defaults_form.excellon_gen_group.optimization_time_entry,
+            "excellon_plot_fill": self.ui.excellon_defaults_form.excellon_gen_group.fill_color_entry,
+            "excellon_plot_line": self.ui.excellon_defaults_form.excellon_gen_group.line_color_entry,
 
             # Excellon Options
             "excellon_drillz": self.ui.excellon_defaults_form.excellon_opt_group.cutz_entry,
@@ -1301,6 +1308,7 @@ class App(QtCore.QObject):
             "geometry_plot": self.ui.geometry_defaults_form.geometry_gen_group.plot_cb,
             "geometry_circle_steps": self.ui.geometry_defaults_form.geometry_gen_group.circle_steps_entry,
             "geometry_cnctooldia": self.ui.geometry_defaults_form.geometry_gen_group.cnctooldia_entry,
+            "geometry_plot_line": self.ui.geometry_defaults_form.geometry_gen_group.line_color_entry,
 
             # Geometry Options
             "geometry_cutz": self.ui.geometry_defaults_form.geometry_opt_group.cutz_entry,
@@ -1345,6 +1353,10 @@ class App(QtCore.QObject):
             "cncjob_fr_decimals": self.ui.cncjob_defaults_form.cncjob_gen_group.fr_dec_entry,
             "cncjob_steps_per_circle": self.ui.cncjob_defaults_form.cncjob_gen_group.steps_per_circle_entry,
             "cncjob_line_ending":  self.ui.cncjob_defaults_form.cncjob_gen_group.line_ending_cb,
+            "cncjob_plot_line": self.ui.cncjob_defaults_form.cncjob_gen_group.line_color_entry,
+            "cncjob_plot_fill": self.ui.cncjob_defaults_form.cncjob_gen_group.fill_color_entry,
+            "cncjob_travel_line": self.ui.cncjob_defaults_form.cncjob_gen_group.tline_color_entry,
+            "cncjob_travel_fill": self.ui.cncjob_defaults_form.cncjob_gen_group.tfill_color_entry,
 
             # CNC Job Options
             "cncjob_prepend": self.ui.cncjob_defaults_form.cncjob_opt_group.prepend_text,
@@ -1583,8 +1595,8 @@ class App(QtCore.QObject):
             self.on_layout(lay=initial_lay)
 
             # Set the combobox in Preferences to the current layout
-            idx = self.ui.general_defaults_form.general_gui_set_group.layout_combo.findText(initial_lay)
-            self.ui.general_defaults_form.general_gui_set_group.layout_combo.setCurrentIndex(idx)
+            idx = self.ui.general_defaults_form.general_gui_group.layout_combo.findText(initial_lay)
+            self.ui.general_defaults_form.general_gui_group.layout_combo.setCurrentIndex(idx)
 
             # after the first run, this object should be False
             self.defaults["first_run"] = False
@@ -2003,90 +2015,25 @@ class App(QtCore.QObject):
         # ######################### GUI PREFERENCES SIGNALS ###########################
         # #############################################################################
 
-        self.ui.general_defaults_form.general_app_group.ge_radio.activated_custom.connect(self.on_app_restart)
-        self.ui.general_defaults_form.general_app_group.language_apply_btn.clicked.connect(
-            lambda: fcTranslate.on_language_apply_click(self, restart=True)
-        )
         self.ui.general_defaults_form.general_app_group.units_radio.activated_custom.connect(
             lambda: self.on_toggle_units(no_pref=False))
 
-        # #############################################################################
-        # ############################# GUI COLORS SIGNALS ############################
-        # #############################################################################
-
-        # Setting selection (left - right) colors signals
-        self.ui.general_defaults_form.general_gui_group.sf_color_entry.editingFinished.connect(
-            self.on_sf_color_entry)
-        self.ui.general_defaults_form.general_gui_group.sf_color_button.clicked.connect(
-            self.on_sf_color_button)
-        self.ui.general_defaults_form.general_gui_group.sf_color_alpha_spinner.valueChanged.connect(
-            self.on_sf_color_spinner)
-        self.ui.general_defaults_form.general_gui_group.sf_color_alpha_slider.valueChanged.connect(
-            self.on_sf_color_slider)
-        self.ui.general_defaults_form.general_gui_group.sl_color_entry.editingFinished.connect(
-            self.on_sl_color_entry)
-        self.ui.general_defaults_form.general_gui_group.sl_color_button.clicked.connect(
-            self.on_sl_color_button)
-
-        # Setting selection (right - left) colors signals
-        self.ui.general_defaults_form.general_gui_group.alt_sf_color_entry.editingFinished.connect(
-            self.on_alt_sf_color_entry)
-        self.ui.general_defaults_form.general_gui_group.alt_sf_color_button.clicked.connect(
-            self.on_alt_sf_color_button)
-        self.ui.general_defaults_form.general_gui_group.alt_sf_color_alpha_spinner.valueChanged.connect(
-            self.on_alt_sf_color_spinner)
-        self.ui.general_defaults_form.general_gui_group.alt_sf_color_alpha_slider.valueChanged.connect(
-            self.on_alt_sf_color_slider)
-        self.ui.general_defaults_form.general_gui_group.alt_sl_color_entry.editingFinished.connect(
-            self.on_alt_sl_color_entry)
-        self.ui.general_defaults_form.general_gui_group.alt_sl_color_button.clicked.connect(
-            self.on_alt_sl_color_button)
-
-        # Setting Editor Draw colors signals
-        self.ui.general_defaults_form.general_gui_group.draw_color_entry.editingFinished.connect(
-            self.on_draw_color_entry)
-        self.ui.general_defaults_form.general_gui_group.draw_color_button.clicked.connect(
-            self.on_draw_color_button)
-
-        self.ui.general_defaults_form.general_gui_group.sel_draw_color_entry.editingFinished.connect(
-            self.on_sel_draw_color_entry)
-        self.ui.general_defaults_form.general_gui_group.sel_draw_color_button.clicked.connect(
-            self.on_sel_draw_color_button)
-
-        self.ui.general_defaults_form.general_gui_group.proj_color_entry.editingFinished.connect(
-            self.on_proj_color_entry)
-        self.ui.general_defaults_form.general_gui_group.proj_color_button.clicked.connect(
-            self.on_proj_color_button)
-
-        self.ui.general_defaults_form.general_gui_group.proj_color_dis_entry.editingFinished.connect(
-            self.on_proj_color_dis_entry)
-        self.ui.general_defaults_form.general_gui_group.proj_color_dis_button.clicked.connect(
-            self.on_proj_color_dis_button)
-
         # ############################# Workspace Setting Signals #####################
-        self.ui.general_defaults_form.general_gui_set_group.wk_cb.currentIndexChanged.connect(
+        self.ui.general_defaults_form.general_app_set_group.wk_cb.currentIndexChanged.connect(
             self.on_workspace_modified)
-        self.ui.general_defaults_form.general_gui_set_group.wk_orientation_radio.activated_custom.connect(
+        self.ui.general_defaults_form.general_app_set_group.wk_orientation_radio.activated_custom.connect(
             self.on_workspace_modified
         )
 
-        self.ui.general_defaults_form.general_gui_set_group.workspace_cb.stateChanged.connect(self.on_workspace)
+        self.ui.general_defaults_form.general_app_set_group.workspace_cb.stateChanged.connect(self.on_workspace)
 
         self.ui.general_defaults_form.general_gui_group.layout_combo.activated.connect(self.on_layout)
 
         # #############################################################################
         # ############################# GUI SETTINGS SIGNALS ##########################
         # #############################################################################
-
-        self.ui.general_defaults_form.general_gui_set_group.cursor_radio.activated_custom.connect(self.on_cursor_type)
-
-        # ########## CNC Job related signals #############
-        self.ui.cncjob_defaults_form.cncjob_adv_opt_group.tc_variable_combo.currentIndexChanged[str].connect(
-            self.on_cnc_custom_parameters)
-        self.ui.cncjob_defaults_form.cncjob_adv_opt_group.annotation_fontcolor_entry.editingFinished.connect(
-            self.on_annotation_fontcolor_entry)
-        self.ui.cncjob_defaults_form.cncjob_adv_opt_group.annotation_fontcolor_button.clicked.connect(
-            self.on_annotation_fontcolor_button)
+        self.ui.general_defaults_form.general_app_group.ge_radio.activated_custom.connect(self.on_app_restart)
+        self.ui.general_defaults_form.general_app_set_group.cursor_radio.activated_custom.connect(self.on_cursor_type)
 
         # ########## Tools related signals #############
         # Film Tool
@@ -2114,14 +2061,12 @@ class App(QtCore.QObject):
 
         self.object_status_changed.connect(self.on_collection_updated)
 
-        # Monitor the checkbox from the Application Defaults Tab and show the TCL shell or not depending on it's value
-        self.ui.general_defaults_form.general_gui_set_group.shell_startup_cb.clicked.connect(self.on_toggle_shell)
-
         # Make sure that when the Excellon loading parameters are changed, the change is reflected in the
         # Export Excellon parameters.
         self.ui.excellon_defaults_form.excellon_gen_group.update_excellon_cb.stateChanged.connect(
             self.on_update_exc_export
         )
+
         # call it once to make sure it is updated at startup
         self.on_update_exc_export(state=self.defaults["excellon_update"])
 
@@ -2184,9 +2129,6 @@ class App(QtCore.QObject):
         self.ui.util_defaults_form.kw_group.del_btn.clicked.connect(
             lambda: self.del_extension(ext_type='keyword'))
 
-        # splash screen button signal
-        self.ui.general_defaults_form.general_gui_set_group.splash_cb.stateChanged.connect(self.on_splash_changed)
-
         # connect the abort_all_tasks related slots to the related signals
         self.proc_container.idle_flag.connect(self.app_is_idle)
 
@@ -5175,20 +5117,20 @@ class App(QtCore.QObject):
             )
             stgs.setValue(
                 'notebook_font_size',
-                self.ui.general_defaults_form.general_gui_set_group.notebook_font_size_spinner.get_value()
+                self.ui.general_defaults_form.general_app_set_group.notebook_font_size_spinner.get_value()
             )
             stgs.setValue(
                 'axis_font_size',
-                self.ui.general_defaults_form.general_gui_set_group.axis_font_size_spinner.get_value()
+                self.ui.general_defaults_form.general_app_set_group.axis_font_size_spinner.get_value()
             )
             stgs.setValue(
                 'textbox_font_size',
-                self.ui.general_defaults_form.general_gui_set_group.textbox_font_size_spinner.get_value()
+                self.ui.general_defaults_form.general_app_set_group.textbox_font_size_spinner.get_value()
             )
             stgs.setValue('toolbar_lock', self.ui.lock_action.isChecked())
             stgs.setValue(
                 'machinist',
-                1 if self.ui.general_defaults_form.general_app_group.machinist_cb.get_value() else 0
+                1 if self.ui.general_defaults_form.general_app_set_group.machinist_cb.get_value() else 0
             )
 
             # This will write the setting to the platform specific storage.
@@ -6283,7 +6225,7 @@ class App(QtCore.QObject):
         # self.options2form()
 
     def init_color_pickers_in_preferences_gui(self):
-        # Init Plot Colors
+        # Init Gerber Plot Colors
         self.ui.gerber_defaults_form.gerber_gen_group.pf_color_entry.set_value(self.defaults['gerber_plot_fill'])
         self.ui.gerber_defaults_form.gerber_gen_group.pf_color_button.setStyleSheet(
             "background-color:%s;"
@@ -6298,6 +6240,60 @@ class App(QtCore.QObject):
             "background-color:%s;"
             "border-color: dimgray" % str(self.defaults['gerber_plot_line'])[:7])
 
+        # Init Excellon Plot Colors
+        self.ui.excellon_defaults_form.excellon_gen_group.fill_color_entry.set_value(
+            self.defaults['excellon_plot_fill'])
+        self.ui.excellon_defaults_form.excellon_gen_group.fill_color_button.setStyleSheet(
+            "background-color:%s;"
+            "border-color: dimgray" % str(self.defaults['excellon_plot_fill'])[:7])
+        self.ui.excellon_defaults_form.excellon_gen_group.color_alpha_spinner.set_value(
+            int(self.defaults['excellon_plot_fill'][7:9], 16))
+        self.ui.excellon_defaults_form.excellon_gen_group.color_alpha_slider.setValue(
+            int(self.defaults['excellon_plot_fill'][7:9], 16))
+
+        self.ui.excellon_defaults_form.excellon_gen_group.line_color_entry.set_value(
+            self.defaults['excellon_plot_line'])
+        self.ui.excellon_defaults_form.excellon_gen_group.line_color_button.setStyleSheet(
+            "background-color:%s;"
+            "border-color: dimgray" % str(self.defaults['excellon_plot_line'])[:7])
+
+        # Init Geometry Plot Colors
+        self.ui.geometry_defaults_form.geometry_gen_group.line_color_entry.set_value(
+            self.defaults['geometry_plot_line'])
+        self.ui.geometry_defaults_form.geometry_gen_group.line_color_button.setStyleSheet(
+            "background-color:%s;"
+            "border-color: dimgray" % str(self.defaults['geometry_plot_line'])[:7])
+
+        # Init CNCJob Travel Line Colors
+        self.ui.cncjob_defaults_form.cncjob_gen_group.tfill_color_entry.set_value(
+            self.defaults['cncjob_travel_fill'])
+        self.ui.cncjob_defaults_form.cncjob_gen_group.tfill_color_button.setStyleSheet(
+            "background-color:%s;"
+            "border-color: dimgray" % str(self.defaults['cncjob_travel_fill'])[:7])
+        self.ui.cncjob_defaults_form.cncjob_gen_group.tcolor_alpha_spinner.set_value(
+            int(self.defaults['cncjob_travel_fill'][7:9], 16))
+        self.ui.cncjob_defaults_form.cncjob_gen_group.tcolor_alpha_slider.setValue(
+            int(self.defaults['cncjob_travel_fill'][7:9], 16))
+
+        self.ui.cncjob_defaults_form.cncjob_gen_group.tline_color_entry.set_value(
+            self.defaults['cncjob_travel_line'])
+        self.ui.cncjob_defaults_form.cncjob_gen_group.tline_color_button.setStyleSheet(
+            "background-color:%s;"
+            "border-color: dimgray" % str(self.defaults['cncjob_travel_line'])[:7])
+
+        # Init CNCJob Plot Colors
+        self.ui.cncjob_defaults_form.cncjob_gen_group.fill_color_entry.set_value(
+            self.defaults['cncjob_plot_fill'])
+        self.ui.cncjob_defaults_form.cncjob_gen_group.fill_color_button.setStyleSheet(
+            "background-color:%s;"
+            "border-color: dimgray" % str(self.defaults['cncjob_plot_fill'])[:7])
+
+        self.ui.cncjob_defaults_form.cncjob_gen_group.line_color_entry.set_value(
+            self.defaults['cncjob_plot_line'])
+        self.ui.cncjob_defaults_form.cncjob_gen_group.line_color_button.setStyleSheet(
+            "background-color:%s;"
+            "border-color: dimgray" % str(self.defaults['cncjob_plot_line'])[:7])
+
         # Init Left-Right Selection colors
         self.ui.general_defaults_form.general_gui_group.sf_color_entry.set_value(self.defaults['global_sel_fill'])
         self.ui.general_defaults_form.general_gui_group.sf_color_button.setStyleSheet(
@@ -6358,9 +6354,9 @@ class App(QtCore.QObject):
             "border-color: dimgray" % str(self.defaults['global_proj_item_dis_color'])[:7])
 
         # Init Project Disabled Items color
-        self.ui.general_defaults_form.general_gui_set_group.mouse_cursor_entry.set_value(
+        self.ui.general_defaults_form.general_app_set_group.mouse_cursor_entry.set_value(
             self.defaults['global_cursor_color'])
-        self.ui.general_defaults_form.general_gui_set_group.mouse_cursor_button.setStyleSheet(
+        self.ui.general_defaults_form.general_app_set_group.mouse_cursor_button.setStyleSheet(
             "background-color:%s;"
             "border-color: dimgray" % str(self.defaults['global_cursor_color'])[:7])
 
@@ -6529,238 +6525,6 @@ class App(QtCore.QObject):
         )
         self.on_excellon_format_changed()
 
-    # Setting selection colors (left - right) handlers
-    def on_sf_color_entry(self):
-        self.defaults['global_sel_fill'] = \
-            self.ui.general_defaults_form.general_gui_group.sf_color_entry.get_value()[:7] + \
-            self.defaults['global_sel_fill'][7:9]
-        self.ui.general_defaults_form.general_gui_group.sf_color_button.setStyleSheet(
-            "background-color:%s" % str(self.defaults['global_sel_fill'])[:7])
-
-    def on_sf_color_button(self):
-        current_color = QtGui.QColor(self.defaults['global_sel_fill'][:7])
-
-        c_dialog = QtWidgets.QColorDialog()
-        plot_fill_color = c_dialog.getColor(initial=current_color)
-
-        if plot_fill_color.isValid() is False:
-            return
-
-        self.ui.general_defaults_form.general_gui_group.sf_color_button.setStyleSheet(
-            "background-color:%s" % str(plot_fill_color.name()))
-
-        new_val = str(plot_fill_color.name()) + str(self.defaults['global_sel_fill'][7:9])
-        self.ui.general_defaults_form.general_gui_group.sf_color_entry.set_value(new_val)
-        self.defaults['global_sel_fill'] = new_val
-
-    def on_sf_color_spinner(self):
-        spinner_value = self.ui.general_defaults_form.general_gui_group.sf_color_alpha_spinner.value()
-        self.ui.general_defaults_form.general_gui_group.sf_color_alpha_slider.setValue(spinner_value)
-        self.defaults['global_sel_fill'] = \
-            self.defaults['global_sel_fill'][:7] + \
-            (hex(spinner_value)[2:] if int(hex(spinner_value)[2:], 16) > 0 else '00')
-        self.defaults['global_sel_line'] = \
-            self.defaults['global_sel_line'][:7] + \
-            (hex(spinner_value)[2:] if int(hex(spinner_value)[2:], 16) > 0 else '00')
-
-    def on_sf_color_slider(self):
-        slider_value = self.ui.general_defaults_form.general_gui_group.sf_color_alpha_slider.value()
-        self.ui.general_defaults_form.general_gui_group.sf_color_alpha_spinner.setValue(slider_value)
-
-    def on_sl_color_entry(self):
-        self.defaults['global_sel_line'] = \
-            self.ui.general_defaults_form.general_gui_group.sl_color_entry.get_value()[:7] + \
-            self.defaults['global_sel_line'][7:9]
-        self.ui.general_defaults_form.general_gui_group.sl_color_button.setStyleSheet(
-            "background-color:%s" % str(self.defaults['global_sel_line'])[:7])
-
-    def on_sl_color_button(self):
-        current_color = QtGui.QColor(self.defaults['global_sel_line'][:7])
-
-        c_dialog = QtWidgets.QColorDialog()
-        plot_line_color = c_dialog.getColor(initial=current_color)
-
-        if plot_line_color.isValid() is False:
-            return
-
-        self.ui.general_defaults_form.general_gui_group.sl_color_button.setStyleSheet(
-            "background-color:%s" % str(plot_line_color.name()))
-
-        new_val_line = str(plot_line_color.name()) + str(self.defaults['global_sel_line'][7:9])
-        self.ui.general_defaults_form.general_gui_group.sl_color_entry.set_value(new_val_line)
-        self.defaults['global_sel_line'] = new_val_line
-
-    # Setting selection colors (right - left) handlers
-    def on_alt_sf_color_entry(self):
-        self.defaults['global_alt_sel_fill'] = self.ui.general_defaults_form.general_gui_group \
-                                   .alt_sf_color_entry.get_value()[:7] + self.defaults['global_alt_sel_fill'][7:9]
-        self.ui.general_defaults_form.general_gui_group.alt_sf_color_button.setStyleSheet(
-            "background-color:%s" % str(self.defaults['global_alt_sel_fill'])[:7])
-
-    def on_alt_sf_color_button(self):
-        current_color = QtGui.QColor(self.defaults['global_alt_sel_fill'][:7])
-
-        c_dialog = QtWidgets.QColorDialog()
-        plot_fill_color = c_dialog.getColor(initial=current_color)
-
-        if plot_fill_color.isValid() is False:
-            return
-
-        self.ui.general_defaults_form.general_gui_group.alt_sf_color_button.setStyleSheet(
-            "background-color:%s" % str(plot_fill_color.name()))
-
-        new_val = str(plot_fill_color.name()) + str(self.defaults['global_alt_sel_fill'][7:9])
-        self.ui.general_defaults_form.general_gui_group.alt_sf_color_entry.set_value(new_val)
-        self.defaults['global_alt_sel_fill'] = new_val
-
-    def on_alt_sf_color_spinner(self):
-        spinner_value = self.ui.general_defaults_form.general_gui_group.alt_sf_color_alpha_spinner.value()
-        self.ui.general_defaults_form.general_gui_group.alt_sf_color_alpha_slider.setValue(spinner_value)
-        self.defaults['global_alt_sel_fill'] = \
-            self.defaults['global_alt_sel_fill'][:7] + \
-            (hex(spinner_value)[2:] if int(hex(spinner_value)[2:], 16) > 0 else '00')
-        self.defaults['global_alt_sel_line'] = \
-            self.defaults['global_alt_sel_line'][:7] + \
-            (hex(spinner_value)[2:] if int(hex(spinner_value)[2:], 16) > 0 else '00')
-
-    def on_alt_sf_color_slider(self):
-        slider_value = self.ui.general_defaults_form.general_gui_group.alt_sf_color_alpha_slider.value()
-        self.ui.general_defaults_form.general_gui_group.alt_sf_color_alpha_spinner.setValue(slider_value)
-
-    def on_alt_sl_color_entry(self):
-        self.defaults['global_alt_sel_line'] = \
-            self.ui.general_defaults_form.general_gui_group.alt_sl_color_entry.get_value()[:7] + \
-            self.defaults['global_alt_sel_line'][7:9]
-        self.ui.general_defaults_form.general_gui_group.alt_sl_color_button.setStyleSheet(
-            "background-color:%s" % str(self.defaults['global_alt_sel_line'])[:7])
-
-    def on_alt_sl_color_button(self):
-        current_color = QtGui.QColor(self.defaults['global_alt_sel_line'][:7])
-
-        c_dialog = QtWidgets.QColorDialog()
-        plot_line_color = c_dialog.getColor(initial=current_color)
-
-        if plot_line_color.isValid() is False:
-            return
-
-        self.ui.general_defaults_form.general_gui_group.alt_sl_color_button.setStyleSheet(
-            "background-color:%s" % str(plot_line_color.name()))
-
-        new_val_line = str(plot_line_color.name()) + str(self.defaults['global_alt_sel_line'][7:9])
-        self.ui.general_defaults_form.general_gui_group.alt_sl_color_entry.set_value(new_val_line)
-        self.defaults['global_alt_sel_line'] = new_val_line
-
-    # Setting Editor colors
-    def on_draw_color_entry(self):
-        self.defaults['global_draw_color'] = self.ui.general_defaults_form.general_gui_group \
-                                                   .draw_color_entry.get_value()
-        self.ui.general_defaults_form.general_gui_group.draw_color_button.setStyleSheet(
-            "background-color:%s" % str(self.defaults['global_draw_color']))
-
-    def on_draw_color_button(self):
-        current_color = QtGui.QColor(self.defaults['global_draw_color'])
-
-        c_dialog = QtWidgets.QColorDialog()
-        draw_color = c_dialog.getColor(initial=current_color)
-
-        if draw_color.isValid() is False:
-            return
-
-        self.ui.general_defaults_form.general_gui_group.draw_color_button.setStyleSheet(
-            "background-color:%s" % str(draw_color.name()))
-
-        new_val = str(draw_color.name())
-        self.ui.general_defaults_form.general_gui_group.draw_color_entry.set_value(new_val)
-        self.defaults['global_draw_color'] = new_val
-
-    def on_sel_draw_color_entry(self):
-        self.defaults['global_sel_draw_color'] = self.ui.general_defaults_form.general_gui_group \
-                                                   .sel_draw_color_entry.get_value()
-        self.ui.general_defaults_form.general_gui_group.sel_draw_color_button.setStyleSheet(
-            "background-color:%s" % str(self.defaults['global_sel_draw_color']))
-
-    def on_sel_draw_color_button(self):
-        current_color = QtGui.QColor(self.defaults['global_sel_draw_color'])
-
-        c_dialog = QtWidgets.QColorDialog()
-        sel_draw_color = c_dialog.getColor(initial=current_color)
-
-        if sel_draw_color.isValid() is False:
-            return
-
-        self.ui.general_defaults_form.general_gui_group.sel_draw_color_button.setStyleSheet(
-            "background-color:%s" % str(sel_draw_color.name()))
-
-        new_val_sel = str(sel_draw_color.name())
-        self.ui.general_defaults_form.general_gui_group.sel_draw_color_entry.set_value(new_val_sel)
-        self.defaults['global_sel_draw_color'] = new_val_sel
-
-    def on_proj_color_entry(self):
-        self.defaults['global_proj_item_color'] = self.ui.general_defaults_form.general_gui_group \
-                                                   .proj_color_entry.get_value()
-        self.ui.general_defaults_form.general_gui_group.proj_color_button.setStyleSheet(
-            "background-color:%s" % str(self.defaults['global_proj_item_color']))
-
-    def on_proj_color_button(self):
-        current_color = QtGui.QColor(self.defaults['global_proj_item_color'])
-
-        c_dialog = QtWidgets.QColorDialog()
-        proj_color = c_dialog.getColor(initial=current_color)
-
-        if proj_color.isValid() is False:
-            return
-
-        self.ui.general_defaults_form.general_gui_group.proj_color_button.setStyleSheet(
-            "background-color:%s" % str(proj_color.name()))
-
-        new_val_sel = str(proj_color.name())
-        self.ui.general_defaults_form.general_gui_group.proj_color_entry.set_value(new_val_sel)
-        self.defaults['global_proj_item_color'] = new_val_sel
-
-    def on_proj_color_dis_entry(self):
-        self.defaults['global_proj_item_dis_color'] = self.ui.general_defaults_form.general_gui_group \
-                                                   .proj_color_dis_entry.get_value()
-        self.ui.general_defaults_form.general_gui_group.proj_color_dis_button.setStyleSheet(
-            "background-color:%s" % str(self.defaults['global_proj_item_dis_color']))
-
-    def on_proj_color_dis_button(self):
-        current_color = QtGui.QColor(self.defaults['global_proj_item_dis_color'])
-
-        c_dialog = QtWidgets.QColorDialog()
-        proj_color = c_dialog.getColor(initial=current_color)
-
-        if proj_color.isValid() is False:
-            return
-
-        self.ui.general_defaults_form.general_gui_group.proj_color_dis_button.setStyleSheet(
-            "background-color:%s" % str(proj_color.name()))
-
-        new_val_sel = str(proj_color.name())
-        self.ui.general_defaults_form.general_gui_set_group.proj_color_dis_entry.set_value(new_val_sel)
-        self.defaults['global_proj_item_dis_color'] = new_val_sel
-
-    def on_annotation_fontcolor_entry(self):
-        self.defaults['cncjob_annotation_fontcolor'] = \
-            self.ui.cncjob_defaults_form.cncjob_adv_opt_group.annotation_fontcolor_entry.get_value()
-        self.ui.cncjob_defaults_form.cncjob_adv_opt_group.annotation_fontcolor_button.setStyleSheet(
-            "background-color:%s" % str(self.defaults['cncjob_annotation_fontcolor']))
-
-    def on_annotation_fontcolor_button(self):
-        current_color = QtGui.QColor(self.defaults['cncjob_annotation_fontcolor'])
-
-        c_dialog = QtWidgets.QColorDialog()
-        annotation_color = c_dialog.getColor(initial=current_color)
-
-        if annotation_color.isValid() is False:
-            return
-
-        self.ui.cncjob_defaults_form.cncjob_adv_opt_group.annotation_fontcolor_button.setStyleSheet(
-            "background-color:%s" % str(annotation_color.name()))
-
-        new_val_sel = str(annotation_color.name())
-        self.ui.cncjob_defaults_form.cncjob_adv_opt_group.annotation_fontcolor_entry.set_value(new_val_sel)
-        self.defaults['cncjob_annotation_fontcolor'] = new_val_sel
-
     def on_film_color_entry(self):
         self.defaults['tools_film_color'] = \
             self.ui.tools_defaults_form.tools_film_group.film_color_entry.get_value()
@@ -6850,13 +6614,6 @@ class App(QtCore.QObject):
         self.ui.tools2_defaults_form.tools2_qrcode_group.back_color_entry.set_value(new_val_sel)
         self.defaults['tools_qrcode_back_color'] = new_val_sel
 
-    def on_splash_changed(self, state):
-        settings = QSettings("Open Source", "FlatCAM")
-        settings.setValue('splash_screen', 1) if state else settings.setValue('splash_screen', 0)
-
-        # This will write the setting to the platform specific storage.
-        del settings
-
     def on_tab_rmb_click(self, checked):
         self.ui.notebook.set_detachable(val=checked)
         self.defaults["global_tabs_detachable"] = checked
@@ -7060,12 +6817,12 @@ class App(QtCore.QObject):
         self.app_cursor.enabled = False
 
         if val == 'small':
-            self.ui.general_defaults_form.general_gui_set_group.cursor_size_entry.setDisabled(False)
-            self.ui.general_defaults_form.general_gui_set_group.cursor_size_lbl.setDisabled(False)
+            self.ui.general_defaults_form.general_app_set_group.cursor_size_entry.setDisabled(False)
+            self.ui.general_defaults_form.general_app_set_group.cursor_size_lbl.setDisabled(False)
             self.app_cursor = self.plotcanvas.new_cursor()
         else:
-            self.ui.general_defaults_form.general_gui_set_group.cursor_size_entry.setDisabled(True)
-            self.ui.general_defaults_form.general_gui_set_group.cursor_size_lbl.setDisabled(True)
+            self.ui.general_defaults_form.general_app_set_group.cursor_size_entry.setDisabled(True)
+            self.ui.general_defaults_form.general_app_set_group.cursor_size_lbl.setDisabled(True)
             self.app_cursor = self.plotcanvas.new_cursor(big=True)
 
         if self.ui.grid_snap_btn.isChecked():
@@ -7073,12 +6830,6 @@ class App(QtCore.QObject):
         else:
             self.app_cursor.enabled = False
 
-    def on_cnc_custom_parameters(self, signal_text):
-        if signal_text == 'Parameters':
-            return
-        else:
-            self.ui.cncjob_defaults_form.cncjob_adv_opt_group.toolchange_text.insertPlainText('%%%s%%' % signal_text)
-
     def on_save_button(self, save_to_file=True):
         log.debug("App.on_save_button() --> Applying preferences to file.")
 
@@ -7106,20 +6857,20 @@ class App(QtCore.QObject):
         settgs = QSettings("Open Source", "FlatCAM")
 
         # save the notebook font size
-        fsize = self.ui.general_defaults_form.general_gui_set_group.notebook_font_size_spinner.get_value()
+        fsize = self.ui.general_defaults_form.general_app_set_group.notebook_font_size_spinner.get_value()
         settgs.setValue('notebook_font_size', fsize)
 
         # save the axis font size
-        g_fsize = self.ui.general_defaults_form.general_gui_set_group.axis_font_size_spinner.get_value()
+        g_fsize = self.ui.general_defaults_form.general_app_set_group.axis_font_size_spinner.get_value()
         settgs.setValue('axis_font_size', g_fsize)
 
         # save the textbox font size
-        tb_fsize = self.ui.general_defaults_form.general_gui_set_group.textbox_font_size_spinner.get_value()
+        tb_fsize = self.ui.general_defaults_form.general_app_set_group.textbox_font_size_spinner.get_value()
         settgs.setValue('textbox_font_size', tb_fsize)
 
         settgs.setValue(
             'machinist',
-            1 if self.ui.general_defaults_form.general_app_group.machinist_cb.get_value() else 0
+            1 if self.ui.general_defaults_form.general_app_set_group.machinist_cb.get_value() else 0
         )
 
         # This will write the setting to the platform specific storage.
@@ -12411,22 +12162,22 @@ class App(QtCore.QObject):
 
         if act_name == 'red':
             new_color = '#FF0000' + \
-                        str(hex(self.ui.general_defaults_form.general_gui_group.pf_color_alpha_slider.value())[2:])
+                        str(hex(self.ui.gerber_defaults_form.gerber_gen_group.pf_color_alpha_slider.value())[2:])
         if act_name == 'blue':
             new_color = '#0000FF' + \
-                        str(hex(self.ui.general_defaults_form.general_gui_group.pf_color_alpha_slider.value())[2:])
+                        str(hex(self.ui.gerber_defaults_form.gerber_gen_group.pf_color_alpha_slider.value())[2:])
         if act_name == 'yellow':
             new_color = '#FFDF00' + \
-                        str(hex(self.ui.general_defaults_form.general_gui_group.pf_color_alpha_slider.value())[2:])
+                        str(hex(self.ui.gerber_defaults_form.gerber_gen_group.pf_color_alpha_slider.value())[2:])
         if act_name == 'green':
             new_color = '#00FF00' + \
-                        str(hex(self.ui.general_defaults_form.general_gui_group.pf_color_alpha_slider.value())[2:])
+                        str(hex(self.ui.gerber_defaults_form.gerber_gen_group.pf_color_alpha_slider.value())[2:])
         if act_name == 'purple':
             new_color = '#FF00FF' + \
-                        str(hex(self.ui.general_defaults_form.general_gui_group.pf_color_alpha_slider.value())[2:])
+                        str(hex(self.ui.gerber_defaults_form.gerber_gen_group.pf_color_alpha_slider.value())[2:])
         if act_name == 'brown':
             new_color = '#A52A2A' + \
-                        str(hex(self.ui.general_defaults_form.general_gui_group.pf_color_alpha_slider.value())[2:])
+                        str(hex(self.ui.gerber_defaults_form.gerber_gen_group.pf_color_alpha_slider.value())[2:])
 
         if act_name == 'custom':
             new_color = QtGui.QColor(self.defaults['gerber_plot_fill'][:7])
@@ -12437,7 +12188,7 @@ class App(QtCore.QObject):
                 return
 
             new_color = str(plot_fill_color.name()) + \
-                        str(hex(self.ui.general_defaults_form.general_gui_group.pf_color_alpha_slider.value())[2:])
+                        str(hex(self.ui.gerber_defaults_form.gerber_gen_group.pf_color_alpha_slider.value())[2:])
 
         new_line_color = color_variant(new_color[:7], 0.7)
 

+ 12 - 11
FlatCAMObj.py

@@ -3536,7 +3536,9 @@ class FlatCAMExcellon(FlatCAMObj, Excellon):
             # Plot Excellon (All polygons?)
             if self.options["solid"]:
                 for geo in self.solid_geometry:
-                    self.add_shape(shape=geo, color='#750000BF', face_color='#C40000BF',
+                    self.add_shape(shape=geo,
+                                   color=self.app.defaults["excellon_plot_line"],
+                                   face_color=self.app.defaults["excellon_plot_fill"],
                                    visible=visible,
                                    layer=2)
             else:
@@ -4074,7 +4076,6 @@ class FlatCAMGeometry(FlatCAMObj, Geometry):
 
         # I use lambda's because the connected functions have parameters that could be used in certain scenarios
         self.ui.addtool_btn.clicked.connect(lambda: self.on_tool_add())
-        self.ui.addtool_entry.returnPressed.connect(self.on_tool_add)
 
         self.ui.copytool_btn.clicked.connect(lambda: self.on_tool_copy())
         self.ui.deltool_btn.clicked.connect(lambda: self.on_tool_delete())
@@ -4127,11 +4128,6 @@ class FlatCAMGeometry(FlatCAMObj, Geometry):
         except (TypeError, AttributeError):
             pass
 
-        try:
-            self.ui.addtool_entry.returnPressed.disconnect()
-        except (TypeError, AttributeError):
-            pass
-
         try:
             self.ui.copytool_btn.clicked.disconnect()
         except (TypeError, AttributeError):
@@ -5793,12 +5789,15 @@ class FlatCAMGeometry(FlatCAMObj, Geometry):
 
         return factor
 
-    def plot_element(self, element, color='#FF0000FF', visible=None):
+    def plot_element(self, element, color=None, visible=None):
+
+        if color is None:
+            color = '#FF0000FF'
 
         visible = visible if visible else self.options['plot']
         try:
             for sub_el in element:
-                self.plot_element(sub_el)
+                self.plot_element(sub_el, color=color)
 
         except TypeError:  # Element is not iterable...
             # if self.app.is_legacy is False:
@@ -5825,12 +5824,14 @@ class FlatCAMGeometry(FlatCAMObj, Geometry):
             if self.multigeo is True:  # geo multi tool usage
                 for tooluid_key in self.tools:
                     solid_geometry = self.tools[tooluid_key]['solid_geometry']
-                    self.plot_element(solid_geometry, visible=visible)
+                    self.plot_element(solid_geometry, visible=visible,
+                                      color=self.app.defaults["geometry_plot_line"])
             else:
                 # plot solid geometry that may be an direct attribute of the geometry object
                 # for SingleGeo
                 if self.solid_geometry:
-                    self.plot_element(self.solid_geometry, visible=visible)
+                    self.plot_element(self.solid_geometry, visible=visible,
+                                      color=self.app.defaults["geometry_plot_line"])
 
             # self.plot_element(self.solid_geometry, visible=self.options['plot'])
 

+ 3 - 0
README.md

@@ -24,6 +24,9 @@ CAD program, and create G-Code for Isolation routing.
 - further modifications in Preferences -> General GUI - extended the changes
 - in Legacy(2D) graphic engine made to work the mouse color change
 - theme changing is no longer auto-reboot upon change; it require now to press a button
+- cleaned the Preferences classes and added the signals and signal slots in those classes, removing them from the main app class
+- each FlatCAM object found in Preferences has it's own set of controls for changing the colors
+- added a set of gray icons to be used when the theme is complete dark (for now it is useful only for MacOS with dark theme because at the moment the app is not styled to dark UI except the plot area)
 
 25.12.2019
 

+ 7 - 2
camlib.py

@@ -4252,8 +4252,7 @@ class CNCjob(Geometry):
     #     return fig
 
     def plot2(self, tooldia=None, dpi=75, margin=0.1, gcode_parsed=None,
-              color={"T": ["#F0E24D4C", "#B5AB3A4C"], "C": ["#5E6CFFFF", "#4650BDFF"]},
-              alpha={"T": 0.3, "C": 1.0}, tool_tolerance=0.0005, obj=None, visible=False, kind='all'):
+              color=None, alpha={"T": 0.3, "C": 1.0}, tool_tolerance=0.0005, obj=None, visible=False, kind='all'):
         """
         Plots the G-code job onto the given axes.
 
@@ -4270,6 +4269,12 @@ class CNCjob(Geometry):
         """
         # units = self.app.ui.general_defaults_form.general_app_group.units_radio.get_value().upper()
 
+        if color is None:
+            color = {
+                "T": [self.app.defaults["cncjob_travel_fill"], self.app.defaults["cncjob_travel_line"]],
+                "C": [self.app.defaults["cncjob_plot_fill"], self.app.defaults["cncjob_plot_line"]]
+            }
+
         gcode_parsed = gcode_parsed if gcode_parsed else self.gcode_parsed
         path_num = 0
 

+ 1 - 1
flatcamGUI/FlatCAMGUI.py

@@ -2333,7 +2333,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
         :param event: QT event to filter
         :return:
         """
-        if self.general_defaults_form.general_gui_set_group.toggle_tooltips_cb.get_value() is False:
+        if self.general_defaults_form.general_app_set_group.toggle_tooltips_cb.get_value() is False:
             if event.type() == QtCore.QEvent.ToolTip:
                 return True
             else:

文件差异内容过多而无法显示
+ 757 - 120
flatcamGUI/PreferencesUI.py


二进制
share/dark_resources/about32.png


二进制
share/dark_resources/active.gif


二进制
share/dark_resources/active_2.gif


二进制
share/dark_resources/active_2_static.png


二进制
share/dark_resources/active_3.gif


二进制
share/dark_resources/active_3_static.png


二进制
share/dark_resources/active_4.gif


二进制
share/dark_resources/active_4_static.png


二进制
share/dark_resources/active_static.png


二进制
share/dark_resources/addarray16.png


二进制
share/dark_resources/addarray20.png


二进制
share/dark_resources/addarray32.png


二进制
share/dark_resources/aero.png


二进制
share/dark_resources/aero_arc.png


二进制
share/dark_resources/aero_array.png


二进制
share/dark_resources/aero_buffer.png


二进制
share/dark_resources/aero_circle.png


二进制
share/dark_resources/aero_circle_geo.png


二进制
share/dark_resources/aero_disc.png


二进制
share/dark_resources/aero_drill.png


二进制
share/dark_resources/aero_drill_array.png


二进制
share/dark_resources/aero_path1.png


二进制
share/dark_resources/aero_path2.png


二进制
share/dark_resources/aero_path3.png


二进制
share/dark_resources/aero_path4.png


二进制
share/dark_resources/aero_path5.png


二进制
share/dark_resources/aero_semidisc.png


二进制
share/dark_resources/aero_slot.png


二进制
share/dark_resources/aero_text.png


二进制
share/dark_resources/align_center32.png


二进制
share/dark_resources/align_justify32.png


二进制
share/dark_resources/align_left32.png


二进制
share/dark_resources/align_right32.png


二进制
share/dark_resources/aperture16.png


二进制
share/dark_resources/aperture32.png


二进制
share/dark_resources/arc16.png


二进制
share/dark_resources/arc24.png


二进制
share/dark_resources/arc32.png


二进制
share/dark_resources/axis32.png


二进制
share/dark_resources/backup24.png


二进制
share/dark_resources/backup_export24.png


二进制
share/dark_resources/backup_import24.png


二进制
share/dark_resources/blocked16.png


二进制
share/dark_resources/blue32.png


二进制
share/dark_resources/bluelight12.png


二进制
share/dark_resources/bold32.png


二进制
share/dark_resources/bookmarks16.png


二进制
share/dark_resources/bookmarks32.png


二进制
share/dark_resources/brown32.png


二进制
share/dark_resources/buffer16-2.png


二进制
share/dark_resources/buffer16.png


二进制
share/dark_resources/buffer20.png


二进制
share/dark_resources/buffer24.png


二进制
share/dark_resources/bug16.png


二进制
share/dark_resources/bug32.png


二进制
share/dark_resources/calculator16.png


二进制
share/dark_resources/calculator24.png


二进制
share/dark_resources/calibrate_16.png


二进制
share/dark_resources/calibrate_32.png


二进制
share/dark_resources/cancel_edit16.png


二进制
share/dark_resources/cancel_edit32.png


二进制
share/dark_resources/circle32.png


二进制
share/dark_resources/clear_plot16.png


二进制
share/dark_resources/clear_plot32.png


二进制
share/dark_resources/close_edit_file16.png


二进制
share/dark_resources/close_edit_file32.png


二进制
share/dark_resources/cnc16.png


二进制
share/dark_resources/cnc32.png


二进制
share/dark_resources/code.png


二进制
share/dark_resources/code_editor32.png


二进制
share/dark_resources/convert24.png


二进制
share/dark_resources/copperfill16.png


二进制
share/dark_resources/copperfill32.png


二进制
share/dark_resources/copy.png


二进制
share/dark_resources/copy16.png


二进制
share/dark_resources/copy32.png


二进制
share/dark_resources/copy_16.png


二进制
share/dark_resources/copy_file16.png


二进制
share/dark_resources/copy_file32.png


二进制
share/dark_resources/copy_geo.png


二进制
share/dark_resources/corner32.png


二进制
share/dark_resources/cut16.png


二进制
share/dark_resources/cut16_bis.png


二进制
share/dark_resources/cut32.png


二进制
share/dark_resources/cut32_bis.png


二进制
share/dark_resources/cutpath16.png


二进制
share/dark_resources/cutpath24.png


二进制
share/dark_resources/cutpath32.png


二进制
share/dark_resources/database32.png


二进制
share/dark_resources/defaults.png


二进制
share/dark_resources/delete32.png


二进制
share/dark_resources/delete_file16.png


二进制
share/dark_resources/delete_file32.png


二进制
share/dark_resources/deleteshape16.png


部分文件因为文件数量过多而无法显示