From 72c2dd5f26789a29aa9c8bebd7f9e37c2c61770b Mon Sep 17 00:00:00 2001 From: David Robertson Date: Wed, 29 Apr 2020 01:49:34 +0100 Subject: [PATCH] Working on extracting the prefs UI code from the App class --- FlatCAMApp.py | 1142 +----------------------------- FlatCAMTranslation.py | 2 +- defaults.py | 68 +- flatcamGUI/FlatCAMGUI.py | 2 +- flatcamGUI/PreferencesUI.py | 1015 +++++++++++++++++++++++++- tclCommands/TclCommandSaveSys.py | 2 +- tclCommands/TclCommandSetSys.py | 3 +- 7 files changed, 1107 insertions(+), 1127 deletions(-) diff --git a/FlatCAMApp.py b/FlatCAMApp.py index 61c0f913..83a166ae 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -17,7 +17,6 @@ import lzma import shutil from datetime import datetime import time -from stat import S_IREAD, S_IRGRP, S_IROTH import ctypes import traceback @@ -429,11 +428,10 @@ class App(QtCore.QObject): # ############################################################################################################ # ################################# DEFAULTS - PREFERENCES STORAGE ########################################### # ############################################################################################################ - self.fcDefaults = FlatCAMDefaults() + self.defaults = FlatCAMDefaults() current_defaults_path = os.path.join(self.data_path, "current_defaults.FlatConfig") if user_defaults: - self.fcDefaults.load(filename=current_defaults_path) - self.defaults = self.fcDefaults.defaults + self.defaults.load(filename=current_defaults_path) if self.defaults["global_gray_icons"] is False: self.resource_location = 'share' @@ -545,549 +543,8 @@ class App(QtCore.QObject): # ##################################### UPDATE PREFERENCES GUI FORMS ######################################## # ########################################################################################################### - # when adding entries here read the comments in the method found bellow named: - # def new_object(self, kind, name, initialize, active=True, fit=True, plot=True) - self.defaults_form_fields = { - # General App - "decimals_inch": self.ui.general_defaults_form.general_app_group.precision_inch_entry, - "decimals_metric": self.ui.general_defaults_form.general_app_group.precision_metric_entry, - "units": self.ui.general_defaults_form.general_app_group.units_radio, - "global_graphic_engine": self.ui.general_defaults_form.general_app_group.ge_radio, - "global_app_level": self.ui.general_defaults_form.general_app_group.app_level_radio, - "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_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_autosave": self.ui.general_defaults_form.general_app_group.autosave_cb, - "global_autosave_timeout": self.ui.general_defaults_form.general_app_group.autosave_entry, - - "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, - "global_tpdf_rmargin": self.ui.general_defaults_form.general_app_group.rmargin_entry, - - # General GUI Preferences - "global_theme": self.ui.general_defaults_form.general_gui_group.theme_radio, - "global_gray_icons": self.ui.general_defaults_form.general_gui_group.gray_icons_cb, - "global_layout": self.ui.general_defaults_form.general_gui_group.layout_combo, - "global_hover": self.ui.general_defaults_form.general_gui_group.hover_cb, - "global_selection_shape": self.ui.general_defaults_form.general_gui_group.selection_cb, - - "global_sel_fill": self.ui.general_defaults_form.general_gui_group.sf_color_entry, - "global_sel_line": self.ui.general_defaults_form.general_gui_group.sl_color_entry, - "global_alt_sel_fill": self.ui.general_defaults_form.general_gui_group.alt_sf_color_entry, - "global_alt_sel_line": self.ui.general_defaults_form.general_gui_group.alt_sl_color_entry, - "global_draw_color": self.ui.general_defaults_form.general_gui_group.draw_color_entry, - "global_sel_draw_color": self.ui.general_defaults_form.general_gui_group.sel_draw_color_entry, - - "global_proj_item_color": self.ui.general_defaults_form.general_gui_group.proj_color_entry, - "global_proj_item_dis_color": self.ui.general_defaults_form.general_gui_group.proj_color_dis_entry, - "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_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, - "gerber_solid": self.ui.gerber_defaults_form.gerber_gen_group.solid_cb, - "gerber_multicolored": self.ui.gerber_defaults_form.gerber_gen_group.multicolored_cb, - "gerber_circle_steps": self.ui.gerber_defaults_form.gerber_gen_group.circle_steps_entry, - "gerber_def_units": self.ui.gerber_defaults_form.gerber_gen_group.gerber_units_radio, - "gerber_def_zeros": self.ui.gerber_defaults_form.gerber_gen_group.gerber_zeros_radio, - "gerber_clean_apertures": self.ui.gerber_defaults_form.gerber_gen_group.gerber_clean_cb, - "gerber_extra_buffering": self.ui.gerber_defaults_form.gerber_gen_group.gerber_extra_buffering, - "gerber_plot_fill": self.ui.gerber_defaults_form.gerber_gen_group.pf_color_entry, - "gerber_plot_line": self.ui.gerber_defaults_form.gerber_gen_group.pl_color_entry, - - # Gerber Options - "gerber_isotooldia": self.ui.gerber_defaults_form.gerber_opt_group.iso_tool_dia_entry, - "gerber_isopasses": self.ui.gerber_defaults_form.gerber_opt_group.iso_width_entry, - "gerber_isooverlap": self.ui.gerber_defaults_form.gerber_opt_group.iso_overlap_entry, - "gerber_combine_passes": self.ui.gerber_defaults_form.gerber_opt_group.combine_passes_cb, - "gerber_iso_scope": self.ui.gerber_defaults_form.gerber_opt_group.iso_scope_radio, - "gerber_milling_type": self.ui.gerber_defaults_form.gerber_opt_group.milling_type_radio, - "gerber_noncoppermargin": self.ui.gerber_defaults_form.gerber_opt_group.noncopper_margin_entry, - "gerber_noncopperrounded": self.ui.gerber_defaults_form.gerber_opt_group.noncopper_rounded_cb, - "gerber_bboxmargin": self.ui.gerber_defaults_form.gerber_opt_group.bbmargin_entry, - "gerber_bboxrounded": self.ui.gerber_defaults_form.gerber_opt_group.bbrounded_cb, - - # Gerber Advanced Options - "gerber_aperture_display": self.ui.gerber_defaults_form.gerber_adv_opt_group.aperture_table_visibility_cb, - # "gerber_aperture_scale_factor": self.ui.gerber_defaults_form.gerber_adv_opt_group.scale_aperture_entry, - # "gerber_aperture_buffer_factor": self.ui.gerber_defaults_form.gerber_adv_opt_group.buffer_aperture_entry, - "gerber_follow": self.ui.gerber_defaults_form.gerber_adv_opt_group.follow_cb, - "gerber_tool_type": self.ui.gerber_defaults_form.gerber_adv_opt_group.tool_type_radio, - "gerber_vtipdia": self.ui.gerber_defaults_form.gerber_adv_opt_group.tipdia_spinner, - "gerber_vtipangle": self.ui.gerber_defaults_form.gerber_adv_opt_group.tipangle_spinner, - "gerber_vcutz": self.ui.gerber_defaults_form.gerber_adv_opt_group.cutz_spinner, - "gerber_iso_type": self.ui.gerber_defaults_form.gerber_adv_opt_group.iso_type_radio, - - "gerber_buffering": self.ui.gerber_defaults_form.gerber_adv_opt_group.buffering_radio, - "gerber_simplification": self.ui.gerber_defaults_form.gerber_adv_opt_group.simplify_cb, - "gerber_simp_tolerance": self.ui.gerber_defaults_form.gerber_adv_opt_group.simplification_tol_spinner, - - # Gerber Export - "gerber_exp_units": self.ui.gerber_defaults_form.gerber_exp_group.gerber_units_radio, - "gerber_exp_integer": self.ui.gerber_defaults_form.gerber_exp_group.format_whole_entry, - "gerber_exp_decimals": self.ui.gerber_defaults_form.gerber_exp_group.format_dec_entry, - "gerber_exp_zeros": self.ui.gerber_defaults_form.gerber_exp_group.zeros_radio, - - # Gerber Editor - "gerber_editor_sel_limit": self.ui.gerber_defaults_form.gerber_editor_group.sel_limit_entry, - "gerber_editor_newcode": self.ui.gerber_defaults_form.gerber_editor_group.addcode_entry, - "gerber_editor_newsize": self.ui.gerber_defaults_form.gerber_editor_group.addsize_entry, - "gerber_editor_newtype": self.ui.gerber_defaults_form.gerber_editor_group.addtype_combo, - "gerber_editor_newdim": self.ui.gerber_defaults_form.gerber_editor_group.adddim_entry, - "gerber_editor_array_size": self.ui.gerber_defaults_form.gerber_editor_group.grb_array_size_entry, - "gerber_editor_lin_axis": self.ui.gerber_defaults_form.gerber_editor_group.grb_axis_radio, - "gerber_editor_lin_pitch": self.ui.gerber_defaults_form.gerber_editor_group.grb_pitch_entry, - "gerber_editor_lin_angle": self.ui.gerber_defaults_form.gerber_editor_group.grb_angle_entry, - "gerber_editor_circ_dir": self.ui.gerber_defaults_form.gerber_editor_group.grb_circular_dir_radio, - "gerber_editor_circ_angle": - self.ui.gerber_defaults_form.gerber_editor_group.grb_circular_angle_entry, - "gerber_editor_scale_f": self.ui.gerber_defaults_form.gerber_editor_group.grb_scale_entry, - "gerber_editor_buff_f": self.ui.gerber_defaults_form.gerber_editor_group.grb_buff_entry, - "gerber_editor_ma_low": self.ui.gerber_defaults_form.gerber_editor_group.grb_ma_low_entry, - "gerber_editor_ma_high": self.ui.gerber_defaults_form.gerber_editor_group.grb_ma_high_entry, - - # Excellon General - "excellon_plot": self.ui.excellon_defaults_form.excellon_gen_group.plot_cb, - "excellon_solid": self.ui.excellon_defaults_form.excellon_gen_group.solid_cb, - "excellon_format_upper_in": - self.ui.excellon_defaults_form.excellon_gen_group.excellon_format_upper_in_entry, - "excellon_format_lower_in": - self.ui.excellon_defaults_form.excellon_gen_group.excellon_format_lower_in_entry, - "excellon_format_upper_mm": - self.ui.excellon_defaults_form.excellon_gen_group.excellon_format_upper_mm_entry, - "excellon_format_lower_mm": - self.ui.excellon_defaults_form.excellon_gen_group.excellon_format_lower_mm_entry, - "excellon_zeros": self.ui.excellon_defaults_form.excellon_gen_group.excellon_zeros_radio, - "excellon_units": self.ui.excellon_defaults_form.excellon_gen_group.excellon_units_radio, - "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_operation": self.ui.excellon_defaults_form.excellon_opt_group.operation_radio, - "excellon_milling_type": self.ui.excellon_defaults_form.excellon_opt_group.milling_type_radio, - - "excellon_milling_dia": self.ui.excellon_defaults_form.excellon_opt_group.mill_dia_entry, - - "excellon_cutz": self.ui.excellon_defaults_form.excellon_opt_group.cutz_entry, - "excellon_multidepth": self.ui.excellon_defaults_form.excellon_opt_group.mpass_cb, - "excellon_depthperpass": self.ui.excellon_defaults_form.excellon_opt_group.maxdepth_entry, - "excellon_travelz": self.ui.excellon_defaults_form.excellon_opt_group.travelz_entry, - "excellon_endz": self.ui.excellon_defaults_form.excellon_opt_group.endz_entry, - "excellon_endxy": self.ui.excellon_defaults_form.excellon_opt_group.endxy_entry, - - "excellon_feedrate_z": self.ui.excellon_defaults_form.excellon_opt_group.feedrate_z_entry, - "excellon_spindlespeed": self.ui.excellon_defaults_form.excellon_opt_group.spindlespeed_entry, - "excellon_dwell": self.ui.excellon_defaults_form.excellon_opt_group.dwell_cb, - "excellon_dwelltime": self.ui.excellon_defaults_form.excellon_opt_group.dwelltime_entry, - "excellon_toolchange": self.ui.excellon_defaults_form.excellon_opt_group.toolchange_cb, - "excellon_toolchangez": self.ui.excellon_defaults_form.excellon_opt_group.toolchangez_entry, - "excellon_ppname_e": self.ui.excellon_defaults_form.excellon_opt_group.pp_excellon_name_cb, - "excellon_tooldia": self.ui.excellon_defaults_form.excellon_opt_group.tooldia_entry, - "excellon_slot_tooldia": self.ui.excellon_defaults_form.excellon_opt_group.slot_tooldia_entry, - "excellon_gcode_type": self.ui.excellon_defaults_form.excellon_opt_group.excellon_gcode_type_radio, - - # Excellon Advanced Options - "excellon_offset": self.ui.excellon_defaults_form.excellon_adv_opt_group.offset_entry, - "excellon_toolchangexy": self.ui.excellon_defaults_form.excellon_adv_opt_group.toolchangexy_entry, - "excellon_startz": self.ui.excellon_defaults_form.excellon_adv_opt_group.estartz_entry, - "excellon_feedrate_rapid": self.ui.excellon_defaults_form.excellon_adv_opt_group.feedrate_rapid_entry, - "excellon_z_pdepth": self.ui.excellon_defaults_form.excellon_adv_opt_group.pdepth_entry, - "excellon_feedrate_probe": self.ui.excellon_defaults_form.excellon_adv_opt_group.feedrate_probe_entry, - "excellon_spindledir": self.ui.excellon_defaults_form.excellon_adv_opt_group.spindledir_radio, - "excellon_f_plunge": self.ui.excellon_defaults_form.excellon_adv_opt_group.fplunge_cb, - "excellon_f_retract": self.ui.excellon_defaults_form.excellon_adv_opt_group.fretract_cb, - - # Excellon Export - "excellon_exp_units": self.ui.excellon_defaults_form.excellon_exp_group.excellon_units_radio, - "excellon_exp_format": self.ui.excellon_defaults_form.excellon_exp_group.format_radio, - "excellon_exp_integer": self.ui.excellon_defaults_form.excellon_exp_group.format_whole_entry, - "excellon_exp_decimals": self.ui.excellon_defaults_form.excellon_exp_group.format_dec_entry, - "excellon_exp_zeros": self.ui.excellon_defaults_form.excellon_exp_group.zeros_radio, - "excellon_exp_slot_type": self.ui.excellon_defaults_form.excellon_exp_group.slot_type_radio, - - # Excellon Editor - "excellon_editor_sel_limit": self.ui.excellon_defaults_form.excellon_editor_group.sel_limit_entry, - "excellon_editor_newdia": self.ui.excellon_defaults_form.excellon_editor_group.addtool_entry, - "excellon_editor_array_size": self.ui.excellon_defaults_form.excellon_editor_group.drill_array_size_entry, - "excellon_editor_lin_dir": self.ui.excellon_defaults_form.excellon_editor_group.drill_axis_radio, - "excellon_editor_lin_pitch": self.ui.excellon_defaults_form.excellon_editor_group.drill_pitch_entry, - "excellon_editor_lin_angle": self.ui.excellon_defaults_form.excellon_editor_group.drill_angle_entry, - "excellon_editor_circ_dir": self.ui.excellon_defaults_form.excellon_editor_group.drill_circular_dir_radio, - "excellon_editor_circ_angle": - self.ui.excellon_defaults_form.excellon_editor_group.drill_circular_angle_entry, - # Excellon Slots - "excellon_editor_slot_direction": - self.ui.excellon_defaults_form.excellon_editor_group.slot_axis_radio, - "excellon_editor_slot_angle": - self.ui.excellon_defaults_form.excellon_editor_group.slot_angle_spinner, - "excellon_editor_slot_length": - self.ui.excellon_defaults_form.excellon_editor_group.slot_length_entry, - # Excellon Slots - "excellon_editor_slot_array_size": - self.ui.excellon_defaults_form.excellon_editor_group.slot_array_size_entry, - "excellon_editor_slot_lin_dir": self.ui.excellon_defaults_form.excellon_editor_group.slot_array_axis_radio, - "excellon_editor_slot_lin_pitch": - self.ui.excellon_defaults_form.excellon_editor_group.slot_array_pitch_entry, - "excellon_editor_slot_lin_angle": - self.ui.excellon_defaults_form.excellon_editor_group.slot_array_angle_entry, - "excellon_editor_slot_circ_dir": - self.ui.excellon_defaults_form.excellon_editor_group.slot_array_circular_dir_radio, - "excellon_editor_slot_circ_angle": - self.ui.excellon_defaults_form.excellon_editor_group.slot_array_circular_angle_entry, - - # Geometry General - "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, - "geometry_travelz": self.ui.geometry_defaults_form.geometry_opt_group.travelz_entry, - "geometry_feedrate": self.ui.geometry_defaults_form.geometry_opt_group.cncfeedrate_entry, - "geometry_feedrate_z": self.ui.geometry_defaults_form.geometry_opt_group.feedrate_z_entry, - "geometry_spindlespeed": self.ui.geometry_defaults_form.geometry_opt_group.cncspindlespeed_entry, - "geometry_dwell": self.ui.geometry_defaults_form.geometry_opt_group.dwell_cb, - "geometry_dwelltime": self.ui.geometry_defaults_form.geometry_opt_group.dwelltime_entry, - "geometry_ppname_g": self.ui.geometry_defaults_form.geometry_opt_group.pp_geometry_name_cb, - "geometry_toolchange": self.ui.geometry_defaults_form.geometry_opt_group.toolchange_cb, - "geometry_toolchangez": self.ui.geometry_defaults_form.geometry_opt_group.toolchangez_entry, - "geometry_endz": self.ui.geometry_defaults_form.geometry_opt_group.endz_entry, - "geometry_endxy": self.ui.geometry_defaults_form.geometry_opt_group.endxy_entry, - "geometry_depthperpass": self.ui.geometry_defaults_form.geometry_opt_group.depthperpass_entry, - "geometry_multidepth": self.ui.geometry_defaults_form.geometry_opt_group.multidepth_cb, - - # Geometry Advanced Options - "geometry_toolchangexy": self.ui.geometry_defaults_form.geometry_adv_opt_group.toolchangexy_entry, - "geometry_startz": self.ui.geometry_defaults_form.geometry_adv_opt_group.gstartz_entry, - "geometry_feedrate_rapid": self.ui.geometry_defaults_form.geometry_adv_opt_group.feedrate_rapid_entry, - "geometry_extracut": self.ui.geometry_defaults_form.geometry_adv_opt_group.extracut_cb, - "geometry_extracut_length": self.ui.geometry_defaults_form.geometry_adv_opt_group.e_cut_entry, - "geometry_z_pdepth": self.ui.geometry_defaults_form.geometry_adv_opt_group.pdepth_entry, - "geometry_feedrate_probe": self.ui.geometry_defaults_form.geometry_adv_opt_group.feedrate_probe_entry, - "geometry_spindledir": self.ui.geometry_defaults_form.geometry_adv_opt_group.spindledir_radio, - "geometry_f_plunge": self.ui.geometry_defaults_form.geometry_adv_opt_group.fplunge_cb, - "geometry_segx": self.ui.geometry_defaults_form.geometry_adv_opt_group.segx_entry, - "geometry_segy": self.ui.geometry_defaults_form.geometry_adv_opt_group.segy_entry, - - # Geometry Editor - "geometry_editor_sel_limit": self.ui.geometry_defaults_form.geometry_editor_group.sel_limit_entry, - "geometry_editor_milling_type": self.ui.geometry_defaults_form.geometry_editor_group.milling_type_radio, - - # CNCJob General - "cncjob_plot": self.ui.cncjob_defaults_form.cncjob_gen_group.plot_cb, - "cncjob_plot_kind": self.ui.cncjob_defaults_form.cncjob_gen_group.cncplot_method_radio, - "cncjob_annotation": self.ui.cncjob_defaults_form.cncjob_gen_group.annotation_cb, - - "cncjob_tooldia": self.ui.cncjob_defaults_form.cncjob_gen_group.tooldia_entry, - "cncjob_coords_type": self.ui.cncjob_defaults_form.cncjob_gen_group.coords_type_radio, - "cncjob_coords_decimals": self.ui.cncjob_defaults_form.cncjob_gen_group.coords_dec_entry, - "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, - "cncjob_append": self.ui.cncjob_defaults_form.cncjob_opt_group.append_text, - - # CNC Job Advanced Options - "cncjob_toolchange_macro": self.ui.cncjob_defaults_form.cncjob_adv_opt_group.toolchange_text, - "cncjob_toolchange_macro_enable": self.ui.cncjob_defaults_form.cncjob_adv_opt_group.toolchange_cb, - "cncjob_annotation_fontsize": self.ui.cncjob_defaults_form.cncjob_adv_opt_group.annotation_fontsize_sp, - "cncjob_annotation_fontcolor": self.ui.cncjob_defaults_form.cncjob_adv_opt_group.annotation_fontcolor_entry, - - # NCC Tool - "tools_ncctools": self.ui.tools_defaults_form.tools_ncc_group.ncc_tool_dia_entry, - "tools_nccorder": self.ui.tools_defaults_form.tools_ncc_group.ncc_order_radio, - "tools_nccoverlap": self.ui.tools_defaults_form.tools_ncc_group.ncc_overlap_entry, - "tools_nccmargin": self.ui.tools_defaults_form.tools_ncc_group.ncc_margin_entry, - "tools_nccmethod": self.ui.tools_defaults_form.tools_ncc_group.ncc_method_combo, - "tools_nccconnect": self.ui.tools_defaults_form.tools_ncc_group.ncc_connect_cb, - "tools_ncccontour": self.ui.tools_defaults_form.tools_ncc_group.ncc_contour_cb, - "tools_nccrest": self.ui.tools_defaults_form.tools_ncc_group.ncc_rest_cb, - "tools_ncc_offset_choice": self.ui.tools_defaults_form.tools_ncc_group.ncc_choice_offset_cb, - "tools_ncc_offset_value": self.ui.tools_defaults_form.tools_ncc_group.ncc_offset_spinner, - "tools_nccref": self.ui.tools_defaults_form.tools_ncc_group.select_combo, - "tools_ncc_area_shape": self.ui.tools_defaults_form.tools_ncc_group.area_shape_radio, - "tools_ncc_plotting": self.ui.tools_defaults_form.tools_ncc_group.ncc_plotting_radio, - "tools_nccmilling_type": self.ui.tools_defaults_form.tools_ncc_group.milling_type_radio, - "tools_ncctool_type": self.ui.tools_defaults_form.tools_ncc_group.tool_type_radio, - "tools_ncccutz": self.ui.tools_defaults_form.tools_ncc_group.cutz_entry, - "tools_ncctipdia": self.ui.tools_defaults_form.tools_ncc_group.tipdia_entry, - "tools_ncctipangle": self.ui.tools_defaults_form.tools_ncc_group.tipangle_entry, - "tools_nccnewdia": self.ui.tools_defaults_form.tools_ncc_group.newdia_entry, - - # CutOut Tool - "tools_cutouttooldia": self.ui.tools_defaults_form.tools_cutout_group.cutout_tooldia_entry, - "tools_cutoutkind": self.ui.tools_defaults_form.tools_cutout_group.obj_kind_combo, - "tools_cutoutmargin": self.ui.tools_defaults_form.tools_cutout_group.cutout_margin_entry, - "tools_cutout_z": self.ui.tools_defaults_form.tools_cutout_group.cutz_entry, - "tools_cutout_depthperpass": self.ui.tools_defaults_form.tools_cutout_group.maxdepth_entry, - "tools_cutout_mdepth": self.ui.tools_defaults_form.tools_cutout_group.mpass_cb, - "tools_cutoutgapsize": self.ui.tools_defaults_form.tools_cutout_group.cutout_gap_entry, - "tools_gaps_ff": self.ui.tools_defaults_form.tools_cutout_group.gaps_combo, - "tools_cutout_convexshape": self.ui.tools_defaults_form.tools_cutout_group.convex_box, - - # Paint Area Tool - "tools_painttooldia": self.ui.tools_defaults_form.tools_paint_group.painttooldia_entry, - "tools_paintorder": self.ui.tools_defaults_form.tools_paint_group.paint_order_radio, - "tools_paintoverlap": self.ui.tools_defaults_form.tools_paint_group.paintoverlap_entry, - "tools_paintmargin": self.ui.tools_defaults_form.tools_paint_group.paintmargin_entry, - "tools_paintmethod": self.ui.tools_defaults_form.tools_paint_group.paintmethod_combo, - "tools_selectmethod": self.ui.tools_defaults_form.tools_paint_group.selectmethod_combo, - "tools_paint_area_shape": self.ui.tools_defaults_form.tools_paint_group.area_shape_radio, - "tools_pathconnect": self.ui.tools_defaults_form.tools_paint_group.pathconnect_cb, - "tools_paintcontour": self.ui.tools_defaults_form.tools_paint_group.contour_cb, - "tools_paint_plotting": self.ui.tools_defaults_form.tools_paint_group.paint_plotting_radio, - - "tools_paintrest": self.ui.tools_defaults_form.tools_paint_group.rest_cb, - "tools_painttool_type": self.ui.tools_defaults_form.tools_paint_group.tool_type_radio, - "tools_paintcutz": self.ui.tools_defaults_form.tools_paint_group.cutz_entry, - "tools_painttipdia": self.ui.tools_defaults_form.tools_paint_group.tipdia_entry, - "tools_painttipangle": self.ui.tools_defaults_form.tools_paint_group.tipangle_entry, - "tools_paintnewdia": self.ui.tools_defaults_form.tools_paint_group.newdia_entry, - - # 2-sided Tool - "tools_2sided_mirror_axis": self.ui.tools_defaults_form.tools_2sided_group.mirror_axis_radio, - "tools_2sided_axis_loc": self.ui.tools_defaults_form.tools_2sided_group.axis_location_radio, - "tools_2sided_drilldia": self.ui.tools_defaults_form.tools_2sided_group.drill_dia_entry, - "tools_2sided_allign_axis": self.ui.tools_defaults_form.tools_2sided_group.align_axis_radio, - - # Film Tool - "tools_film_type": self.ui.tools_defaults_form.tools_film_group.film_type_radio, - "tools_film_boundary": self.ui.tools_defaults_form.tools_film_group.film_boundary_entry, - "tools_film_scale_stroke": self.ui.tools_defaults_form.tools_film_group.film_scale_stroke_entry, - "tools_film_color": self.ui.tools_defaults_form.tools_film_group.film_color_entry, - "tools_film_scale_cb": self.ui.tools_defaults_form.tools_film_group.film_scale_cb, - "tools_film_scale_x_entry": self.ui.tools_defaults_form.tools_film_group.film_scalex_entry, - "tools_film_scale_y_entry": self.ui.tools_defaults_form.tools_film_group.film_scaley_entry, - "tools_film_skew_cb": self.ui.tools_defaults_form.tools_film_group.film_skew_cb, - "tools_film_skew_x_entry": self.ui.tools_defaults_form.tools_film_group.film_skewx_entry, - "tools_film_skew_y_entry": self.ui.tools_defaults_form.tools_film_group.film_skewy_entry, - "tools_film_skew_ref_radio": self.ui.tools_defaults_form.tools_film_group.film_skew_reference, - "tools_film_mirror_cb": self.ui.tools_defaults_form.tools_film_group.film_mirror_cb, - "tools_film_mirror_axis_radio": self.ui.tools_defaults_form.tools_film_group.film_mirror_axis, - "tools_film_file_type_radio": self.ui.tools_defaults_form.tools_film_group.file_type_radio, - "tools_film_orientation": self.ui.tools_defaults_form.tools_film_group.orientation_radio, - "tools_film_pagesize": self.ui.tools_defaults_form.tools_film_group.pagesize_combo, - - # Panelize Tool - "tools_panelize_spacing_columns": self.ui.tools_defaults_form.tools_panelize_group.pspacing_columns, - "tools_panelize_spacing_rows": self.ui.tools_defaults_form.tools_panelize_group.pspacing_rows, - "tools_panelize_columns": self.ui.tools_defaults_form.tools_panelize_group.pcolumns, - "tools_panelize_rows": self.ui.tools_defaults_form.tools_panelize_group.prows, - "tools_panelize_constrain": self.ui.tools_defaults_form.tools_panelize_group.pconstrain_cb, - "tools_panelize_constrainx": self.ui.tools_defaults_form.tools_panelize_group.px_width_entry, - "tools_panelize_constrainy": self.ui.tools_defaults_form.tools_panelize_group.py_height_entry, - "tools_panelize_panel_type": self.ui.tools_defaults_form.tools_panelize_group.panel_type_radio, - - # Calculators Tool - "tools_calc_vshape_tip_dia": self.ui.tools_defaults_form.tools_calculators_group.tip_dia_entry, - "tools_calc_vshape_tip_angle": self.ui.tools_defaults_form.tools_calculators_group.tip_angle_entry, - "tools_calc_vshape_cut_z": self.ui.tools_defaults_form.tools_calculators_group.cut_z_entry, - "tools_calc_electro_length": self.ui.tools_defaults_form.tools_calculators_group.pcblength_entry, - "tools_calc_electro_width": self.ui.tools_defaults_form.tools_calculators_group.pcbwidth_entry, - "tools_calc_electro_cdensity": self.ui.tools_defaults_form.tools_calculators_group.cdensity_entry, - "tools_calc_electro_growth": self.ui.tools_defaults_form.tools_calculators_group.growth_entry, - - # Transformations Tool - "tools_transform_rotate": self.ui.tools_defaults_form.tools_transform_group.rotate_entry, - "tools_transform_skew_x": self.ui.tools_defaults_form.tools_transform_group.skewx_entry, - "tools_transform_skew_y": self.ui.tools_defaults_form.tools_transform_group.skewy_entry, - "tools_transform_scale_x": self.ui.tools_defaults_form.tools_transform_group.scalex_entry, - "tools_transform_scale_y": self.ui.tools_defaults_form.tools_transform_group.scaley_entry, - "tools_transform_scale_link": self.ui.tools_defaults_form.tools_transform_group.link_cb, - "tools_transform_scale_reference": self.ui.tools_defaults_form.tools_transform_group.reference_cb, - "tools_transform_offset_x": self.ui.tools_defaults_form.tools_transform_group.offx_entry, - "tools_transform_offset_y": self.ui.tools_defaults_form.tools_transform_group.offy_entry, - "tools_transform_mirror_reference": self.ui.tools_defaults_form.tools_transform_group.mirror_reference_cb, - "tools_transform_mirror_point": self.ui.tools_defaults_form.tools_transform_group.flip_ref_entry, - "tools_transform_buffer_dis": self.ui.tools_defaults_form.tools_transform_group.buffer_entry, - "tools_transform_buffer_factor": self.ui.tools_defaults_form.tools_transform_group.buffer_factor_entry, - "tools_transform_buffer_corner": self.ui.tools_defaults_form.tools_transform_group.buffer_rounded_cb, - - # SolderPaste Dispensing Tool - "tools_solderpaste_tools": self.ui.tools_defaults_form.tools_solderpaste_group.nozzle_tool_dia_entry, - "tools_solderpaste_new": self.ui.tools_defaults_form.tools_solderpaste_group.addtool_entry, - "tools_solderpaste_z_start": self.ui.tools_defaults_form.tools_solderpaste_group.z_start_entry, - "tools_solderpaste_z_dispense": self.ui.tools_defaults_form.tools_solderpaste_group.z_dispense_entry, - "tools_solderpaste_z_stop": self.ui.tools_defaults_form.tools_solderpaste_group.z_stop_entry, - "tools_solderpaste_z_travel": self.ui.tools_defaults_form.tools_solderpaste_group.z_travel_entry, - "tools_solderpaste_z_toolchange": self.ui.tools_defaults_form.tools_solderpaste_group.z_toolchange_entry, - "tools_solderpaste_xy_toolchange": self.ui.tools_defaults_form.tools_solderpaste_group.xy_toolchange_entry, - "tools_solderpaste_frxy": self.ui.tools_defaults_form.tools_solderpaste_group.frxy_entry, - "tools_solderpaste_frz": self.ui.tools_defaults_form.tools_solderpaste_group.frz_entry, - "tools_solderpaste_frz_dispense": self.ui.tools_defaults_form.tools_solderpaste_group.frz_dispense_entry, - "tools_solderpaste_speedfwd": self.ui.tools_defaults_form.tools_solderpaste_group.speedfwd_entry, - "tools_solderpaste_dwellfwd": self.ui.tools_defaults_form.tools_solderpaste_group.dwellfwd_entry, - "tools_solderpaste_speedrev": self.ui.tools_defaults_form.tools_solderpaste_group.speedrev_entry, - "tools_solderpaste_dwellrev": self.ui.tools_defaults_form.tools_solderpaste_group.dwellrev_entry, - "tools_solderpaste_pp": self.ui.tools_defaults_form.tools_solderpaste_group.pp_combo, - "tools_sub_close_paths": self.ui.tools_defaults_form.tools_sub_group.close_paths_cb, - - # ####################################################################################################### - # ########################################## TOOLS 2 #################################################### - # ####################################################################################################### - - # Optimal Tool - "tools_opt_precision": self.ui.tools2_defaults_form.tools2_optimal_group.precision_sp, - - # Check Rules Tool - "tools_cr_trace_size": self.ui.tools2_defaults_form.tools2_checkrules_group.trace_size_cb, - "tools_cr_trace_size_val": self.ui.tools2_defaults_form.tools2_checkrules_group.trace_size_entry, - "tools_cr_c2c": self.ui.tools2_defaults_form.tools2_checkrules_group.clearance_copper2copper_cb, - "tools_cr_c2c_val": self.ui.tools2_defaults_form.tools2_checkrules_group.clearance_copper2copper_entry, - "tools_cr_c2o": self.ui.tools2_defaults_form.tools2_checkrules_group.clearance_copper2ol_cb, - "tools_cr_c2o_val": self.ui.tools2_defaults_form.tools2_checkrules_group.clearance_copper2ol_entry, - "tools_cr_s2s": self.ui.tools2_defaults_form.tools2_checkrules_group.clearance_silk2silk_cb, - "tools_cr_s2s_val": self.ui.tools2_defaults_form.tools2_checkrules_group.clearance_silk2silk_entry, - "tools_cr_s2sm": self.ui.tools2_defaults_form.tools2_checkrules_group.clearance_silk2sm_cb, - "tools_cr_s2sm_val": self.ui.tools2_defaults_form.tools2_checkrules_group.clearance_silk2sm_entry, - "tools_cr_s2o": self.ui.tools2_defaults_form.tools2_checkrules_group.clearance_silk2ol_cb, - "tools_cr_s2o_val": self.ui.tools2_defaults_form.tools2_checkrules_group.clearance_silk2ol_entry, - "tools_cr_sm2sm": self.ui.tools2_defaults_form.tools2_checkrules_group.clearance_sm2sm_cb, - "tools_cr_sm2sm_val": self.ui.tools2_defaults_form.tools2_checkrules_group.clearance_sm2sm_entry, - "tools_cr_ri": self.ui.tools2_defaults_form.tools2_checkrules_group.ring_integrity_cb, - "tools_cr_ri_val": self.ui.tools2_defaults_form.tools2_checkrules_group.ring_integrity_entry, - "tools_cr_h2h": self.ui.tools2_defaults_form.tools2_checkrules_group.clearance_d2d_cb, - "tools_cr_h2h_val": self.ui.tools2_defaults_form.tools2_checkrules_group.clearance_d2d_entry, - "tools_cr_dh": self.ui.tools2_defaults_form.tools2_checkrules_group.drill_size_cb, - "tools_cr_dh_val": self.ui.tools2_defaults_form.tools2_checkrules_group.drill_size_entry, - - # QRCode Tool - "tools_qrcode_version": self.ui.tools2_defaults_form.tools2_qrcode_group.version_entry, - "tools_qrcode_error": self.ui.tools2_defaults_form.tools2_qrcode_group.error_radio, - "tools_qrcode_box_size": self.ui.tools2_defaults_form.tools2_qrcode_group.bsize_entry, - "tools_qrcode_border_size": self.ui.tools2_defaults_form.tools2_qrcode_group.border_size_entry, - "tools_qrcode_qrdata": self.ui.tools2_defaults_form.tools2_qrcode_group.text_data, - "tools_qrcode_polarity": self.ui.tools2_defaults_form.tools2_qrcode_group.pol_radio, - "tools_qrcode_rounded": self.ui.tools2_defaults_form.tools2_qrcode_group.bb_radio, - "tools_qrcode_fill_color": self.ui.tools2_defaults_form.tools2_qrcode_group.fill_color_entry, - "tools_qrcode_back_color": self.ui.tools2_defaults_form.tools2_qrcode_group.back_color_entry, - "tools_qrcode_sel_limit": self.ui.tools2_defaults_form.tools2_qrcode_group.sel_limit_entry, - - # Copper Thieving Tool - "tools_copper_thieving_clearance": self.ui.tools2_defaults_form.tools2_cfill_group.clearance_entry, - "tools_copper_thieving_margin": self.ui.tools2_defaults_form.tools2_cfill_group.margin_entry, - "tools_copper_thieving_reference": self.ui.tools2_defaults_form.tools2_cfill_group.reference_radio, - "tools_copper_thieving_box_type": self.ui.tools2_defaults_form.tools2_cfill_group.bbox_type_radio, - "tools_copper_thieving_circle_steps": self.ui.tools2_defaults_form.tools2_cfill_group.circlesteps_entry, - "tools_copper_thieving_fill_type": self.ui.tools2_defaults_form.tools2_cfill_group.fill_type_radio, - "tools_copper_thieving_dots_dia": self.ui.tools2_defaults_form.tools2_cfill_group.dot_dia_entry, - "tools_copper_thieving_dots_spacing": self.ui.tools2_defaults_form.tools2_cfill_group.dot_spacing_entry, - "tools_copper_thieving_squares_size": self.ui.tools2_defaults_form.tools2_cfill_group.square_size_entry, - "tools_copper_thieving_squares_spacing": - self.ui.tools2_defaults_form.tools2_cfill_group.squares_spacing_entry, - "tools_copper_thieving_lines_size": self.ui.tools2_defaults_form.tools2_cfill_group.line_size_entry, - "tools_copper_thieving_lines_spacing": self.ui.tools2_defaults_form.tools2_cfill_group.lines_spacing_entry, - "tools_copper_thieving_rb_margin": self.ui.tools2_defaults_form.tools2_cfill_group.rb_margin_entry, - "tools_copper_thieving_rb_thickness": self.ui.tools2_defaults_form.tools2_cfill_group.rb_thickness_entry, - "tools_copper_thieving_mask_clearance": self.ui.tools2_defaults_form.tools2_cfill_group.clearance_ppm_entry, - - # Fiducials Tool - "tools_fiducials_dia": self.ui.tools2_defaults_form.tools2_fiducials_group.dia_entry, - "tools_fiducials_margin": self.ui.tools2_defaults_form.tools2_fiducials_group.margin_entry, - "tools_fiducials_mode": self.ui.tools2_defaults_form.tools2_fiducials_group.mode_radio, - "tools_fiducials_second_pos": self.ui.tools2_defaults_form.tools2_fiducials_group.pos_radio, - "tools_fiducials_type": self.ui.tools2_defaults_form.tools2_fiducials_group.fid_type_radio, - "tools_fiducials_line_thickness": self.ui.tools2_defaults_form.tools2_fiducials_group.line_thickness_entry, - - # Calibration Tool - "tools_cal_calsource": self.ui.tools2_defaults_form.tools2_cal_group.cal_source_radio, - "tools_cal_travelz": self.ui.tools2_defaults_form.tools2_cal_group.travelz_entry, - "tools_cal_verz": self.ui.tools2_defaults_form.tools2_cal_group.verz_entry, - "tools_cal_zeroz": self.ui.tools2_defaults_form.tools2_cal_group.zeroz_cb, - "tools_cal_toolchangez": self.ui.tools2_defaults_form.tools2_cal_group.toolchangez_entry, - "tools_cal_toolchange_xy": self.ui.tools2_defaults_form.tools2_cal_group.toolchange_xy_entry, - "tools_cal_sec_point": self.ui.tools2_defaults_form.tools2_cal_group.second_point_radio, - - # Extract Drills Tool - "tools_edrills_hole_type": self.ui.tools2_defaults_form.tools2_edrills_group.hole_size_radio, - "tools_edrills_hole_fixed_dia": self.ui.tools2_defaults_form.tools2_edrills_group.dia_entry, - "tools_edrills_hole_prop_factor": self.ui.tools2_defaults_form.tools2_edrills_group.factor_entry, - "tools_edrills_circular_ring": self.ui.tools2_defaults_form.tools2_edrills_group.circular_ring_entry, - "tools_edrills_oblong_ring": self.ui.tools2_defaults_form.tools2_edrills_group.oblong_ring_entry, - "tools_edrills_square_ring": self.ui.tools2_defaults_form.tools2_edrills_group.square_ring_entry, - "tools_edrills_rectangular_ring": self.ui.tools2_defaults_form.tools2_edrills_group.rectangular_ring_entry, - "tools_edrills_others_ring": self.ui.tools2_defaults_form.tools2_edrills_group.other_ring_entry, - "tools_edrills_circular": self.ui.tools2_defaults_form.tools2_edrills_group.circular_cb, - "tools_edrills_oblong": self.ui.tools2_defaults_form.tools2_edrills_group.oblong_cb, - "tools_edrills_square": self.ui.tools2_defaults_form.tools2_edrills_group.square_cb, - "tools_edrills_rectangular": self.ui.tools2_defaults_form.tools2_edrills_group.rectangular_cb, - "tools_edrills_others": self.ui.tools2_defaults_form.tools2_edrills_group.other_cb, - - # Punch Gerber Tool - "tools_punch_hole_type": self.ui.tools2_defaults_form.tools2_punch_group.hole_size_radio, - "tools_punch_hole_fixed_dia": self.ui.tools2_defaults_form.tools2_punch_group.dia_entry, - "tools_punch_hole_prop_factor": self.ui.tools2_defaults_form.tools2_punch_group.factor_entry, - "tools_punch_circular_ring": self.ui.tools2_defaults_form.tools2_punch_group.circular_ring_entry, - "tools_punch_oblong_ring": self.ui.tools2_defaults_form.tools2_punch_group.oblong_ring_entry, - "tools_punch_square_ring": self.ui.tools2_defaults_form.tools2_punch_group.square_ring_entry, - "tools_punch_rectangular_ring": self.ui.tools2_defaults_form.tools2_punch_group.rectangular_ring_entry, - "tools_punch_others_ring": self.ui.tools2_defaults_form.tools2_punch_group.other_ring_entry, - "tools_punch_circular": self.ui.tools2_defaults_form.tools2_punch_group.circular_cb, - "tools_punch_oblong": self.ui.tools2_defaults_form.tools2_punch_group.oblong_cb, - "tools_punch_square": self.ui.tools2_defaults_form.tools2_punch_group.square_cb, - "tools_punch_rectangular": self.ui.tools2_defaults_form.tools2_punch_group.rectangular_cb, - "tools_punch_others": self.ui.tools2_defaults_form.tools2_punch_group.other_cb, - - # Invert Gerber Tool - "tools_invert_margin": self.ui.tools2_defaults_form.tools2_invert_group.margin_entry, - "tools_invert_join_style": self.ui.tools2_defaults_form.tools2_invert_group.join_radio, - - # Utilities - # File associations - "fa_excellon": self.ui.util_defaults_form.fa_excellon_group.exc_list_text, - "fa_gcode": self.ui.util_defaults_form.fa_gcode_group.gco_list_text, - # "fa_geometry": self.ui.util_defaults_form.fa_geometry_group.close_paths_cb, - "fa_gerber": self.ui.util_defaults_form.fa_gerber_group.grb_list_text, - "util_autocomplete_keywords": self.ui.util_defaults_form.kw_group.kw_list_text, - - } - - # update the Preferences GUI elements with the values in the self.defaults - self.defaults_write_form() + self.preferencesUiManager = PreferencesUIManager(defaults=self.defaults, data_path=self.data_path, ui=self.ui, inform=self.inform) + self.preferencesUiManager.defaults_write_form() # When the self.defaults dictionary changes will update the Preferences GUI forms self.defaults.set_change_callback(self.on_defaults_dict_change) @@ -1109,7 +566,7 @@ class App(QtCore.QObject): # after the first run, this object should be False self.defaults["first_run"] = False - self.save_defaults(silent=True) + self.preferencesUiManager.save_defaults(silent=True) # ########################################################################################################### # ############################################ Data ######################################################### @@ -1188,20 +645,9 @@ class App(QtCore.QObject): chars = 'abcdefghijklmnopqrstuvwxyz0123456789' if self.defaults['global_serial'] == 0 or len(str(self.defaults['global_serial'])) < 10: self.defaults['global_serial'] = ''.join([random.choice(chars) for __ in range(20)]) - self.save_defaults(silent=True, first_time=True) + self.preferencesUiManager.save_defaults(silent=True, first_time=True) - self.propagate_defaults(silent=True) - - # def auto_save_defaults(): - # try: - # self.save_defaults(silent=True) - # self.propagate_defaults(silent=True) - # finally: - # QtCore.QTimer.singleShot(self.defaults["global_defaults_save_period_ms"], auto_save_defaults) - - # the following lines activates automatic defaults save - # if user_defaults: - # QtCore.QTimer.singleShot(self.defaults["global_defaults_save_period_ms"], auto_save_defaults) + self.defaults.propagate_defaults() # ########################################################################################################### # ######################################## UPDATE THE OPTIONS ############################################### @@ -1215,21 +661,9 @@ class App(QtCore.QObject): # Copy app defaults to project options for def_key, def_val in self.defaults.items(): self.options[def_key] = deepcopy(def_val) - # self.options.update(self.defaults) - self.gen_form = None - self.ger_form = None - self.exc_form = None - self.geo_form = None - self.cnc_form = None - self.tools_form = None - self.tools2_form = None - self.fa_form = None + self.preferencesUiManager.show_preferences_gui() - # Will show the Preferences GUI - self.show_preferences_gui() - # Initialize the color box's color in Preferences -> Global -> Color - self.init_color_pickers_in_preferences_gui() # ### End of Data #### @@ -1517,13 +951,6 @@ class App(QtCore.QObject): for act in self.ui.menuprojectcolor.actions(): act.triggered.connect(self.on_set_color_action_triggered) - # Preferences Plot Area TAB - self.ui.pref_save_button.clicked.connect(lambda: self.on_save_button(save_to_file=True)) - self.ui.pref_apply_button.clicked.connect(lambda: self.on_save_button(save_to_file=False)) - self.ui.pref_close_button.clicked.connect(self.on_pref_close_button) - - self.ui.pref_defaults_button.clicked.connect(self.on_restore_defaults_preferences) - # ########################################################################################################### # #################################### GUI PREFERENCES SIGNALS ############################################## # ########################################################################################################### @@ -2079,9 +1506,6 @@ class App(QtCore.QObject): self.reference_code_editor = None self.script_code = '' - # if Preferences are changed in the Edit -> Preferences tab the value will be set to True - self.preferences_changed_flag = False - # if Tools DB are changed/edited in the Edit -> Tools Database tab the value will be set to True self.tools_db_changed_flag = False @@ -2259,10 +1683,10 @@ class App(QtCore.QObject): self.args_at_startup.emit(App.args) - if self.fcDefaults.old_defaults_found is True: + if self.defaults.old_defaults_found is True: self.inform.emit('[WARNING_NOTCL] %s' % _("Found old default preferences files. " "Please reboot the application to update.")) - self.fcDefaults.old_defaults_found = False + self.defaults.old_defaults_found = False # ######################################### INIT FINISHED ####################################################### # ################################################################################################################# @@ -2377,7 +1801,7 @@ class App(QtCore.QObject): elif 'save'.lower() in argument.lower(): log.debug("App.on_startup_args() --> Save event. App Defaults saved.") - self.save_defaults() + self.preferencesUiManager.save_defaults() else: exc_list = self.ui.util_defaults_form.fa_excellon_group.exc_list_text.get_value().split(',') proc_arg = argument.lower() @@ -2455,74 +1879,7 @@ class App(QtCore.QObject): fcTranslate.restart_program(app=self) - def defaults_read_form(self): - """ - Will read all the values in the Preferences GUI and update the defaults dictionary. - :return: None - """ - for option in self.defaults_form_fields: - try: - self.defaults[option] = self.defaults_form_fields[option].get_value() - except Exception as e: - log.debug("App.defaults_read_form() --> %s" % str(e)) - - def defaults_write_form(self, factor=None, fl_units=None, source_dict=None): - """ - Will set the values for all the GUI elements in Preferences GUI based on the values found in the - self.defaults dictionary. - - :param factor: will apply a factor to the values that written in the GUI elements - :param fl_units: current measuring units in FlatCAM: Metric or Inch - :param source_dict: the repository of options, usually is the self.defaults - :return: None - """ - - options_storage = self.defaults if source_dict is None else source_dict - - for option in options_storage: - if source_dict: - self.defaults_write_form_field(option, factor=factor, units=fl_units, defaults_dict=source_dict) - else: - self.defaults_write_form_field(option, factor=factor, units=fl_units) - - # try: - # self.defaults_form_fields[option].set_value(self.defaults[option]) - # except KeyError: - # #self.log.debug("defaults_write_form(): No field for: %s" % option) - # pass - - def defaults_write_form_field(self, field, factor=None, units=None, defaults_dict=None): - """ - Basically it is the worker in the self.defaults_write_form() - - :param field: the GUI element in Preferences GUI to be updated - :param factor: factor to be applied to the field parameter - :param units: current FLatCAM measuring units - :param defaults_dict: the defaults storage - :return: None, it updates GUI elements - """ - - def_dict = self.defaults if defaults_dict is None else defaults_dict - try: - if factor is None: - if units is None: - self.defaults_form_fields[field].set_value(def_dict[field]) - elif units == 'IN' and (field == 'global_gridx' or field == 'global_gridy'): - self.defaults_form_fields[field].set_value(def_dict[field]) - elif units == 'MM' and (field == 'global_gridx' or field == 'global_gridy'): - self.defaults_form_fields[field].set_value(def_dict[field]) - else: - if units is None: - self.defaults_form_fields[field].set_value(def_dict[field] * factor) - elif units == 'IN' and (field == 'global_gridx' or field == 'global_gridy'): - self.defaults_form_fields[field].set_value((def_dict[field] * factor)) - elif units == 'MM' and (field == 'global_gridx' or field == 'global_gridy'): - self.defaults_form_fields[field].set_value((def_dict[field] * factor)) - except KeyError: - pass - except AttributeError: - log.debug(field) def clear_pool(self): """ @@ -3164,44 +2521,6 @@ class App(QtCore.QObject): else: self.ui.toolbarshell.setVisible(False) - def on_restore_defaults_preferences(self): - """ - Loads the application's factory default settings from factory_defaults.FlatConfig into - ``self.defaults``. - - :return: None - """ - - App.log.debug("App.on_restore_defaults_preferences()") - - filename = self.data_path + '/factory_defaults.FlatConfig' - - if filename == "": - self.inform.emit('[WARNING_NOTCL] %s' % _("Cancelled.")) - else: - try: - f = open(filename) - options = f.read() - f.close() - except IOError: - self.log.error("Could not load factory defaults file.") - self.inform.emit('[ERROR_NOTCL] %s' % _("Could not load factory defaults file.")) - return - - try: - defaults_from_file = json.loads(options) - except Exception: - e = sys.exc_info()[0] - App.log.error(str(e)) - self.inform.emit('[ERROR_NOTCL] %s' % _("Failed to parse factory defaults file.")) - return - self.defaults.update(defaults_from_file) - # update the dict that is used to restore the values in the defaults form if Cancel is clicked in the - # Preferences window - self.current_defaults.update(defaults_from_file) - - self.on_preferences_edited() - self.inform.emit('[success] %s' % _("Preferences default values are restored.")) def on_import_preferences(self): """ @@ -3229,7 +2548,7 @@ class App(QtCore.QObject): return # Load in the defaults from the chosen file - self.fcDefaults.load(filename=filename) + self.defaults.load(filename=filename) self.on_preferences_edited() self.inform.emit('[success] %s: %s' % (_("Imported Defaults from"), filename)) @@ -3264,12 +2583,12 @@ class App(QtCore.QObject): return # Update options - self.defaults_read_form() - self.propagate_defaults() + self.preferencesUiManager.defaults_read_form() + self.defaults.propagate_defaults() # Save update options try: - self.fcDefaults.write(filename=filename) + self.defaults.write(filename=filename) except Exception: self.inform.emit('[ERROR_NOTCL] %s %s' % (_("Failed to write defaults to file."), str(filename))) return @@ -3362,7 +2681,7 @@ class App(QtCore.QObject): self.defaults["global_def_win_w"] = width self.defaults["global_def_win_h"] = height self.defaults["global_def_notebook_width"] = notebook_width - self.save_defaults() + self.preferencesUiManager.save_defaults() def restore_main_win_geom(self): try: @@ -4200,46 +3519,7 @@ class App(QtCore.QObject): :return: None """ - self.save_defaults() - - - - def save_defaults(self, silent=False, data_path=None, first_time=False): - """ - Saves application default options - ``self.defaults`` to current_defaults.FlatConfig file. - Save the toolbars visibility status to the preferences file (current_defaults.FlatConfig) to be - used at the next launch of the application. - - :param silent: Whether to display a message in status bar or not; boolean - :param data_path: The path where to save the preferences file (current_defaults.FlatConfig) - When the application is portable it should be a mobile location. - :param first_time: Boolean. If True will execute some code when the app is run first time - :return: None - """ - self.report_usage("save_defaults") - - if data_path is None: - data_path = self.data_path - - self.propagate_defaults() - - if first_time is False: - self.save_toolbar_view() - - # Save the options to disk - try: - self.fcDefaults.write(filename=os.path.join(data_path, "current_defaults.FlatConfig")) - except Exception as e: - log.error("save_defaults() --> Failed to write defaults to file %s" % str(e)) - self.inform.emit('[ERROR_NOTCL] %s %s' % (_("Failed to write defaults to file."), str(filename))) - return - - if not silent: - self.inform.emit('[success] %s' % _("Preferences saved.")) - - # update the autosave timer - self.save_project_auto_update() + self.preferencesUiManager.save_defaults() def save_toolbar_view(self): """ @@ -4334,7 +3614,7 @@ class App(QtCore.QObject): :return: None """ - self.save_defaults(silent=True) + self.preferencesUiManager.save_defaults(silent=True) log.debug("App.quit_application() --> App Defaults saved.") if self.cmd_line_headless != 1: @@ -4481,7 +3761,7 @@ class App(QtCore.QObject): fp.close() # save the current defaults to the new defaults file - self.save_defaults(silent=True, data_path=current_data_path) + self.preferencesUiManager.save_defaults(silent=True, data_path=current_data_path) else: data[line_no] = 'portable=False\n' @@ -4961,7 +4241,7 @@ class App(QtCore.QObject): :param field: the key of the self.defaults dictionary that was changed. :return: None """ - self.defaults_write_form_field(field) + self.preferencesUiManager.defaults_write_form(field) if field == "units": self.set_screen_units(self.defaults['units']) @@ -5192,9 +4472,9 @@ class App(QtCore.QObject): if response == bt_ok: if no_pref is False: - self.defaults_read_form() + self.preferencesUiManager.defaults_read_form() scale_defaults(factor) - self.defaults_write_form(fl_units=new_units) + self.preferencesUiManager.defaults_write_form(fl_units=new_units) self.defaults["units"] = new_units @@ -5248,9 +4528,9 @@ class App(QtCore.QObject): self.inform.emit('[WARNING_NOTCL]%s' % _("Cancelled.")) - self.defaults_read_form() + self.preferencesUiManager.defaults_read_form() - # the self.defaults_read_form() will update all defaults values in self.defaults from the GUI elements but + # the self.preferencesUiManager.defaults_read_form() will update all defaults values in self.defaults from the GUI elements but # I don't want it for the grid values, so I update them here self.defaults['global_gridx'] = val_x self.defaults['global_gridy'] = val_y @@ -5407,245 +4687,10 @@ class App(QtCore.QObject): self.app_cursor.enabled = True self.app_cursor.enabled = False - def show_preferences_gui(self): - """ - Called to initialize and show the Preferences GUI - :return: None - """ - self.gen_form = self.ui.general_defaults_form - self.ger_form = self.ui.gerber_defaults_form - self.exc_form = self.ui.excellon_defaults_form - self.geo_form = self.ui.geometry_defaults_form - self.cnc_form = self.ui.cncjob_defaults_form - self.tools_form = self.ui.tools_defaults_form - self.tools2_form = self.ui.tools2_defaults_form - self.fa_form = self.ui.util_defaults_form - try: - self.ui.general_scroll_area.takeWidget() - except Exception: - self.log.debug("Nothing to remove") - self.ui.general_scroll_area.setWidget(self.gen_form) - self.gen_form.show() - try: - self.ui.gerber_scroll_area.takeWidget() - except Exception: - self.log.debug("Nothing to remove") - self.ui.gerber_scroll_area.setWidget(self.ger_form) - self.ger_form.show() - - try: - self.ui.excellon_scroll_area.takeWidget() - except Exception: - self.log.debug("Nothing to remove") - self.ui.excellon_scroll_area.setWidget(self.exc_form) - self.exc_form.show() - - try: - self.ui.geometry_scroll_area.takeWidget() - except Exception: - self.log.debug("Nothing to remove") - self.ui.geometry_scroll_area.setWidget(self.geo_form) - self.geo_form.show() - - try: - self.ui.cncjob_scroll_area.takeWidget() - except Exception: - self.log.debug("Nothing to remove") - self.ui.cncjob_scroll_area.setWidget(self.cnc_form) - self.cnc_form.show() - - try: - self.ui.tools_scroll_area.takeWidget() - except Exception: - self.log.debug("Nothing to remove") - self.ui.tools_scroll_area.setWidget(self.tools_form) - self.tools_form.show() - - try: - self.ui.tools2_scroll_area.takeWidget() - except Exception: - self.log.debug("Nothing to remove") - self.ui.tools2_scroll_area.setWidget(self.tools2_form) - self.tools2_form.show() - - try: - self.ui.fa_scroll_area.takeWidget() - except Exception: - self.log.debug("Nothing to remove") - self.ui.fa_scroll_area.setWidget(self.fa_form) - self.fa_form.show() - - self.log.debug("Finished Preferences GUI form initialization.") - - # self.options2form() - - def init_color_pickers_in_preferences_gui(self): - # 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;" - "border-color: dimgray" % str(self.defaults['gerber_plot_fill'])[:7]) - self.ui.gerber_defaults_form.gerber_gen_group.pf_color_alpha_spinner.set_value( - int(self.defaults['gerber_plot_fill'][7:9], 16)) - self.ui.gerber_defaults_form.gerber_gen_group.pf_color_alpha_slider.setValue( - int(self.defaults['gerber_plot_fill'][7:9], 16)) - - self.ui.gerber_defaults_form.gerber_gen_group.pl_color_entry.set_value(self.defaults['gerber_plot_line']) - self.ui.gerber_defaults_form.gerber_gen_group.pl_color_button.setStyleSheet( - "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( - "background-color:%s;" - "border-color: dimgray" % str(self.defaults['global_sel_fill'])[:7]) - self.ui.general_defaults_form.general_gui_group.sf_color_alpha_spinner.set_value( - int(self.defaults['global_sel_fill'][7:9], 16)) - self.ui.general_defaults_form.general_gui_group.sf_color_alpha_slider.setValue( - int(self.defaults['global_sel_fill'][7:9], 16)) - - self.ui.general_defaults_form.general_gui_group.sl_color_entry.set_value(self.defaults['global_sel_line']) - self.ui.general_defaults_form.general_gui_group.sl_color_button.setStyleSheet( - "background-color:%s;" - "border-color: dimgray" % str(self.defaults['global_sel_line'])[:7]) - - # Init Right-Left Selection colors - self.ui.general_defaults_form.general_gui_group.alt_sf_color_entry.set_value( - self.defaults['global_alt_sel_fill']) - self.ui.general_defaults_form.general_gui_group.alt_sf_color_button.setStyleSheet( - "background-color:%s;" - "border-color: dimgray" % str(self.defaults['global_alt_sel_fill'])[:7]) - self.ui.general_defaults_form.general_gui_group.alt_sf_color_alpha_spinner.set_value( - int(self.defaults['global_sel_fill'][7:9], 16)) - self.ui.general_defaults_form.general_gui_group.alt_sf_color_alpha_slider.setValue( - int(self.defaults['global_sel_fill'][7:9], 16)) - - self.ui.general_defaults_form.general_gui_group.alt_sl_color_entry.set_value( - self.defaults['global_alt_sel_line']) - self.ui.general_defaults_form.general_gui_group.alt_sl_color_button.setStyleSheet( - "background-color:%s;" - "border-color: dimgray" % str(self.defaults['global_alt_sel_line'])[:7]) - - # Init Draw color and Selection Draw Color - self.ui.general_defaults_form.general_gui_group.draw_color_entry.set_value( - self.defaults['global_draw_color']) - self.ui.general_defaults_form.general_gui_group.draw_color_button.setStyleSheet( - "background-color:%s;" - "border-color: dimgray" % str(self.defaults['global_draw_color'])[:7]) - - self.ui.general_defaults_form.general_gui_group.sel_draw_color_entry.set_value( - self.defaults['global_sel_draw_color']) - self.ui.general_defaults_form.general_gui_group.sel_draw_color_button.setStyleSheet( - "background-color:%s;" - "border-color: dimgray" % str(self.defaults['global_sel_draw_color'])[:7]) - - # Init Project Items color - self.ui.general_defaults_form.general_gui_group.proj_color_entry.set_value( - self.defaults['global_proj_item_color']) - self.ui.general_defaults_form.general_gui_group.proj_color_button.setStyleSheet( - "background-color:%s;" - "border-color: dimgray" % str(self.defaults['global_proj_item_color'])[:7]) - - # Init Project Disabled Items color - self.ui.general_defaults_form.general_gui_group.proj_color_dis_entry.set_value( - self.defaults['global_proj_item_dis_color']) - self.ui.general_defaults_form.general_gui_group.proj_color_dis_button.setStyleSheet( - "background-color:%s;" - "border-color: dimgray" % str(self.defaults['global_proj_item_dis_color'])[:7]) - - # Init Project Disabled Items color - 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_app_set_group.mouse_cursor_button.setStyleSheet( - "background-color:%s;" - "border-color: dimgray" % str(self.defaults['global_cursor_color'])[:7]) - - # Init the Annotation CNC Job color - self.ui.cncjob_defaults_form.cncjob_adv_opt_group.annotation_fontcolor_entry.set_value( - self.defaults['cncjob_annotation_fontcolor']) - self.ui.cncjob_defaults_form.cncjob_adv_opt_group.annotation_fontcolor_button.setStyleSheet( - "background-color:%s;" - "border-color: dimgray" % str(self.defaults['cncjob_annotation_fontcolor'])[:7]) - - # Init the Tool Film color - self.ui.tools_defaults_form.tools_film_group.film_color_entry.set_value( - self.defaults['tools_film_color']) - self.ui.tools_defaults_form.tools_film_group.film_color_button.setStyleSheet( - "background-color:%s;" - "border-color: dimgray" % str(self.defaults['tools_film_color'])[:7] - ) - - # Init the Tool QRCode colors - self.ui.tools2_defaults_form.tools2_qrcode_group.fill_color_entry.set_value( - self.defaults['tools_qrcode_fill_color']) - self.ui.tools2_defaults_form.tools2_qrcode_group.fill_color_button.setStyleSheet( - "background-color:%s;" - "border-color: dimgray" % str(self.defaults['tools_qrcode_fill_color'])[:7]) - - self.ui.tools2_defaults_form.tools2_qrcode_group.back_color_entry.set_value( - self.defaults['tools_qrcode_back_color']) - self.ui.tools2_defaults_form.tools2_qrcode_group.back_color_button.setStyleSheet( - "background-color:%s;" - "border-color: dimgray" % str(self.defaults['tools_qrcode_back_color'])[:7]) def on_update_exc_export(self, state): """ @@ -5896,7 +4941,7 @@ class App(QtCore.QObject): # self.save_defaults(silent=True) if self.is_legacy is True: self.plotcanvas.delete_workspace() - self.defaults_read_form() + self.preferencesUiManager.defaults_read_form() self.plotcanvas.draw_workspace(workspace_size=self.defaults['global_workspaceT']) def on_workspace(self): @@ -5904,7 +4949,7 @@ class App(QtCore.QObject): self.plotcanvas.draw_workspace(workspace_size=self.defaults['global_workspaceT']) else: self.plotcanvas.delete_workspace() - self.defaults_read_form() + self.preferencesUiManager.defaults_read_form() # self.save_defaults(silent=True) def on_workspace_toggle(self): @@ -5939,93 +4984,6 @@ class App(QtCore.QObject): else: self.app_cursor.enabled = False - def on_save_button(self, save_to_file=True): - log.debug("App.on_save_button() --> Applying preferences to file.") - - # Preferences saved, update flag - self.preferences_changed_flag = False - - # Preferences save, update the color of the Preferences Tab text - for idx in range(self.ui.plot_tab_area.count()): - if self.ui.plot_tab_area.tabText(idx) == _("Preferences"): - self.ui.plot_tab_area.tabBar.setTabTextColor(idx, QtGui.QColor('black')) - - # restore the default stylesheet by setting a blank one - self.ui.pref_apply_button.setStyleSheet("") - - self.inform.emit('%s' % _("Preferences applied.")) - - # make sure we update the self.current_defaults dict used to undo changes to self.defaults - self.current_defaults.update(self.defaults) - - if save_to_file: - self.save_defaults(silent=False) - # load the defaults so they are updated into the app - self.load_defaults(filename='current_defaults') - - # Re-fresh project options - self.on_options_app2project() - - settgs = QSettings("Open Source", "FlatCAM") - - # save the notebook font size - 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_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_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_set_group.machinist_cb.get_value() else 0 - ) - - # This will write the setting to the platform specific storage. - del settgs - - if save_to_file: - # close the tab and delete it - for idx in range(self.ui.plot_tab_area.count()): - if self.ui.plot_tab_area.tabText(idx) == _("Preferences"): - self.ui.plot_tab_area.tabBar.setTabTextColor(idx, QtGui.QColor('black')) - self.ui.plot_tab_area.closeTab(idx) - break - - def on_pref_close_button(self): - # Preferences saved, update flag - self.preferences_changed_flag = False - try: - self.ui.plot_tab_area.tab_closed_signal.disconnect(self.on_plot_area_tab_closed) - except TypeError: - pass - - try: - self.ui.general_defaults_form.general_app_group.units_radio.activated_custom.disconnect() - except (TypeError, AttributeError): - pass - self.defaults_write_form(source_dict=self.current_defaults) - self.ui.general_defaults_form.general_app_group.units_radio.activated_custom.connect( - lambda: self.on_toggle_units(no_pref=False)) - self.defaults.update(self.current_defaults) - - # shared_items = {k: self.defaults[k] for k in self.defaults if k in self.current_defaults and - # self.defaults[k] == self.current_defaults[k]} - # print(len(self.defaults), len(shared_items)) - - # Preferences save, update the color of the Preferences Tab text - for idx in range(self.ui.plot_tab_area.count()): - if self.ui.plot_tab_area.tabText(idx) == _("Preferences"): - self.ui.plot_tab_area.tabBar.setTabTextColor(idx, QtGui.QColor('black')) - self.ui.plot_tab_area.closeTab(idx) - break - - self.inform.emit('%s' % _("Preferences closed without saving.")) - self.ui.plot_tab_area.tab_closed_signal.connect(self.on_plot_area_tab_closed) def on_tool_add_keypress(self): # ## Current application units in Upper Case @@ -7015,7 +5973,7 @@ class App(QtCore.QObject): Will color the Preferences tab text to Red color. :return: """ - if self.preferences_changed_flag is False: + if self.preferencesUiManager.preferences_changed_flag is False: self.inform.emit('[WARNING_NOTCL] %s' % _("Preferences edited but not saved.")) for idx in range(self.ui.plot_tab_area.count()): @@ -7024,7 +5982,7 @@ class App(QtCore.QObject): self.ui.pref_apply_button.setStyleSheet("QPushButton {color: red;}") - self.preferences_changed_flag = True + self.preferencesUiManager.preferences_changed_flag = True def on_tools_database(self, source='app'): """ @@ -7152,7 +6110,7 @@ class App(QtCore.QObject): except (TypeError, AttributeError): pass - if self.preferences_changed_flag is True: + if self.preferencesUiManager.preferences_changed_flag is True: msgbox = QtWidgets.QMessageBox() msgbox.setText(_("One or more values are changed.\n" "Do you want to save the Preferences?")) @@ -7167,10 +6125,10 @@ class App(QtCore.QObject): response = msgbox.clickedButton() if response == bt_yes: - self.on_save_button(save_to_file=True) + self.preferencesUiManager.on_save_button(save_to_file=True) self.inform.emit('[success] %s' % _("Preferences saved.")) else: - self.preferences_changed_flag = False + self.preferencesUiManager.preferences_changed_flag = False self.inform.emit('') return @@ -10833,42 +9791,6 @@ class App(QtCore.QObject): App.log.debug(" **************** Finished PROJECT loading... **************** ") - def propagate_defaults(self): - """ - This method is used to set default values in classes. It's - an alternative to project options but allows the use - of values invisible to the user. - """ - self.log.debug("propagate_defaults()") - - # Which objects to update the given parameters. - routes = { - "global_zdownrate": CNCjob, - "excellon_zeros": Excellon, - "excellon_format_upper_in": Excellon, - "excellon_format_lower_in": Excellon, - "excellon_format_upper_mm": Excellon, - "excellon_format_lower_mm": Excellon, - "excellon_units": Excellon, - "gerber_use_buffer_for_union": Gerber, - "geometry_multidepth": Geometry - } - - for param in routes: - if param in routes[param].defaults: - try: - routes[param].defaults[param] = self.defaults[param] - except KeyError: - self.log.error("FlatCAMApp.propagate_defaults() --> ERROR: " + param + " not in defaults.") - else: - # Try extracting the name: - # classname_param here is param in the object - if param.find(routes[param].__name__.lower() + "_") == 0: - p = param[len(routes[param].__name__) + 1:] - if p in routes[param].defaults: - routes[param].defaults[p] = self.defaults[param] - - def plot_all(self, fit_view=True, use_thread=True): @@ -11877,7 +10799,7 @@ class App(QtCore.QObject): self.report_usage("on_options_app2project") - self.defaults_read_form() + self.preferencesUiManager.defaults_read_form() self.options.update(self.defaults) # self.options_write_form() diff --git a/FlatCAMTranslation.py b/FlatCAMTranslation.py index fc4de384..673b5b41 100644 --- a/FlatCAMTranslation.py +++ b/FlatCAMTranslation.py @@ -207,6 +207,6 @@ def restart_program(app, ask=None): if response == bt_yes: app.on_file_saveprojectas(use_thread=True, quit_action=True) - app.save_defaults() + app.preferencesUiManager.save_defaults() python = sys.executable os.execl(python, python, *sys.argv) diff --git a/defaults.py b/defaults.py index ccff6dd4..e5efdc32 100644 --- a/defaults.py +++ b/defaults.py @@ -3,12 +3,16 @@ import stat import sys from copy import deepcopy from FlatCAMCommon import LoudDict -from camlib import to_dict +from camlib import to_dict, CNCjob, Geometry import simplejson import logging import gettext import FlatCAMTranslation as fcTranslate import builtins + +from flatcamParsers.ParseExcellon import Excellon +from flatcamParsers.ParseGerber import Gerber + fcTranslate.apply_language('strings') if '_' not in builtins.__dict__: _ = gettext.gettext @@ -689,6 +693,30 @@ class FlatCAMDefaults: self.current_defaults.update(self.factory_defaults) self.old_defaults_found = False + ##### Pass-through to the defaults LoudDict ##### + def __len__(self): + return self.defaults.__len__() + + def __getitem__(self, item): + return self.defaults.__getitem__(item) + + def __setitem__(self, key, value): + return self.defaults.__setitem__(key, value) + + def __delitem__(self, key): + return self.defaults.__delitem__(key) + + def __iter__(self): + return self.defaults.__iter__() + + def set_change_callback(self, callback): + self.defaults.set_change_callback(callback) + + def update(self, *args, **kwargs): + return self.defaults.update(*args, **kwargs) + + ##### Additional Methods ##### + def write(self, filename: str): """Saves the defaults to a file on disk""" with open(filename, "w") as file: @@ -703,7 +731,7 @@ class FlatCAMDefaults: options = f.read() f.close() except IOError: - self.log.error("Could not load defaults file.") + log.error("Could not load defaults file.") self.inform.emit('[ERROR] %s' % _("Could not load defaults file.")) # in case the defaults file can't be loaded, show all toolbars self.defaults["global_toolbar_view"] = 511 @@ -762,6 +790,42 @@ class FlatCAMDefaults: migrated[k] = v return migrated + def reset_to_factory_defaults(self): + self.defaults.update(self.factory_defaults) + self.current_defaults.update(self.factory_defaults) + self.old_defaults_found = False + def propagate_defaults(self): + """ + This method is used to set default values in classes. It's + an alternative to project options but allows the use + of values invisible to the user. + """ + log.debug("propagate_defaults()") + # Which objects to update the given parameters. + routes = { + "global_zdownrate": CNCjob, + "excellon_zeros": Excellon, + "excellon_format_upper_in": Excellon, + "excellon_format_lower_in": Excellon, + "excellon_format_upper_mm": Excellon, + "excellon_format_lower_mm": Excellon, + "excellon_units": Excellon, + "gerber_use_buffer_for_union": Gerber, + "geometry_multidepth": Geometry + } + for param in routes: + if param in routes[param].defaults: + try: + routes[param].defaults[param] = self.defaults[param] + except KeyError: + log.error("FlatCAMApp.propagate_defaults() --> ERROR: " + param + " not in defaults.") + else: + # Try extracting the name: + # classname_param here is param in the object + if param.find(routes[param].__name__.lower() + "_") == 0: + p = param[len(routes[param].__name__) + 1:] + if p in routes[param].defaults: + routes[param].defaults[p] = self.defaults[param] \ No newline at end of file diff --git a/flatcamGUI/FlatCAMGUI.py b/flatcamGUI/FlatCAMGUI.py index df280edb..b170521c 100644 --- a/flatcamGUI/FlatCAMGUI.py +++ b/flatcamGUI/FlatCAMGUI.py @@ -2910,7 +2910,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow): if key == QtCore.Qt.Key_S: widget_name = self.plot_tab_area.currentWidget().objectName() if widget_name == 'preferences_tab': - self.app.on_save_button(save_to_file=False) + self.app.preferencesUiManager.on_save_button(save_to_file=False) return if widget_name == 'database_tab': diff --git a/flatcamGUI/PreferencesUI.py b/flatcamGUI/PreferencesUI.py index 96c5e52e..964bb485 100644 --- a/flatcamGUI/PreferencesUI.py +++ b/flatcamGUI/PreferencesUI.py @@ -4,27 +4,1022 @@ # Date: 10/10/2019 # # MIT Licence # # ########################################################## +import os -from PyQt5.QtCore import QSettings +from defaults import FlatCAMDefaults from flatcamGUI.GUIElements import * import platform import sys - +import logging import gettext import FlatCAMTranslation as fcTranslate import builtins - +log = logging.getLogger('PreferencesUI') fcTranslate.apply_language('strings') if '_' not in builtins.__dict__: _ = gettext.gettext -settings = QtCore.QSettings("Open Source", "FlatCAM") +settings = QSettings("Open Source", "FlatCAM") if settings.contains("machinist"): machinist_setting = settings.value('machinist', type=int) else: machinist_setting = 0 +class PreferencesUIManager(): + + def __init__(self, defaults: FlatCAMDefaults, data_path: str, ui, inform): + self.defaults = defaults + self.data_path = data_path + self.ui = ui + self.inform = inform + + # if Preferences are changed in the Edit -> Preferences tab the value will be set to True + self.preferences_changed_flag = False + + # when adding entries here read the comments in the method found bellow named: + # def new_object(self, kind, name, initialize, active=True, fit=True, plot=True) + self.defaults_form_fields = { + # General App + "decimals_inch": self.ui.general_defaults_form.general_app_group.precision_inch_entry, + "decimals_metric": self.ui.general_defaults_form.general_app_group.precision_metric_entry, + "units": self.ui.general_defaults_form.general_app_group.units_radio, + "global_graphic_engine": self.ui.general_defaults_form.general_app_group.ge_radio, + "global_app_level": self.ui.general_defaults_form.general_app_group.app_level_radio, + "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_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_autosave": self.ui.general_defaults_form.general_app_group.autosave_cb, + "global_autosave_timeout": self.ui.general_defaults_form.general_app_group.autosave_entry, + + "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, + "global_tpdf_rmargin": self.ui.general_defaults_form.general_app_group.rmargin_entry, + + # General GUI Preferences + "global_theme": self.ui.general_defaults_form.general_gui_group.theme_radio, + "global_gray_icons": self.ui.general_defaults_form.general_gui_group.gray_icons_cb, + "global_layout": self.ui.general_defaults_form.general_gui_group.layout_combo, + "global_hover": self.ui.general_defaults_form.general_gui_group.hover_cb, + "global_selection_shape": self.ui.general_defaults_form.general_gui_group.selection_cb, + + "global_sel_fill": self.ui.general_defaults_form.general_gui_group.sf_color_entry, + "global_sel_line": self.ui.general_defaults_form.general_gui_group.sl_color_entry, + "global_alt_sel_fill": self.ui.general_defaults_form.general_gui_group.alt_sf_color_entry, + "global_alt_sel_line": self.ui.general_defaults_form.general_gui_group.alt_sl_color_entry, + "global_draw_color": self.ui.general_defaults_form.general_gui_group.draw_color_entry, + "global_sel_draw_color": self.ui.general_defaults_form.general_gui_group.sel_draw_color_entry, + + "global_proj_item_color": self.ui.general_defaults_form.general_gui_group.proj_color_entry, + "global_proj_item_dis_color": self.ui.general_defaults_form.general_gui_group.proj_color_dis_entry, + "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_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, + "gerber_solid": self.ui.gerber_defaults_form.gerber_gen_group.solid_cb, + "gerber_multicolored": self.ui.gerber_defaults_form.gerber_gen_group.multicolored_cb, + "gerber_circle_steps": self.ui.gerber_defaults_form.gerber_gen_group.circle_steps_entry, + "gerber_def_units": self.ui.gerber_defaults_form.gerber_gen_group.gerber_units_radio, + "gerber_def_zeros": self.ui.gerber_defaults_form.gerber_gen_group.gerber_zeros_radio, + "gerber_clean_apertures": self.ui.gerber_defaults_form.gerber_gen_group.gerber_clean_cb, + "gerber_extra_buffering": self.ui.gerber_defaults_form.gerber_gen_group.gerber_extra_buffering, + "gerber_plot_fill": self.ui.gerber_defaults_form.gerber_gen_group.pf_color_entry, + "gerber_plot_line": self.ui.gerber_defaults_form.gerber_gen_group.pl_color_entry, + + # Gerber Options + "gerber_isotooldia": self.ui.gerber_defaults_form.gerber_opt_group.iso_tool_dia_entry, + "gerber_isopasses": self.ui.gerber_defaults_form.gerber_opt_group.iso_width_entry, + "gerber_isooverlap": self.ui.gerber_defaults_form.gerber_opt_group.iso_overlap_entry, + "gerber_combine_passes": self.ui.gerber_defaults_form.gerber_opt_group.combine_passes_cb, + "gerber_iso_scope": self.ui.gerber_defaults_form.gerber_opt_group.iso_scope_radio, + "gerber_milling_type": self.ui.gerber_defaults_form.gerber_opt_group.milling_type_radio, + "gerber_noncoppermargin": self.ui.gerber_defaults_form.gerber_opt_group.noncopper_margin_entry, + "gerber_noncopperrounded": self.ui.gerber_defaults_form.gerber_opt_group.noncopper_rounded_cb, + "gerber_bboxmargin": self.ui.gerber_defaults_form.gerber_opt_group.bbmargin_entry, + "gerber_bboxrounded": self.ui.gerber_defaults_form.gerber_opt_group.bbrounded_cb, + + # Gerber Advanced Options + "gerber_aperture_display": self.ui.gerber_defaults_form.gerber_adv_opt_group.aperture_table_visibility_cb, + # "gerber_aperture_scale_factor": self.ui.gerber_defaults_form.gerber_adv_opt_group.scale_aperture_entry, + # "gerber_aperture_buffer_factor": self.ui.gerber_defaults_form.gerber_adv_opt_group.buffer_aperture_entry, + "gerber_follow": self.ui.gerber_defaults_form.gerber_adv_opt_group.follow_cb, + "gerber_tool_type": self.ui.gerber_defaults_form.gerber_adv_opt_group.tool_type_radio, + "gerber_vtipdia": self.ui.gerber_defaults_form.gerber_adv_opt_group.tipdia_spinner, + "gerber_vtipangle": self.ui.gerber_defaults_form.gerber_adv_opt_group.tipangle_spinner, + "gerber_vcutz": self.ui.gerber_defaults_form.gerber_adv_opt_group.cutz_spinner, + "gerber_iso_type": self.ui.gerber_defaults_form.gerber_adv_opt_group.iso_type_radio, + + "gerber_buffering": self.ui.gerber_defaults_form.gerber_adv_opt_group.buffering_radio, + "gerber_simplification": self.ui.gerber_defaults_form.gerber_adv_opt_group.simplify_cb, + "gerber_simp_tolerance": self.ui.gerber_defaults_form.gerber_adv_opt_group.simplification_tol_spinner, + + # Gerber Export + "gerber_exp_units": self.ui.gerber_defaults_form.gerber_exp_group.gerber_units_radio, + "gerber_exp_integer": self.ui.gerber_defaults_form.gerber_exp_group.format_whole_entry, + "gerber_exp_decimals": self.ui.gerber_defaults_form.gerber_exp_group.format_dec_entry, + "gerber_exp_zeros": self.ui.gerber_defaults_form.gerber_exp_group.zeros_radio, + + # Gerber Editor + "gerber_editor_sel_limit": self.ui.gerber_defaults_form.gerber_editor_group.sel_limit_entry, + "gerber_editor_newcode": self.ui.gerber_defaults_form.gerber_editor_group.addcode_entry, + "gerber_editor_newsize": self.ui.gerber_defaults_form.gerber_editor_group.addsize_entry, + "gerber_editor_newtype": self.ui.gerber_defaults_form.gerber_editor_group.addtype_combo, + "gerber_editor_newdim": self.ui.gerber_defaults_form.gerber_editor_group.adddim_entry, + "gerber_editor_array_size": self.ui.gerber_defaults_form.gerber_editor_group.grb_array_size_entry, + "gerber_editor_lin_axis": self.ui.gerber_defaults_form.gerber_editor_group.grb_axis_radio, + "gerber_editor_lin_pitch": self.ui.gerber_defaults_form.gerber_editor_group.grb_pitch_entry, + "gerber_editor_lin_angle": self.ui.gerber_defaults_form.gerber_editor_group.grb_angle_entry, + "gerber_editor_circ_dir": self.ui.gerber_defaults_form.gerber_editor_group.grb_circular_dir_radio, + "gerber_editor_circ_angle": + self.ui.gerber_defaults_form.gerber_editor_group.grb_circular_angle_entry, + "gerber_editor_scale_f": self.ui.gerber_defaults_form.gerber_editor_group.grb_scale_entry, + "gerber_editor_buff_f": self.ui.gerber_defaults_form.gerber_editor_group.grb_buff_entry, + "gerber_editor_ma_low": self.ui.gerber_defaults_form.gerber_editor_group.grb_ma_low_entry, + "gerber_editor_ma_high": self.ui.gerber_defaults_form.gerber_editor_group.grb_ma_high_entry, + + # Excellon General + "excellon_plot": self.ui.excellon_defaults_form.excellon_gen_group.plot_cb, + "excellon_solid": self.ui.excellon_defaults_form.excellon_gen_group.solid_cb, + "excellon_format_upper_in": + self.ui.excellon_defaults_form.excellon_gen_group.excellon_format_upper_in_entry, + "excellon_format_lower_in": + self.ui.excellon_defaults_form.excellon_gen_group.excellon_format_lower_in_entry, + "excellon_format_upper_mm": + self.ui.excellon_defaults_form.excellon_gen_group.excellon_format_upper_mm_entry, + "excellon_format_lower_mm": + self.ui.excellon_defaults_form.excellon_gen_group.excellon_format_lower_mm_entry, + "excellon_zeros": self.ui.excellon_defaults_form.excellon_gen_group.excellon_zeros_radio, + "excellon_units": self.ui.excellon_defaults_form.excellon_gen_group.excellon_units_radio, + "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_operation": self.ui.excellon_defaults_form.excellon_opt_group.operation_radio, + "excellon_milling_type": self.ui.excellon_defaults_form.excellon_opt_group.milling_type_radio, + + "excellon_milling_dia": self.ui.excellon_defaults_form.excellon_opt_group.mill_dia_entry, + + "excellon_cutz": self.ui.excellon_defaults_form.excellon_opt_group.cutz_entry, + "excellon_multidepth": self.ui.excellon_defaults_form.excellon_opt_group.mpass_cb, + "excellon_depthperpass": self.ui.excellon_defaults_form.excellon_opt_group.maxdepth_entry, + "excellon_travelz": self.ui.excellon_defaults_form.excellon_opt_group.travelz_entry, + "excellon_endz": self.ui.excellon_defaults_form.excellon_opt_group.endz_entry, + "excellon_endxy": self.ui.excellon_defaults_form.excellon_opt_group.endxy_entry, + + "excellon_feedrate_z": self.ui.excellon_defaults_form.excellon_opt_group.feedrate_z_entry, + "excellon_spindlespeed": self.ui.excellon_defaults_form.excellon_opt_group.spindlespeed_entry, + "excellon_dwell": self.ui.excellon_defaults_form.excellon_opt_group.dwell_cb, + "excellon_dwelltime": self.ui.excellon_defaults_form.excellon_opt_group.dwelltime_entry, + "excellon_toolchange": self.ui.excellon_defaults_form.excellon_opt_group.toolchange_cb, + "excellon_toolchangez": self.ui.excellon_defaults_form.excellon_opt_group.toolchangez_entry, + "excellon_ppname_e": self.ui.excellon_defaults_form.excellon_opt_group.pp_excellon_name_cb, + "excellon_tooldia": self.ui.excellon_defaults_form.excellon_opt_group.tooldia_entry, + "excellon_slot_tooldia": self.ui.excellon_defaults_form.excellon_opt_group.slot_tooldia_entry, + "excellon_gcode_type": self.ui.excellon_defaults_form.excellon_opt_group.excellon_gcode_type_radio, + + # Excellon Advanced Options + "excellon_offset": self.ui.excellon_defaults_form.excellon_adv_opt_group.offset_entry, + "excellon_toolchangexy": self.ui.excellon_defaults_form.excellon_adv_opt_group.toolchangexy_entry, + "excellon_startz": self.ui.excellon_defaults_form.excellon_adv_opt_group.estartz_entry, + "excellon_feedrate_rapid": self.ui.excellon_defaults_form.excellon_adv_opt_group.feedrate_rapid_entry, + "excellon_z_pdepth": self.ui.excellon_defaults_form.excellon_adv_opt_group.pdepth_entry, + "excellon_feedrate_probe": self.ui.excellon_defaults_form.excellon_adv_opt_group.feedrate_probe_entry, + "excellon_spindledir": self.ui.excellon_defaults_form.excellon_adv_opt_group.spindledir_radio, + "excellon_f_plunge": self.ui.excellon_defaults_form.excellon_adv_opt_group.fplunge_cb, + "excellon_f_retract": self.ui.excellon_defaults_form.excellon_adv_opt_group.fretract_cb, + + # Excellon Export + "excellon_exp_units": self.ui.excellon_defaults_form.excellon_exp_group.excellon_units_radio, + "excellon_exp_format": self.ui.excellon_defaults_form.excellon_exp_group.format_radio, + "excellon_exp_integer": self.ui.excellon_defaults_form.excellon_exp_group.format_whole_entry, + "excellon_exp_decimals": self.ui.excellon_defaults_form.excellon_exp_group.format_dec_entry, + "excellon_exp_zeros": self.ui.excellon_defaults_form.excellon_exp_group.zeros_radio, + "excellon_exp_slot_type": self.ui.excellon_defaults_form.excellon_exp_group.slot_type_radio, + + # Excellon Editor + "excellon_editor_sel_limit": self.ui.excellon_defaults_form.excellon_editor_group.sel_limit_entry, + "excellon_editor_newdia": self.ui.excellon_defaults_form.excellon_editor_group.addtool_entry, + "excellon_editor_array_size": self.ui.excellon_defaults_form.excellon_editor_group.drill_array_size_entry, + "excellon_editor_lin_dir": self.ui.excellon_defaults_form.excellon_editor_group.drill_axis_radio, + "excellon_editor_lin_pitch": self.ui.excellon_defaults_form.excellon_editor_group.drill_pitch_entry, + "excellon_editor_lin_angle": self.ui.excellon_defaults_form.excellon_editor_group.drill_angle_entry, + "excellon_editor_circ_dir": self.ui.excellon_defaults_form.excellon_editor_group.drill_circular_dir_radio, + "excellon_editor_circ_angle": + self.ui.excellon_defaults_form.excellon_editor_group.drill_circular_angle_entry, + # Excellon Slots + "excellon_editor_slot_direction": + self.ui.excellon_defaults_form.excellon_editor_group.slot_axis_radio, + "excellon_editor_slot_angle": + self.ui.excellon_defaults_form.excellon_editor_group.slot_angle_spinner, + "excellon_editor_slot_length": + self.ui.excellon_defaults_form.excellon_editor_group.slot_length_entry, + # Excellon Slots + "excellon_editor_slot_array_size": + self.ui.excellon_defaults_form.excellon_editor_group.slot_array_size_entry, + "excellon_editor_slot_lin_dir": self.ui.excellon_defaults_form.excellon_editor_group.slot_array_axis_radio, + "excellon_editor_slot_lin_pitch": + self.ui.excellon_defaults_form.excellon_editor_group.slot_array_pitch_entry, + "excellon_editor_slot_lin_angle": + self.ui.excellon_defaults_form.excellon_editor_group.slot_array_angle_entry, + "excellon_editor_slot_circ_dir": + self.ui.excellon_defaults_form.excellon_editor_group.slot_array_circular_dir_radio, + "excellon_editor_slot_circ_angle": + self.ui.excellon_defaults_form.excellon_editor_group.slot_array_circular_angle_entry, + + # Geometry General + "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, + "geometry_travelz": self.ui.geometry_defaults_form.geometry_opt_group.travelz_entry, + "geometry_feedrate": self.ui.geometry_defaults_form.geometry_opt_group.cncfeedrate_entry, + "geometry_feedrate_z": self.ui.geometry_defaults_form.geometry_opt_group.feedrate_z_entry, + "geometry_spindlespeed": self.ui.geometry_defaults_form.geometry_opt_group.cncspindlespeed_entry, + "geometry_dwell": self.ui.geometry_defaults_form.geometry_opt_group.dwell_cb, + "geometry_dwelltime": self.ui.geometry_defaults_form.geometry_opt_group.dwelltime_entry, + "geometry_ppname_g": self.ui.geometry_defaults_form.geometry_opt_group.pp_geometry_name_cb, + "geometry_toolchange": self.ui.geometry_defaults_form.geometry_opt_group.toolchange_cb, + "geometry_toolchangez": self.ui.geometry_defaults_form.geometry_opt_group.toolchangez_entry, + "geometry_endz": self.ui.geometry_defaults_form.geometry_opt_group.endz_entry, + "geometry_endxy": self.ui.geometry_defaults_form.geometry_opt_group.endxy_entry, + "geometry_depthperpass": self.ui.geometry_defaults_form.geometry_opt_group.depthperpass_entry, + "geometry_multidepth": self.ui.geometry_defaults_form.geometry_opt_group.multidepth_cb, + + # Geometry Advanced Options + "geometry_toolchangexy": self.ui.geometry_defaults_form.geometry_adv_opt_group.toolchangexy_entry, + "geometry_startz": self.ui.geometry_defaults_form.geometry_adv_opt_group.gstartz_entry, + "geometry_feedrate_rapid": self.ui.geometry_defaults_form.geometry_adv_opt_group.feedrate_rapid_entry, + "geometry_extracut": self.ui.geometry_defaults_form.geometry_adv_opt_group.extracut_cb, + "geometry_extracut_length": self.ui.geometry_defaults_form.geometry_adv_opt_group.e_cut_entry, + "geometry_z_pdepth": self.ui.geometry_defaults_form.geometry_adv_opt_group.pdepth_entry, + "geometry_feedrate_probe": self.ui.geometry_defaults_form.geometry_adv_opt_group.feedrate_probe_entry, + "geometry_spindledir": self.ui.geometry_defaults_form.geometry_adv_opt_group.spindledir_radio, + "geometry_f_plunge": self.ui.geometry_defaults_form.geometry_adv_opt_group.fplunge_cb, + "geometry_segx": self.ui.geometry_defaults_form.geometry_adv_opt_group.segx_entry, + "geometry_segy": self.ui.geometry_defaults_form.geometry_adv_opt_group.segy_entry, + + # Geometry Editor + "geometry_editor_sel_limit": self.ui.geometry_defaults_form.geometry_editor_group.sel_limit_entry, + "geometry_editor_milling_type": self.ui.geometry_defaults_form.geometry_editor_group.milling_type_radio, + + # CNCJob General + "cncjob_plot": self.ui.cncjob_defaults_form.cncjob_gen_group.plot_cb, + "cncjob_plot_kind": self.ui.cncjob_defaults_form.cncjob_gen_group.cncplot_method_radio, + "cncjob_annotation": self.ui.cncjob_defaults_form.cncjob_gen_group.annotation_cb, + + "cncjob_tooldia": self.ui.cncjob_defaults_form.cncjob_gen_group.tooldia_entry, + "cncjob_coords_type": self.ui.cncjob_defaults_form.cncjob_gen_group.coords_type_radio, + "cncjob_coords_decimals": self.ui.cncjob_defaults_form.cncjob_gen_group.coords_dec_entry, + "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, + "cncjob_append": self.ui.cncjob_defaults_form.cncjob_opt_group.append_text, + + # CNC Job Advanced Options + "cncjob_toolchange_macro": self.ui.cncjob_defaults_form.cncjob_adv_opt_group.toolchange_text, + "cncjob_toolchange_macro_enable": self.ui.cncjob_defaults_form.cncjob_adv_opt_group.toolchange_cb, + "cncjob_annotation_fontsize": self.ui.cncjob_defaults_form.cncjob_adv_opt_group.annotation_fontsize_sp, + "cncjob_annotation_fontcolor": self.ui.cncjob_defaults_form.cncjob_adv_opt_group.annotation_fontcolor_entry, + + # NCC Tool + "tools_ncctools": self.ui.tools_defaults_form.tools_ncc_group.ncc_tool_dia_entry, + "tools_nccorder": self.ui.tools_defaults_form.tools_ncc_group.ncc_order_radio, + "tools_nccoverlap": self.ui.tools_defaults_form.tools_ncc_group.ncc_overlap_entry, + "tools_nccmargin": self.ui.tools_defaults_form.tools_ncc_group.ncc_margin_entry, + "tools_nccmethod": self.ui.tools_defaults_form.tools_ncc_group.ncc_method_combo, + "tools_nccconnect": self.ui.tools_defaults_form.tools_ncc_group.ncc_connect_cb, + "tools_ncccontour": self.ui.tools_defaults_form.tools_ncc_group.ncc_contour_cb, + "tools_nccrest": self.ui.tools_defaults_form.tools_ncc_group.ncc_rest_cb, + "tools_ncc_offset_choice": self.ui.tools_defaults_form.tools_ncc_group.ncc_choice_offset_cb, + "tools_ncc_offset_value": self.ui.tools_defaults_form.tools_ncc_group.ncc_offset_spinner, + "tools_nccref": self.ui.tools_defaults_form.tools_ncc_group.select_combo, + "tools_ncc_area_shape": self.ui.tools_defaults_form.tools_ncc_group.area_shape_radio, + "tools_ncc_plotting": self.ui.tools_defaults_form.tools_ncc_group.ncc_plotting_radio, + "tools_nccmilling_type": self.ui.tools_defaults_form.tools_ncc_group.milling_type_radio, + "tools_ncctool_type": self.ui.tools_defaults_form.tools_ncc_group.tool_type_radio, + "tools_ncccutz": self.ui.tools_defaults_form.tools_ncc_group.cutz_entry, + "tools_ncctipdia": self.ui.tools_defaults_form.tools_ncc_group.tipdia_entry, + "tools_ncctipangle": self.ui.tools_defaults_form.tools_ncc_group.tipangle_entry, + "tools_nccnewdia": self.ui.tools_defaults_form.tools_ncc_group.newdia_entry, + + # CutOut Tool + "tools_cutouttooldia": self.ui.tools_defaults_form.tools_cutout_group.cutout_tooldia_entry, + "tools_cutoutkind": self.ui.tools_defaults_form.tools_cutout_group.obj_kind_combo, + "tools_cutoutmargin": self.ui.tools_defaults_form.tools_cutout_group.cutout_margin_entry, + "tools_cutout_z": self.ui.tools_defaults_form.tools_cutout_group.cutz_entry, + "tools_cutout_depthperpass": self.ui.tools_defaults_form.tools_cutout_group.maxdepth_entry, + "tools_cutout_mdepth": self.ui.tools_defaults_form.tools_cutout_group.mpass_cb, + "tools_cutoutgapsize": self.ui.tools_defaults_form.tools_cutout_group.cutout_gap_entry, + "tools_gaps_ff": self.ui.tools_defaults_form.tools_cutout_group.gaps_combo, + "tools_cutout_convexshape": self.ui.tools_defaults_form.tools_cutout_group.convex_box, + + # Paint Area Tool + "tools_painttooldia": self.ui.tools_defaults_form.tools_paint_group.painttooldia_entry, + "tools_paintorder": self.ui.tools_defaults_form.tools_paint_group.paint_order_radio, + "tools_paintoverlap": self.ui.tools_defaults_form.tools_paint_group.paintoverlap_entry, + "tools_paintmargin": self.ui.tools_defaults_form.tools_paint_group.paintmargin_entry, + "tools_paintmethod": self.ui.tools_defaults_form.tools_paint_group.paintmethod_combo, + "tools_selectmethod": self.ui.tools_defaults_form.tools_paint_group.selectmethod_combo, + "tools_paint_area_shape": self.ui.tools_defaults_form.tools_paint_group.area_shape_radio, + "tools_pathconnect": self.ui.tools_defaults_form.tools_paint_group.pathconnect_cb, + "tools_paintcontour": self.ui.tools_defaults_form.tools_paint_group.contour_cb, + "tools_paint_plotting": self.ui.tools_defaults_form.tools_paint_group.paint_plotting_radio, + + "tools_paintrest": self.ui.tools_defaults_form.tools_paint_group.rest_cb, + "tools_painttool_type": self.ui.tools_defaults_form.tools_paint_group.tool_type_radio, + "tools_paintcutz": self.ui.tools_defaults_form.tools_paint_group.cutz_entry, + "tools_painttipdia": self.ui.tools_defaults_form.tools_paint_group.tipdia_entry, + "tools_painttipangle": self.ui.tools_defaults_form.tools_paint_group.tipangle_entry, + "tools_paintnewdia": self.ui.tools_defaults_form.tools_paint_group.newdia_entry, + + # 2-sided Tool + "tools_2sided_mirror_axis": self.ui.tools_defaults_form.tools_2sided_group.mirror_axis_radio, + "tools_2sided_axis_loc": self.ui.tools_defaults_form.tools_2sided_group.axis_location_radio, + "tools_2sided_drilldia": self.ui.tools_defaults_form.tools_2sided_group.drill_dia_entry, + "tools_2sided_allign_axis": self.ui.tools_defaults_form.tools_2sided_group.align_axis_radio, + + # Film Tool + "tools_film_type": self.ui.tools_defaults_form.tools_film_group.film_type_radio, + "tools_film_boundary": self.ui.tools_defaults_form.tools_film_group.film_boundary_entry, + "tools_film_scale_stroke": self.ui.tools_defaults_form.tools_film_group.film_scale_stroke_entry, + "tools_film_color": self.ui.tools_defaults_form.tools_film_group.film_color_entry, + "tools_film_scale_cb": self.ui.tools_defaults_form.tools_film_group.film_scale_cb, + "tools_film_scale_x_entry": self.ui.tools_defaults_form.tools_film_group.film_scalex_entry, + "tools_film_scale_y_entry": self.ui.tools_defaults_form.tools_film_group.film_scaley_entry, + "tools_film_skew_cb": self.ui.tools_defaults_form.tools_film_group.film_skew_cb, + "tools_film_skew_x_entry": self.ui.tools_defaults_form.tools_film_group.film_skewx_entry, + "tools_film_skew_y_entry": self.ui.tools_defaults_form.tools_film_group.film_skewy_entry, + "tools_film_skew_ref_radio": self.ui.tools_defaults_form.tools_film_group.film_skew_reference, + "tools_film_mirror_cb": self.ui.tools_defaults_form.tools_film_group.film_mirror_cb, + "tools_film_mirror_axis_radio": self.ui.tools_defaults_form.tools_film_group.film_mirror_axis, + "tools_film_file_type_radio": self.ui.tools_defaults_form.tools_film_group.file_type_radio, + "tools_film_orientation": self.ui.tools_defaults_form.tools_film_group.orientation_radio, + "tools_film_pagesize": self.ui.tools_defaults_form.tools_film_group.pagesize_combo, + + # Panelize Tool + "tools_panelize_spacing_columns": self.ui.tools_defaults_form.tools_panelize_group.pspacing_columns, + "tools_panelize_spacing_rows": self.ui.tools_defaults_form.tools_panelize_group.pspacing_rows, + "tools_panelize_columns": self.ui.tools_defaults_form.tools_panelize_group.pcolumns, + "tools_panelize_rows": self.ui.tools_defaults_form.tools_panelize_group.prows, + "tools_panelize_constrain": self.ui.tools_defaults_form.tools_panelize_group.pconstrain_cb, + "tools_panelize_constrainx": self.ui.tools_defaults_form.tools_panelize_group.px_width_entry, + "tools_panelize_constrainy": self.ui.tools_defaults_form.tools_panelize_group.py_height_entry, + "tools_panelize_panel_type": self.ui.tools_defaults_form.tools_panelize_group.panel_type_radio, + + # Calculators Tool + "tools_calc_vshape_tip_dia": self.ui.tools_defaults_form.tools_calculators_group.tip_dia_entry, + "tools_calc_vshape_tip_angle": self.ui.tools_defaults_form.tools_calculators_group.tip_angle_entry, + "tools_calc_vshape_cut_z": self.ui.tools_defaults_form.tools_calculators_group.cut_z_entry, + "tools_calc_electro_length": self.ui.tools_defaults_form.tools_calculators_group.pcblength_entry, + "tools_calc_electro_width": self.ui.tools_defaults_form.tools_calculators_group.pcbwidth_entry, + "tools_calc_electro_cdensity": self.ui.tools_defaults_form.tools_calculators_group.cdensity_entry, + "tools_calc_electro_growth": self.ui.tools_defaults_form.tools_calculators_group.growth_entry, + + # Transformations Tool + "tools_transform_rotate": self.ui.tools_defaults_form.tools_transform_group.rotate_entry, + "tools_transform_skew_x": self.ui.tools_defaults_form.tools_transform_group.skewx_entry, + "tools_transform_skew_y": self.ui.tools_defaults_form.tools_transform_group.skewy_entry, + "tools_transform_scale_x": self.ui.tools_defaults_form.tools_transform_group.scalex_entry, + "tools_transform_scale_y": self.ui.tools_defaults_form.tools_transform_group.scaley_entry, + "tools_transform_scale_link": self.ui.tools_defaults_form.tools_transform_group.link_cb, + "tools_transform_scale_reference": self.ui.tools_defaults_form.tools_transform_group.reference_cb, + "tools_transform_offset_x": self.ui.tools_defaults_form.tools_transform_group.offx_entry, + "tools_transform_offset_y": self.ui.tools_defaults_form.tools_transform_group.offy_entry, + "tools_transform_mirror_reference": self.ui.tools_defaults_form.tools_transform_group.mirror_reference_cb, + "tools_transform_mirror_point": self.ui.tools_defaults_form.tools_transform_group.flip_ref_entry, + "tools_transform_buffer_dis": self.ui.tools_defaults_form.tools_transform_group.buffer_entry, + "tools_transform_buffer_factor": self.ui.tools_defaults_form.tools_transform_group.buffer_factor_entry, + "tools_transform_buffer_corner": self.ui.tools_defaults_form.tools_transform_group.buffer_rounded_cb, + + # SolderPaste Dispensing Tool + "tools_solderpaste_tools": self.ui.tools_defaults_form.tools_solderpaste_group.nozzle_tool_dia_entry, + "tools_solderpaste_new": self.ui.tools_defaults_form.tools_solderpaste_group.addtool_entry, + "tools_solderpaste_z_start": self.ui.tools_defaults_form.tools_solderpaste_group.z_start_entry, + "tools_solderpaste_z_dispense": self.ui.tools_defaults_form.tools_solderpaste_group.z_dispense_entry, + "tools_solderpaste_z_stop": self.ui.tools_defaults_form.tools_solderpaste_group.z_stop_entry, + "tools_solderpaste_z_travel": self.ui.tools_defaults_form.tools_solderpaste_group.z_travel_entry, + "tools_solderpaste_z_toolchange": self.ui.tools_defaults_form.tools_solderpaste_group.z_toolchange_entry, + "tools_solderpaste_xy_toolchange": self.ui.tools_defaults_form.tools_solderpaste_group.xy_toolchange_entry, + "tools_solderpaste_frxy": self.ui.tools_defaults_form.tools_solderpaste_group.frxy_entry, + "tools_solderpaste_frz": self.ui.tools_defaults_form.tools_solderpaste_group.frz_entry, + "tools_solderpaste_frz_dispense": self.ui.tools_defaults_form.tools_solderpaste_group.frz_dispense_entry, + "tools_solderpaste_speedfwd": self.ui.tools_defaults_form.tools_solderpaste_group.speedfwd_entry, + "tools_solderpaste_dwellfwd": self.ui.tools_defaults_form.tools_solderpaste_group.dwellfwd_entry, + "tools_solderpaste_speedrev": self.ui.tools_defaults_form.tools_solderpaste_group.speedrev_entry, + "tools_solderpaste_dwellrev": self.ui.tools_defaults_form.tools_solderpaste_group.dwellrev_entry, + "tools_solderpaste_pp": self.ui.tools_defaults_form.tools_solderpaste_group.pp_combo, + "tools_sub_close_paths": self.ui.tools_defaults_form.tools_sub_group.close_paths_cb, + + # ####################################################################################################### + # ########################################## TOOLS 2 #################################################### + # ####################################################################################################### + + # Optimal Tool + "tools_opt_precision": self.ui.tools2_defaults_form.tools2_optimal_group.precision_sp, + + # Check Rules Tool + "tools_cr_trace_size": self.ui.tools2_defaults_form.tools2_checkrules_group.trace_size_cb, + "tools_cr_trace_size_val": self.ui.tools2_defaults_form.tools2_checkrules_group.trace_size_entry, + "tools_cr_c2c": self.ui.tools2_defaults_form.tools2_checkrules_group.clearance_copper2copper_cb, + "tools_cr_c2c_val": self.ui.tools2_defaults_form.tools2_checkrules_group.clearance_copper2copper_entry, + "tools_cr_c2o": self.ui.tools2_defaults_form.tools2_checkrules_group.clearance_copper2ol_cb, + "tools_cr_c2o_val": self.ui.tools2_defaults_form.tools2_checkrules_group.clearance_copper2ol_entry, + "tools_cr_s2s": self.ui.tools2_defaults_form.tools2_checkrules_group.clearance_silk2silk_cb, + "tools_cr_s2s_val": self.ui.tools2_defaults_form.tools2_checkrules_group.clearance_silk2silk_entry, + "tools_cr_s2sm": self.ui.tools2_defaults_form.tools2_checkrules_group.clearance_silk2sm_cb, + "tools_cr_s2sm_val": self.ui.tools2_defaults_form.tools2_checkrules_group.clearance_silk2sm_entry, + "tools_cr_s2o": self.ui.tools2_defaults_form.tools2_checkrules_group.clearance_silk2ol_cb, + "tools_cr_s2o_val": self.ui.tools2_defaults_form.tools2_checkrules_group.clearance_silk2ol_entry, + "tools_cr_sm2sm": self.ui.tools2_defaults_form.tools2_checkrules_group.clearance_sm2sm_cb, + "tools_cr_sm2sm_val": self.ui.tools2_defaults_form.tools2_checkrules_group.clearance_sm2sm_entry, + "tools_cr_ri": self.ui.tools2_defaults_form.tools2_checkrules_group.ring_integrity_cb, + "tools_cr_ri_val": self.ui.tools2_defaults_form.tools2_checkrules_group.ring_integrity_entry, + "tools_cr_h2h": self.ui.tools2_defaults_form.tools2_checkrules_group.clearance_d2d_cb, + "tools_cr_h2h_val": self.ui.tools2_defaults_form.tools2_checkrules_group.clearance_d2d_entry, + "tools_cr_dh": self.ui.tools2_defaults_form.tools2_checkrules_group.drill_size_cb, + "tools_cr_dh_val": self.ui.tools2_defaults_form.tools2_checkrules_group.drill_size_entry, + + # QRCode Tool + "tools_qrcode_version": self.ui.tools2_defaults_form.tools2_qrcode_group.version_entry, + "tools_qrcode_error": self.ui.tools2_defaults_form.tools2_qrcode_group.error_radio, + "tools_qrcode_box_size": self.ui.tools2_defaults_form.tools2_qrcode_group.bsize_entry, + "tools_qrcode_border_size": self.ui.tools2_defaults_form.tools2_qrcode_group.border_size_entry, + "tools_qrcode_qrdata": self.ui.tools2_defaults_form.tools2_qrcode_group.text_data, + "tools_qrcode_polarity": self.ui.tools2_defaults_form.tools2_qrcode_group.pol_radio, + "tools_qrcode_rounded": self.ui.tools2_defaults_form.tools2_qrcode_group.bb_radio, + "tools_qrcode_fill_color": self.ui.tools2_defaults_form.tools2_qrcode_group.fill_color_entry, + "tools_qrcode_back_color": self.ui.tools2_defaults_form.tools2_qrcode_group.back_color_entry, + "tools_qrcode_sel_limit": self.ui.tools2_defaults_form.tools2_qrcode_group.sel_limit_entry, + + # Copper Thieving Tool + "tools_copper_thieving_clearance": self.ui.tools2_defaults_form.tools2_cfill_group.clearance_entry, + "tools_copper_thieving_margin": self.ui.tools2_defaults_form.tools2_cfill_group.margin_entry, + "tools_copper_thieving_reference": self.ui.tools2_defaults_form.tools2_cfill_group.reference_radio, + "tools_copper_thieving_box_type": self.ui.tools2_defaults_form.tools2_cfill_group.bbox_type_radio, + "tools_copper_thieving_circle_steps": self.ui.tools2_defaults_form.tools2_cfill_group.circlesteps_entry, + "tools_copper_thieving_fill_type": self.ui.tools2_defaults_form.tools2_cfill_group.fill_type_radio, + "tools_copper_thieving_dots_dia": self.ui.tools2_defaults_form.tools2_cfill_group.dot_dia_entry, + "tools_copper_thieving_dots_spacing": self.ui.tools2_defaults_form.tools2_cfill_group.dot_spacing_entry, + "tools_copper_thieving_squares_size": self.ui.tools2_defaults_form.tools2_cfill_group.square_size_entry, + "tools_copper_thieving_squares_spacing": + self.ui.tools2_defaults_form.tools2_cfill_group.squares_spacing_entry, + "tools_copper_thieving_lines_size": self.ui.tools2_defaults_form.tools2_cfill_group.line_size_entry, + "tools_copper_thieving_lines_spacing": self.ui.tools2_defaults_form.tools2_cfill_group.lines_spacing_entry, + "tools_copper_thieving_rb_margin": self.ui.tools2_defaults_form.tools2_cfill_group.rb_margin_entry, + "tools_copper_thieving_rb_thickness": self.ui.tools2_defaults_form.tools2_cfill_group.rb_thickness_entry, + "tools_copper_thieving_mask_clearance": self.ui.tools2_defaults_form.tools2_cfill_group.clearance_ppm_entry, + + # Fiducials Tool + "tools_fiducials_dia": self.ui.tools2_defaults_form.tools2_fiducials_group.dia_entry, + "tools_fiducials_margin": self.ui.tools2_defaults_form.tools2_fiducials_group.margin_entry, + "tools_fiducials_mode": self.ui.tools2_defaults_form.tools2_fiducials_group.mode_radio, + "tools_fiducials_second_pos": self.ui.tools2_defaults_form.tools2_fiducials_group.pos_radio, + "tools_fiducials_type": self.ui.tools2_defaults_form.tools2_fiducials_group.fid_type_radio, + "tools_fiducials_line_thickness": self.ui.tools2_defaults_form.tools2_fiducials_group.line_thickness_entry, + + # Calibration Tool + "tools_cal_calsource": self.ui.tools2_defaults_form.tools2_cal_group.cal_source_radio, + "tools_cal_travelz": self.ui.tools2_defaults_form.tools2_cal_group.travelz_entry, + "tools_cal_verz": self.ui.tools2_defaults_form.tools2_cal_group.verz_entry, + "tools_cal_zeroz": self.ui.tools2_defaults_form.tools2_cal_group.zeroz_cb, + "tools_cal_toolchangez": self.ui.tools2_defaults_form.tools2_cal_group.toolchangez_entry, + "tools_cal_toolchange_xy": self.ui.tools2_defaults_form.tools2_cal_group.toolchange_xy_entry, + "tools_cal_sec_point": self.ui.tools2_defaults_form.tools2_cal_group.second_point_radio, + + # Extract Drills Tool + "tools_edrills_hole_type": self.ui.tools2_defaults_form.tools2_edrills_group.hole_size_radio, + "tools_edrills_hole_fixed_dia": self.ui.tools2_defaults_form.tools2_edrills_group.dia_entry, + "tools_edrills_hole_prop_factor": self.ui.tools2_defaults_form.tools2_edrills_group.factor_entry, + "tools_edrills_circular_ring": self.ui.tools2_defaults_form.tools2_edrills_group.circular_ring_entry, + "tools_edrills_oblong_ring": self.ui.tools2_defaults_form.tools2_edrills_group.oblong_ring_entry, + "tools_edrills_square_ring": self.ui.tools2_defaults_form.tools2_edrills_group.square_ring_entry, + "tools_edrills_rectangular_ring": self.ui.tools2_defaults_form.tools2_edrills_group.rectangular_ring_entry, + "tools_edrills_others_ring": self.ui.tools2_defaults_form.tools2_edrills_group.other_ring_entry, + "tools_edrills_circular": self.ui.tools2_defaults_form.tools2_edrills_group.circular_cb, + "tools_edrills_oblong": self.ui.tools2_defaults_form.tools2_edrills_group.oblong_cb, + "tools_edrills_square": self.ui.tools2_defaults_form.tools2_edrills_group.square_cb, + "tools_edrills_rectangular": self.ui.tools2_defaults_form.tools2_edrills_group.rectangular_cb, + "tools_edrills_others": self.ui.tools2_defaults_form.tools2_edrills_group.other_cb, + + # Punch Gerber Tool + "tools_punch_hole_type": self.ui.tools2_defaults_form.tools2_punch_group.hole_size_radio, + "tools_punch_hole_fixed_dia": self.ui.tools2_defaults_form.tools2_punch_group.dia_entry, + "tools_punch_hole_prop_factor": self.ui.tools2_defaults_form.tools2_punch_group.factor_entry, + "tools_punch_circular_ring": self.ui.tools2_defaults_form.tools2_punch_group.circular_ring_entry, + "tools_punch_oblong_ring": self.ui.tools2_defaults_form.tools2_punch_group.oblong_ring_entry, + "tools_punch_square_ring": self.ui.tools2_defaults_form.tools2_punch_group.square_ring_entry, + "tools_punch_rectangular_ring": self.ui.tools2_defaults_form.tools2_punch_group.rectangular_ring_entry, + "tools_punch_others_ring": self.ui.tools2_defaults_form.tools2_punch_group.other_ring_entry, + "tools_punch_circular": self.ui.tools2_defaults_form.tools2_punch_group.circular_cb, + "tools_punch_oblong": self.ui.tools2_defaults_form.tools2_punch_group.oblong_cb, + "tools_punch_square": self.ui.tools2_defaults_form.tools2_punch_group.square_cb, + "tools_punch_rectangular": self.ui.tools2_defaults_form.tools2_punch_group.rectangular_cb, + "tools_punch_others": self.ui.tools2_defaults_form.tools2_punch_group.other_cb, + + # Invert Gerber Tool + "tools_invert_margin": self.ui.tools2_defaults_form.tools2_invert_group.margin_entry, + "tools_invert_join_style": self.ui.tools2_defaults_form.tools2_invert_group.join_radio, + + # Utilities + # File associations + "fa_excellon": self.ui.util_defaults_form.fa_excellon_group.exc_list_text, + "fa_gcode": self.ui.util_defaults_form.fa_gcode_group.gco_list_text, + # "fa_geometry": self.ui.util_defaults_form.fa_geometry_group.close_paths_cb, + "fa_gerber": self.ui.util_defaults_form.fa_gerber_group.grb_list_text, + "util_autocomplete_keywords": self.ui.util_defaults_form.kw_group.kw_list_text, + + } + + def defaults_read_form(self): + """ + Will read all the values in the Preferences GUI and update the defaults dictionary. + + :return: None + """ + for option in self.defaults_form_fields: + try: + self.defaults[option] = self.defaults_form_fields[option].get_value() + except Exception as e: + log.debug("App.defaults_read_form() --> %s" % str(e)) + + def defaults_write_form(self, factor=None, fl_units=None, source_dict=None): + """ + Will set the values for all the GUI elements in Preferences GUI based on the values found in the + self.defaults dictionary. + + :param factor: will apply a factor to the values that written in the GUI elements + :param fl_units: current measuring units in FlatCAM: Metric or Inch + :param source_dict: the repository of options, usually is the self.defaults + :return: None + """ + + options_storage = self.defaults if source_dict is None else source_dict + + for option in options_storage: + if source_dict: + self.defaults_write_form_field(option, factor=factor, units=fl_units, defaults_dict=source_dict) + else: + self.defaults_write_form_field(option, factor=factor, units=fl_units) + + def defaults_write_form_field(self, field, factor=None, units=None, defaults_dict=None): + """ + Basically it is the worker in the self.defaults_write_form() + + :param field: the GUI element in Preferences GUI to be updated + :param factor: factor to be applied to the field parameter + :param units: current FLatCAM measuring units + :param defaults_dict: the defaults storage + :return: None, it updates GUI elements + """ + + def_dict = self.defaults if defaults_dict is None else defaults_dict + try: + if factor is None: + if units is None: + self.defaults_form_fields[field].set_value(def_dict[field]) + elif units == 'IN' and (field == 'global_gridx' or field == 'global_gridy'): + self.defaults_form_fields[field].set_value(def_dict[field]) + elif units == 'MM' and (field == 'global_gridx' or field == 'global_gridy'): + self.defaults_form_fields[field].set_value(def_dict[field]) + else: + if units is None: + self.defaults_form_fields[field].set_value(def_dict[field] * factor) + elif units == 'IN' and (field == 'global_gridx' or field == 'global_gridy'): + self.defaults_form_fields[field].set_value((def_dict[field] * factor)) + elif units == 'MM' and (field == 'global_gridx' or field == 'global_gridy'): + self.defaults_form_fields[field].set_value((def_dict[field] * factor)) + except KeyError: + pass + except AttributeError: + log.debug(field) + + def show_preferences_gui(self): + """ + Called to initialize and show the Preferences GUI + + :return: None + """ + + gen_form = self.ui.general_defaults_form + try: + self.ui.general_scroll_area.takeWidget() + except Exception: + log.debug("Nothing to remove") + self.ui.general_scroll_area.setWidget(gen_form) + gen_form.show() + + ger_form = self.ui.gerber_defaults_form + try: + self.ui.gerber_scroll_area.takeWidget() + except Exception: + log.debug("Nothing to remove") + self.ui.gerber_scroll_area.setWidget(ger_form) + ger_form.show() + + exc_form = self.ui.excellon_defaults_form + try: + self.ui.excellon_scroll_area.takeWidget() + except Exception: + log.debug("Nothing to remove") + self.ui.excellon_scroll_area.setWidget(exc_form) + exc_form.show() + + geo_form = self.ui.geometry_defaults_form + try: + self.ui.geometry_scroll_area.takeWidget() + except Exception: + log.debug("Nothing to remove") + self.ui.geometry_scroll_area.setWidget(geo_form) + geo_form.show() + + cnc_form = self.ui.cncjob_defaults_form + try: + self.ui.cncjob_scroll_area.takeWidget() + except Exception: + log.debug("Nothing to remove") + self.ui.cncjob_scroll_area.setWidget(cnc_form) + cnc_form.show() + + tools_form = self.ui.tools_defaults_form + try: + self.ui.tools_scroll_area.takeWidget() + except Exception: + log.debug("Nothing to remove") + self.ui.tools_scroll_area.setWidget(tools_form) + tools_form.show() + + tools2_form = self.ui.tools2_defaults_form + try: + self.ui.tools2_scroll_area.takeWidget() + except Exception: + log.debug("Nothing to remove") + self.ui.tools2_scroll_area.setWidget(tools2_form) + tools2_form.show() + + fa_form = self.ui.util_defaults_form + try: + self.ui.fa_scroll_area.takeWidget() + except Exception: + log.debug("Nothing to remove") + self.ui.fa_scroll_area.setWidget(fa_form) + fa_form.show() + + # Initialize the color box's color in Preferences -> Global -> Colo + self.__init_color_pickers() + + # Button handlers + self.ui.pref_save_button.clicked.connect(lambda: self.on_save_button(save_to_file=True)) + self.ui.pref_apply_button.clicked.connect(lambda: self.on_save_button(save_to_file=False)) + self.ui.pref_close_button.clicked.connect(self.on_pref_close_button) + self.ui.pref_defaults_button.clicked.connect(self.on_restore_defaults_preferences) + + log.debug("Finished Preferences GUI form initialization.") + + def __init_color_pickers(self): + # 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;" + "border-color: dimgray" % str(self.defaults['gerber_plot_fill'])[:7]) + self.ui.gerber_defaults_form.gerber_gen_group.pf_color_alpha_spinner.set_value( + int(self.defaults['gerber_plot_fill'][7:9], 16)) + self.ui.gerber_defaults_form.gerber_gen_group.pf_color_alpha_slider.setValue( + int(self.defaults['gerber_plot_fill'][7:9], 16)) + + self.ui.gerber_defaults_form.gerber_gen_group.pl_color_entry.set_value(self.defaults['gerber_plot_line']) + self.ui.gerber_defaults_form.gerber_gen_group.pl_color_button.setStyleSheet( + "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( + "background-color:%s;" + "border-color: dimgray" % str(self.defaults['global_sel_fill'])[:7]) + self.ui.general_defaults_form.general_gui_group.sf_color_alpha_spinner.set_value( + int(self.defaults['global_sel_fill'][7:9], 16)) + self.ui.general_defaults_form.general_gui_group.sf_color_alpha_slider.setValue( + int(self.defaults['global_sel_fill'][7:9], 16)) + + self.ui.general_defaults_form.general_gui_group.sl_color_entry.set_value(self.defaults['global_sel_line']) + self.ui.general_defaults_form.general_gui_group.sl_color_button.setStyleSheet( + "background-color:%s;" + "border-color: dimgray" % str(self.defaults['global_sel_line'])[:7]) + + # Init Right-Left Selection colors + self.ui.general_defaults_form.general_gui_group.alt_sf_color_entry.set_value( + self.defaults['global_alt_sel_fill']) + self.ui.general_defaults_form.general_gui_group.alt_sf_color_button.setStyleSheet( + "background-color:%s;" + "border-color: dimgray" % str(self.defaults['global_alt_sel_fill'])[:7]) + self.ui.general_defaults_form.general_gui_group.alt_sf_color_alpha_spinner.set_value( + int(self.defaults['global_sel_fill'][7:9], 16)) + self.ui.general_defaults_form.general_gui_group.alt_sf_color_alpha_slider.setValue( + int(self.defaults['global_sel_fill'][7:9], 16)) + + self.ui.general_defaults_form.general_gui_group.alt_sl_color_entry.set_value( + self.defaults['global_alt_sel_line']) + self.ui.general_defaults_form.general_gui_group.alt_sl_color_button.setStyleSheet( + "background-color:%s;" + "border-color: dimgray" % str(self.defaults['global_alt_sel_line'])[:7]) + + # Init Draw color and Selection Draw Color + self.ui.general_defaults_form.general_gui_group.draw_color_entry.set_value( + self.defaults['global_draw_color']) + self.ui.general_defaults_form.general_gui_group.draw_color_button.setStyleSheet( + "background-color:%s;" + "border-color: dimgray" % str(self.defaults['global_draw_color'])[:7]) + + self.ui.general_defaults_form.general_gui_group.sel_draw_color_entry.set_value( + self.defaults['global_sel_draw_color']) + self.ui.general_defaults_form.general_gui_group.sel_draw_color_button.setStyleSheet( + "background-color:%s;" + "border-color: dimgray" % str(self.defaults['global_sel_draw_color'])[:7]) + + # Init Project Items color + self.ui.general_defaults_form.general_gui_group.proj_color_entry.set_value( + self.defaults['global_proj_item_color']) + self.ui.general_defaults_form.general_gui_group.proj_color_button.setStyleSheet( + "background-color:%s;" + "border-color: dimgray" % str(self.defaults['global_proj_item_color'])[:7]) + + # Init Project Disabled Items color + self.ui.general_defaults_form.general_gui_group.proj_color_dis_entry.set_value( + self.defaults['global_proj_item_dis_color']) + self.ui.general_defaults_form.general_gui_group.proj_color_dis_button.setStyleSheet( + "background-color:%s;" + "border-color: dimgray" % str(self.defaults['global_proj_item_dis_color'])[:7]) + + # Init Project Disabled Items color + 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_app_set_group.mouse_cursor_button.setStyleSheet( + "background-color:%s;" + "border-color: dimgray" % str(self.defaults['global_cursor_color'])[:7]) + + # Init the Annotation CNC Job color + self.ui.cncjob_defaults_form.cncjob_adv_opt_group.annotation_fontcolor_entry.set_value( + self.defaults['cncjob_annotation_fontcolor']) + self.ui.cncjob_defaults_form.cncjob_adv_opt_group.annotation_fontcolor_button.setStyleSheet( + "background-color:%s;" + "border-color: dimgray" % str(self.defaults['cncjob_annotation_fontcolor'])[:7]) + + # Init the Tool Film color + self.ui.tools_defaults_form.tools_film_group.film_color_entry.set_value( + self.defaults['tools_film_color']) + self.ui.tools_defaults_form.tools_film_group.film_color_button.setStyleSheet( + "background-color:%s;" + "border-color: dimgray" % str(self.defaults['tools_film_color'])[:7] + ) + + # Init the Tool QRCode colors + self.ui.tools2_defaults_form.tools2_qrcode_group.fill_color_entry.set_value( + self.defaults['tools_qrcode_fill_color']) + self.ui.tools2_defaults_form.tools2_qrcode_group.fill_color_button.setStyleSheet( + "background-color:%s;" + "border-color: dimgray" % str(self.defaults['tools_qrcode_fill_color'])[:7]) + + self.ui.tools2_defaults_form.tools2_qrcode_group.back_color_entry.set_value( + self.defaults['tools_qrcode_back_color']) + self.ui.tools2_defaults_form.tools2_qrcode_group.back_color_button.setStyleSheet( + "background-color:%s;" + "border-color: dimgray" % str(self.defaults['tools_qrcode_back_color'])[:7]) + + def on_save_button(self, save_to_file=True): + log.debug("on_save_button() --> Applying preferences to file.") + + # Preferences saved, update flag + self.preferences_changed_flag = False + + # Preferences save, update the color of the Preferences Tab text + for idx in range(self.ui.plot_tab_area.count()): + if self.ui.plot_tab_area.tabText(idx) == _("Preferences"): + self.ui.plot_tab_area.tabBar.setTabTextColor(idx, QtGui.QColor('black')) + + # restore the default stylesheet by setting a blank one + self.ui.pref_apply_button.setStyleSheet("") + + self.inform.emit('%s' % _("Preferences applied.")) + + # make sure we update the self.current_defaults dict used to undo changes to self.defaults + self.defaults.current_defaults.update(self.defaults) + + if save_to_file: + self.save_defaults(silent=False) + # load the defaults so they are updated into the app + self.load_defaults(filename='current_defaults') + + # Re-fresh project options + self.on_options_app2project() + + settgs = QSettings("Open Source", "FlatCAM") + + # save the notebook font size + 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_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_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_set_group.machinist_cb.get_value() else 0 + ) + + # This will write the setting to the platform specific storage. + del settgs + + if save_to_file: + # close the tab and delete it + for idx in range(self.ui.plot_tab_area.count()): + if self.ui.plot_tab_area.tabText(idx) == _("Preferences"): + self.ui.plot_tab_area.tabBar.setTabTextColor(idx, QtGui.QColor('black')) + self.ui.plot_tab_area.closeTab(idx) + break + + def on_pref_close_button(self): + # Preferences saved, update flag + self.preferences_changed_flag = False + try: + self.ui.plot_tab_area.tab_closed_signal.disconnect(self.on_plot_area_tab_closed) + except TypeError: + pass + + try: + self.ui.general_defaults_form.general_app_group.units_radio.activated_custom.disconnect() + except (TypeError, AttributeError): + pass + self.defaults_write_form(source_dict=self.defaults.current_defaults) + self.ui.general_defaults_form.general_app_group.units_radio.activated_custom.connect( + lambda: self.on_toggle_units(no_pref=False)) + self.defaults.update(self.defaults.current_defaults) + + # Preferences save, update the color of the Preferences Tab text + for idx in range(self.ui.plot_tab_area.count()): + if self.ui.plot_tab_area.tabText(idx) == _("Preferences"): + self.ui.plot_tab_area.tabBar.setTabTextColor(idx, QtGui.QColor('black')) + self.ui.plot_tab_area.closeTab(idx) + break + + self.inform.emit('%s' % _("Preferences closed without saving.")) + self.ui.plot_tab_area.tab_closed_signal.connect(self.on_plot_area_tab_closed) + + def on_restore_defaults_preferences(self): + """ + Loads the application's factory default settings into ``self.defaults``. + + :return: None + """ + log.debug("on_restore_defaults_preferences()") + self.defaults.reset_to_factory_defaults() + self.on_preferences_edited() + self.inform.emit('[success] %s' % _("Preferences default values are restored.")) + + def save_defaults(self, silent=False, data_path=None, first_time=False): + """ + Saves application default options + ``self.defaults`` to current_defaults.FlatConfig file. + Save the toolbars visibility status to the preferences file (current_defaults.FlatConfig) to be + used at the next launch of the application. + + :param silent: Whether to display a message in status bar or not; boolean + :param data_path: The path where to save the preferences file (current_defaults.FlatConfig) + When the application is portable it should be a mobile location. + :param first_time: Boolean. If True will execute some code when the app is run first time + :return: None + """ + self.report_usage("save_defaults") + + if data_path is None: + data_path = self.data_path + + self.propagate_defaults() + + if first_time is False: + self.save_toolbar_view() + + # Save the options to disk + filename = os.path.join(data_path, "current_defaults.FlatConfig") + try: + self.defaults.write(filename=filename) + except Exception as e: + log.error("save_defaults() --> Failed to write defaults to file %s" % str(e)) + self.inform.emit('[ERROR_NOTCL] %s %s' % (_("Failed to write defaults to file."), str(filename))) + return + + if not silent: + self.inform.emit('[success] %s' % _("Preferences saved.")) + + # update the autosave timer + self.save_project_auto_update() + class OptionsGroupUI(QtWidgets.QGroupBox): app = None @@ -3230,12 +4225,12 @@ class ExcellonGenPrefGroupUI(OptionsGroupUI): self.app.defaults['excellon_plot_line'] = new_val_line def on_excellon_defaults_button(self): - self.app.defaults_form_fields["excellon_format_lower_in"].set_value('4') - self.app.defaults_form_fields["excellon_format_upper_in"].set_value('2') - self.app.defaults_form_fields["excellon_format_lower_mm"].set_value('3') - self.app.defaults_form_fields["excellon_format_upper_mm"].set_value('3') - self.app.defaults_form_fields["excellon_zeros"].set_value('L') - self.app.defaults_form_fields["excellon_units"].set_value('INCH') + self.app.preferencesUiManager.defaults_form_fields["excellon_format_lower_in"].set_value('4') + self.app.preferencesUiManager.defaults_form_fields["excellon_format_upper_in"].set_value('2') + self.app.preferencesUiManager.defaults_form_fields["excellon_format_lower_mm"].set_value('3') + self.app.preferencesUiManager.defaults_form_fields["excellon_format_upper_mm"].set_value('3') + self.app.preferencesUiManager.defaults_form_fields["excellon_zeros"].set_value('L') + self.app.preferencesUiManager.defaults_form_fields["excellon_units"].set_value('INCH') class ExcellonOptPrefGroupUI(OptionsGroupUI): diff --git a/tclCommands/TclCommandSaveSys.py b/tclCommands/TclCommandSaveSys.py index 137ca8e7..3c163158 100644 --- a/tclCommands/TclCommandSaveSys.py +++ b/tclCommands/TclCommandSaveSys.py @@ -50,4 +50,4 @@ class TclCommandSaveSys(TclCommandSignaled): :return: None or exception """ - self.app.save_defaults(args) \ No newline at end of file + self.app.preferencesUiManager.save_defaults(args) \ No newline at end of file diff --git a/tclCommands/TclCommandSetSys.py b/tclCommands/TclCommandSetSys.py index 8ef911bd..c773ba36 100644 --- a/tclCommands/TclCommandSetSys.py +++ b/tclCommands/TclCommandSetSys.py @@ -83,8 +83,7 @@ class TclCommandSetSys(TclCommand): pass self.app.defaults[param] = value - - self.app.propagate_defaults(silent=True) + self.app.defaults.propagate_defaults() else: self.raise_tcl_error("No such system parameter \"{}\".".format(param))