diff --git a/src/ApplicationController.cpp b/src/ApplicationController.cpp index 9238762..c47e927 100644 --- a/src/ApplicationController.cpp +++ b/src/ApplicationController.cpp @@ -34,6 +34,21 @@ SketchFeature* ApplicationController::activeSketch() const return m_activeSketch; } +ApplicationController::ToolType ApplicationController::activeTool() const +{ + return m_activeTool; +} + +void ApplicationController::setActiveTool(ToolType tool) +{ + if (m_activeTool == tool) { + return; + } + + m_activeTool = tool; + emit activeToolChanged(m_activeTool); +} + void ApplicationController::newDocument() { m_activeSketch = nullptr; @@ -114,6 +129,7 @@ void ApplicationController::beginSketchCreation() void ApplicationController::endSketch() { m_activeSketch = nullptr; + setActiveTool(ToolType::None); emit sketchModeEnded(); } diff --git a/src/ApplicationController.h b/src/ApplicationController.h index 108038c..1c3db43 100644 --- a/src/ApplicationController.h +++ b/src/ApplicationController.h @@ -12,14 +12,24 @@ class ApplicationController : public QObject { Q_OBJECT public: + enum ToolType { + None, + Line, + Rectangle, + Circle + }; + Q_ENUM(ToolType) + explicit ApplicationController(QObject *parent = nullptr); ~ApplicationController(); void setMainWindow(MainWindow* mainWindow); Document* document() const; SketchFeature* activeSketch() const; + ToolType activeTool() const; public slots: + void setActiveTool(ToolType tool); void newDocument(); bool openDocument(); bool saveDocument(); @@ -32,6 +42,7 @@ signals: void sketchModeStarted(ViewportWidget::SketchPlane plane); void sketchModeEnded(); void currentFileChanged(const QString& path); + void activeToolChanged(ToolType tool); private: ApplicationController(const ApplicationController&) = delete; @@ -43,6 +54,7 @@ private: QString m_currentFile; MainWindow* m_mainWindow = nullptr; SketchFeature* m_activeSketch = nullptr; + ToolType m_activeTool = ToolType::None; }; #endif // APPLICATIONCONTROLLER_H diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index ac1472c..1403ac7 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -91,6 +91,9 @@ MainWindow::MainWindow(ApplicationController* appController, QWidget *parent) lineButton->setIcon(QIcon(":/icons/line.svg")); lineButton->setIconSize(QSize(48, 48)); lineButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); + connect(lineButton, &QToolButton::clicked, this, [this]() { + m_appController->setActiveTool(ApplicationController::ToolType::Line); + }); sketchLayout->addWidget(lineButton); QToolButton *rectangleButton = new QToolButton(); @@ -98,6 +101,9 @@ MainWindow::MainWindow(ApplicationController* appController, QWidget *parent) rectangleButton->setIcon(QIcon(":/icons/rectangle.svg")); rectangleButton->setIconSize(QSize(48, 48)); rectangleButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); + connect(rectangleButton, &QToolButton::clicked, this, [this]() { + m_appController->setActiveTool(ApplicationController::ToolType::Rectangle); + }); sketchLayout->addWidget(rectangleButton); QToolButton *circleButton = new QToolButton(); @@ -105,6 +111,9 @@ MainWindow::MainWindow(ApplicationController* appController, QWidget *parent) circleButton->setIcon(QIcon(":/icons/circle.svg")); circleButton->setIconSize(QSize(48, 48)); circleButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); + connect(circleButton, &QToolButton::clicked, this, [this]() { + m_appController->setActiveTool(ApplicationController::ToolType::Circle); + }); sketchLayout->addWidget(circleButton); QToolButton *saveSketchButton = new QToolButton();