Skip to content

Commit f2d7110

Browse files
committed
refactor chain_01 settings UI #604
1 parent 7fbb317 commit f2d7110

1 file changed

Lines changed: 155 additions & 57 deletions

File tree

  • release/scripts/mgear/shifter_classic_components/chain_01

release/scripts/mgear/shifter_classic_components/chain_01/settingsUI.py

Lines changed: 155 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -24,106 +24,204 @@
2424
# Author: Miquel Campos www.mcsgear.com
2525
# Date: 2016 / 10 / 10
2626

27-
import mgear.core.pyqt as gqt
28-
QtGui, QtCore, QtWidgets, wrapInstance = gqt.qt_import()
27+
"""Settings UI for chain_01 component."""
28+
from mgear.vendor.Qt import QtCore, QtWidgets
29+
2930

3031
class Ui_Form(object):
32+
"""Base UI Form class designed for inheritance.
33+
34+
Subclasses can override:
35+
- setup_ui_options(): Define form size and options
36+
- create_controls(): Create the main controls
37+
- create_layout(): Arrange controls in layouts
38+
- create_connections(): Set up signal/slot connections
39+
40+
The setupUi() method calls these in order, so subclasses can
41+
override specific parts while reusing others via super().
42+
"""
43+
3144
def setupUi(self, Form):
45+
"""Main setup method that orchestrates UI creation.
46+
47+
Args:
48+
Form: The QDialog/QWidget to set up
49+
"""
50+
self.form = Form
51+
self.setup_ui_options(Form)
52+
self.create_controls(Form)
53+
self.create_layout(Form)
54+
self.create_connections()
55+
56+
# ------------------------------------------------------------------
57+
# Override these methods in subclasses
58+
# ------------------------------------------------------------------
59+
60+
def setup_ui_options(self, Form):
61+
"""Configure form-level options like size and object name.
62+
63+
Override in subclass to change form size or add form-level settings.
64+
"""
3265
Form.setObjectName("Form")
3366
Form.resize(255, 290)
34-
self.gridLayout = QtWidgets.QGridLayout(Form)
35-
self.gridLayout.setObjectName("gridLayout")
67+
68+
def create_controls(self, Form):
69+
"""Create all UI controls/widgets.
70+
71+
Override in subclass to add new controls. Call super() first
72+
to create parent controls.
73+
"""
74+
# Main container
3675
self.groupBox = QtWidgets.QGroupBox(Form)
3776
self.groupBox.setTitle("")
3877
self.groupBox.setObjectName("groupBox")
39-
self.gridLayout_2 = QtWidgets.QGridLayout(self.groupBox)
40-
self.gridLayout_2.setObjectName("gridLayout_2")
41-
self.verticalLayout = QtWidgets.QVBoxLayout()
42-
self.verticalLayout.setObjectName("verticalLayout")
43-
self.formLayout = QtWidgets.QFormLayout()
44-
self.formLayout.setObjectName("formLayout")
45-
self.mode_label = QtWidgets.QLabel(self.groupBox)
78+
79+
# Mode combobox
80+
self.mode_label = QtWidgets.QLabel("Mode:", self.groupBox)
4681
self.mode_label.setObjectName("mode_label")
47-
self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.mode_label)
82+
4883
self.mode_comboBox = QtWidgets.QComboBox(self.groupBox)
49-
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
84+
sizePolicy = QtWidgets.QSizePolicy(
85+
QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed
86+
)
5087
sizePolicy.setHorizontalStretch(0)
5188
sizePolicy.setVerticalStretch(0)
52-
sizePolicy.setHeightForWidth(self.mode_comboBox.sizePolicy().hasHeightForWidth())
89+
sizePolicy.setHeightForWidth(
90+
self.mode_comboBox.sizePolicy().hasHeightForWidth()
91+
)
5392
self.mode_comboBox.setSizePolicy(sizePolicy)
5493
self.mode_comboBox.setObjectName("mode_comboBox")
55-
self.mode_comboBox.addItem("")
56-
self.mode_comboBox.addItem("")
57-
self.mode_comboBox.addItem("")
58-
self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.mode_comboBox)
59-
self.ikfk_label = QtWidgets.QLabel(self.groupBox)
94+
self.mode_comboBox.addItem("FK")
95+
self.mode_comboBox.addItem("IK")
96+
self.mode_comboBox.addItem("FK/IK")
97+
98+
# IK/FK Blend slider and spinbox
99+
self.ikfk_label = QtWidgets.QLabel("IK/FK Blend:", self.groupBox)
60100
self.ikfk_label.setObjectName("ikfk_label")
61-
self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.ikfk_label)
62-
self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
63-
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
101+
64102
self.ikfk_slider = QtWidgets.QSlider(self.groupBox)
65103
self.ikfk_slider.setMinimumSize(QtCore.QSize(0, 15))
66104
self.ikfk_slider.setMaximum(100)
67105
self.ikfk_slider.setOrientation(QtCore.Qt.Horizontal)
68106
self.ikfk_slider.setObjectName("ikfk_slider")
69-
self.horizontalLayout_3.addWidget(self.ikfk_slider)
107+
70108
self.ikfk_spinBox = QtWidgets.QSpinBox(self.groupBox)
71109
self.ikfk_spinBox.setMaximum(100)
72110
self.ikfk_spinBox.setObjectName("ikfk_spinBox")
111+
112+
# Neutral pose checkbox
113+
self.neutralPose_checkBox = QtWidgets.QCheckBox(
114+
"Neutral pose", self.groupBox
115+
)
116+
self.neutralPose_checkBox.setObjectName("neutralPose_checkBox")
117+
118+
# IK Reference Array group
119+
self.ikRefArray_groupBox = QtWidgets.QGroupBox("IK Reference Array", Form)
120+
self.ikRefArray_groupBox.setObjectName("ikRefArray_groupBox")
121+
122+
self.ikRefArray_listWidget = QtWidgets.QListWidget(self.ikRefArray_groupBox)
123+
self.ikRefArray_listWidget.setDragDropOverwriteMode(True)
124+
self.ikRefArray_listWidget.setDragDropMode(
125+
QtWidgets.QAbstractItemView.InternalMove
126+
)
127+
self.ikRefArray_listWidget.setDefaultDropAction(QtCore.Qt.MoveAction)
128+
self.ikRefArray_listWidget.setAlternatingRowColors(True)
129+
self.ikRefArray_listWidget.setSelectionMode(
130+
QtWidgets.QAbstractItemView.ExtendedSelection
131+
)
132+
self.ikRefArray_listWidget.setSelectionRectVisible(False)
133+
self.ikRefArray_listWidget.setObjectName("ikRefArray_listWidget")
134+
135+
self.ikRefArrayAdd_pushButton = QtWidgets.QPushButton(
136+
"<<", self.ikRefArray_groupBox
137+
)
138+
self.ikRefArrayAdd_pushButton.setObjectName("ikRefArrayAdd_pushButton")
139+
140+
self.ikRefArrayRemove_pushButton = QtWidgets.QPushButton(
141+
">>", self.ikRefArray_groupBox
142+
)
143+
self.ikRefArrayRemove_pushButton.setObjectName("ikRefArrayRemove_pushButton")
144+
145+
def create_layout(self, Form):
146+
"""Arrange controls in layouts.
147+
148+
Override in subclass to modify layout. For adding controls to
149+
an existing layout, override create_controls() instead and
150+
use self.verticalLayout.addWidget() after calling super().
151+
"""
152+
# Main form layout
153+
self.gridLayout = QtWidgets.QGridLayout(Form)
154+
self.gridLayout.setObjectName("gridLayout")
155+
156+
# Group box layout
157+
self.gridLayout_2 = QtWidgets.QGridLayout(self.groupBox)
158+
self.gridLayout_2.setObjectName("gridLayout_2")
159+
160+
# Vertical layout for main controls
161+
self.verticalLayout = QtWidgets.QVBoxLayout()
162+
self.verticalLayout.setObjectName("verticalLayout")
163+
164+
# Form layout for mode and IK/FK blend
165+
self.formLayout = QtWidgets.QFormLayout()
166+
self.formLayout.setObjectName("formLayout")
167+
168+
self.formLayout.setWidget(
169+
0, QtWidgets.QFormLayout.LabelRole, self.mode_label
170+
)
171+
self.formLayout.setWidget(
172+
0, QtWidgets.QFormLayout.FieldRole, self.mode_comboBox
173+
)
174+
self.formLayout.setWidget(
175+
1, QtWidgets.QFormLayout.LabelRole, self.ikfk_label
176+
)
177+
178+
# Horizontal layout for slider and spinbox
179+
self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
180+
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
181+
self.horizontalLayout_3.addWidget(self.ikfk_slider)
73182
self.horizontalLayout_3.addWidget(self.ikfk_spinBox)
74-
self.formLayout.setLayout(1, QtWidgets.QFormLayout.FieldRole, self.horizontalLayout_3)
183+
self.formLayout.setLayout(
184+
1, QtWidgets.QFormLayout.FieldRole, self.horizontalLayout_3
185+
)
186+
75187
self.verticalLayout.addLayout(self.formLayout)
76-
self.neutralPose_checkBox = QtWidgets.QCheckBox(self.groupBox)
77-
self.neutralPose_checkBox.setObjectName("neutralPose_checkBox")
78188
self.verticalLayout.addWidget(self.neutralPose_checkBox)
189+
79190
self.gridLayout_2.addLayout(self.verticalLayout, 0, 0, 1, 1)
80191
self.gridLayout.addWidget(self.groupBox, 0, 0, 1, 1)
81-
self.ikRefArray_groupBox = QtWidgets.QGroupBox(Form)
82-
self.ikRefArray_groupBox.setObjectName("ikRefArray_groupBox")
192+
193+
# IK Reference Array layout
83194
self.gridLayout_3 = QtWidgets.QGridLayout(self.ikRefArray_groupBox)
84195
self.gridLayout_3.setObjectName("gridLayout_3")
196+
85197
self.ikRefArray_horizontalLayout = QtWidgets.QHBoxLayout()
86198
self.ikRefArray_horizontalLayout.setObjectName("ikRefArray_horizontalLayout")
199+
87200
self.ikRefArray_verticalLayout_1 = QtWidgets.QVBoxLayout()
88201
self.ikRefArray_verticalLayout_1.setObjectName("ikRefArray_verticalLayout_1")
89-
self.ikRefArray_listWidget = QtWidgets.QListWidget(self.ikRefArray_groupBox)
90-
self.ikRefArray_listWidget.setDragDropOverwriteMode(True)
91-
self.ikRefArray_listWidget.setDragDropMode(QtWidgets.QAbstractItemView.InternalMove)
92-
self.ikRefArray_listWidget.setDefaultDropAction(QtCore.Qt.MoveAction)
93-
self.ikRefArray_listWidget.setAlternatingRowColors(True)
94-
self.ikRefArray_listWidget.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection)
95-
self.ikRefArray_listWidget.setSelectionRectVisible(False)
96-
self.ikRefArray_listWidget.setObjectName("ikRefArray_listWidget")
97202
self.ikRefArray_verticalLayout_1.addWidget(self.ikRefArray_listWidget)
98203
self.ikRefArray_horizontalLayout.addLayout(self.ikRefArray_verticalLayout_1)
204+
99205
self.ikRefArray_verticalLayout_2 = QtWidgets.QVBoxLayout()
100206
self.ikRefArray_verticalLayout_2.setObjectName("ikRefArray_verticalLayout_2")
101-
self.ikRefArrayAdd_pushButton = QtWidgets.QPushButton(self.ikRefArray_groupBox)
102-
self.ikRefArrayAdd_pushButton.setObjectName("ikRefArrayAdd_pushButton")
103207
self.ikRefArray_verticalLayout_2.addWidget(self.ikRefArrayAdd_pushButton)
104-
self.ikRefArrayRemove_pushButton = QtWidgets.QPushButton(self.ikRefArray_groupBox)
105-
self.ikRefArrayRemove_pushButton.setObjectName("ikRefArrayRemove_pushButton")
106208
self.ikRefArray_verticalLayout_2.addWidget(self.ikRefArrayRemove_pushButton)
107-
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
209+
210+
spacerItem = QtWidgets.QSpacerItem(
211+
20, 40,
212+
QtWidgets.QSizePolicy.Minimum,
213+
QtWidgets.QSizePolicy.Expanding
214+
)
108215
self.ikRefArray_verticalLayout_2.addItem(spacerItem)
109216
self.ikRefArray_horizontalLayout.addLayout(self.ikRefArray_verticalLayout_2)
217+
110218
self.gridLayout_3.addLayout(self.ikRefArray_horizontalLayout, 0, 0, 1, 1)
111219
self.gridLayout.addWidget(self.ikRefArray_groupBox, 1, 0, 1, 1)
112220

