diff --git a/CHANGELOG.md b/CHANGELOG.md index d49b3e6c..66525eb5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ CHANGELOG for FlatCAM beta - added some new properties to the FCCheckBox GUI element - in Corners Plugin remade the GUI - in Corners Markers Plugin added the beginning of the manual marker placement +- in Alignment Plugin updated the GUI 4.09.2021 diff --git a/appPlugins/ToolAlignObjects.py b/appPlugins/ToolAlignObjects.py index 75bdaa7d..ad6eda46 100644 --- a/appPlugins/ToolAlignObjects.py +++ b/appPlugins/ToolAlignObjects.py @@ -8,7 +8,7 @@ from PyQt6 import QtWidgets, QtCore, QtGui from appTool import AppTool -from appGUI.GUIElements import FCComboBox, RadioSet, FCLabel, FCButton, VerticalScrollArea, FCGridLayout +from appGUI.GUIElements import FCComboBox, RadioSet, FCLabel, FCButton, VerticalScrollArea, FCGridLayout, FCFrame import math @@ -411,21 +411,39 @@ class AlignUI: """) self.layout.addWidget(title_label) - # Form Layout - grid0 = FCGridLayout(v_spacing=5, h_spacing=3) - grid0.setColumnStretch(0, 0) - grid0.setColumnStretch(1, 1) - self.layout.addLayout(grid0) + 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.aligned_label = FCLabel('%s:' % _("MOVING object")) - grid0.addWidget(self.aligned_label, 0, 0, 1, 2) + self.title_box = QtWidgets.QHBoxLayout() + self.tools_box.addLayout(self.title_box) + # ############################################################################################################# + # Moving Object Frame + # ############################################################################################################# + self.aligned_label = FCLabel('%s' % _("MOVING object")) self.aligned_label.setToolTip( _("Specify the type of object to be aligned.\n" "It can be of type: Gerber or Excellon.\n" "The selection here decide the type of objects that will be\n" "in the Object combobox.") ) + self.tools_box.addWidget(self.aligned_label) + + m_frame = FCFrame() + m_frame.setFrameStyle(QtWidgets.QFrame.Shape.StyledPanel | QtWidgets.QFrame.Shadow.Plain) + # units_frame.setContentsMargins(0, 0, 0, 0) + m_frame.setStyleSheet(".FCFrame{border: 1px solid gray; border-radius: 5px;}") + self.tools_box.addWidget(m_frame) + + # Grid Layout + grid0 = FCGridLayout(v_spacing=5, h_spacing=3) + grid0.setColumnStretch(0, 0) + grid0.setColumnStretch(1, 1) + m_frame.setLayout(grid0) # Type of object to be aligned self.type_obj_radio = RadioSet([ @@ -433,7 +451,7 @@ class AlignUI: {"label": _("Excellon"), "value": "exc"}, ]) - grid0.addWidget(self.type_obj_radio, 3, 0, 1, 2) + grid0.addWidget(self.type_obj_radio, 0, 0, 1, 2) # Object to be aligned self.object_combo = FCComboBox() @@ -445,23 +463,31 @@ class AlignUI: _("Object to be aligned.") ) - grid0.addWidget(self.object_combo, 4, 0, 1, 2) + grid0.addWidget(self.object_combo, 2, 0, 1, 2) - separator_line = QtWidgets.QFrame() - separator_line.setFrameShape(QtWidgets.QFrame.Shape.HLine) - separator_line.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken) - grid0.addWidget(separator_line, 5, 0, 1, 2) - - grid0.addWidget(FCLabel(''), 6, 0, 1, 2) - - self.aligned_label = FCLabel('%s:' % _("DESTINATION object")) + # ############################################################################################################# + # Destination Object Frame + # ############################################################################################################# + self.aligned_label = FCLabel('%s' % _("DESTINATION object")) self.aligned_label.setToolTip( _("Specify the type of object to be aligned to.\n" "It can be of type: Gerber or Excellon.\n" "The selection here decide the type of objects that will be\n" "in the Object combobox.") ) - grid0.addWidget(self.aligned_label, 7, 0, 1, 2) + self.tools_box.addWidget(self.aligned_label) + + d_frame = FCFrame() + d_frame.setFrameStyle(QtWidgets.QFrame.Shape.StyledPanel | QtWidgets.QFrame.Shadow.Plain) + # units_frame.setContentsMargins(0, 0, 0, 0) + d_frame.setStyleSheet(".FCFrame{border: 1px solid gray; border-radius: 5px;}") + self.tools_box.addWidget(d_frame) + + # Grid Layout + grid1 = FCGridLayout(v_spacing=5, h_spacing=3) + grid1.setColumnStretch(0, 0) + grid1.setColumnStretch(1, 1) + d_frame.setLayout(grid1) # Type of object to be aligned to = aligner self.type_aligner_obj_radio = RadioSet([ @@ -469,7 +495,7 @@ class AlignUI: {"label": _("Excellon"), "value": "exc"}, ]) - grid0.addWidget(self.type_aligner_obj_radio, 8, 0, 1, 2) + grid1.addWidget(self.type_aligner_obj_radio, 0, 0, 1, 2) # Object to be aligned to = aligner self.aligner_object_combo = FCComboBox() @@ -481,14 +507,25 @@ class AlignUI: _("Object to be aligned to. Aligner.") ) - grid0.addWidget(self.aligner_object_combo, 9, 0, 1, 2) + grid1.addWidget(self.aligner_object_combo, 2, 0, 1, 2) - separator_line = QtWidgets.QFrame() - separator_line.setFrameShape(QtWidgets.QFrame.Shape.HLine) - separator_line.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken) - grid0.addWidget(separator_line, 10, 0, 1, 2) + # ############################################################################################################# + # Parameters Frame + # ############################################################################################################# + self.param_label = FCLabel('%s' % _('Parameters')) + self.tools_box.addWidget(self.param_label) - grid0.addWidget(FCLabel(''), 11, 0, 1, 2) + par_frame = FCFrame() + par_frame.setFrameStyle(QtWidgets.QFrame.Shape.StyledPanel | QtWidgets.QFrame.Shadow.Plain) + # par_frame.setContentsMargins(0, 0, 0, 0) + par_frame.setStyleSheet(".FCFrame{border: 1px solid gray; border-radius: 5px;}") + self.tools_box.addWidget(par_frame) + + # Grid Layout + grid2 = FCGridLayout(v_spacing=5, h_spacing=3) + grid2.setColumnStretch(0, 0) + grid2.setColumnStretch(1, 1) + par_frame.setLayout(grid2) # Alignment Type self.a_type_lbl = FCLabel('%s:' % _("Alignment Type")) @@ -503,13 +540,8 @@ class AlignUI: {'label': _('Dual Point'), 'value': 'dp'} ]) - grid0.addWidget(self.a_type_lbl, 12, 0, 1, 2) - grid0.addWidget(self.a_type_radio, 13, 0, 1, 2) - - separator_line = QtWidgets.QFrame() - separator_line.setFrameShape(QtWidgets.QFrame.Shape.HLine) - separator_line.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken) - grid0.addWidget(separator_line, 14, 0, 1, 2) + grid2.addWidget(self.a_type_lbl, 0, 0, 1, 2) + grid2.addWidget(self.a_type_radio, 2, 0, 1, 2) # Buttons self.align_object_button = FCButton(_("Align Object")) @@ -525,9 +557,9 @@ class AlignUI: font-weight: bold; } """) - self.layout.addWidget(self.align_object_button) + self.tools_box.addWidget(self.align_object_button) - self.layout.addStretch() + self.layout.addStretch(1) # ## Reset Tool self.reset_button = FCButton(_("Reset Tool"))