diff --git a/FlatCAMApp.py b/FlatCAMApp.py
index 7d7087d4..36d219b8 100644
--- a/FlatCAMApp.py
+++ b/FlatCAMApp.py
@@ -5169,7 +5169,6 @@ class App(QtCore.QObject):
obj_name_single = str(name) if name else "Combo_SingleGeo"
obj_name_multi = str(name) if name else "Combo_MultiGeo"
- tooldias = []
geo_type_list = set()
objs = self.collection.get_selected()
@@ -5691,10 +5690,10 @@ class App(QtCore.QObject):
self.ui.general_defaults_form.general_app_group.units_radio.activated_custom.connect(
lambda: self.on_toggle_units(no_pref=False))
- def on_fullscreen(self):
+ def on_fullscreen(self, disable=False):
self.report_usage("on_fullscreen()")
- if self.toggle_fscreen is False:
+ if self.toggle_fscreen is False and disable is False:
# self.ui.showFullScreen()
self.ui.setWindowFlags(self.ui.windowFlags() | Qt.FramelessWindowHint)
a = self.ui.geometry()
@@ -5723,7 +5722,7 @@ class App(QtCore.QObject):
tb.setVisible(False)
self.ui.splitter_left.setVisible(False)
self.toggle_fscreen = True
- else:
+ elif self.toggle_fscreen is True or disable is True:
self.ui.setWindowFlags(self.ui.windowFlags() & ~Qt.FramelessWindowHint)
self.ui.setGeometry(self.x_pos, self.y_pos, self.width, self.height)
self.ui.showNormal()
@@ -9252,8 +9251,8 @@ class App(QtCore.QObject):
filenames = [name]
else:
try:
- filenames, _f = QtWidgets.QFileDialog.getOpenFileNames(caption=_("Open TCL script"),
- directory=self.get_last_folder(), filter=_filter_)
+ filenames, _f = QtWidgets.QFileDialog.getOpenFileNames(
+ caption=_("Open TCL script"), directory=self.get_last_folder(), filter=_filter_)
except TypeError:
filenames, _f = QtWidgets.QFileDialog.getOpenFileNames(caption=_("Open TCL script"), filter=_filter_)
@@ -10119,6 +10118,7 @@ class App(QtCore.QObject):
it with shapes extracted from the SVG file.
:param filename: Path to the SVG file.
+ :param geo_type: Type of FlatCAM object that will be created from SVG
:param outname:
:return:
"""
@@ -10162,6 +10162,7 @@ class App(QtCore.QObject):
it with shapes extracted from the DXF file.
:param filename: Path to the DXF file.
+ :param geo_type: Type of FlatCAM object that will be created from DXF
:param outname:
:type putname: str
:return:
@@ -10175,8 +10176,7 @@ class App(QtCore.QObject):
obj_type = geo_type
else:
self.inform.emit('[ERROR_NOTCL] %s' %
- _("Not supported type is picked as parameter. "
- "Only Geometry and Gerber are supported"))
+ _("Not supported type is picked as parameter. Only Geometry and Gerber are supported"))
return
units = self.ui.general_defaults_form.general_app_group.units_radio.get_value().upper()
@@ -10196,8 +10196,7 @@ class App(QtCore.QObject):
self.file_opened.emit("dxf", filename)
# GUI feedback
- self.inform.emit('[success] %s: %s' %
- (_("Opened"), filename))
+ self.inform.emit('[success] %s: %s' % (_("Opened"), filename))
self.progress.emit(100)
def import_image(self, filename, o_type='gerber', dpi=96, mode='black', mask=[250, 250, 250, 250], outname=None):
@@ -11749,6 +11748,6 @@ class GracefulException(Exception):
super().__init__()
def __str__(self):
- return ('\n\n%s' % _("The user requested a graceful exit of the current task."))
+ return '\n\n%s' % _("The user requested a graceful exit of the current task.")
# end of file
diff --git a/FlatCAMObj.py b/FlatCAMObj.py
index 429216b1..2027aebc 100644
--- a/FlatCAMObj.py
+++ b/FlatCAMObj.py
@@ -1546,14 +1546,14 @@ class FlatCAMGerber(FlatCAMObj, Gerber):
if aperture_to_plot_mark in self.apertures:
for elem in self.apertures[aperture_to_plot_mark]['geometry']:
if 'solid' in elem:
- geo = elem['solid']
- if type(geo) == Polygon or type(geo) == LineString:
- self.add_mark_shape(apid=aperture_to_plot_mark, shape=geo, color=color,
+ geo = elem['solid']
+ if type(geo) == Polygon or type(geo) == LineString:
+ self.add_mark_shape(apid=aperture_to_plot_mark, shape=geo, color=color,
+ face_color=color, visible=visibility)
+ else:
+ for el in geo:
+ self.add_mark_shape(apid=aperture_to_plot_mark, shape=el, color=color,
face_color=color, visible=visibility)
- else:
- for el in geo:
- self.add_mark_shape(apid=aperture_to_plot_mark, shape=el, color=color,
- face_color=color, visible=visibility)
self.mark_shapes[aperture_to_plot_mark].redraw()
@@ -4323,7 +4323,7 @@ class FlatCAMGeometry(FlatCAMObj, Geometry):
tooldia = float(self.ui.geo_tools_table.item(row, 1).text())
new_cutz = (tooldia - vdia) / (2 * math.tan(math.radians(half_vangle)))
- new_cutz = float('%.*f' % (self.decimals, -new_cutz)) # this value has to be negative
+ new_cutz = float('%.*f' % (self.decimals, -new_cutz)) # this value has to be negative
self.ui.cutz_entry.set_value(new_cutz)
# store the new CutZ value into storage (self.tools)
@@ -5337,8 +5337,8 @@ class FlatCAMGeometry(FlatCAMObj, Geometry):
except TypeError:
self.app.inform.emit('[ERROR_NOTCL] %s' %
_("An (x,y) pair of values are needed. "
- "Probable you entered only one value in the Offset field."
- ))
+ "Probable you entered only one value in the Offset field.")
+ )
return
self.geo_len = 0
@@ -5421,8 +5421,8 @@ class FlatCAMGeometry(FlatCAMObj, Geometry):
self.app.inform.emit('[ERROR] %s' %
_("The Toolchange X,Y field in Edit -> Preferences "
"has to be in the format (x, y)\n"
- "but now there is only one value, not two."
- ))
+ "but now there is only one value, not two.")
+ )
return 'fail'
coords_xy[0] *= factor
coords_xy[1] *= factor
@@ -5519,7 +5519,6 @@ class FlatCAMGeometry(FlatCAMObj, Geometry):
# if self.app.is_legacy is False:
self.add_shape(shape=element, color=color, visible=visible, layer=0)
-
def plot(self, visible=None, kind=None):
"""
Plot the object.
@@ -6242,8 +6241,8 @@ class FlatCAMCNCjob(FlatCAMObj, CNCjob):
m6_code = self.parse_custom_toolchange_code(self.ui.toolchange_text.get_value())
if m6_code is None or m6_code == '':
self.app.inform.emit('[ERROR_NOTCL] %s' %
- _("Cancelled. The Toolchange Custom code is enabled but it's empty."
- ))
+ _("Cancelled. The Toolchange Custom code is enabled but it's empty.")
+ )
return 'fail'
g = g.replace('M6', m6_code)
@@ -6543,7 +6542,7 @@ class FlatCAMScript(FlatCAMObj):
self.script_editor_tab.buttonRun.show()
self.ui.autocomplete_cb.set_value(self.app.defaults['script_autocompleter'])
- self.on_autocomplete_changed(state= self.app.defaults['script_autocompleter'])
+ self.on_autocomplete_changed(state=self.app.defaults['script_autocompleter'])
flt = "FlatCAM Scripts (*.FlatScript);;All Files (*.*)"
self.script_editor_tab.buttonOpen.clicked.disconnect()
diff --git a/README.md b/README.md
index 271e7dc8..abf4203d 100644
--- a/README.md
+++ b/README.md
@@ -14,6 +14,11 @@ CAD program, and create G-Code for Isolation routing.
- updated the Film Tool and added the ability to generate Punched Positive films (holes in the pads) when a Gerber file is the film's source. The punch holes source can be either an Excellon file or the pads center
- optimized Rules Check Tool so it runs faster when doing Copper 2 Copper rule
+- small GUI changes in Optimal Tool and in Film Tool
+- some PEP8 corrections
+- some code annotations to make it easier to navigate in the FlatCAMGUI.py
+- fixed exit FullScreen with Escape key
+
3.10.2019
diff --git a/flatcamGUI/FlatCAMGUI.py b/flatcamGUI/FlatCAMGUI.py
index 9b5dbc78..29024d6b 100644
--- a/flatcamGUI/FlatCAMGUI.py
+++ b/flatcamGUI/FlatCAMGUI.py
@@ -43,8 +43,10 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
# ######### ##
self.menu = self.menuBar()
- # ## File # ##
- self.menufile = self.menu.addMenu(_('&File'))
+ # ########################################################################
+ # ########################## File # ######################################
+ # ########################################################################
+ self.menufile = self.menu.addMenu(_('File'))
self.menufile.setToolTipsVisible(True)
# New Project
@@ -242,7 +244,9 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
# exitAction.setStatusTip('Exit application')
self.menufile.addAction(self.menufile_exit)
- # ## Edit # ##
+ # ########################################################################
+ # ########################## Edit # ######################################
+ # ########################################################################
self.menuedit = self.menu.addMenu(_('Edit'))
# Separator
self.menuedit.addSeparator()
@@ -359,7 +363,9 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
# Separator
self.menuoptions.addSeparator()
- # ## View # ##
+ # ########################################################################
+ # ########################## View # ######################################
+ # ########################################################################
self.menuview = self.menu.addMenu(_('&View'))
self.menuviewenable = self.menuview.addAction(QtGui.QIcon('share/replot16.png'), _('Enable all plots\tALT+1'))
self.menuviewdisableall = self.menuview.addAction(QtGui.QIcon('share/clear_plot16.png'),
@@ -395,12 +401,21 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
self.menuview_toggle_workspace = self.menuview.addAction(QtGui.QIcon('share/workspace24.png'),
_("Toggle Workspace\tSHIFT+W"))
- # ## Tool ###
+ # ########################################################################
+ # ########################## Objects # ###################################
+ # ########################################################################
+ self.menufile = self.menu.addMenu(_('Objects'))
+
+ # ########################################################################
+ # ########################## Tool # ######################################
+ # ########################################################################
self.menutool = QtWidgets.QMenu(_('&Tool'))
self.menutoolaction = self.menu.addMenu(self.menutool)
self.menutoolshell = self.menutool.addAction(QtGui.QIcon('share/shell16.png'), _('&Command Line\tS'))
- # ## Help ###
+ # ########################################################################
+ # ########################## Help # ######################################
+ # ########################################################################
self.menuhelp = self.menu.addMenu(_('&Help'))
self.menuhelp_manual = self.menuhelp.addAction(QtGui.QIcon('share/globe16.png'), _('Online Help\tF1'))
self.menuhelp_home = self.menuhelp.addAction(QtGui.QIcon('share/home16.png'), _('FlatCAM.org'))
@@ -420,7 +435,9 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
)
self.menuhelp_about = self.menuhelp.addAction(QtGui.QIcon('share/about32.png'), _('About FlatCAM'))
- # ## FlatCAM Editor menu ###
+ # ########################################################################
+ # ########################## GEOMETRY EDITOR # ###########################
+ # ########################################################################
self.geo_editor_menu = QtWidgets.QMenu(">Geo Editor<")
self.menu.addMenu(self.geo_editor_menu)
@@ -470,6 +487,9 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
QtGui.QIcon('share/corner32.png'), _("Toggle Corner Snap\tK")
)
+ # ########################################################################
+ # ########################## EXCELLON Editor # ###########################
+ # ########################################################################
self.exc_editor_menu = QtWidgets.QMenu(_(">Excellon Editor<"))
self.menu.addMenu(self.exc_editor_menu)
@@ -497,7 +517,9 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
self.exc_move_drill_menuitem = self.exc_editor_menu.addAction(QtGui.QIcon('share/move32.png'),
_('Move Drill(s)\tM'))
- # ## APPLICATION GERBER EDITOR MENU ###
+ # ########################################################################
+ # ########################## GERBER Editor # #############################
+ # ########################################################################
self.grb_editor_menu = QtWidgets.QMenu(_(">Gerber Editor<"))
self.menu.addMenu(self.grb_editor_menu)
@@ -543,10 +565,9 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
self.exc_editor_menu.menuAction().setVisible(False)
self.exc_editor_menu.setDisabled(True)
- # ################################
- # ### Project Tab Context menu ###
- # ################################
-
+ # ########################################################################
+ # ########################## Project Tab Context Menu # ##################
+ # ########################################################################
self.menuproject = QtWidgets.QMenu()
self.menuprojectenable = self.menuproject.addAction(QtGui.QIcon('share/replot32.png'), _('Enable Plot'))
self.menuprojectdisable = self.menuproject.addAction(QtGui.QIcon('share/clear_plot32.png'), _('Disable Plot'))
@@ -562,9 +583,9 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
self.menuprojectproperties = self.menuproject.addAction(QtGui.QIcon('share/properties32.png'), _('Properties'))
- # ################
- # ### Splitter ###
- # ################
+ # ########################################################################
+ # ####################### Central Widget -> Splitter # ##################
+ # ########################################################################
# IMPORTANT #
# The order: SPITTER -> NOTEBOOK -> SNAP TOOLBAR is important and without it the GUI will not be initialized as
@@ -584,9 +605,9 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
self.splitter_left.addWidget(self.notebook)
self.splitter_left.setHandleWidth(0)
- # ##############
- # ## Toolbar ###
- # ##############
+ # ########################################################################
+ # ########################## ToolBAR # ###################################
+ # ########################################################################
# ## TOOLBAR INSTALLATION ###
self.toolbarfile = QtWidgets.QToolBar(_('File Toolbar'))
@@ -637,7 +658,9 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
self.snap_toolbar.setMaximumHeight(30)
self.splitter_left.addWidget(self.snap_toolbar)
- # ## File Toolbar ###
+ # ########################################################################
+ # ########################## File Toolbar# ###############################
+ # ########################################################################
self.file_open_gerber_btn = self.toolbarfile.addAction(QtGui.QIcon('share/flatcam_icon32.png'),
_("Open Gerber"))
self.file_open_excellon_btn = self.toolbarfile.addAction(QtGui.QIcon('share/drill32.png'), _("Open Excellon"))
@@ -645,7 +668,9 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
self.file_open_btn = self.toolbarfile.addAction(QtGui.QIcon('share/folder32.png'), _("Open project"))
self.file_save_btn = self.toolbarfile.addAction(QtGui.QIcon('share/floppy32.png'), _("Save project"))
- # ## Edit Toolbar ###
+ # ########################################################################
+ # ########################## Edit Toolbar# ###############################
+ # ########################################################################
self.newgeo_btn = self.toolbargeo.addAction(QtGui.QIcon('share/new_geo32_bis.png'), _("New Blank Geometry"))
self.newgrb_btn = self.toolbargeo.addAction(QtGui.QIcon('share/new_geo32.png'), _("New Blank Gerber"))
self.newexc_btn = self.toolbargeo.addAction(QtGui.QIcon('share/new_exc32.png'), _("New Blank Excellon"))
@@ -658,7 +683,9 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
self.toolbargeo.addSeparator()
self.delete_btn = self.toolbargeo.addAction(QtGui.QIcon('share/cancel_edit32.png'), _("&Delete"))
- # ## View Toolbar # ##
+ # ########################################################################
+ # ########################## View Toolbar# ###############################
+ # ########################################################################
self.replot_btn = self.toolbarview.addAction(QtGui.QIcon('share/replot32.png'), _("&Replot"))
self.clear_plot_btn = self.toolbarview.addAction(QtGui.QIcon('share/clear_plot32.png'), _("&Clear plot"))
self.zoom_in_btn = self.toolbarview.addAction(QtGui.QIcon('share/zoom_in32.png'), _("Zoom In"))
@@ -667,13 +694,17 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
# self.toolbarview.setVisible(False)
- # ## Shell Toolbar ##
+ # ########################################################################
+ # ########################## Shell Toolbar# ##############################
+ # ########################################################################
self.shell_btn = self.toolbarshell.addAction(QtGui.QIcon('share/shell32.png'), _("&Command Line"))
self.new_script_btn = self.toolbarshell.addAction(QtGui.QIcon('share/script_new24.png'), _('New Script ...'))
self.open_script_btn = self.toolbarshell.addAction(QtGui.QIcon('share/open_script32.png'), _('Open Script ...'))
self.run_script_btn = self.toolbarshell.addAction(QtGui.QIcon('share/script16.png'), _('Run Script ...'))
- # ## Tools Toolbar ##
+ # ########################################################################
+ # ########################## Tools Toolbar# ##############################
+ # ########################################################################
self.dblsided_btn = self.toolbartools.addAction(QtGui.QIcon('share/doubleside32.png'), _("2Sided Tool"))
self.cutout_btn = self.toolbartools.addAction(QtGui.QIcon('share/cut16_bis.png'), _("&Cutout Tool"))
self.ncc_btn = self.toolbartools.addAction(QtGui.QIcon('share/ncc16.png'), _("NCC Tool"))
@@ -692,7 +723,9 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
self.calculators_btn = self.toolbartools.addAction(QtGui.QIcon('share/calculator24.png'), _("Calculators Tool"))
self.transform_btn = self.toolbartools.addAction(QtGui.QIcon('share/transform.png'), _("Transform Tool"))
- # ## Drill Editor Toolbar ###
+ # ########################################################################
+ # ########################## Excellon Editor Toolbar# ####################
+ # ########################################################################
self.select_drill_btn = self.exc_edit_toolbar.addAction(QtGui.QIcon('share/pointer32.png'), _("Select"))
self.add_drill_btn = self.exc_edit_toolbar.addAction(QtGui.QIcon('share/plus16.png'), _('Add Drill Hole'))
self.add_drill_array_btn = self.exc_edit_toolbar.addAction(
@@ -709,7 +742,9 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
self.exc_edit_toolbar.addSeparator()
self.move_drill_btn = self.exc_edit_toolbar.addAction(QtGui.QIcon('share/move32.png'), _("Move Drill"))
- # ## Geometry Editor Toolbar ###
+ # ########################################################################
+ # ########################## Geometry Editor Toolbar# ####################
+ # ########################################################################
self.geo_select_btn = self.geo_edit_toolbar.addAction(QtGui.QIcon('share/pointer32.png'), _("Select"))
self.geo_add_circle_btn = self.geo_edit_toolbar.addAction(QtGui.QIcon('share/circle32.png'), _('Add Circle'))
self.geo_add_arc_btn = self.geo_edit_toolbar.addAction(QtGui.QIcon('share/arc32.png'), _('Add Arc'))
@@ -743,7 +778,9 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
self.geo_edit_toolbar.addSeparator()
self.geo_move_btn = self.geo_edit_toolbar.addAction(QtGui.QIcon('share/move32.png'), _("Move Objects "))
- # ## Gerber Editor Toolbar # ##
+ # ########################################################################
+ # ########################## Gerber Editor Toolbar# ######################
+ # ########################################################################
self.grb_select_btn = self.grb_edit_toolbar.addAction(QtGui.QIcon('share/pointer32.png'), _("Select"))
self.grb_add_pad_btn = self.grb_edit_toolbar.addAction(QtGui.QIcon('share/aperture32.png'), _("Add Pad"))
self.add_pad_ar_btn = self.grb_edit_toolbar.addAction(QtGui.QIcon('share/padarray32.png'), _('Add Pad Array'))
@@ -772,10 +809,11 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
self.grb_edit_toolbar.addSeparator()
self.aperture_move_btn = self.grb_edit_toolbar.addAction(QtGui.QIcon('share/move32.png'), _("Move"))
- # # ## Snap Toolbar # ##
- # Snap GRID toolbar is always active to facilitate usage of measurements done on GRID
- # self.addToolBar(self.snap_toolbar)
+ # ########################################################################
+ # ########################## Snap Toolbar# ###############################
+ # ########################################################################
+ # Snap GRID toolbar is always active to facilitate usage of measurements done on GRID
self.grid_snap_btn = self.snap_toolbar.addAction(QtGui.QIcon('share/grid32.png'), _('Snap to grid'))
self.grid_gap_x_entry = FCEntry2()
self.grid_gap_x_entry.setMaximumWidth(70)
@@ -803,18 +841,13 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
self.snap_max_dist_entry.setToolTip(_("Max. magnet distance"))
self.snap_magnet = self.snap_toolbar.addWidget(self.snap_max_dist_entry)
- # ############# ##
- # ## Notebook # ##
- # ############# ##
-
- # ## Project # ##
- # self.project_tab = QtWidgets.QWidget()
- # self.project_tab.setObjectName("project_tab")
- # # project_tab.setMinimumWidth(250) # Hack
- # self.project_tab_layout = QtWidgets.QVBoxLayout(self.project_tab)
- # self.project_tab_layout.setContentsMargins(2, 2, 2, 2)
- # self.notebook.addTab(self.project_tab,_( "Project"))
+ # ########################################################################
+ # ########################## Notebook # ##################################
+ # ########################################################################
+ # ########################################################################
+ # ########################## PROJECT Tab # ###############################
+ # ########################################################################
self.project_tab = QtWidgets.QWidget()
self.project_tab.setObjectName("project_tab")
@@ -830,7 +863,9 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
self.notebook.addTab(self.project_tab, _("Project"))
self.project_frame.setDisabled(False)
- # ## Selected # ##
+ # ########################################################################
+ # ########################## SELECTED Tab # ##############################
+ # ########################################################################
self.selected_tab = QtWidgets.QWidget()
self.selected_tab.setObjectName("selected_tab")
self.selected_tab_layout = QtWidgets.QVBoxLayout(self.selected_tab)
@@ -839,7 +874,9 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
self.selected_tab_layout.addWidget(self.selected_scroll_area)
self.notebook.addTab(self.selected_tab, _("Selected"))
- # ## Tool # ##
+ # ########################################################################
+ # ########################## TOOL Tab # ##################################
+ # ########################################################################
self.tool_tab = QtWidgets.QWidget()
self.tool_tab.setObjectName("tool_tab")
self.tool_tab_layout = QtWidgets.QVBoxLayout(self.tool_tab)
@@ -848,6 +885,9 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
self.tool_scroll_area = VerticalScrollArea()
self.tool_tab_layout.addWidget(self.tool_scroll_area)
+ # ########################################################################
+ # ########################## RIGHT Widget # ##############################
+ # ########################################################################
self.right_widget = QtWidgets.QWidget()
self.right_widget.setSizePolicy(QtWidgets.QSizePolicy.Ignored, QtWidgets.QSizePolicy.Ignored)
self.splitter.addWidget(self.right_widget)
@@ -855,7 +895,10 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
self.right_lay = QtWidgets.QVBoxLayout()
self.right_lay.setContentsMargins(0, 0, 0, 0)
self.right_widget.setLayout(self.right_lay)
- # self.plot_tab_area = FCTab()
+
+ # ########################################################################
+ # ########################## PLOT AREA Tab # #############################
+ # ########################################################################
self.plot_tab_area = FCDetachableTab2(protect=False, protect_by_name=[_('Plot Area')])
self.plot_tab_area.useOldIndex(True)
@@ -874,9 +917,9 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
# remove the close button from the Plot Area tab (first tab index = 0) as this one will always be ON
self.plot_tab_area.protectTab(0)
- # ##################################### ##
- # ## HERE WE BUILD THE PREF. TAB AREA # ##
- # ##################################### ##
+ # ########################################################################
+ # ########################## PREFERENCES AREA Tab # ######################
+ # ########################################################################
self.preferences_tab = QtWidgets.QWidget()
self.pref_tab_layout = QtWidgets.QVBoxLayout(self.preferences_tab)
self.pref_tab_layout.setContentsMargins(2, 2, 2, 2)
@@ -1014,9 +1057,9 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
"which is the file storing the working default preferences."))
self.pref_tab_bottom_layout_2.addWidget(self.pref_save_button)
- # #################################################
- # ## HERE WE BUILD THE SHORTCUTS LIST. TAB AREA ###
- # #################################################
+ # ########################################################################
+ # #################### SHORTCUT LIST AREA Tab # ##########################
+ # ########################################################################
self.shortcuts_tab = QtWidgets.QWidget()
self.sh_tab_layout = QtWidgets.QVBoxLayout()
self.sh_tab_layout.setContentsMargins(2, 2, 2, 2)
@@ -1750,9 +1793,9 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
self.sh_editor.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
self.sh_hlay.addWidget(self.sh_editor)
- # ########################################################### ##
- # # ## HERE WE BUILD THE CONTEXT MENU FOR RMB CLICK ON CANVAS # ##
- # ########################################################### ##
+ # ########################################################################
+ # ########################## PLOT AREA CONTEXT MENU # ###################
+ # ########################################################################
self.popMenu = FCMenu()
self.popmenu_disable = self.popMenu.addAction(QtGui.QIcon('share/disable32.png'), _("Toggle Visibility"))
@@ -1841,106 +1884,9 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
self.popmenu_move = self.popMenu.addAction(QtGui.QIcon('share/move32.png'), _("Move"))
self.popmenu_properties = self.popMenu.addAction(QtGui.QIcon('share/properties32.png'), _("Properties"))
- # ###################################
- # ## Here we build the CNCJob Tab ###
- # ###################################
- # self.cncjob_tab = QtWidgets.QWidget()
- # self.cncjob_tab_layout = QtWidgets.QGridLayout(self.cncjob_tab)
- # self.cncjob_tab_layout.setContentsMargins(2, 2, 2, 2)
- # self.cncjob_tab.setLayout(self.cncjob_tab_layout)
-
- # self.cncjob_tab = QtWidgets.QWidget()
- #
- # self.c_temp_layout = QtWidgets.QVBoxLayout(self.cncjob_tab)
- # self.c_temp_layout.setContentsMargins(0, 0, 0, 0)
- #
- # self.cncjob_frame = QtWidgets.QFrame()
- # self.cncjob_frame.setContentsMargins(0, 0, 0, 0)
- # self.c_temp_layout.addWidget(self.cncjob_frame)
- #
- # self.cncjob_tab_layout = QtWidgets.QGridLayout(self.cncjob_frame)
- # self.cncjob_tab_layout.setContentsMargins(2, 2, 2, 2)
- # self.cncjob_frame.setLayout(self.cncjob_tab_layout)
- #
- # self.code_editor = FCTextAreaExtended()
- # stylesheet = """
- # QTextEdit { selection-background-color:yellow;
- # selection-color:black;
- # }
- # """
- #
- # self.code_editor.setStyleSheet(stylesheet)
- #
- # self.buttonPreview = QtWidgets.QPushButton(_('Print Preview'))
- # self.buttonPreview.setToolTip(_("Open a OS standard Preview Print window."))
- # self.buttonPrint = QtWidgets.QPushButton(_('Print Code'))
- # self.buttonPrint.setToolTip(_("Open a OS standard Print window."))
- #
- # self.buttonFind = QtWidgets.QPushButton(_('Find in Code'))
- # self.buttonFind.setToolTip(_("Will search and highlight in yellow the string in the Find box."))
- # self.buttonFind.setMinimumWidth(100)
- #
- # self.buttonPreview.setMinimumWidth(100)
- #
- # self.entryFind = FCEntry()
- # self.entryFind.setToolTip(_("Find box. Enter here the strings to be searched in the text."))
- #
- # self.buttonReplace = QtWidgets.QPushButton(_('Replace With'))
- # self.buttonReplace.setToolTip(_("Will replace the string from the Find box with the one in the Replace box."))
- #
- # self.buttonReplace.setMinimumWidth(100)
- #
- # self.entryReplace = FCEntry()
- # self.entryReplace.setToolTip(_("String to replace the one in the Find box throughout the text."))
- #
- # self.sel_all_cb = QtWidgets.QCheckBox(_('All'))
- # self.sel_all_cb.setToolTip(_("When checked it will replace all instances in the 'Find' box\n"
- # "with the text in the 'Replace' box.."))
- #
- # self.button_copy_all = QtWidgets.QPushButton(_('Copy All'))
- # self.button_copy_all.setToolTip(_("Will copy all the text in the Code Editor to the clipboard."))
- #
- # self.button_copy_all.setMinimumWidth(100)
- #
- # self.buttonOpen = QtWidgets.QPushButton(_('Open Code'))
- # self.buttonOpen.setToolTip(_("Will open a text file in the editor."))
- #
- # self.buttonSave = QtWidgets.QPushButton(_('Save Code'))
- # self.buttonSave.setToolTip(_("Will save the text in the editor into a file."))
- #
- # self.buttonRun = QtWidgets.QPushButton(_('Run Code'))
- # self.buttonRun.setToolTip(_("Will run the TCL commands found in the text file, one by one."))
- #
- # self.buttonRun.hide()
- # self.cncjob_tab_layout.addWidget(self.code_editor, 0, 0, 1, 5)
- #
- # cnc_tab_lay_1 = QtWidgets.QHBoxLayout()
- # # cnc_tab_lay_1.setAlignment(QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter)
- # cnc_tab_lay_1.addWidget(self.buttonFind)
- # cnc_tab_lay_1.addWidget(self.entryFind)
- # cnc_tab_lay_1.addWidget(self.buttonReplace)
- # cnc_tab_lay_1.addWidget(self.entryReplace)
- # cnc_tab_lay_1.addWidget(self.sel_all_cb)
- # cnc_tab_lay_1.addWidget(self.button_copy_all)
- # self.cncjob_tab_layout.addLayout(cnc_tab_lay_1, 1, 0, 1, 5)
- #
- # cnc_tab_lay_3 = QtWidgets.QHBoxLayout()
- # cnc_tab_lay_3.setAlignment(QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter)
- # cnc_tab_lay_3.addWidget(self.buttonPreview)
- # cnc_tab_lay_3.addWidget(self.buttonPrint)
- # self.cncjob_tab_layout.addLayout(cnc_tab_lay_3, 2, 0, 1, 1, QtCore.Qt.AlignLeft)
- #
- # cnc_tab_lay_4 = QtWidgets.QHBoxLayout()
- # cnc_tab_lay_4.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter)
- # cnc_tab_lay_4.addWidget(self.buttonOpen)
- # cnc_tab_lay_4.addWidget(self.buttonSave)
- # cnc_tab_lay_4.addWidget(self.buttonRun)
- #
- # self.cncjob_tab_layout.addLayout(cnc_tab_lay_4, 2, 4, 1, 1)
-
- # #################################
- # ## Build InfoBar is done here ###
- # #################################
+ # ########################################################################
+ # ########################## INFO BAR # ##################################
+ # ########################################################################
self.infobar = self.statusBar()
self.fcinfo = FlatCAMInfoBar()
self.infobar.addWidget(self.fcinfo, stretch=1)
@@ -1967,10 +1913,9 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
self.progress_bar.setMaximum(100)
# infobar.addWidget(self.progress_bar)
- # ###########################################################################
- # ####### Set the APP ICON and the WINDOW TITLE and GEOMETRY ################
- # ###########################################################################
-
+ # ########################################################################
+ # ########################## SET GUI Elements # ##########################
+ # ########################################################################
self.app_icon = QtGui.QIcon()
self.app_icon.addFile('share/flatcam_icon16.png', QtCore.QSize(16, 16))
self.app_icon.addFile('share/flatcam_icon24.png', QtCore.QSize(24, 24))
@@ -1991,19 +1936,9 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
self.units = ""
self.setAcceptDrops(True)
- # # restore the Toolbar State from file
- # try:
- # with open(self.app.data_path + '\gui_state.config', 'rb') as stream:
- # self.restoreState(QtCore.QByteArray(stream.read()))
- # log.debug("FlatCAMGUI.__init__() --> UI state restored.")
- # except IOError:
- # log.debug("FlatCAMGUI.__init__() --> UI state not restored. IOError")
- # pass
-
- # ################### ##
- # ## INITIALIZE GUI # ##
- # ################### ##
-
+ # ########################################################################
+ # ########################## Build GUI # #################################
+ # ########################################################################
self.grid_snap_btn.setCheckable(True)
self.corner_snap_btn.setCheckable(True)
self.update_obj_btn.setEnabled(False)
@@ -2103,8 +2038,18 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
self.lock_toolbar(lock=lock_state)
self.lock_action.triggered[bool].connect(self.lock_toolbar)
+ # %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ # %%%%%%%%%%%%%%%%% GUI Building FINISHED %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ # %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
def eventFilter(self, obj, event):
- # filter the ToolTips display based on a Preferences setting
+ """
+ Filter the ToolTips display based on a Preferences setting
+
+ :param obj:
+ :param event: QT event to filter
+ :return:
+ """
if self.general_defaults_form.general_gui_set_group.toggle_tooltips_cb.get_value() is False:
if event.type() == QtCore.QEvent.ToolTip:
return True
@@ -2114,6 +2059,10 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
return False
def populate_toolbars(self):
+ """
+ Will populate the App Toolbars with theie actions
+ :return: None
+ """
# ## File Toolbar # ##
self.file_open_gerber_btn = self.toolbarfile.addAction(QtGui.QIcon('share/flatcam_icon32.png'),
@@ -2314,6 +2263,13 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
self.snap_magnet.setDisabled(True)
def keyPressEvent(self, event):
+ """
+ Key event handler for the entire app.
+ Some of the key events are also treated locally in the FlatCAM editors
+
+ :param event: QT event
+ :return:
+ """
modifiers = QtWidgets.QApplication.keyboardModifiers()
active = self.app.collection.get_active()
selected = self.app.collection.get_selected()
@@ -2568,10 +2524,8 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
self.app.on_deselect_all()
# if in full screen, exit to normal view
- self.showNormal()
- self.app.restore_toolbar_view()
- self.splitter_left.setVisible(True)
- self.app.toggle_fscreen = False
+ if self.app.toggle_fscreen is True:
+ self.app.on_fullscreen(disable=True)
# try to disconnect the slot from Set Origin
try:
@@ -3538,6 +3492,9 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
class FlatCAMActivityView(QtWidgets.QWidget):
+ """
+ This class create and control the activity icon displayed in the App status bar
+ """
def __init__(self, movie="share/active.gif", icon='share/active_static.png', parent=None):
super().__init__(parent=parent)
@@ -3577,6 +3534,9 @@ class FlatCAMActivityView(QtWidgets.QWidget):
class FlatCAMInfoBar(QtWidgets.QWidget):
+ """
+ This class create a place to display the App messages in the Status Bar
+ """
def __init__(self, parent=None):
super(FlatCAMInfoBar, self).__init__(parent=parent)
@@ -3625,6 +3585,9 @@ class FlatCAMInfoBar(QtWidgets.QWidget):
class FlatCAMSystemTray(QtWidgets.QSystemTrayIcon):
+ """
+ This class create the Sys Tray icon for the app
+ """
def __init__(self, app, icon, headless=None, parent=None):
# QtWidgets.QSystemTrayIcon.__init__(self, icon, parent)
diff --git a/flatcamTools/ToolFilm.py b/flatcamTools/ToolFilm.py
index 0fe96c19..d0eec5d5 100644
--- a/flatcamTools/ToolFilm.py
+++ b/flatcamTools/ToolFilm.py
@@ -315,6 +315,7 @@ class Film(FlatCAMTool):
if type_of_film == 'neg':
self.boundary_label.show()
self.boundary_entry.show()
+ self.punch_cb.set_value(False) # required so the self.punch_frame it's hidden also by the signal emitted
self.punch_cb.hide()
else:
self.boundary_label.hide()
diff --git a/flatcamTools/ToolOptimal.py b/flatcamTools/ToolOptimal.py
index 794156dc..34db1ef2 100644
--- a/flatcamTools/ToolOptimal.py
+++ b/flatcamTools/ToolOptimal.py
@@ -59,15 +59,19 @@ class ToolOptimal(FlatCAMTool):
"Gerber object for which to find the minimum distance between copper features."
)
- self.title_res_label = QtWidgets.QLabel('%s' % _("Minimum distance between copper features"))
+ self.title_res_label = QtWidgets.QLabel('%s:' % _("Minimum distance"))
+ self.title_res_label.setToolTip(_("Display minimum distance between copper features."))
self.result_label = QtWidgets.QLabel('%s:' % _("Determined"))
- self.show_res = QtWidgets.QLabel('%s' % '')
+ self.result_entry = FCEntry()
+ self.result_entry.setReadOnly(True)
- self.units_lbl = QtWidgets.QLabel(self.units)
+ self.units_lbl = QtWidgets.QLabel(self.units.lower())
+ self.units_lbl.setDisabled(True)
self.freq_label = QtWidgets.QLabel('%s:' % _("Occurring"))
self.freq_label.setToolTip(_("How many times this minimum is found."))
- self.freq_res = QtWidgets.QLabel('%s' % '')
+ self.freq_entry = FCEntry()
+ self.freq_entry.setReadOnly(True)
self.precision_label = QtWidgets.QLabel('%s:' % _("Precision"))
self.precision_label.setToolTip(_("Number of decimals kept for found distances."))
@@ -76,12 +80,12 @@ class ToolOptimal(FlatCAMTool):
self.precision_spinner.set_range(2, 10)
self.precision_spinner.setWrapping(True)
- self.locations_cb = FCCheckBox(_("Locations"))
- self.locations_cb.setToolTip(_("Locations where minimum distance was found."))
+ self.locations_cb = FCCheckBox(_("Minimum points coordinates"))
+ self.locations_cb.setToolTip(_("Coordinates for points where minimum distance was found."))
self.locations_textb = FCTextArea(parent=self)
self.locations_textb.setReadOnly(True)
- self.locations_textb.setToolTip(_("Locations where minimum distance was found."))
+ self.locations_textb.setToolTip(_("Coordinates for points where minimum distance was found."))
stylesheet = """
QTextEdit { selection-background-color:yellow;
selection-color:black;
@@ -90,10 +94,18 @@ class ToolOptimal(FlatCAMTool):
self.locations_textb.setStyleSheet(stylesheet)
+ self.locate_button = QtWidgets.QPushButton(_("Jump to selected position"))
+ self.locate_button.setToolTip(
+ _("Select a position in the Locations text box and then\n"
+ "click this button.")
+ )
+ self.locate_button.setMinimumWidth(60)
+ self.locate_button.setDisabled(True)
+
hlay = QtWidgets.QHBoxLayout()
- hlay.addWidget(self.show_res)
- hlay.addStretch()
+ hlay.addWidget(self.result_entry)
+ # hlay.addStretch()
hlay.addWidget(self.units_lbl)
form_lay.addRow(QtWidgets.QLabel(""))
@@ -103,11 +115,14 @@ class ToolOptimal(FlatCAMTool):
form_lay.addRow(QtWidgets.QLabel(""))
form_lay.addRow(self.title_res_label)
form_lay.addRow(self.result_label, hlay)
- form_lay.addRow(self.freq_label, self.freq_res)
+ form_lay.addRow(self.freq_label, self.freq_entry)
form_lay.addRow(self.locations_cb)
form_lay.addRow(self.locations_textb)
+ form_lay.addRow(self.locate_button)
- self.calculate_button = QtWidgets.QPushButton(_("Find Distance"))
+ self.loc_ois = OptionalHideInputSection(self.locations_cb, [self.locations_textb, self.locate_button])
+
+ self.calculate_button = QtWidgets.QPushButton(_("Find Minimum"))
self.calculate_button.setToolTip(
_("Calculate the minimum distance between copper features,\n"
"this will allow the determination of the right tool to\n"
@@ -116,45 +131,17 @@ class ToolOptimal(FlatCAMTool):
self.calculate_button.setMinimumWidth(60)
self.layout.addWidget(self.calculate_button)
- self.locate_button = QtWidgets.QPushButton(_("Locate position"))
- self.locate_button.setToolTip(
- _("Select a position in the Locations text box and then\n"
- "click this button.")
- )
- self.locate_button.setMinimumWidth(60)
- self.layout.addWidget(self.locate_button)
- self.locate_button.setDisabled(True)
-
self.decimals = 4
self.selected_text = ''
- # self.dt_label = QtWidgets.QLabel("%s:" % _('Alignment Drill Diameter'))
- # self.dt_label.setToolTip(
- # _("Diameter of the drill for the "
- # "alignment holes.")
- # )
- # self.layout.addWidget(self.dt_label)
- #
- # hlay = QtWidgets.QHBoxLayout()
- # self.layout.addLayout(hlay)
- #
- # self.drill_dia = FCEntry()
- # self.dd_label = QtWidgets.QLabel('%s:' % _("Drill dia"))
- # self.dd_label.setToolTip(
- # _("Diameter of the drill for the "
- # "alignment holes.")
- # )
- # hlay.addWidget(self.dd_label)
- # hlay.addWidget(self.drill_dia)
+ # ## Signals
self.calculate_button.clicked.connect(self.find_minimum_distance)
self.locate_button.clicked.connect(self.on_locate_position)
self.update_text.connect(self.on_update_text)
self.locations_textb.cursorPositionChanged.connect(self.on_textbox_clicked)
- self.locations_cb.stateChanged.connect(self.on_location_cb)
- self.layout.addStretch()
- # ## Signals
+ self.layout.addStretch()
def install(self, icon=None, separator=None, **kwargs):
FlatCAMTool.install(self, icon, separator, shortcut='ALT+O', **kwargs)
@@ -162,7 +149,9 @@ class ToolOptimal(FlatCAMTool):
def run(self, toggle=True):
self.app.report_usage("ToolOptimal()")
- self.show_res.setText('')
+ self.result_entry.set_value(0.0)
+ self.freq_entry.set_value('0')
+
if toggle:
# if the splitter is hidden, display it, else hide it but only if the current widget is the same
if self.app.ui.splitter.sizes()[0] == 0:
@@ -202,8 +191,8 @@ class ToolOptimal(FlatCAMTool):
self.locations_textb.setVisible(False)
self.locate_button.setVisible(False)
- self.show_res.setText('')
- self.freq_res.setText('')
+ self.result_entry.set_value(0.0)
+ self.freq_entry.set_value('0')
self.reset_fields()
def find_minimum_distance(self):
@@ -296,11 +285,11 @@ class ToolOptimal(FlatCAMTool):
min_list = list(min_dict.keys())
min_dist = min(min_list)
min_dist_string = '%.*f' % (self.decimals, float(min_dist))
- self.show_res.setText(min_dist_string)
+ self.result_entry.set_Value(min_dist_string)
freq = len(min_dict[min_dist])
freq = '%d' % int(freq)
- self.freq_res.setText(freq)
+ self.freq_entry.set_value(freq)
self.update_text.emit(min_dict[min_dist])
@@ -350,14 +339,6 @@ class ToolOptimal(FlatCAMTool):
self.selected_text = cursor.selectedText()
- def on_location_cb(self, state):
- if state:
- self.locations_textb.setVisible(True)
- self.locate_button.setVisible(True)
- else:
- self.locations_textb.setVisible(False)
- self.locate_button.setVisible(False)
-
def reset_fields(self):
self.gerber_object_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex()))
self.gerber_object_combo.setCurrentIndex(0)