feat: Manage active drawing tool state in controller and UI
Co-authored-by: aider (gemini/gemini-2.5-pro) <aider@aider.chat>
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user