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)