diff --git a/FlatCAMApp.py b/FlatCAMApp.py index 9d13083b..4aa60c2f 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -747,11 +747,13 @@ class App(QtCore.QObject): "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, - # file associations - "fa_excellon": self.ui.fa_defaults_form.fa_excellon_group.exc_list_text, - "fa_gcode": self.ui.fa_defaults_form.fa_gcode_group.gco_list_text, - # "fa_geometry": self.ui.fa_defaults_form.fa_geometry_group.close_paths_cb, - "fa_gerber": self.ui.fa_defaults_form.fa_gerber_group.grb_list_text, + # 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, } @@ -864,22 +866,6 @@ class App(QtCore.QObject): "global_point_clipboard_format": "(%.4f, %.4f)", "global_zdownrate": None, - # autocomplete keywords - "global_autocomplete_keywords": - ['all', 'angle_x', 'angle_y', 'axis', 'axisoffset', 'box', 'center_x', 'center_y', - 'columns', 'combine', 'connect', 'contour', 'depthperpass', 'dia', 'diatol', 'dist', - 'drilled_dias', 'drillz', 'pp', - 'gridoffsety', 'gridx', 'gridy', 'has_offset', 'holes', 'margin', 'method', - 'milled_dias', - 'minoffset', 'multidepth', 'name', 'offset', 'opt_type', 'order', 'outname', - 'overlap', 'passes', 'postamble', 'ppname_e', 'ppname_g', 'preamble', 'radius', 'ref', - 'rest', 'rows', 'scale_factor', 'spacing_columns', 'spacing_rows', 'spindlespeed', - 'use_threads', 'value', 'x', 'x0', 'x1', 'y', 'y0', 'y1', 'z_cut', 'z_move', - 'default', 'feedrate_z', 'grbl_11', 'grbl_laser', 'hpgl', 'line_xyz', 'marlin', - 'Paste_1', 'Repetier', 'Toolchange_Custom', 'Roland_MDX_20', 'Toolchange_manual', - 'Toolchange_Probe_MACH3', 'dwell', 'dwelltime', 'toolchange_xy', 'iso_type', - 'Desktop', 'FlatPrj', 'FlatConfig', 'Users', 'Documents', 'My Documents', 'Marius' - ], # General GUI Settings "global_hover": False, "global_selection_shape": True, @@ -1162,14 +1148,28 @@ class App(QtCore.QObject): # Subtract Tool "tools_sub_close_paths": True, + # Utilities # file associations "fa_excellon": 'drd, drl, exc, ncd, tap, xln', "fa_gcode": 'cnc, din, dnc, ecs, eia, fan, fgc, fnc, gc, gcd, gcode, h, hnc, i, min, mpf, mpr, nc, ncc, ' 'ncg, ncp, out, plt, ply, rol, sbp, tap, xpi', "fa_gerber": 'art, bot, bsm, cmp, crc, crs, dim, g4, gb0, gb1, gb2, gb3, gb5, gb6, gb7, gb8, gb9, gbd, ' 'gbl, gbo, gbp, gbr, gbs, gdo, ger, gko, gm1, gm2, gm3, grb, gtl, gto, gtp, gts, ly15, ly2, ' - 'mil, pho, plc, pls, smb, smt, sol, spb, spt, ssb, sst, stc, sts, top, tsm' + 'mil, pho, plc, pls, smb, smt, sol, spb, spt, ssb, sst, stc, sts, top, tsm', + # Keyword list + "util_autocomplete_keywords": 'Desktop, Documents, FlatConfig, FlatPrj, Marius, My Documents, Paste_1, ' + 'Repetier, Roland_MDX_20, Toolchange_Custom, Toolchange_Probe_MACH3, ' + 'Toolchange_manual, Users, all, angle_x, angle_y, axis, axisoffset, box, ' + 'center_x, center_y, columns, combine, connect, contour, default, ' + 'depthperpass, dia, diatol, dist, drilled_dias, drillz, dwell, dwelltime, ' + 'feedrate_z, grbl_11, grbl_laser, gridoffsety, gridx, gridy, has_offset, ' + 'holes, hpgl, iso_type, line_xyz, margin, marlin, method, milled_dias, ' + 'minoffset, multidepth, name, offset, opt_type, order, outname, overlap, ' + 'passes, postamble, pp, ppname_e, ppname_g, preamble, radius, ref, rest, ' + 'rows, shellvar_, scale_factor, spacing_columns, spacing_rows, spindlespeed, ' + 'toolchange_xy, use_threads, value, x, x0, x1, y, y0, y1, z_cut, z_move' , + }) # ############################################################ @@ -1918,42 +1918,54 @@ class App(QtCore.QObject): # ############### FILE ASSOCIATIONS SIGNALS #################### # ############################################################## - self.ui.fa_defaults_form.fa_excellon_group.restore_btn.clicked.connect( + self.ui.util_defaults_form.fa_excellon_group.restore_btn.clicked.connect( lambda: self.restore_extensions(ext_type='excellon')) - self.ui.fa_defaults_form.fa_gcode_group.restore_btn.clicked.connect( + self.ui.util_defaults_form.fa_gcode_group.restore_btn.clicked.connect( lambda: self.restore_extensions(ext_type='gcode')) - self.ui.fa_defaults_form.fa_gerber_group.restore_btn.clicked.connect( + self.ui.util_defaults_form.fa_gerber_group.restore_btn.clicked.connect( lambda: self.restore_extensions(ext_type='gerber')) - self.ui.fa_defaults_form.fa_excellon_group.del_all_btn.clicked.connect( + self.ui.util_defaults_form.fa_excellon_group.del_all_btn.clicked.connect( lambda: self.delete_all_extensions(ext_type='excellon')) - self.ui.fa_defaults_form.fa_gcode_group.del_all_btn.clicked.connect( + self.ui.util_defaults_form.fa_gcode_group.del_all_btn.clicked.connect( lambda: self.delete_all_extensions(ext_type='gcode')) - self.ui.fa_defaults_form.fa_gerber_group.del_all_btn.clicked.connect( + self.ui.util_defaults_form.fa_gerber_group.del_all_btn.clicked.connect( lambda: self.delete_all_extensions(ext_type='gerber')) - self.ui.fa_defaults_form.fa_excellon_group.add_btn.clicked.connect( + self.ui.util_defaults_form.fa_excellon_group.add_btn.clicked.connect( lambda: self.add_extension(ext_type='excellon')) - self.ui.fa_defaults_form.fa_gcode_group.add_btn.clicked.connect( + self.ui.util_defaults_form.fa_gcode_group.add_btn.clicked.connect( lambda: self.add_extension(ext_type='gcode')) - self.ui.fa_defaults_form.fa_gerber_group.add_btn.clicked.connect( + self.ui.util_defaults_form.fa_gerber_group.add_btn.clicked.connect( lambda: self.add_extension(ext_type='gerber')) - self.ui.fa_defaults_form.fa_excellon_group.del_btn.clicked.connect( + self.ui.util_defaults_form.fa_excellon_group.del_btn.clicked.connect( lambda: self.del_extension(ext_type='excellon')) - self.ui.fa_defaults_form.fa_gcode_group.del_btn.clicked.connect( + self.ui.util_defaults_form.fa_gcode_group.del_btn.clicked.connect( lambda: self.del_extension(ext_type='gcode')) - self.ui.fa_defaults_form.fa_gerber_group.del_btn.clicked.connect( + self.ui.util_defaults_form.fa_gerber_group.del_btn.clicked.connect( lambda: self.del_extension(ext_type='gerber')) # connect the 'Apply' buttons from the Preferences/File Associations - self.ui.fa_defaults_form.fa_excellon_group.exc_list_btn.clicked.connect( + self.ui.util_defaults_form.fa_excellon_group.exc_list_btn.clicked.connect( lambda: self.on_register_files(obj_type='excellon')) - self.ui.fa_defaults_form.fa_gcode_group.gco_list_btn.clicked.connect( + self.ui.util_defaults_form.fa_gcode_group.gco_list_btn.clicked.connect( lambda: self.on_register_files(obj_type='gcode')) - self.ui.fa_defaults_form.fa_gerber_group.grb_list_btn.clicked.connect( + self.ui.util_defaults_form.fa_gerber_group.grb_list_btn.clicked.connect( lambda: self.on_register_files(obj_type='gerber')) + # ############################################################## + # ###################### KEYWORDS SIGNALS ###################### + # ############################################################## + self.ui.util_defaults_form.kw_group.restore_btn.clicked.connect( + lambda: self.restore_extensions(ext_type='keyword')) + self.ui.util_defaults_form.kw_group.del_all_btn.clicked.connect( + lambda: self.delete_all_extensions(ext_type='keyword')) + self.ui.util_defaults_form.kw_group.add_btn.clicked.connect( + lambda: self.add_extension(ext_type='keyword')) + self.ui.util_defaults_form.kw_group.del_btn.clicked.connect( + lambda: self.del_extension(ext_type='keyword')) + # splash screen button signal self.ui.general_defaults_form.general_gui_set_group.splash_cb.stateChanged.connect(self.on_splash_changed) @@ -2001,7 +2013,20 @@ class App(QtCore.QObject): 'version', 'write_gcode' ] - self.ordinary_keywords = self.defaults["global_autocomplete_keywords"] + self.default_keywords = ['Desktop', 'Documents', 'FlatConfig', 'FlatPrj', 'Marius', 'My Documents', 'Paste_1', + 'Repetier', 'Roland_MDX_20', 'Toolchange_Custom', 'Toolchange_Probe_MACH3', + 'Toolchange_manual', 'Users', 'all', 'angle_x', 'angle_y', 'axis', 'axisoffset', + 'box', 'center_x', 'center_y', 'columns', 'combine', 'connect', 'contour', 'default', + 'depthperpass', 'dia', 'diatol', 'dist', 'drilled_dias', 'drillz', 'dwell', + 'dwelltime', 'feedrate_z', 'grbl_11', 'grbl_laser', 'gridoffsety', 'gridx', 'gridy', + 'has_offset', 'holes', 'hpgl', 'iso_type', 'line_xyz', 'margin', 'marlin', 'method', + 'milled_dias', 'minoffset', 'multidepth', 'name', 'offset', 'opt_type', 'order', + 'outname', 'overlap', 'passes', 'postamble', 'pp', 'ppname_e', 'ppname_g', + 'preamble', 'radius', 'ref', 'rest', 'rows', 'shellvar_', 'scale_factor', + 'spacing_columns', + 'spacing_rows', 'spindlespeed', 'toolchange_xy', 'use_threads', 'value', 'x', + 'x0', 'x1', 'y', 'y0', 'y1', 'z_cut', 'z_move' + ] self.tcl_keywords = [ 'after', 'append', 'apply', 'argc', 'argv', 'argv0', 'array', 'attemptckalloc', 'attemptckrealloc', @@ -2190,7 +2215,8 @@ class App(QtCore.QObject): 'unload', 'unset', 'update', 'uplevel', 'upvar', 'variable', 'vwait', 'while', 'yield', 'yieldto', 'zlib' ] - self.myKeywords = self.tcl_commands_list + self.ordinary_keywords + self.tcl_keywords + self.autocomplete_kw_list = self.defaults['util_autocomplete_keywords'].replace(' ', '').split(',') + self.myKeywords = self.tcl_commands_list + self.autocomplete_kw_list + self.tcl_keywords self.default_autocomplete_keywords = [ 'all', 'angle_x', 'angle_y', 'axis', 'axisoffset', 'box', 'center_x', 'center_y', @@ -2578,7 +2604,7 @@ class App(QtCore.QObject): log.debug("App.on_startup_args() --> Save event. App Defaults saved.") self.save_defaults() else: - exc_list = self.ui.fa_defaults_form.fa_excellon_group.exc_list_text.get_value().split(',') + exc_list = self.ui.util_defaults_form.fa_excellon_group.exc_list_text.get_value().split(',') proc_arg = argument.lower() for ext in exc_list: proc_ext = ext.replace(' ', '') @@ -2591,7 +2617,7 @@ class App(QtCore.QObject): self.on_fileopenexcellon(name=file_name) return - gco_list = self.ui.fa_defaults_form.fa_gcode_group.gco_list_text.get_value().split(',') + gco_list = self.ui.util_defaults_form.fa_gcode_group.gco_list_text.get_value().split(',') for ext in gco_list: proc_ext = ext.replace(' ', '') proc_ext = '.%s' % proc_ext @@ -2604,7 +2630,7 @@ class App(QtCore.QObject): self.on_fileopengcode(name=file_name) return - grb_list = self.ui.fa_defaults_form.fa_gerber_group.grb_list_text.get_value().split(',') + grb_list = self.ui.util_defaults_form.fa_gerber_group.grb_list_text.get_value().split(',') for ext in grb_list: proc_ext = ext.replace(' ', '') proc_ext = '.%s' % proc_ext @@ -4460,7 +4486,8 @@ class App(QtCore.QObject): self.ui.general_defaults_form.general_gui_set_group.notebook_font_size_spinner.get_value()) settings.setValue('axis_font_size', self.ui.general_defaults_form.general_gui_set_group.axis_font_size_spinner.get_value()) - + settings.setValue('textbox_font_size', + self.ui.general_defaults_form.general_gui_set_group.textbox_font_size_spinner.get_value()) settings.setValue('toolbar_lock', self.ui.lock_action.isChecked()) # This will write the setting to the platform specific storage. @@ -4616,7 +4643,7 @@ class App(QtCore.QObject): return False if obj_type is None or obj_type == 'excellon': - exc_list = self.ui.fa_defaults_form.fa_excellon_group.exc_list_text.get_value().replace(' ', '').split(',') + exc_list = self.ui.util_defaults_form.fa_excellon_group.exc_list_text.get_value().replace(' ', '').split(',') exc_list = [x for x in exc_list if x != ''] # register all keys in the Preferences window @@ -4637,7 +4664,7 @@ class App(QtCore.QObject): self.inform.emit('[success] %s' % _("Selected Excellon file extensions registered with FlatCAM.")) if obj_type is None or obj_type == 'gcode': - gco_list = self.ui.fa_defaults_form.fa_gcode_group.gco_list_text.get_value().replace(' ', '').split(',') + gco_list = self.ui.util_defaults_form.fa_gcode_group.gco_list_text.get_value().replace(' ', '').split(',') gco_list = [x for x in gco_list if x != ''] # register all keys in the Preferences window @@ -4659,7 +4686,7 @@ class App(QtCore.QObject): _("Selected GCode file extensions registered with FlatCAM.")) if obj_type is None or obj_type == 'gerber': - grb_list = self.ui.fa_defaults_form.fa_gerber_group.grb_list_text.get_value().replace(' ', '').split(',') + grb_list = self.ui.util_defaults_form.fa_gerber_group.grb_list_text.get_value().replace(' ', '').split(',') grb_list = [x for x in grb_list if x != ''] # register all keys in the Preferences window @@ -4682,73 +4709,109 @@ class App(QtCore.QObject): def add_extension(self, ext_type): if ext_type == 'excellon': - new_ext = self.ui.fa_defaults_form.fa_excellon_group.ext_entry.get_value() + new_ext = self.ui.util_defaults_form.fa_excellon_group.ext_entry.get_value() if new_ext == '': return - old_val = self.ui.fa_defaults_form.fa_excellon_group.exc_list_text.get_value().replace(' ', '').split(',') + old_val = self.ui.util_defaults_form.fa_excellon_group.exc_list_text.get_value().replace(' ', '').split(',') if new_ext in old_val: return old_val.append(new_ext) old_val.sort() - self.ui.fa_defaults_form.fa_excellon_group.exc_list_text.set_value(', '.join(old_val)) + self.ui.util_defaults_form.fa_excellon_group.exc_list_text.set_value(', '.join(old_val)) if ext_type == 'gcode': - new_ext = self.ui.fa_defaults_form.fa_gcode_group.ext_entry.get_value() + new_ext = self.ui.util_defaults_form.fa_gcode_group.ext_entry.get_value() if new_ext == '': return - old_val = self.ui.fa_defaults_form.fa_gcode_group.gco_list_text.get_value().replace(' ', '').split(',') + old_val = self.ui.util_defaults_form.fa_gcode_group.gco_list_text.get_value().replace(' ', '').split(',') if new_ext in old_val: return old_val.append(new_ext) old_val.sort() - self.ui.fa_defaults_form.fa_gcode_group.gco_list_text.set_value(', '.join(old_val)) + self.ui.util_defaults_form.fa_gcode_group.gco_list_text.set_value(', '.join(old_val)) if ext_type == 'gerber': - new_ext = self.ui.fa_defaults_form.fa_gerber_group.ext_entry.get_value() + new_ext = self.ui.util_defaults_form.fa_gerber_group.ext_entry.get_value() if new_ext == '': return - old_val = self.ui.fa_defaults_form.fa_gerber_group.grb_list_text.get_value().replace(' ', '').split(',') + old_val = self.ui.util_defaults_form.fa_gerber_group.grb_list_text.get_value().replace(' ', '').split(',') if new_ext in old_val: return old_val.append(new_ext) old_val.sort() - self.ui.fa_defaults_form.fa_gerber_group.grb_list_text.set_value(', '.join(old_val)) + self.ui.util_defaults_form.fa_gerber_group.grb_list_text.set_value(', '.join(old_val)) + if ext_type == 'keyword': + new_kw = self.ui.util_defaults_form.kw_group.kw_entry.get_value() + if new_kw == '': + return + + old_val = self.ui.util_defaults_form.kw_group.kw_list_text.get_value().replace(' ', '').split(',') + if new_kw in old_val: + return + old_val.append(new_kw) + old_val.sort() + self.ui.util_defaults_form.kw_group.kw_list_text.set_value(', '.join(old_val)) + + # update the self.myKeywords so the model is updated + self.autocomplete_kw_list = \ + self.ui.util_defaults_form.kw_group.kw_list_text.get_value().replace(' ', '').split(',') + self.myKeywords = self.tcl_commands_list + self.autocomplete_kw_list + self.tcl_keywords + self.shell._edit.set_model_data(self.myKeywords) + self.ui.code_editor.set_model_data(self.myKeywords) def del_extension(self, ext_type): if ext_type == 'excellon': - new_ext = self.ui.fa_defaults_form.fa_excellon_group.ext_entry.get_value() + new_ext = self.ui.util_defaults_form.fa_excellon_group.ext_entry.get_value() if new_ext == '': return - old_val = self.ui.fa_defaults_form.fa_excellon_group.exc_list_text.get_value().replace(' ', '').split(',') + old_val = self.ui.util_defaults_form.fa_excellon_group.exc_list_text.get_value().replace(' ', '').split(',') if new_ext not in old_val: return old_val.remove(new_ext) old_val.sort() - self.ui.fa_defaults_form.fa_excellon_group.exc_list_text.set_value(', '.join(old_val)) + self.ui.util_defaults_form.fa_excellon_group.exc_list_text.set_value(', '.join(old_val)) if ext_type == 'gcode': - new_ext = self.ui.fa_defaults_form.fa_gcode_group.ext_entry.get_value() + new_ext = self.ui.util_defaults_form.fa_gcode_group.ext_entry.get_value() if new_ext == '': return - old_val = self.ui.fa_defaults_form.fa_gcode_group.gco_list_text.get_value().replace(' ', '').split(',') + old_val = self.ui.util_defaults_form.fa_gcode_group.gco_list_text.get_value().replace(' ', '').split(',') if new_ext not in old_val: return old_val.remove(new_ext) old_val.sort() - self.ui.fa_defaults_form.fa_gcode_group.gco_list_text.set_value(', '.join(old_val)) + self.ui.util_defaults_form.fa_gcode_group.gco_list_text.set_value(', '.join(old_val)) if ext_type == 'gerber': - new_ext = self.ui.fa_defaults_form.fa_gerber_group.ext_entry.get_value() + new_ext = self.ui.util_defaults_form.fa_gerber_group.ext_entry.get_value() if new_ext == '': return - old_val = self.ui.fa_defaults_form.fa_gerber_group.grb_list_text.get_value().replace(' ', '').split(',') + old_val = self.ui.util_defaults_form.fa_gerber_group.grb_list_text.get_value().replace(' ', '').split(',') if new_ext not in old_val: return old_val.remove(new_ext) old_val.sort() - self.ui.fa_defaults_form.fa_gerber_group.grb_list_text.set_value(', '.join(old_val)) + self.ui.util_defaults_form.fa_gerber_group.grb_list_text.set_value(', '.join(old_val)) + if ext_type == 'keyword': + new_kw = self.ui.util_defaults_form.kw_group.kw_entry.get_value() + if new_kw == '': + return + + old_val = self.ui.util_defaults_form.kw_group.kw_list_text.get_value().replace(' ', '').split(',') + if new_kw not in old_val: + return + old_val.remove(new_kw) + old_val.sort() + self.ui.util_defaults_form.kw_group.kw_list_text.set_value(', '.join(old_val)) + + # update the self.myKeywords so the model is updated + self.autocomplete_kw_list = \ + self.ui.util_defaults_form.kw_group.kw_list_text.get_value().replace(' ', '').split(',') + self.myKeywords = self.tcl_commands_list + self.autocomplete_kw_list + self.tcl_keywords + self.shell._edit.set_model_data(self.myKeywords) + self.ui.code_editor.set_model_data(self.myKeywords) def restore_extensions(self, ext_type): if ext_type == 'excellon': @@ -4760,19 +4823,34 @@ class App(QtCore.QObject): new_exc_list.remove('txt') except ValueError: pass - self.ui.fa_defaults_form.fa_excellon_group.exc_list_text.set_value(', '.join(new_exc_list)) + self.ui.util_defaults_form.fa_excellon_group.exc_list_text.set_value(', '.join(new_exc_list)) if ext_type == 'gcode': - self.ui.fa_defaults_form.fa_gcode_group.gco_list_text.set_value(', '.join(self.gcode_list)) + self.ui.util_defaults_form.fa_gcode_group.gco_list_text.set_value(', '.join(self.gcode_list)) if ext_type == 'gerber': - self.ui.fa_defaults_form.fa_gerber_group.grb_list_text.set_value(', '.join(self.grb_list)) + self.ui.util_defaults_form.fa_gerber_group.grb_list_text.set_value(', '.join(self.grb_list)) + if ext_type == 'keyword': + self.ui.util_defaults_form.kw_group.kw_list_text.set_value(', '.join(self.default_keywords)) + + # update the self.myKeywords so the model is updated + self.autocomplete_kw_list = self.default_keywords + self.myKeywords = self.tcl_commands_list + self.autocomplete_kw_list + self.tcl_keywords + self.shell._edit.set_model_data(self.myKeywords) + self.ui.code_editor.set_model_data(self.myKeywords) def delete_all_extensions(self, ext_type): if ext_type == 'excellon': - self.ui.fa_defaults_form.fa_excellon_group.exc_list_text.set_value('') + self.ui.util_defaults_form.fa_excellon_group.exc_list_text.set_value('') if ext_type == 'gcode': - self.ui.fa_defaults_form.fa_gcode_group.gco_list_text.set_value('') + self.ui.util_defaults_form.fa_gcode_group.gco_list_text.set_value('') if ext_type == 'gerber': - self.ui.fa_defaults_form.fa_gerber_group.grb_list_text.set_value('') + self.ui.util_defaults_form.fa_gerber_group.grb_list_text.set_value('') + if ext_type == 'keyword': + self.ui.util_defaults_form.kw_group.kw_list_text.set_value('') + + # update the self.myKeywords so the model is updated + self.myKeywords = self.tcl_commands_list + self.tcl_keywords + self.shell._edit.set_model_data(self.myKeywords) + self.ui.code_editor.set_model_data(self.myKeywords) def on_edit_join(self, name=None): """ @@ -5390,7 +5468,7 @@ class App(QtCore.QObject): 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.fa_form = self.ui.fa_defaults_form + self.fa_form = self.ui.util_defaults_form elif sel == 1: self.gen_form = self.ui.general_options_form self.ger_form = self.ui.gerber_options_form @@ -5398,7 +5476,7 @@ class App(QtCore.QObject): self.geo_form = self.ui.geometry_options_form self.cnc_form = self.ui.cncjob_options_form self.tools_form = self.ui.tools_options_form - self.fa_form = self.ui.fa_options_form + self.fa_form = self.ui.util_options_form else: return @@ -6110,8 +6188,9 @@ class App(QtCore.QObject): # Re-fresh project options self.on_options_app2project() - # save the notebook font size settings = QSettings("Open Source", "FlatCAM") + + # save the notebook font size fsize = self.ui.general_defaults_form.general_gui_set_group.notebook_font_size_spinner.get_value() settings.setValue('notebook_font_size', fsize) @@ -6119,6 +6198,10 @@ class App(QtCore.QObject): g_fsize = self.ui.general_defaults_form.general_gui_set_group.axis_font_size_spinner.get_value() settings.setValue('axis_font_size', g_fsize) + # save the textbox font size + tb_fsize = self.ui.general_defaults_form.general_gui_set_group.textbox_font_size_spinner.get_value() + settings.setValue('textbox_font_size', tb_fsize) + # This will write the setting to the platform specific storage. del settings diff --git a/README.md b/README.md index 71e450fb..4bf69128 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,8 @@ CAD program, and create G-Code for Isolation routing. - fixed the parsing of the Manufacturing files when double clicking them and they are registered with FlatCAM - fixed showing the GUI when some settings (maximized_GUI) are missing from QSettings - added sys tray menu +- added possibility to edit the custom keywords used by the autocompleter (in Tcl Shell and in the Code Editor). It is done in the Edit -> Preferences -> Utilities +- added a new setting in Edit -> Preferences -> General -> GUI Settings -> Textbox Font which control the font on the texbox GUI elements 17.09.2019 diff --git a/flatcamGUI/FlatCAMGUI.py b/flatcamGUI/FlatCAMGUI.py index 67bcef94..b6c835ea 100644 --- a/flatcamGUI/FlatCAMGUI.py +++ b/flatcamGUI/FlatCAMGUI.py @@ -1972,7 +1972,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow): self.geometry_defaults_form = GeometryPreferencesUI() self.cncjob_defaults_form = CNCJobPreferencesUI() self.tools_defaults_form = ToolsPreferencesUI() - self.fa_defaults_form = FAPreferencesUI() + self.util_defaults_form = UtilPreferencesUI() self.general_options_form = GeneralPreferencesUI() self.gerber_options_form = GerberPreferencesUI() @@ -1980,7 +1980,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow): self.geometry_options_form = GeometryPreferencesUI() self.cncjob_options_form = CNCJobPreferencesUI() self.tools_options_form = ToolsPreferencesUI() - self.fa_options_form = FAPreferencesUI() + self.util_options_form = UtilPreferencesUI() QtWidgets.qApp.installEventFilter(self) @@ -3639,23 +3639,32 @@ class CNCJobPreferencesUI(QtWidgets.QWidget): self.layout.addStretch() -class FAPreferencesUI(QtWidgets.QWidget): +class UtilPreferencesUI(QtWidgets.QWidget): def __init__(self, parent=None): QtWidgets.QWidget.__init__(self, parent=parent) self.layout = QtWidgets.QHBoxLayout() self.setLayout(self.layout) + self.vlay = QtWidgets.QVBoxLayout() self.fa_excellon_group = FAExcPrefGroupUI() self.fa_excellon_group.setMinimumWidth(260) + self.fa_gcode_group = FAGcoPrefGroupUI() self.fa_gcode_group.setMinimumWidth(260) + + self.vlay.addWidget(self.fa_excellon_group) + self.vlay.addWidget(self.fa_gcode_group) + self.fa_gerber_group = FAGrbPrefGroupUI() self.fa_gerber_group.setMinimumWidth(260) - self.layout.addWidget(self.fa_excellon_group) - self.layout.addWidget(self.fa_gcode_group) + self.kw_group = AutoCompletePrefGroupUI() + self.kw_group.setMinimumWidth(260) + + self.layout.addLayout(self.vlay) self.layout.addWidget(self.fa_gerber_group) + self.layout.addWidget(self.kw_group) self.layout.addStretch() @@ -4081,6 +4090,23 @@ class GeneralGUISetGroupUI(OptionsGroupUI): else: self.axis_font_size_spinner.set_value(8) + # TextBox Font Size + self.textbox_font_size_label = QtWidgets.QLabel('%s:' % _('Textbox Font Size')) + self.textbox_font_size_label.setToolTip( + _("This sets the font size for the Textbox GUI\n" + "elements that are used in FlatCAM.") + ) + + self.textbox_font_size_spinner = FCSpinner() + self.textbox_font_size_spinner.setRange(8, 40) + self.textbox_font_size_spinner.setWrapping(True) + + settings = QSettings("Open Source", "FlatCAM") + if settings.contains("textbox_font_size"): + self.textbox_font_size_spinner.set_value(settings.value('textbox_font_size', type=int)) + else: + self.textbox_font_size_spinner.set_value(10) + # Just to add empty rows self.spacelabel = QtWidgets.QLabel('') @@ -4158,6 +4184,7 @@ class GeneralGUISetGroupUI(OptionsGroupUI): self.form_box.addRow(QtWidgets.QLabel('')) self.form_box.addRow(self.notebook_font_size_label, self.notebook_font_size_spinner) self.form_box.addRow(self.axis_font_size_label, self.axis_font_size_spinner) + self.form_box.addRow(self.textbox_font_size_label, self.textbox_font_size_spinner) self.form_box.addRow(QtWidgets.QLabel('')) self.form_box.addRow(self.splash_label, self.splash_cb) self.form_box.addRow(self.shell_startup_label, self.shell_startup_cb) @@ -6471,6 +6498,14 @@ class CNCJobOptPrefGroupUI(OptionsGroupUI): ) self.layout.addWidget(self.export_gcode_label) + settings = QSettings("Open Source", "FlatCAM") + if settings.contains("textbox_font_size"): + tb_fsize = settings.value('textbox_font_size', type=int) + else: + tb_fsize = 10 + font = QtGui.QFont() + font.setPointSize(tb_fsize) + # Prepend to G-Code prependlabel = QtWidgets.QLabel('%s:' % _('Prepend to G-Code')) prependlabel.setToolTip( @@ -6481,6 +6516,7 @@ class CNCJobOptPrefGroupUI(OptionsGroupUI): self.prepend_text = FCTextArea() self.layout.addWidget(self.prepend_text) + self.prepend_text.setFont(font) # Append text to G-Code appendlabel = QtWidgets.QLabel('%s:' % _('Append to G-Code')) @@ -6493,6 +6529,7 @@ class CNCJobOptPrefGroupUI(OptionsGroupUI): self.append_text = FCTextArea() self.layout.addWidget(self.append_text) + self.append_text.setFont(font) self.layout.addStretch() @@ -6528,8 +6565,17 @@ class CNCJobAdvOptPrefGroupUI(OptionsGroupUI): ) self.layout.addWidget(toolchangelabel) + settings = QSettings("Open Source", "FlatCAM") + if settings.contains("textbox_font_size"): + tb_fsize = settings.value('textbox_font_size', type=int) + else: + tb_fsize = 10 + font = QtGui.QFont() + font.setPointSize(tb_fsize) + self.toolchange_text = FCTextArea() self.layout.addWidget(self.toolchange_text) + self.toolchange_text.setFont(font) hlay = QtWidgets.QHBoxLayout() self.layout.addLayout(hlay) @@ -7834,11 +7880,17 @@ class FAExcPrefGroupUI(OptionsGroupUI): ) self.vertical_lay.addWidget(list_label) + settings = QSettings("Open Source", "FlatCAM") + if settings.contains("textbox_font_size"): + tb_fsize = settings.value('textbox_font_size', type=int) + else: + tb_fsize = 10 + self.exc_list_text = FCTextArea() self.exc_list_text.setReadOnly(True) # self.exc_list_text.sizeHint(custom_sizehint=150) font = QtGui.QFont() - font.setPointSize(12) + font.setPointSize(tb_fsize) self.exc_list_text.setFont(font) self.vertical_lay.addWidget(self.exc_list_text) @@ -7900,11 +7952,17 @@ class FAGcoPrefGroupUI(OptionsGroupUI): ) self.layout.addWidget(self.gco_list_label) + settings = QSettings("Open Source", "FlatCAM") + if settings.contains("textbox_font_size"): + tb_fsize = settings.value('textbox_font_size', type=int) + else: + tb_fsize = 10 + self.gco_list_text = FCTextArea() self.gco_list_text.setReadOnly(True) # self.gco_list_text.sizeHint(custom_sizehint=150) font = QtGui.QFont() - font.setPointSize(12) + font.setPointSize(tb_fsize) self.gco_list_text.setFont(font) self.layout.addWidget(self.gco_list_text) @@ -7963,12 +8021,18 @@ class FAGrbPrefGroupUI(OptionsGroupUI): ) self.layout.addWidget(self.grb_list_label) + settings = QSettings("Open Source", "FlatCAM") + if settings.contains("textbox_font_size"): + tb_fsize = settings.value('textbox_font_size', type=int) + else: + tb_fsize = 10 + self.grb_list_text = FCTextArea() self.grb_list_text.setReadOnly(True) # self.grb_list_text.sizeHint(custom_sizehint=150) self.layout.addWidget(self.grb_list_text) font = QtGui.QFont() - font.setPointSize(12) + font.setPointSize(tb_fsize) self.grb_list_text.setFont(font) self.ext_label = QtWidgets.QLabel('%s:' % _("Extension")) @@ -8001,6 +8065,69 @@ class FAGrbPrefGroupUI(OptionsGroupUI): # self.layout.addStretch() +class AutoCompletePrefGroupUI(OptionsGroupUI): + def __init__(self, parent=None): + # OptionsGroupUI.__init__(self, "Gerber File associations Preferences", parent=None) + super().__init__(self, parent=parent) + + self.setTitle(str(_("Autocompleter Keywords"))) + + self.restore_btn = FCButton(_("Restore")) + self.restore_btn.setToolTip(_("Restore the autocompleter keywords list to the default state.")) + self.del_all_btn = FCButton(_("Delete All")) + self.del_all_btn.setToolTip(_("Delete all autocompleter keywords from the list.")) + + hlay0 = QtWidgets.QHBoxLayout() + self.layout.addLayout(hlay0) + hlay0.addWidget(self.restore_btn) + hlay0.addWidget(self.del_all_btn) + + # ## Gerber associations + self.grb_list_label = QtWidgets.QLabel("%s:" % _("Keywords list")) + self.grb_list_label.setToolTip( + _("List of keywords used by\n" + "the autocompleter in FlatCAM.\n" + "The autocompleter is installed\n" + "in the Code Editor and for the Tcl Shell.") + ) + self.layout.addWidget(self.grb_list_label) + + settings = QSettings("Open Source", "FlatCAM") + if settings.contains("textbox_font_size"): + tb_fsize = settings.value('textbox_font_size', type=int) + else: + tb_fsize = 10 + + self.kw_list_text = FCTextArea() + self.kw_list_text.setReadOnly(True) + # self.grb_list_text.sizeHint(custom_sizehint=150) + self.layout.addWidget(self.kw_list_text) + font = QtGui.QFont() + font.setPointSize(tb_fsize) + self.kw_list_text.setFont(font) + + self.kw_label = QtWidgets.QLabel('%s:' % _("Extension")) + self.kw_label.setToolTip(_("A keyword to be added or deleted to the list.")) + self.kw_entry = FCEntry() + + hlay1 = QtWidgets.QHBoxLayout() + self.layout.addLayout(hlay1) + hlay1.addWidget(self.kw_label) + hlay1.addWidget(self.kw_entry) + + self.add_btn = FCButton(_("Add keyword")) + self.add_btn.setToolTip(_("Add a keyword to the list")) + self.del_btn = FCButton(_("Delete keyword")) + self.del_btn.setToolTip(_("Delete a keyword from the list")) + + hlay2 = QtWidgets.QHBoxLayout() + self.layout.addLayout(hlay2) + hlay2.addWidget(self.add_btn) + hlay2.addWidget(self.del_btn) + + # self.layout.addStretch() + + class FlatCAMActivityView(QtWidgets.QWidget): def __init__(self, parent=None):