113-
self.retranslateUi(Form)
114-
QtCore.QObject.connect(self.ikfk_slider, QtCore.SIGNAL("sliderMoved(int)"), self.ikfk_spinBox.setValue)
115-
QtCore.QObject.connect(self.ikfk_spinBox, QtCore.SIGNAL("valueChanged(int)"), self.ikfk_slider.setValue)
116-
QtCore.QMetaObject.connectSlotsByName(Form)
117-
118-
def retranslateUi(self, Form):
119-
Form.setWindowTitle(gqt.fakeTranslate("Form", "Form", None, -1))
120-
self.mode_label.setText(gqt.fakeTranslate("Form", "Mode:", None, -1))
121-
self.mode_comboBox.setItemText(0, gqt.fakeTranslate("Form", "FK", None, -1))
122-
self.mode_comboBox.setItemText(1, gqt.fakeTranslate("Form", "IK", None, -1))
123-
self.mode_comboBox.setItemText(2, gqt.fakeTranslate("Form", "FK/IK", None, -1))
124-
self.ikfk_label.setText(gqt.fakeTranslate("Form", "IK/FK Blend:", None, -1))
125-
self.neutralPose_checkBox.setText(gqt.fakeTranslate("Form", "Neutral pose", None, -1))
126-
self.ikRefArray_groupBox.setTitle(gqt.fakeTranslate("Form", "IK Reference Array", None, -1))
127-
self.ikRefArrayAdd_pushButton.setText(gqt.fakeTranslate("Form", "<<", None, -1))
128-
self.ikRefArrayRemove_pushButton.setText(gqt.fakeTranslate("Form", ">>", None, -1))
221+
def create_connections(self):
222+
"""Set up signal/slot connections.
129223
224+
Override in subclass to add additional connections.
225+
"""
226+
self.ikfk_slider.valueChanged.connect(self.ikfk_spinBox.setValue)
227+
self.ikfk_spinBox.valueChanged.connect(self.ikfk_slider.setValue)

0 commit comments

Comments
 (0)