@@ -38,18 +38,16 @@ TransformToolBar::TransformToolBar(QWidget *parent)
3838 , mTransformSY(nullptr )
3939 , mTransformRX(nullptr )
4040 , mTransformRY(nullptr )
41- , mTransformMoveLabelAct(nullptr )
42- , mTransformRotateLabelAct(nullptr )
43- , mTransformScaleLabelAct(nullptr )
44- , mTransformRadiusLabelAct(nullptr )
45- , mTransformXAct(nullptr )
46- , mTransformYAct(nullptr )
47- , mTransformRAct(nullptr )
48- , mTransformSXAct(nullptr )
49- , mTransformSYAct(nullptr )
50- , mTransformRXAct(nullptr )
51- , mTransformRYAct(nullptr )
41+ , mTransformMove(nullptr )
42+ , mTransformRotate(nullptr )
43+ , mTransformScale(nullptr )
44+ , mTransformRadius(nullptr )
5245{
46+ setToolButtonStyle (Qt::ToolButtonIconOnly);
47+ setContextMenuPolicy (Qt::NoContextMenu);
48+ setAllowedAreas (Qt::TopToolBarArea | Qt::BottomToolBarArea);
49+ setWindowTitle (tr (" Transform Toolbar" ));
50+
5351 setupWidgets ();
5452}
5553
@@ -59,11 +57,27 @@ void TransformToolBar::setCurrentCanvas(Canvas * const target)
5957 if (target) {
6058 mCanvas << connect (mCanvas , &Canvas::currentBoxChanged,
6159 this , &TransformToolBar::setCurrentBox);
60+ mCanvas << connect (mCanvas , &Canvas::canvasModeSet,
61+ this , &TransformToolBar::setCanvasMode);
6262 }
6363 setCurrentBox (target ? target->getCurrentBox () : nullptr );
6464}
6565
6666void TransformToolBar::setCurrentBox (BoundingBox * const target)
67+ {
68+ setTransform (target);
69+ }
70+
71+ void TransformToolBar::setCanvasMode (const CanvasMode &mode)
72+ {
73+ const bool hasRadius = mTransformRX ->hasTarget () && mTransformRY ->hasTarget ();
74+ const bool showRadius = mode == CanvasMode::boxTransform ||
75+ mode == CanvasMode::circleCreate ||
76+ mode == CanvasMode::rectCreate;
77+ mTransformRadius ->setVisible (hasRadius && showRadius);
78+ }
79+
80+ void TransformToolBar::setTransform (BoundingBox * const target)
6781{
6882 const bool multiple = target ? mCanvas ->getSelectedBoxesCount () > 1 : false ;
6983 // TODO: add support for multiple boxes
@@ -83,26 +97,18 @@ void TransformToolBar::setCurrentBox(BoundingBox * const target)
8397 mTransformX ->setTarget (pos ? pos->getXAnimator () : nullptr );
8498 mTransformY ->setTarget (pos ? pos->getYAnimator () : nullptr );
8599
86- const bool canMove = (pos);
87- mTransformMoveLabelAct ->setEnabled (canMove);
88- mTransformXAct ->setEnabled (canMove);
89- mTransformYAct ->setEnabled (canMove);
100+ mTransformMove ->setEnabled (pos);
90101
91102 const auto rot = animator->getRotAnimator ();
92103 mTransformR ->setTarget (rot);
93104
94- const bool canRotate = (rot);
95- mTransformRotateLabelAct ->setEnabled (canRotate);
96- mTransformRAct ->setEnabled (canRotate);
105+ mTransformRotate ->setEnabled (rot);
97106
98107 const auto scale = animator->getScaleAnimator ();
99108 mTransformSX ->setTarget (scale ? scale->getXAnimator () : nullptr );
100109 mTransformSY ->setTarget (scale ? scale->getYAnimator () : nullptr );
101110
102- const bool canScale = (scale);
103- mTransformScaleLabelAct ->setEnabled (canScale);
104- mTransformSXAct ->setEnabled (canScale);
105- mTransformSYAct ->setEnabled (canScale);
111+ mTransformScale ->setEnabled (scale);
106112
107113 const auto circle = enve_cast<Circle*>(target);
108114 const auto rectangle = enve_cast<RectangleBox*>(target);
@@ -116,13 +122,8 @@ void TransformToolBar::setCurrentBox(BoundingBox * const target)
116122
117123 const bool hasRadius = (circle || rectangle);
118124
119- mTransformRadiusLabelAct ->setEnabled (hasRadius);
120- mTransformRXAct ->setEnabled (hasRadius);
121- mTransformRYAct ->setEnabled (hasRadius);
122-
123- mTransformRadiusLabelAct ->setVisible (hasRadius);
124- mTransformRXAct ->setVisible (hasRadius);
125- mTransformRYAct ->setVisible (hasRadius);
125+ mTransformRadius ->setEnabled (hasRadius);
126+ mTransformRadius ->setVisible (hasRadius);
126127}
127128
128129void TransformToolBar::clearTransform ()
@@ -135,33 +136,25 @@ void TransformToolBar::clearTransform()
135136 mTransformRX ->setTarget (nullptr );
136137 mTransformRY ->setTarget (nullptr );
137138
138- mTransformMoveLabelAct ->setEnabled (false );
139- mTransformXAct ->setEnabled (false );
140- mTransformYAct ->setEnabled (false );
141-
142- mTransformRotateLabelAct ->setEnabled (false );
143- mTransformRAct ->setEnabled (false );
144-
145- mTransformScaleLabelAct ->setEnabled (false );
146- mTransformSXAct ->setEnabled (false );
147- mTransformSYAct ->setEnabled (false );
139+ mTransformMove ->setEnabled (false );
140+ mTransformRotate ->setEnabled (false );
141+ mTransformScale ->setEnabled (false );
142+ mTransformRadius ->setEnabled (false );
148143
149- mTransformRadiusLabelAct ->setEnabled (false );
150- mTransformRXAct ->setEnabled (false );
151- mTransformRYAct ->setEnabled (false );
152-
153- mTransformRadiusLabelAct ->setVisible (false );
154- mTransformRXAct ->setVisible (false );
155- mTransformRYAct ->setVisible (false );
144+ mTransformRadius ->setVisible (false );
156145}
157146
158147void TransformToolBar::setupWidgets ()
159148{
160- setToolButtonStyle (Qt::ToolButtonIconOnly);
161- setContextMenuPolicy (Qt::NoContextMenu);
162- setAllowedAreas (Qt::TopToolBarArea | Qt::BottomToolBarArea);
149+ setupTransform ();
150+ }
163151
164- setWindowTitle (tr (" Transform Toolbar" ));
152+ void TransformToolBar::setupTransform ()
153+ {
154+ mTransformMove = new QActionGroup (this );
155+ mTransformRotate = new QActionGroup (this );
156+ mTransformScale = new QActionGroup (this );
157+ mTransformRadius = new QActionGroup (this );
165158
166159 mTransformX = new QrealAnimatorValueSlider (nullptr , this );
167160 mTransformY = new QrealAnimatorValueSlider (nullptr , this );
@@ -171,27 +164,27 @@ void TransformToolBar::setupWidgets()
171164 mTransformRX = new QrealAnimatorValueSlider (nullptr , this );
172165 mTransformRY = new QrealAnimatorValueSlider (nullptr , this );
173166
174- mTransformMoveLabelAct = addAction (QIcon::fromTheme (" boxTransform" ),
175- tr (" Move" ));
176- mTransformXAct = addWidget (mTransformX );
177- addSeparator ();
178- mTransformYAct = addWidget (mTransformY );
179-
180- mTransformRotateLabelAct = addAction (QIcon::fromTheme (" loop3" ),
181- tr (" Rotate" ));
182- mTransformRAct = addWidget (mTransformR );
183-
184- mTransformScaleLabelAct = addAction (QIcon::fromTheme (" fullscreen" ),
185- tr (" Scale" ));
186- mTransformSXAct = addWidget (mTransformSX );
187- addSeparator ();
188- mTransformSYAct = addWidget (mTransformSY );
189-
190- mTransformRadiusLabelAct = addAction (QIcon::fromTheme (" circleCreate" ),
191- tr (" Radius" ));
192- mTransformRXAct = addWidget (mTransformRX );
193- addSeparator ();
194- mTransformRYAct = addWidget (mTransformRY );
167+ mTransformMove -> addAction ( addAction (QIcon::fromTheme (" boxTransform" ),
168+ tr (" Move" ) ));
169+ mTransformMove -> addAction ( addWidget (mTransformX ) );
170+ mTransformMove -> addAction ( addSeparator () );
171+ mTransformMove -> addAction ( addWidget (mTransformY ) );
172+
173+ mTransformRotate -> addAction ( addAction (QIcon::fromTheme (" loop3" ),
174+ tr (" Rotate" ) ));
175+ mTransformRotate -> addAction ( addWidget (mTransformR ) );
176+
177+ mTransformScale -> addAction ( addAction (QIcon::fromTheme (" fullscreen" ),
178+ tr (" Scale" ) ));
179+ mTransformScale -> addAction ( addWidget (mTransformSX ) );
180+ mTransformScale -> addAction ( addSeparator () );
181+ mTransformScale -> addAction ( addWidget (mTransformSY ) );
182+
183+ mTransformRadius -> addAction ( addAction (QIcon::fromTheme (" circleCreate" ),
184+ tr (" Radius" ) ));
185+ mTransformRadius -> addAction ( addWidget (mTransformRX ) );
186+ mTransformRadius -> addAction ( addSeparator () );
187+ mTransformRadius -> addAction ( addWidget (mTransformRY ) );
195188
196189 clearTransform ();
197190
0 commit comments