diff --git a/CHANGELOG.md b/CHANGELOG.md index 7c72840d..d66827cf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,7 +10,9 @@ CHANGELOG for FlatCAM beta 5.09.2021 - in Punch Gerber Plugin remade the GUI -- some minor fixes in some of the Plugins +- some minor fixes in some Plugins +- in QRCode Plugin remade the GUI +- added some new properties to the FCCheckBox GUI element 4.09.2021 diff --git a/appGUI/GUIElements.py b/appGUI/GUIElements.py index fa4d9c85..08f66a6c 100644 --- a/appGUI/GUIElements.py +++ b/appGUI/GUIElements.py @@ -1602,6 +1602,48 @@ class FCCheckBox(QtWidgets.QCheckBox): def toggle(self): self.set_value(not self.get_value()) + def set_text(self, text): + self.setText(text) + + def set_color(self, color): + """ + Set the Checbox text color + + :param color: + :type color: QtCore.Qt.GlobalColor | QtGui.QColor + :return: + :rtype: + """ + palette = self.palette() + palette.setColor(QtGui.QPalette.ColorGroup.Active, QtGui.QPalette.ColorRole.WindowText, color) + self.setPalette(palette) + + def set_font(self, family=None, size=None, bold=False, italic=False): + """ + Set the font properties for the checkbox + + :param family: Font Family + :type family: str + :param size: Font size + :type size: float + :param bold: If the font is bold + :type bold: bool + :param italic: If the font is italic + :type italic: bool + :return: None + :rtype: None + """ + font = QtGui.QFont() + if family: + font.setFamily(family) + if size: + font.setPointSizeF(size) + if bold: + font.setBold(bold) + if italic: + font.setItalic(italic) + self.setFont(font) + class FCTextArea(QtWidgets.QPlainTextEdit): def __init__(self, parent=None): diff --git a/appPlugins/ToolQRCode.py b/appPlugins/ToolQRCode.py index 23c0ce82..d8c718ac 100644 --- a/appPlugins/ToolQRCode.py +++ b/appPlugins/ToolQRCode.py @@ -10,7 +10,7 @@ from PyQt6.QtCore import Qt from appTool import AppTool from appGUI.GUIElements import RadioSet, FCTextArea, FCSpinner, FCEntry, FCCheckBox, FCComboBox, FCFileSaveDialog, \ - VerticalScrollArea, FCGridLayout, FCLabel + VerticalScrollArea, FCGridLayout, FCLabel, FCFrame from appParsers.ParseSVG import * from shapely.geometry.base import * @@ -135,7 +135,6 @@ class QRCode(AppTool): def connect_signals_at_init(self): self.ui.level.toggled.connect(self.on_level_changed) self.ui.qrcode_button.clicked.connect(self.execute) - self.ui.export_cb.stateChanged.connect(self.on_export_frame) self.ui.export_png_button.clicked.connect(self.export_png_file) self.ui.export_svg_button.clicked.connect(self.export_svg_file) @@ -208,8 +207,11 @@ class QRCode(AppTool): } """) - self.ui.export_cb.hide() + self.ui.export_label.hide() self.ui.export_frame.hide() + self.ui.export_svg_button.hide() + self.ui.export_png_button.hide() + self.ui.qrcode_button.show() else: self.ui.level.setText('%s' % _('Advanced')) self.ui.level.setStyleSheet(""" @@ -219,13 +221,11 @@ class QRCode(AppTool): } """) - self.ui.export_cb.show() - if self.ui.export_cb.get_value(): - self.ui.export_frame.show() - - def on_export_frame(self, state): - self.ui.export_frame.setVisible(state) - self.ui.qrcode_button.setVisible(not state) + self.ui.export_label.show() + self.ui.export_frame.show() + self.ui.export_svg_button.show() + self.ui.export_png_button.show() + self.ui.qrcode_button.hide() def execute(self): text_data = self.ui.text_data.get_value() @@ -735,6 +735,16 @@ class QRcodeUI: self.title_box = QtWidgets.QHBoxLayout() self.layout.addLayout(self.title_box) + 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.tools_box.addLayout(self.title_box) + # ## Title title_label = FCLabel("%s" % self.pluginName) title_label.setStyleSheet(""" @@ -760,9 +770,9 @@ class QRcodeUI: # ## Grid Layout i_grid_lay = FCGridLayout(v_spacing=5, h_spacing=3) - self.layout.addLayout(i_grid_lay) i_grid_lay.setColumnStretch(0, 0) i_grid_lay.setColumnStretch(1, 1) + self.tools_box.addLayout(i_grid_lay) self.grb_object_combo = FCComboBox() self.grb_object_combo.setModel(self.app.collection) @@ -770,7 +780,7 @@ class QRcodeUI: self.grb_object_combo.is_last = True self.grb_object_combo.obj_type = "Gerber" - self.grbobj_label = FCLabel("%s:" % _("GERBER")) + self.grbobj_label = FCLabel('%s' % _("Source Object")) self.grbobj_label.setToolTip( _("Gerber Object to which the QRCode will be added.") ) @@ -778,39 +788,60 @@ class QRcodeUI: i_grid_lay.addWidget(self.grbobj_label, 0, 0) i_grid_lay.addWidget(self.grb_object_combo, 1, 0, 1, 2) - separator_line = QtWidgets.QFrame() - separator_line.setFrameShape(QtWidgets.QFrame.Shape.HLine) - separator_line.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken) - i_grid_lay.addWidget(separator_line, 2, 0, 1, 2) - + # ############################################################################################################# + # QrCode Text Frame + # ############################################################################################################# # Text box - self.text_label = FCLabel('%s:' % _("QRCode Data")) + self.text_label = FCLabel('%s' % _("QRCode Data")) self.text_label.setToolTip( _("QRCode Data. Alphanumeric text to be encoded in the QRCode.") ) + self.tools_box.addWidget(self.text_label) + + tq_frame = FCFrame() + tq_frame.setFrameStyle(QtWidgets.QFrame.Shape.StyledPanel | QtWidgets.QFrame.Shadow.Plain) + # tq_frame.setContentsMargins(0, 0, 0, 0) + tq_frame.setStyleSheet(".FCFrame{border: 1px solid gray; border-radius: 5px;}") + self.tools_box.addWidget(tq_frame) + + # Grid Layout + grid0 = FCGridLayout(v_spacing=5, h_spacing=3) + grid0.setColumnStretch(0, 0) + grid0.setColumnStretch(1, 1) + tq_frame.setLayout(grid0) + self.text_data = FCTextArea() + self.text_data.setFrameStyle(QtWidgets.QFrame.Shape.NoFrame) self.text_data.setPlaceholderText( _("Add here the text to be included in the QRCode...") ) - i_grid_lay.addWidget(self.text_label, 5, 0) - i_grid_lay.addWidget(self.text_data, 6, 0, 1, 2) + grid0.addWidget(self.text_data, 0, 0, 1, 2) - separator_line = QtWidgets.QFrame() - separator_line.setFrameShape(QtWidgets.QFrame.Shape.HLine) - separator_line.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken) - i_grid_lay.addWidget(separator_line, 7, 0, 1, 2) + # separator_line = QtWidgets.QFrame() + # separator_line.setFrameShape(QtWidgets.QFrame.Shape.HLine) + # separator_line.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken) + # i_grid_lay.addWidget(separator_line, 7, 0, 1, 2) - # ## Grid Layout - grid_lay = FCGridLayout(v_spacing=5, h_spacing=3) - self.layout.addLayout(grid_lay) - grid_lay.setColumnStretch(0, 0) - grid_lay.setColumnStretch(1, 1) - - self.qrcode_label = FCLabel('%s' % _('Parameters')) + # ############################################################################################################# + # Parameters Frame + # ############################################################################################################# + self.qrcode_label = FCLabel('%s' % _('Parameters')) self.qrcode_label.setToolTip( _("The parameters used to shape the QRCode.") ) - grid_lay.addWidget(self.qrcode_label, 0, 0, 1, 2) + self.tools_box.addWidget(self.qrcode_label) + + p_frame = FCFrame() + p_frame.setFrameStyle(QtWidgets.QFrame.Shape.StyledPanel | QtWidgets.QFrame.Shadow.Plain) + # p_frame.setContentsMargins(0, 0, 0, 0) + p_frame.setStyleSheet(".FCFrame{border: 1px solid gray; border-radius: 5px;}") + self.tools_box.addWidget(p_frame) + + # ## Grid Layout + grid1 = FCGridLayout(v_spacing=5, h_spacing=3) + grid1.setColumnStretch(0, 0) + grid1.setColumnStretch(1, 1) + p_frame.setLayout(grid1) # VERSION # self.version_label = FCLabel('%s:' % _("Version")) @@ -822,8 +853,8 @@ class QRcodeUI: self.version_entry.set_range(1, 40) self.version_entry.setWrapping(True) - grid_lay.addWidget(self.version_label, 2, 0) - grid_lay.addWidget(self.version_entry, 2, 1) + grid1.addWidget(self.version_label, 2, 0) + grid1.addWidget(self.version_entry, 2, 1) # ERROR CORRECTION # self.error_label = FCLabel('%s:' % _("Error correction")) @@ -845,8 +876,8 @@ class QRcodeUI: "Q = maximum 25%% errors can be corrected\n" "H = maximum 30%% errors can be corrected.") ) - grid_lay.addWidget(self.error_label, 4, 0) - grid_lay.addWidget(self.error_radio, 4, 1) + grid1.addWidget(self.error_label, 4, 0) + grid1.addWidget(self.error_radio, 4, 1) # BOX SIZE # self.bsize_label = FCLabel('%s:' % _("Box Size")) @@ -858,8 +889,8 @@ class QRcodeUI: self.bsize_entry.set_range(1, 9999) self.bsize_entry.setWrapping(True) - grid_lay.addWidget(self.bsize_label, 6, 0) - grid_lay.addWidget(self.bsize_entry, 6, 1) + grid1.addWidget(self.bsize_label, 6, 0) + grid1.addWidget(self.bsize_entry, 6, 1) # BORDER SIZE # self.border_size_label = FCLabel('%s:' % _("Border Size")) @@ -871,8 +902,8 @@ class QRcodeUI: self.border_size_entry.set_range(1, 9999) self.border_size_entry.setWrapping(True) - grid_lay.addWidget(self.border_size_label, 8, 0) - grid_lay.addWidget(self.border_size_entry, 8, 1) + grid1.addWidget(self.border_size_label, 8, 0) + grid1.addWidget(self.border_size_entry, 8, 1) # POLARITY CHOICE # self.pol_label = FCLabel('%s:' % _("Polarity")) @@ -889,8 +920,8 @@ class QRcodeUI: "be added as positive. If it is added to a Copper Gerber\n" "file then perhaps the QRCode can be added as negative.") ) - grid_lay.addWidget(self.pol_label, 10, 0) - grid_lay.addWidget(self.pol_radio, 10, 1) + grid1.addWidget(self.pol_label, 10, 0) + grid1.addWidget(self.pol_radio, 10, 1) # BOUNDING BOX TYPE # self.bb_label = FCLabel('%s:' % _("Bounding Box")) @@ -904,31 +935,30 @@ class QRcodeUI: _("The bounding box, meaning the empty space that surrounds\n" "the QRCode geometry, can have a rounded or a square shape.") ) - grid_lay.addWidget(self.bb_label, 12, 0) - grid_lay.addWidget(self.bb_radio, 12, 1) - - self.separator_line_2 = QtWidgets.QFrame() - self.separator_line_2.setFrameShape(QtWidgets.QFrame.Shape.HLine) - self.separator_line_2.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken) - grid_lay.addWidget(self.separator_line_2, 14, 0, 1, 2) + grid1.addWidget(self.bb_label, 12, 0) + grid1.addWidget(self.bb_radio, 12, 1) + # ############################################################################################################# + # Export Frame + # ############################################################################################################# # Export QRCode - self.export_cb = FCCheckBox(_("Export QRCode")) - self.export_cb.setToolTip( + self.export_label = FCLabel('%s' % _("Export QRCode")) + self.export_label.setToolTip( _("Show a set of controls allowing to export the QRCode\n" "to a SVG file or an PNG file.") ) - grid_lay.addWidget(self.export_cb, 16, 0, 1, 2) + self.tools_box.addWidget(self.export_label) # this way I can hide/show the frame - self.export_frame = QtWidgets.QFrame() - self.export_frame.setContentsMargins(0, 0, 0, 0) - self.layout.addWidget(self.export_frame) + self.export_frame = FCFrame() + self.export_frame.setFrameStyle(QtWidgets.QFrame.Shape.StyledPanel | QtWidgets.QFrame.Shadow.Plain) + self.export_frame.setStyleSheet(".FCFrame{border: 1px solid gray; border-radius: 5px;}") + self.tools_box.addWidget(self.export_frame) + self.export_lay = FCGridLayout(v_spacing=5, h_spacing=3) - self.export_lay.setContentsMargins(0, 0, 0, 0) - self.export_frame.setLayout(self.export_lay) self.export_lay.setColumnStretch(0, 0) self.export_lay.setColumnStretch(1, 1) + self.export_frame.setLayout(self.export_lay) # default is hidden self.export_frame.hide() @@ -989,7 +1019,7 @@ class QRcodeUI: font-weight: bold; } """) - self.export_lay.addWidget(self.export_svg_button, 3, 0, 1, 2) + self.tools_box.addWidget(self.export_svg_button) # ## Export QRCode as PNG image self.export_png_button = QtWidgets.QPushButton(_("Export QRCode PNG")) @@ -1002,7 +1032,7 @@ class QRcodeUI: font-weight: bold; } """) - self.export_lay.addWidget(self.export_png_button, 4, 0, 1, 2) + self.tools_box.addWidget(self.export_png_button) # ## Insert QRCode self.qrcode_button = QtWidgets.QPushButton(_("Insert QRCode")) @@ -1016,7 +1046,7 @@ class QRcodeUI: font-weight: bold; } """) - self.layout.addWidget(self.qrcode_button) + self.tools_box.addWidget(self.qrcode_button) self.layout.addStretch(1)