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