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
3031class 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