diff --git a/src/lib_gui/qt/window/QtSettingsWindow.cpp b/src/lib_gui/qt/window/QtSettingsWindow.cpp index 21895135..62759025 100644 --- a/src/lib_gui/qt/window/QtSettingsWindow.cpp +++ b/src/lib_gui/qt/window/QtSettingsWindow.cpp @@ -14,13 +14,15 @@ #include "utility/ResourcePaths.h" QtSettingsWindow::QtSettingsWindow(QWidget *parent, int displacement) - : QWidget(parent, Qt::Dialog | Qt::FramelessWindowHint) + : QtWindowStackElement(parent) , m_title(nullptr) , m_cancelButton(nullptr) , m_doneButton(nullptr) , m_mousePressedInWindow(false) , m_cancelAble(true) { + setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint); + QSize windowSize = sizeHint(); move(parent->pos().x() + parent->width() / 2 - 250, parent->pos().y() + parent->height() / 2 - 250); @@ -201,6 +203,16 @@ void QtSettingsWindow::updateDoneButton(QString text) } } +void QtSettingsWindow::showWindow() +{ + show(); +} + +void QtSettingsWindow::hideWindow() +{ + hide(); +} + void QtSettingsWindow::hideCancelButton(bool hidden) { if(m_cancelButton) diff --git a/src/lib_gui/qt/window/QtSettingsWindow.h b/src/lib_gui/qt/window/QtSettingsWindow.h index 1fd02a37..f800d9ab 100644 --- a/src/lib_gui/qt/window/QtSettingsWindow.h +++ b/src/lib_gui/qt/window/QtSettingsWindow.h @@ -5,13 +5,15 @@ #include #include +#include "qt/window/QtWindowStack.h" + class QFormLayout; class QLabel; class QPushButton; class QVBoxLayout; class QtSettingsWindow - : public QWidget + : public QtWindowStackElement { Q_OBJECT @@ -27,6 +29,10 @@ public: void updateTitle(QString title); void updateDoneButton(QString text); + // QtWindowStackElement implementation + virtual void showWindow() override; + virtual void hideWindow() override; + signals: void finished(); void canceled(); diff --git a/src/lib_gui/qt/window/QtWindowStack.cpp b/src/lib_gui/qt/window/QtWindowStack.cpp index 1187eeaf..acde28ca 100644 --- a/src/lib_gui/qt/window/QtWindowStack.cpp +++ b/src/lib_gui/qt/window/QtWindowStack.cpp @@ -1,11 +1,17 @@ #include "qt/window/QtWindowStack.h" + +QtWindowStackElement::QtWindowStackElement(QWidget* parent) + : QWidget(parent) +{ +} + QtWindowStack::QtWindowStack(QObject* parent) : QObject(parent) { } -QWidget* QtWindowStack::getTopWindow() +QtWindowStackElement* QtWindowStack::getTopWindow() { if (m_stack.size()) { @@ -15,14 +21,14 @@ QWidget* QtWindowStack::getTopWindow() return nullptr; } -void QtWindowStack::pushWindow(QWidget* window) +void QtWindowStack::pushWindow(QtWindowStackElement* window) { if (m_stack.size()) { - m_stack.back()->hide(); + m_stack.back()->hideWindow(); } - window->show(); + window->showWindow(); m_stack.push_back(window); @@ -33,7 +39,7 @@ void QtWindowStack::popWindow() { if (m_stack.size()) { - m_stack.back()->hide(); + m_stack.back()->hideWindow(); delete m_stack.back(); m_stack.pop_back(); @@ -42,7 +48,7 @@ void QtWindowStack::popWindow() if (m_stack.size()) { - m_stack.back()->show(); + m_stack.back()->showWindow(); } else { @@ -52,9 +58,9 @@ void QtWindowStack::popWindow() void QtWindowStack::clearWindows() { - for (QWidget* window : m_stack) + for (QtWindowStackElement* window : m_stack) { - window->hide(); + window->hideWindow(); delete window; } diff --git a/src/lib_gui/qt/window/QtWindowStack.h b/src/lib_gui/qt/window/QtWindowStack.h index 72fa246e..8b813960 100644 --- a/src/lib_gui/qt/window/QtWindowStack.h +++ b/src/lib_gui/qt/window/QtWindowStack.h @@ -5,6 +5,17 @@ #include +class QtWindowStackElement + : public QWidget +{ +public: + QtWindowStackElement(QWidget* parent = nullptr); + + virtual void showWindow() = 0; + virtual void hideWindow() = 0; +}; + + class QtWindowStack : public QObject { @@ -18,15 +29,15 @@ signals: public: QtWindowStack(QObject* parent = nullptr); - QWidget* getTopWindow(); + QtWindowStackElement* getTopWindow(); public slots: - void pushWindow(QWidget* window); + void pushWindow(QtWindowStackElement* window); void popWindow(); void clearWindows(); private: - std::vector m_stack; + std::vector m_stack; }; #endif // QT_WINDOW_STACK diff --git a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzard.cpp b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzard.cpp index 63cb4b63..1b2447c2 100644 --- a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzard.cpp +++ b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzard.cpp @@ -16,13 +16,33 @@ #include "utility/solution/SolutionParserVisualStudio.h" QtProjectWizzard::QtProjectWizzard(QWidget* parent) - : QWidget(parent) + : QtWindowStackElement(parent) , m_windowStack(this) { connect(&m_windowStack, SIGNAL(push()), this, SLOT(windowStackChanged())); connect(&m_windowStack, SIGNAL(pop()), this, SLOT(windowStackChanged())); } +void QtProjectWizzard::showWindow() +{ + QtWindowStackElement* element = m_windowStack.getTopWindow(); + + if (element) + { + element->show(); + } +} + +void QtProjectWizzard::hideWindow() +{ + QtWindowStackElement* element = m_windowStack.getTopWindow(); + + if (element) + { + element->hide(); + } +} + void QtProjectWizzard::newProject() { m_settings = ProjectSettings(); diff --git a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzard.h b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzard.h index 1e88976a..0aed7f81 100644 --- a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzard.h +++ b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzard.h @@ -10,7 +10,7 @@ class ProjectSettings; class QtProjectWizzardWindow; class QtProjectWizzard - : public QWidget + : public QtWindowStackElement { Q_OBJECT @@ -21,6 +21,10 @@ signals: public: QtProjectWizzard(QWidget* parent = nullptr); + // QtWindowStackElement implementation + virtual void showWindow() override; + virtual void hideWindow() override; + public slots: void newProject(); void newProjectFromVisualStudioSolution(const std::string& visualStudioSolutionPath);