refactor: Replace ApplicationController singleton with dependency injection
Co-authored-by: aider (gemini/gemini-2.5-pro) <aider@aider.chat>
This commit is contained in:
@@ -9,12 +9,6 @@
|
|||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QFileInfo>
|
#include <QFileInfo>
|
||||||
|
|
||||||
ApplicationController* ApplicationController::instance()
|
|
||||||
{
|
|
||||||
static ApplicationController instance;
|
|
||||||
return &instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
ApplicationController::ApplicationController(QObject *parent)
|
ApplicationController::ApplicationController(QObject *parent)
|
||||||
: QObject(parent)
|
: QObject(parent)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -12,7 +12,8 @@ class ApplicationController : public QObject
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
static ApplicationController* instance();
|
explicit ApplicationController(QObject *parent = nullptr);
|
||||||
|
~ApplicationController();
|
||||||
|
|
||||||
void setMainWindow(MainWindow* mainWindow);
|
void setMainWindow(MainWindow* mainWindow);
|
||||||
Document* document() const;
|
Document* document() const;
|
||||||
@@ -33,8 +34,6 @@ signals:
|
|||||||
void currentFileChanged(const QString& path);
|
void currentFileChanged(const QString& path);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
explicit ApplicationController(QObject *parent = nullptr);
|
|
||||||
~ApplicationController();
|
|
||||||
ApplicationController(const ApplicationController&) = delete;
|
ApplicationController(const ApplicationController&) = delete;
|
||||||
ApplicationController& operator=(const ApplicationController&) = delete;
|
ApplicationController& operator=(const ApplicationController&) = delete;
|
||||||
|
|
||||||
|
|||||||
@@ -18,8 +18,9 @@
|
|||||||
#include <QInputDialog>
|
#include <QInputDialog>
|
||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
|
|
||||||
MainWindow::MainWindow(QWidget *parent)
|
MainWindow::MainWindow(ApplicationController* appController, QWidget *parent)
|
||||||
: QMainWindow(parent)
|
: QMainWindow(parent)
|
||||||
|
, m_appController(appController)
|
||||||
{
|
{
|
||||||
setWindowTitle("OpenCAD");
|
setWindowTitle("OpenCAD");
|
||||||
resize(1920, 1080);
|
resize(1920, 1080);
|
||||||
@@ -117,50 +118,50 @@ MainWindow::MainWindow(QWidget *parent)
|
|||||||
m_viewport = new ViewportWidget;
|
m_viewport = new ViewportWidget;
|
||||||
setCentralWidget(m_viewport);
|
setCentralWidget(m_viewport);
|
||||||
|
|
||||||
ApplicationController::instance()->setMainWindow(this);
|
m_appController->setMainWindow(this);
|
||||||
Document* document = ApplicationController::instance()->document();
|
Document* document = m_appController->document();
|
||||||
|
|
||||||
m_viewport->setDocument(document);
|
m_viewport->setDocument(document);
|
||||||
connect(document, &Document::featureAdded, m_viewport, QOverload<>::of(&QWidget::update));
|
connect(document, &Document::featureAdded, m_viewport, QOverload<>::of(&QWidget::update));
|
||||||
connect(document, &Document::cleared, m_viewport, QOverload<>::of(&QWidget::update));
|
connect(document, &Document::cleared, m_viewport, QOverload<>::of(&QWidget::update));
|
||||||
|
|
||||||
connect(ApplicationController::instance(), &ApplicationController::sketchModeStarted, this, &MainWindow::enterSketchMode);
|
connect(m_appController, &ApplicationController::sketchModeStarted, this, &MainWindow::enterSketchMode);
|
||||||
connect(ApplicationController::instance(), &ApplicationController::sketchModeEnded, this, &MainWindow::exitSketchMode);
|
connect(m_appController, &ApplicationController::sketchModeEnded, this, &MainWindow::exitSketchMode);
|
||||||
connect(ApplicationController::instance(), &ApplicationController::sketchModeStarted, m_viewport, &ViewportWidget::onSketchModeStarted);
|
connect(m_appController, &ApplicationController::sketchModeStarted, m_viewport, &ViewportWidget::onSketchModeStarted);
|
||||||
connect(ApplicationController::instance(), &ApplicationController::sketchModeEnded, m_viewport, &ViewportWidget::onSketchModeEnded);
|
connect(m_appController, &ApplicationController::sketchModeEnded, m_viewport, &ViewportWidget::onSketchModeEnded);
|
||||||
connect(ApplicationController::instance(), &ApplicationController::currentFileChanged, this, &MainWindow::updateWindowTitle);
|
connect(m_appController, &ApplicationController::currentFileChanged, this, &MainWindow::updateWindowTitle);
|
||||||
|
|
||||||
updateWindowTitle(QString());
|
updateWindowTitle(QString());
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::createSketch()
|
void MainWindow::createSketch()
|
||||||
{
|
{
|
||||||
ApplicationController::instance()->beginSketchCreation();
|
m_appController->beginSketchCreation();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::saveSketch()
|
void MainWindow::saveSketch()
|
||||||
{
|
{
|
||||||
ApplicationController::instance()->endSketch();
|
m_appController->endSketch();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::newFile()
|
void MainWindow::newFile()
|
||||||
{
|
{
|
||||||
ApplicationController::instance()->newDocument();
|
m_appController->newDocument();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::open()
|
void MainWindow::open()
|
||||||
{
|
{
|
||||||
ApplicationController::instance()->openDocument();
|
m_appController->openDocument();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MainWindow::save()
|
bool MainWindow::save()
|
||||||
{
|
{
|
||||||
return ApplicationController::instance()->saveDocument();
|
return m_appController->saveDocument();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MainWindow::saveAs()
|
bool MainWindow::saveAs()
|
||||||
{
|
{
|
||||||
return ApplicationController::instance()->saveDocumentAs();
|
return m_appController->saveDocumentAs();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::enterSketchMode()
|
void MainWindow::enterSketchMode()
|
||||||
|
|||||||
@@ -8,13 +8,14 @@ class Document;
|
|||||||
class Feature;
|
class Feature;
|
||||||
class QTabWidget;
|
class QTabWidget;
|
||||||
class QWidget;
|
class QWidget;
|
||||||
|
class ApplicationController;
|
||||||
|
|
||||||
class MainWindow : public QMainWindow
|
class MainWindow : public QMainWindow
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit MainWindow(QWidget *parent = nullptr);
|
explicit MainWindow(ApplicationController* appController, QWidget *parent = nullptr);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void newFile();
|
void newFile();
|
||||||
@@ -29,6 +30,7 @@ private slots:
|
|||||||
void updateWindowTitle(const QString& filePath);
|
void updateWindowTitle(const QString& filePath);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
ApplicationController* m_appController;
|
||||||
ViewportWidget *m_viewport;
|
ViewportWidget *m_viewport;
|
||||||
|
|
||||||
QTabWidget *m_tabWidget;
|
QTabWidget *m_tabWidget;
|
||||||
|
|||||||
@@ -1,11 +1,13 @@
|
|||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include "MainWindow.h"
|
#include "MainWindow.h"
|
||||||
|
#include "ApplicationController.h"
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
QApplication app(argc, argv);
|
QApplication app(argc, argv);
|
||||||
|
|
||||||
MainWindow window;
|
ApplicationController appController;
|
||||||
|
MainWindow window(&appController);
|
||||||
window.show();
|
window.show();
|
||||||
|
|
||||||
return app.exec();
|
return app.exec();
|
||||||
|
|||||||
Reference in New Issue
Block a user