ui: Properly handle sub window stacks with QtWindowStackElement interface
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -5,13 +5,15 @@
|
||||
#include <QResizeEvent>
|
||||
#include <QWidget>
|
||||
|
||||
#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();
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -5,6 +5,17 @@
|
||||
|
||||
#include <QWidget>
|
||||
|
||||
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<QWidget*> m_stack;
|
||||
std::vector<QtWindowStackElement*> m_stack;
|
||||
};
|
||||
|
||||
#endif // QT_WINDOW_STACK
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user