ui: Properly handle sub window stacks with QtWindowStackElement interface

This commit is contained in:
Eberhard Graether
2016-02-22 09:19:53 +01:00
parent 95b3fe9950
commit 7847d53fbb
6 changed files with 74 additions and 15 deletions
+13 -1
View File
@@ -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)
+7 -1
View File
@@ -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();
+14 -8
View File
@@ -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;
}
+14 -3
View File
@@ -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);