- in Panelize Plugin remade the GUI

This commit is contained in:
Marius Stanciu
2021-09-04 23:53:38 +03:00
committed by Marius
parent 56f1006689
commit 32a7274fdc
2 changed files with 106 additions and 69 deletions

View File

@@ -17,6 +17,7 @@ CHANGELOG for FlatCAM beta
- in 2-sided Plugin remade the GUI - in 2-sided Plugin remade the GUI
- in Drilling Plugin remade the GUI - in Drilling Plugin remade the GUI
- in Milling Plugin remade the GUI - in Milling Plugin remade the GUI
- in Panelize Plugin remade the GUI
3.09.2021 3.09.2021

View File

@@ -9,7 +9,7 @@ from PyQt6 import QtWidgets, QtGui, QtCore
from appTool import AppTool from appTool import AppTool
from appGUI.GUIElements import FCSpinner, FCDoubleSpinner, RadioSet, FCCheckBox, OptionalInputSection, FCComboBox, \ from appGUI.GUIElements import FCSpinner, FCDoubleSpinner, RadioSet, FCCheckBox, OptionalInputSection, FCComboBox, \
FCButton, FCLabel, VerticalScrollArea, FCGridLayout FCButton, FCLabel, VerticalScrollArea, FCGridLayout, FCFrame
from camlib import grace from camlib import grace
from copy import deepcopy from copy import deepcopy
@@ -282,17 +282,9 @@ class Panelize(AppTool):
} }
""") """)
# Add Tool section # Parameters section
self.ui.panel_type_label.hide() self.ui.param_label.hide()
self.ui.panel_type_radio.hide() self.ui.gp_frame.hide()
self.ui.optimization_cb.hide()
self.ui.constrain_cb.hide()
self.ui.x_width_lbl.hide()
self.ui.x_width_entry.hide()
self.ui.y_height_lbl.hide()
self.ui.y_height_entry.hide()
self.ui.separator_line.hide()
else: else:
self.ui.level.setText('%s' % _('Advanced')) self.ui.level.setText('%s' % _('Advanced'))
self.ui.level.setStyleSheet(""" self.ui.level.setStyleSheet("""
@@ -302,17 +294,9 @@ class Panelize(AppTool):
} }
""") """)
# Add Tool section # Parameters section
self.ui.panel_type_label.show() self.ui.param_label.show()
self.ui.panel_type_radio.show() self.ui.gp_frame.show()
self.ui.optimization_cb.show()
self.ui.constrain_cb.show()
self.ui.x_width_lbl.show()
self.ui.x_width_entry.show()
self.ui.y_height_lbl.show()
self.ui.y_height_entry.show()
self.ui.separator_line.show()
def on_panelize(self): def on_panelize(self):
name = self.ui.object_combo.currentText() name = self.ui.object_combo.currentText()
@@ -1103,8 +1087,15 @@ class PanelizeUI:
self.decimals = self.app.decimals self.decimals = self.app.decimals
self.layout = layout self.layout = layout
self.tools_frame = QtWidgets.QFrame()
self.tools_frame.setContentsMargins(0, 0, 0, 0)
self.layout.addWidget(self.tools_frame)
self.tools_box = QtWidgets.QVBoxLayout()
self.tools_box.setContentsMargins(0, 0, 0, 0)
self.tools_frame.setLayout(self.tools_box)
self.title_box = QtWidgets.QHBoxLayout() self.title_box = QtWidgets.QHBoxLayout()
self.layout.addLayout(self.title_box) self.tools_box.addLayout(self.title_box)
# ## Title # ## Title
title_label = FCLabel("%s" % self.pluginName) title_label = FCLabel("%s" % self.pluginName)
@@ -1129,27 +1120,35 @@ class PanelizeUI:
self.level.setCheckable(True) self.level.setCheckable(True)
self.title_box.addWidget(self.level) self.title_box.addWidget(self.level)
grid0 = FCGridLayout(v_spacing=5, h_spacing=3) # #############################################################################################################
grid0.setColumnStretch(0, 0) # Source Object Frame
grid0.setColumnStretch(1, 1) # #############################################################################################################
self.layout.addLayout(grid0) self.object_label = FCLabel('<span style="color:darkorange;"><b>%s</b></span>' % _("Source Object"))
self.object_label = FCLabel('<b>%s:</b>' % _("Source Object"))
self.object_label.setToolTip( self.object_label.setToolTip(
_("Specify the type of object to be panelized\n" _("Specify the type of object to be panelized\n"
"It can be of type: Gerber, Excellon or Geometry.\n" "It can be of type: Gerber, Excellon or Geometry.\n"
"The selection here decide the type of objects that will be\n" "The selection here decide the type of objects that will be\n"
"in the Object combobox.") "in the Object combobox.")
) )
self.tools_box.addWidget(self.object_label)
grid0.addWidget(self.object_label, 0, 0, 1, 2) obj_frame = FCFrame()
obj_frame.setFrameStyle(QtWidgets.QFrame.Shape.StyledPanel | QtWidgets.QFrame.Shadow.Plain)
# units_frame.setContentsMargins(0, 0, 0, 0)
obj_frame.setStyleSheet(".FCFrame{border: 1px solid gray; border-radius: 5px;}")
self.tools_box.addWidget(obj_frame)
# Grid Layout
grid0 = FCGridLayout(v_spacing=5, h_spacing=3)
grid0.setColumnStretch(0, 0)
grid0.setColumnStretch(1, 1)
obj_frame.setLayout(grid0)
# Type of object to be panelized # Type of object to be panelized
self.type_object_label = FCLabel('%s:' % _("Object Type")) self.type_object_label = FCLabel('%s:' % _("Target"))
self.type_obj_combo = FCComboBox() self.type_obj_combo = FCComboBox()
self.type_obj_combo.addItems([_("Gerber"), _("Excellon"), _("Geometry")]) self.type_obj_combo.addItems([_("Gerber"), _("Excellon"), _("Geometry")])
self.type_obj_combo.setItemIcon(0, QtGui.QIcon(self.app.resource_location + "/flatcam_icon16.png")) self.type_obj_combo.setItemIcon(0, QtGui.QIcon(self.app.resource_location + "/flatcam_icon16.png"))
self.type_obj_combo.setItemIcon(1, QtGui.QIcon(self.app.resource_location + "/drill16.png")) self.type_obj_combo.setItemIcon(1, QtGui.QIcon(self.app.resource_location + "/drill16.png"))
self.type_obj_combo.setItemIcon(2, QtGui.QIcon(self.app.resource_location + "/geometry16.png")) self.type_obj_combo.setItemIcon(2, QtGui.QIcon(self.app.resource_location + "/geometry16.png"))
@@ -1170,8 +1169,11 @@ class PanelizeUI:
grid0.addWidget(self.object_combo, 4, 0, 1, 2) grid0.addWidget(self.object_combo, 4, 0, 1, 2)
# #############################################################################################################
# Reference Object Frame
# #############################################################################################################
# Type of box Panel object # Type of box Panel object
self.box_label = FCLabel("<b>%s:</b>" % _("Panelization Reference")) self.box_label = FCLabel('<span style="color:green;"><b>%s</b></span>' % _("Panelization Reference"))
self.box_label.setToolTip( self.box_label.setToolTip(
_("Choose the reference for panelization:\n" _("Choose the reference for panelization:\n"
"- Object = the bounding box of a different object\n" "- Object = the bounding box of a different object\n"
@@ -1182,11 +1184,23 @@ class PanelizeUI:
"to this reference object therefore maintaining the panelized\n" "to this reference object therefore maintaining the panelized\n"
"objects in sync.") "objects in sync.")
) )
grid0.addWidget(self.box_label, 6, 0, 1, 2) self.tools_box.addWidget(self.box_label)
pr_frame = FCFrame()
pr_frame.setFrameStyle(QtWidgets.QFrame.Shape.StyledPanel | QtWidgets.QFrame.Shadow.Plain)
# units_frame.setContentsMargins(0, 0, 0, 0)
pr_frame.setStyleSheet(".FCFrame{border: 1px solid gray; border-radius: 5px;}")
self.tools_box.addWidget(pr_frame)
# Grid Layout
grid1 = FCGridLayout(v_spacing=5, h_spacing=3)
grid1.setColumnStretch(0, 0)
grid1.setColumnStretch(1, 1)
pr_frame.setLayout(grid1)
self.reference_radio = RadioSet([{'label': _('Object'), 'value': 'object'}, self.reference_radio = RadioSet([{'label': _('Object'), 'value': 'object'},
{'label': _('Bounding Box'), 'value': 'bbox'}]) {'label': _('Bounding Box'), 'value': 'bbox'}])
grid0.addWidget(self.reference_radio, 8, 0, 1, 2) grid1.addWidget(self.reference_radio, 0, 0, 1, 2)
# Type of Box Object to be used as an envelope for panelization # Type of Box Object to be used as an envelope for panelization
self.type_box_combo = FCComboBox() self.type_box_combo = FCComboBox()
@@ -1204,8 +1218,8 @@ class PanelizeUI:
"The selection here decide the type of objects that will be\n" "The selection here decide the type of objects that will be\n"
"in the Box Object combobox.") "in the Box Object combobox.")
) )
grid0.addWidget(self.type_box_combo_label, 10, 0) grid1.addWidget(self.type_box_combo_label, 2, 0)
grid0.addWidget(self.type_box_combo, 10, 1) grid1.addWidget(self.type_box_combo, 2, 1)
# Box # Box
self.box_combo = FCComboBox() self.box_combo = FCComboBox()
@@ -1217,14 +1231,12 @@ class PanelizeUI:
_("The actual object that is used as container for the\n " _("The actual object that is used as container for the\n "
"selected object that is to be panelized.") "selected object that is to be panelized.")
) )
grid0.addWidget(self.box_combo, 12, 0, 1, 2) grid1.addWidget(self.box_combo, 4, 0, 1, 2)
separator_line = QtWidgets.QFrame() # #############################################################################################################
separator_line.setFrameShape(QtWidgets.QFrame.Shape.HLine) # Panel Data Frame
separator_line.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken) # #############################################################################################################
grid0.addWidget(separator_line, 14, 0, 1, 2) panel_data_label = FCLabel('<span style="color:red;"><b>%s</b></span>' % _("Panel Data"))
panel_data_label = FCLabel("<b>%s:</b>" % _("Panel Data"))
panel_data_label.setToolTip( panel_data_label.setToolTip(
_("This informations will shape the resulting panel.\n" _("This informations will shape the resulting panel.\n"
"The number of rows and columns will set how many\n" "The number of rows and columns will set how many\n"
@@ -1233,7 +1245,18 @@ class PanelizeUI:
"The spacings will set the distance between any two\n" "The spacings will set the distance between any two\n"
"elements of the panel array.") "elements of the panel array.")
) )
grid0.addWidget(panel_data_label, 16, 0, 1, 2) self.tools_box.addWidget(panel_data_label)
pd_frame = FCFrame()
pd_frame.setFrameStyle(QtWidgets.QFrame.Shape.StyledPanel | QtWidgets.QFrame.Shadow.Plain)
# units_frame.setContentsMargins(0, 0, 0, 0)
pd_frame.setStyleSheet(".FCFrame{border: 1px solid gray; border-radius: 5px;}")
self.tools_box.addWidget(pd_frame)
grid2 = FCGridLayout(v_spacing=5, h_spacing=3)
grid2.setColumnStretch(0, 0)
grid2.setColumnStretch(1, 1)
pd_frame.setLayout(grid2)
# Spacing Columns # Spacing Columns
self.spacing_columns = FCDoubleSpinner(callback=self.confirmation_message) self.spacing_columns = FCDoubleSpinner(callback=self.confirmation_message)
@@ -1245,8 +1268,8 @@ class PanelizeUI:
_("Spacing between columns of the desired panel.\n" _("Spacing between columns of the desired panel.\n"
"In current units.") "In current units.")
) )
grid0.addWidget(self.spacing_columns_label, 18, 0) grid2.addWidget(self.spacing_columns_label, 0, 0)
grid0.addWidget(self.spacing_columns, 18, 1) grid2.addWidget(self.spacing_columns, 0, 1)
# Spacing Rows # Spacing Rows
self.spacing_rows = FCDoubleSpinner(callback=self.confirmation_message) self.spacing_rows = FCDoubleSpinner(callback=self.confirmation_message)
@@ -1258,8 +1281,8 @@ class PanelizeUI:
_("Spacing between rows of the desired panel.\n" _("Spacing between rows of the desired panel.\n"
"In current units.") "In current units.")
) )
grid0.addWidget(self.spacing_rows_label, 20, 0) grid2.addWidget(self.spacing_rows_label, 2, 0)
grid0.addWidget(self.spacing_rows, 20, 1) grid2.addWidget(self.spacing_rows, 2, 1)
# Columns # Columns
self.columns = FCSpinner(callback=self.confirmation_message_int) self.columns = FCSpinner(callback=self.confirmation_message_int)
@@ -1269,8 +1292,8 @@ class PanelizeUI:
self.columns_label.setToolTip( self.columns_label.setToolTip(
_("Number of columns of the desired panel") _("Number of columns of the desired panel")
) )
grid0.addWidget(self.columns_label, 22, 0) grid2.addWidget(self.columns_label, 4, 0)
grid0.addWidget(self.columns, 22, 1) grid2.addWidget(self.columns, 4, 1)
# Rows # Rows
self.rows = FCSpinner(callback=self.confirmation_message_int) self.rows = FCSpinner(callback=self.confirmation_message_int)
@@ -1280,13 +1303,26 @@ class PanelizeUI:
self.rows_label.setToolTip( self.rows_label.setToolTip(
_("Number of rows of the desired panel") _("Number of rows of the desired panel")
) )
grid0.addWidget(self.rows_label, 24, 0) grid2.addWidget(self.rows_label, 6, 0)
grid0.addWidget(self.rows, 24, 1) grid2.addWidget(self.rows, 6, 1)
separator_line = QtWidgets.QFrame() # #############################################################################################################
separator_line.setFrameShape(QtWidgets.QFrame.Shape.HLine) # COMMON PARAMETERS Frame
separator_line.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken) # #############################################################################################################
grid0.addWidget(separator_line, 26, 0, 1, 2) self.param_label = FCLabel('<span style="color:blue;"><b>%s</b></span>' % _("Parameters"))
self.param_label.setToolTip(_("Parameters that are common for all tools."))
self.tools_box.addWidget(self.param_label)
self.gp_frame = FCFrame()
self.gp_frame.setFrameStyle(QtWidgets.QFrame.Shape.StyledPanel | QtWidgets.QFrame.Shadow.Plain)
# units_frame.setContentsMargins(0, 0, 0, 0)
self.gp_frame.setStyleSheet(".FCFrame{border: 1px solid gray; border-radius: 5px;}")
self.tools_box.addWidget(self.gp_frame)
grid3 = FCGridLayout(v_spacing=5, h_spacing=3)
grid3.setColumnStretch(0, 0)
grid3.setColumnStretch(1, 1)
self.gp_frame.setLayout(grid3)
# Type of resulting Panel object # Type of resulting Panel object
self.panel_type_radio = RadioSet([{'label': _('Gerber'), 'value': 'gerber'}, self.panel_type_radio = RadioSet([{'label': _('Gerber'), 'value': 'gerber'},
@@ -1297,8 +1333,8 @@ class PanelizeUI:
"- Gerber\n" "- Gerber\n"
"- Geometry") "- Geometry")
) )
grid0.addWidget(self.panel_type_label, 28, 0) grid3.addWidget(self.panel_type_label, 0, 0)
grid0.addWidget(self.panel_type_radio, 28, 1) grid3.addWidget(self.panel_type_radio, 0, 1)
# Path optimization # Path optimization
self.optimization_cb = FCCheckBox('%s' % _("Path Optimization")) self.optimization_cb = FCCheckBox('%s' % _("Path Optimization"))
@@ -1308,7 +1344,7 @@ class PanelizeUI:
"any two overlapping Line elements in the panel\n" "any two overlapping Line elements in the panel\n"
"and will remove the overlapping parts, keeping only one of them.") "and will remove the overlapping parts, keeping only one of them.")
) )
grid0.addWidget(self.optimization_cb, 30, 0, 1, 2) grid3.addWidget(self.optimization_cb, 2, 0, 1, 2)
# Constrains # Constrains
self.constrain_cb = FCCheckBox('%s:' % _("Constrain panel within")) self.constrain_cb = FCCheckBox('%s:' % _("Constrain panel within"))
@@ -1319,7 +1355,7 @@ class PanelizeUI:
"the final panel will have as many columns and rows as\n" "the final panel will have as many columns and rows as\n"
"they fit completely within selected area.") "they fit completely within selected area.")
) )
grid0.addWidget(self.constrain_cb, 32, 0, 1, 2) grid3.addWidget(self.constrain_cb, 4, 0, 1, 2)
self.x_width_entry = FCDoubleSpinner(callback=self.confirmation_message) self.x_width_entry = FCDoubleSpinner(callback=self.confirmation_message)
self.x_width_entry.set_precision(self.decimals) self.x_width_entry.set_precision(self.decimals)
@@ -1330,8 +1366,8 @@ class PanelizeUI:
_("The width (DX) within which the panel must fit.\n" _("The width (DX) within which the panel must fit.\n"
"In current units.") "In current units.")
) )
grid0.addWidget(self.x_width_lbl, 34, 0) grid3.addWidget(self.x_width_lbl, 6, 0)
grid0.addWidget(self.x_width_entry, 34, 1) grid3.addWidget(self.x_width_entry, 6, 1)
self.y_height_entry = FCDoubleSpinner(callback=self.confirmation_message) self.y_height_entry = FCDoubleSpinner(callback=self.confirmation_message)
self.y_height_entry.set_range(0, 10000) self.y_height_entry.set_range(0, 10000)
@@ -1342,8 +1378,8 @@ class PanelizeUI:
_("The height (DY)within which the panel must fit.\n" _("The height (DY)within which the panel must fit.\n"
"In current units.") "In current units.")
) )
grid0.addWidget(self.y_height_lbl, 36, 0) grid3.addWidget(self.y_height_lbl, 8, 0)
grid0.addWidget(self.y_height_entry, 36, 1) grid3.addWidget(self.y_height_entry, 8, 1)
self.constrain_sel = OptionalInputSection( self.constrain_sel = OptionalInputSection(
self.constrain_cb, [self.x_width_lbl, self.x_width_entry, self.y_height_lbl, self.y_height_entry]) self.constrain_cb, [self.x_width_lbl, self.x_width_entry, self.y_height_lbl, self.y_height_entry])
@@ -1351,7 +1387,7 @@ class PanelizeUI:
self.separator_line = QtWidgets.QFrame() self.separator_line = QtWidgets.QFrame()
self.separator_line.setFrameShape(QtWidgets.QFrame.Shape.HLine) self.separator_line.setFrameShape(QtWidgets.QFrame.Shape.HLine)
self.separator_line.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken) self.separator_line.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken)
grid0.addWidget(self.separator_line, 38, 0, 1, 2) grid3.addWidget(self.separator_line, 10, 0, 1, 2)
# Buttons # Buttons
self.panelize_object_button = FCButton(_("Panelize Object")) self.panelize_object_button = FCButton(_("Panelize Object"))
@@ -1367,7 +1403,7 @@ class PanelizeUI:
font-weight: bold; font-weight: bold;
} }
""") """)
grid0.addWidget(self.panelize_object_button, 40, 0, 1, 2) self.tools_box.addWidget(self.panelize_object_button)
self.layout.addStretch(1) self.layout.addStretch(1)
@@ -1383,7 +1419,7 @@ class PanelizeUI:
font-weight: bold; font-weight: bold;
} }
""") """)
self.layout.addWidget(self.reset_button) self.tools_box.addWidget(self.reset_button)
# #################################### FINSIHED GUI ########################### # #################################### FINSIHED GUI ###########################
# ############################################################################# # #############################################################################