Skip to content

Commit 485a9ef

Browse files
Tools refactoring (#898)
1 parent 65be39e commit 485a9ef

File tree

14 files changed

+204
-288
lines changed

14 files changed

+204
-288
lines changed

worldeditor/src/screens/scenecomposer/objectcontroller.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
#include "tools/movetool.h"
2626
#include "tools/rotatetool.h"
2727
#include "tools/scaletool.h"
28-
#include "tools/resizetool.h"
2928

3029
#include "config.h"
3130

@@ -183,7 +182,6 @@ ObjectController::ObjectController() :
183182
new MoveTool(this),
184183
new RotateTool(this),
185184
new ScaleTool(this),
186-
new ResizeTool(this),
187185
};
188186
}
189187

worldeditor/src/screens/scenecomposer/scenecomposer.cpp

Lines changed: 14 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
#include <QWidgetAction>
1010
#include <QFormLayout>
1111
#include <QLineEdit>
12-
#include <QDoubleValidator>
12+
#include <QToolButton>
1313

1414
#include <json.h>
1515
#include <bson.h>
@@ -65,12 +65,12 @@ class WorldObserver : public Object {
6565
void setSceneComposer(SceneComposer *composer) {
6666
m_sceneComposer = composer;
6767

68-
World *world = m_sceneComposer->currentWorld();
68+
World *world = Engine::world();
6969
if(m_world != world) {
7070
if(m_world) {
7171
disconnect(m_world, 0, 0, 0);
7272
}
73-
m_world = m_sceneComposer->currentWorld();
73+
m_world = world;
7474

7575
connect(m_world, _SIGNAL(sceneLoaded()), this, _SLOT(onSceneUpdated()));
7676
connect(m_world, _SIGNAL(sceneUnloaded()), this, _SLOT(onSceneUpdated()));
@@ -81,7 +81,7 @@ class WorldObserver : public Object {
8181

8282
private:
8383
void onSceneUpdated() {
84-
m_sceneComposer->worldUpdated(m_world);
84+
m_sceneComposer->updated();
8585
}
8686

8787
private:
@@ -131,45 +131,27 @@ SceneComposer::SceneComposer(QWidget *parent) :
131131

132132
m_worldObserver->setSceneComposer(this);
133133

134-
QDoubleValidator *validator = new QDoubleValidator(0.01f, DBL_MAX, 4, this);
135-
validator->setLocale(QLocale("C"));
136-
137134
QWidget *snapWidget = new QWidget();
138135

139136
QFormLayout *formLayout = new QFormLayout(snapWidget);
140137
snapWidget->setLayout(formLayout);
141138

142139
int index = 0;
143140
for(auto &it : m_controller->tools()) {
144-
QPushButton *tool = new QPushButton();
145-
tool->setProperty("blue", true);
146-
tool->setProperty("checkred", true);
147-
tool->setCheckable(true);
148-
tool->setAutoExclusive(true);
149-
tool->setIcon(QIcon(it->icon()));
150-
tool->setObjectName(it->name());
151-
QString shortcut = it->shortcut();
152-
tool->setShortcut(QKeySequence(shortcut));
153-
tool->setToolTip(it->toolTip() + (!shortcut.isEmpty() ? (" (" + shortcut + ")") : ""));
141+
QPushButton *tool = it->button();
154142

155143
ui->viewportLayout->insertWidget(index, tool);
156144

157-
connect(tool, SIGNAL(clicked()), m_controller, SLOT(onChangeTool()));
158145
if(index == 0) {
159146
tool->click();
160147
}
161148

162-
float snap = it->snap();
163-
if(snap > 0.0f) {
164-
QLineEdit *editor = new QLineEdit(snapWidget);
165-
editor->setValidator(validator);
166-
editor->setObjectName(it->name());
167-
editor->setText(QString::number((double)snap, 'f', 2));
168-
formLayout->addRow(it->name(), editor);
169-
170-
m_snapSettings[it->name()] = editor;
171-
149+
QLineEdit *editor = it->snapWidget();
150+
if(editor) {
172151
connect(editor, &QLineEdit::editingFinished, this, &SceneComposer::onChangeSnap);
152+
153+
editor->setParent(snapWidget);
154+
formLayout->addRow(editor->objectName(), editor);
173155
}
174156

175157
index++;
@@ -230,7 +212,6 @@ SceneComposer::SceneComposer(QWidget *parent) :
230212
m_sceneMenu.addSeparator();
231213
m_sceneMenu.addAction(createAction(tr("Add New Scene"), SLOT(onNewAsset()), false));
232214

233-
234215
// Add Component Button
235216
m_componentButton->setProperty("blue", true);
236217
m_componentButton->setPopupMode(QToolButton::InstantPopup);
@@ -280,7 +261,7 @@ void SceneComposer::restoreState(const VariantMap &data) {
280261
float snap = field->second.toFloat();
281262
it->setSnap(snap);
282263

283-
QLineEdit *editor = m_snapSettings.value(it->name(), nullptr);
264+
QLineEdit *editor = it->snapWidget();
284265
if(editor) {
285266
editor->setText(QString::number((double)snap, 'f', 2));
286267
}
@@ -295,14 +276,6 @@ void SceneComposer::takeScreenshot() {
295276
result.save("MainWindow-" + QDateTime::currentDateTime().toString("ddMMyy-HHmmss") + ".png");
296277
}
297278

298-
World *SceneComposer::currentWorld() const {
299-
return Engine::world();
300-
}
301-
302-
void SceneComposer::worldUpdated(World *graph) {
303-
emit updated();
304-
}
305-
306279
void SceneComposer::onDrop(QDropEvent *event) {
307280
m_controller->onDrop(event);
308281
}
@@ -547,7 +520,7 @@ void SceneComposer::onNewAsset() {
547520
void SceneComposer::loadAsset(AssetConverterSettings *settings) {
548521
AssetEditor::loadAsset(settings);
549522

550-
if(settings->typeName() == "Map") {
523+
if(settings->typeName() == MetaType::name<Map>()) {
551524
if(loadScene(settings->source(), false)) {
552525
UndoManager::instance()->clear();
553526
}
@@ -581,7 +554,7 @@ void SceneComposer::onCreateActor() {
581554
Scene *scene = m_controller->isolatedActor() ? m_isolationScene : Engine::world()->activeScene();
582555

583556
if(scene) {
584-
UndoManager::instance()->push(new CreateObject("Actor", scene, m_controller));
557+
UndoManager::instance()->push(new CreateObject(MetaType::name<Actor>(), scene, m_controller));
585558
}
586559
}
587560

@@ -753,7 +726,7 @@ bool SceneComposer::loadScene(QString path, bool additive) {
753726
}
754727

755728
emit objectsHierarchyChanged(Engine::world());
756-
worldUpdated(Engine::world());
729+
emit updated();
757730
return true;
758731
}
759732
}

worldeditor/src/screens/scenecomposer/scenecomposer.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
class ObjectController;
99
class WorldObserver;
1010

11-
class QLineEdit;
1211
class QToolButton;
1312

1413
namespace Ui {
@@ -30,9 +29,6 @@ class SceneComposer : public AssetEditor {
3029

3130
void takeScreenshot();
3231

33-
World *currentWorld() const;
34-
void worldUpdated(World *graph);
35-
3632
QMenu *objectContextMenu(Object *object) override;
3733

3834
QWidget *propertiesWidget() const override;
@@ -119,8 +115,6 @@ private slots:
119115

120116
QMap<uint32_t, AssetConverterSettings *> m_sceneSettings;
121117

122-
QMap<QString, QLineEdit *> m_snapSettings;
123-
124118
QList<QAction *> m_objectActions;
125119
QList<QAction *> m_prefabActions;
126120
QAction *m_activeSceneAction;

worldeditor/src/screens/scenecomposer/scenecomposer.ui

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -138,9 +138,6 @@
138138
<property name="popupMode">
139139
<enum>QToolButton::InstantPopup</enum>
140140
</property>
141-
<property name="toolButtonStyle">
142-
<enum>Qt::ToolButtonTextBesideIcon</enum>
143-
</property>
144141
</widget>
145142
</item>
146143
<item>

worldeditor/src/screens/scenecomposer/tools/movetool.cpp

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
#include "movetool.h"
22

3+
#include <QLineEdit>
4+
#include <QDoubleValidator>
5+
6+
#include <cfloat>
7+
38
#include <components/actor.h>
49
#include <components/transform.h>
510

@@ -14,6 +19,17 @@ MoveTool::MoveTool(ObjectController *controller) :
1419

1520
}
1621

22+
void MoveTool::beginControl() {
23+
SelectTool::beginControl();
24+
25+
m_positions.clear();
26+
27+
for(auto it : m_controller->selectList()) {
28+
Transform *t = it.object->transform();
29+
m_positions.push_back(t->position());
30+
}
31+
}
32+
1733
void MoveTool::update(bool center, bool local, bool snap) {
1834
SelectTool::update(center, local, snap);
1935

@@ -29,19 +45,36 @@ void MoveTool::update(bool center, bool local, bool snap) {
2945
delta[i] = m_snap * int(delta[i] / m_snap);
3046
}
3147
}
48+
49+
auto posIt = m_positions.begin();
3250
for(const auto &it : qAsConst(m_controller->selectList())) {
3351
Vector3 dt(local ? t->worldQuaternion() * delta : delta);
3452
Actor *a = dynamic_cast<Actor *>(it.object->parent());
3553
if(!local && a && a->transform()) {
3654
dt = a->transform()->worldTransform().rotation().inverse() * delta;
3755
}
3856
if(it.object->transform()) {
39-
it.object->transform()->setPosition(it.position + dt);
57+
it.object->transform()->setPosition(*posIt + dt);
4058
}
59+
posIt++;
4160
}
4261
}
4362
}
4463

64+
QLineEdit *MoveTool::snapWidget() {
65+
if(m_snapEditor == nullptr) {
66+
QDoubleValidator *validator = new QDoubleValidator(0.01f, DBL_MAX, 4);
67+
validator->setLocale(QLocale("C"));
68+
69+
m_snapEditor = new QLineEdit();
70+
m_snapEditor->setValidator(validator);
71+
m_snapEditor->setObjectName(name());
72+
m_snapEditor->setText(QString::number((double)m_snap, 'f', 2));
73+
}
74+
75+
return m_snapEditor;
76+
}
77+
4578
QString MoveTool::icon() const {
4679
return ":/Images/editor/Move.png";
4780
}

worldeditor/src/screens/scenecomposer/tools/movetool.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,20 @@ class MoveTool : public SelectTool {
99
public:
1010
explicit MoveTool(ObjectController *controller);
1111

12+
void beginControl() override;
13+
1214
void update(bool center, bool local, bool snap) override;
1315

16+
QLineEdit *snapWidget() override;
17+
1418
QString icon() const override;
1519
QString name() const override;
1620

1721
QString toolTip() const override;
1822
QString shortcut() const override;
23+
24+
private:
25+
std::list<Vector3> m_positions;
1926
};
2027

2128
#endif // MOVETOOL_H

0 commit comments

Comments
 (0)