Skip to content

Commit 709c730

Browse files
committed
Update transform toolbar
1 parent 12feee9 commit 709c730

File tree

2 files changed

+73
-83
lines changed

2 files changed

+73
-83
lines changed

src/ui/widgets/transformtoolbar.cpp

Lines changed: 64 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -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

6666
void 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

128129
void 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

158147
void 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

src/ui/widgets/transformtoolbar.h

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929
#include "widgets/qrealanimatorvalueslider.h"
3030
#include "canvas.h"
3131

32+
#include <QActionGroup>
33+
3234
namespace Friction
3335
{
3436
namespace Ui
@@ -41,10 +43,13 @@ namespace Friction
4143
explicit TransformToolBar(QWidget *parent = nullptr);
4244
void setCurrentCanvas(Canvas * const target);
4345
void setCurrentBox(BoundingBox * const target);
46+
void setCanvasMode(const CanvasMode &mode);
4447

4548
private:
49+
void setTransform(BoundingBox * const target);
4650
void clearTransform();
4751
void setupWidgets();
52+
void setupTransform();
4853

4954
ConnContextQPtr<Canvas> mCanvas;
5055

@@ -56,18 +61,10 @@ namespace Friction
5661
QrealAnimatorValueSlider *mTransformRX;
5762
QrealAnimatorValueSlider *mTransformRY;
5863

59-
QAction *mTransformMoveLabelAct;
60-
QAction *mTransformRotateLabelAct;
61-
QAction *mTransformScaleLabelAct;
62-
QAction *mTransformRadiusLabelAct;
63-
64-
QAction *mTransformXAct;
65-
QAction *mTransformYAct;
66-
QAction *mTransformRAct;
67-
QAction *mTransformSXAct;
68-
QAction *mTransformSYAct;
69-
QAction *mTransformRXAct;
70-
QAction *mTransformRYAct;
64+
QActionGroup *mTransformMove;
65+
QActionGroup *mTransformRotate;
66+
QActionGroup *mTransformScale;
67+
QActionGroup *mTransformRadius;
7168
};
7269
}
7370
}

0 commit comments

Comments
 (0)