ui: Made QtWindow resizeable with resize grip

* added size grip to bottom right corner of QtWindow
* use layouts on start screen
* added close button in about window to layout

bug id = 102
This commit is contained in:
Eberhard Graether
2016-06-30 13:52:18 +02:00
parent b5d9d20bc9
commit 32f894422d
7 changed files with 156 additions and 93 deletions
@@ -36,6 +36,7 @@
color: black;
font-size: 16pt;
font-weight: bold;
margin-left: 6px;
}
#versionLabel {
+16 -20
View File
@@ -33,10 +33,9 @@ void QtAbout::setupAbout()
setStyleSheet(utility::getStyleSheet(ResourcePaths::getGuiPath() + "about/about.css").c_str());
QVBoxLayout* windowLayout = new QVBoxLayout();
windowLayout->setContentsMargins(30, 30, 30, 20);
m_window->setLayout(windowLayout);
windowLayout->addStretch();
windowLayout->setContentsMargins(10, 10, 10, 0);
windowLayout->setSpacing(1);
m_content->setLayout(windowLayout);
{
QHBoxLayout* row = new QHBoxLayout();
@@ -56,6 +55,16 @@ void QtAbout::setupAbout()
QVBoxLayout* column = new QVBoxLayout();
row->addLayout(column);
QtDeviceScaledPixmap closePixmap((ResourcePaths::getGuiPath() + "about/icon_close.png").c_str());
closePixmap.scaleToHeight(20);
QPushButton* closeButton = new QPushButton(this);
closeButton->setIcon(QIcon(closePixmap.pixmap()));
closeButton->setObjectName("closeButton");
closeButton->show();
connect(closeButton, SIGNAL(clicked()), this, SLOT(handleCloseButtonPress()));
column->addWidget(closeButton, 0, Qt::AlignTop | Qt::AlignRight);
column->addStretch();
QLabel* developerTitle = new QLabel("<b>Developed by:</b>", this);
@@ -104,9 +113,9 @@ void QtAbout::setupAbout()
QLabel* companyLabel = new QLabel(
"<b>Coati Software OG</b><br />"
"<b>Schlossallee 7/1</b><br />"
"<b>5412 Puch bei Hallein</b><br />"
"<b>Austria</b><br />"
"Schlossallee 7/1<br />"
"5412 Puch bei Hallein<br />"
"Austria<br />"
"<b>support@coati.io</b><br />"
"<b><a href=\"https://coati.io\" style=\"color: white;\">coati.io</a></b>",
this);
@@ -139,19 +148,6 @@ void QtAbout::setupAbout()
}
}
}
windowLayout->addStretch();
QtDeviceScaledPixmap closePixmap((ResourcePaths::getGuiPath() + "about/icon_close.png").c_str());
closePixmap.scaleToHeight(20);
QPushButton* closeButton = new QPushButton(this);
closeButton->setIcon(QIcon(closePixmap.pixmap()));
closeButton->setObjectName("closeButton");
closeButton->move(455, 25);
closeButton->show();
connect(closeButton, SIGNAL(clicked()), this, SLOT(handleCloseButtonPress()));
}
void QtAbout::handleCloseButtonPress()
+95 -61
View File
@@ -126,77 +126,111 @@ void QtStartScreen::setupStartScreen()
setStyleSheet(utility::getStyleSheet(ResourcePaths::getGuiPath() + "startscreen/startscreen.css").c_str());
addLogo();
if (isTrial())
QHBoxLayout* layout = new QHBoxLayout();
layout->setContentsMargins(15, 170, 15, 10);
layout->setSpacing(1);
m_content->setLayout(layout);
{
QLabel* welcomeLabel = new QLabel(
"Welcome to the <b>Coati trial</b>!<br /><br />"
"Explore our preindexed projects to experience Coati's unique user interface.<br /><br />"
"If you want to use Coati on your own source code please "
"<a href=\"http://coati.io/buy-license\" style=\"color: #007AC2;\">purchase a license</a>, "
"or ask us for a temporary test license by writing to <b>support@coati.io</b>.", this);
welcomeLabel->setOpenExternalLinks(true);
welcomeLabel->setGeometry(30, 303, 200, 500);
welcomeLabel->setObjectName("welcomeLabel");
welcomeLabel->show();
welcomeLabel->setWordWrap(true);
welcomeLabel->setAlignment(Qt::AlignTop);
}
else
{
m_newProjectButton = new QPushButton("New Project", this);
m_newProjectButton->setAttribute(Qt::WA_LayoutUsesWidgetRect); // fixes layouting on Mac
m_newProjectButton->move(30, 505);
m_newProjectButton->setObjectName("projectButton");
m_newProjectButton->show();
connect(m_newProjectButton, SIGNAL(clicked()), this, SLOT(handleNewProjectButton()));
QVBoxLayout* col = new QVBoxLayout();
layout->addLayout(col, 2);
m_openProjectButton = new QPushButton("Open Project", this);
m_openProjectButton->setAttribute(Qt::WA_LayoutUsesWidgetRect); // fixes layouting on Mac
m_openProjectButton->move(30, 540);
m_openProjectButton->setObjectName("projectButton");
m_openProjectButton->show();
connect(m_openProjectButton, SIGNAL(clicked()), this, SLOT(handleOpenProjectButton()));
if (isTrial())
{
col->addSpacing(50);
QLabel* versionLabel = new QLabel(("Version " + Version::getApplicationVersion().toDisplayString()).c_str(), this);
versionLabel->setGeometry(30, 234, 300, 50);
versionLabel->setObjectName("versionLabel");
versionLabel->show();
QLabel* welcomeLabel = new QLabel(
"Welcome to the <b>Coati trial</b>!<br /><br />"
"Explore our preindexed projects to experience Coati's unique user interface.<br /><br />"
"If you want to use Coati on your own source code please "
"<a href=\"http://coati.io/buy-license\" style=\"color: #007AC2;\">purchase a license</a>, "
"or ask us for a temporary test license by writing to <b>support@coati.io</b>.", this);
welcomeLabel->setOpenExternalLinks(true);
welcomeLabel->setObjectName("welcomeLabel");
welcomeLabel->setWordWrap(true);
welcomeLabel->setAlignment(Qt::AlignTop);
QLabel* updateLabel = new QLabel(
"<a href=\"https://coati.io/downloads\" style=\"color: #007AC2;\">check for new version</a>", this);
updateLabel->setOpenExternalLinks(true);
updateLabel->setGeometry(30, 255, 300, 50);
updateLabel->setObjectName("updateLabel");
updateLabel->show();
col->addWidget(welcomeLabel, 0, Qt::AlignHCenter | Qt::AlignTop);
col->addStretch();
layout->addStretch(1);
}
else
{
QLabel* versionLabel = new QLabel(("Version " + Version::getApplicationVersion().toDisplayString()).c_str(), this);
versionLabel->setObjectName("versionLabel");
col->addWidget(versionLabel);
QLabel* updateLabel = new QLabel(
"<a href=\"https://coati.io/downloads\" style=\"color: #007AC2;\">check for new version</a>", this);
updateLabel->setOpenExternalLinks(true);
updateLabel->setObjectName("updateLabel");
col->addWidget(updateLabel);
col->addStretch();
QPushButton* newProjectButton = new QPushButton("New Project", this);
newProjectButton->setAttribute(Qt::WA_LayoutUsesWidgetRect); // fixes layouting on Mac
newProjectButton->setObjectName("projectButton");
newProjectButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
connect(newProjectButton, SIGNAL(clicked()), this, SLOT(handleNewProjectButton()));
col->addWidget(newProjectButton);
col->addSpacing(8);
QPushButton* openProjectButton = new QPushButton("Open Project", this);
openProjectButton->setAttribute(Qt::WA_LayoutUsesWidgetRect); // fixes layouting on Mac
openProjectButton->setObjectName("projectButton");
openProjectButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
connect(openProjectButton, SIGNAL(clicked()), this, SLOT(handleOpenProjectButton()));
col->addWidget(openProjectButton);
layout->addStretch(2);
}
}
QLabel* recentProjectsLabel = new QLabel("Recent Projects: ", this);
if (isTrial())
{
recentProjectsLabel->setText("Projects:");
}
recentProjectsLabel->setGeometry(300, 234, 300, 50);
recentProjectsLabel->setObjectName("recentLabel");
recentProjectsLabel->show();
QVBoxLayout* col = new QVBoxLayout();
layout->addLayout(col, 1);
int position = 290;
QIcon cpp_icon((ResourcePaths::getGuiPath() + "icon/project_256_256.png").c_str());
for (int i = 0
; i < ApplicationSettings::getInstance()->getMaxRecentProjectsCount()
; i++)
{
QtRecentProjectButton* button = new QtRecentProjectButton(this);
button->setAttribute(Qt::WA_LayoutUsesWidgetRect); // fixes layouting on Mac
button->setIcon(cpp_icon);
button->setIconSize(QSize(25, 25));
button->setObjectName("recentButtonMissing");
button->setGeometry(292, position, button->fontMetrics().width(button->text()) + 45, 40);
button->minimumSizeHint(); // force font loading
button->show();
position += 40;
m_recentProjectsButtons.push_back(button);
QLabel* recentProjectsLabel = new QLabel("Recent Projects: ", this);
if (isTrial())
{
recentProjectsLabel->setText("Projects:");
}
recentProjectsLabel->setObjectName("recentLabel");
col->addWidget(recentProjectsLabel);
col->addSpacing(20);
QIcon cpp_icon((ResourcePaths::getGuiPath() + "icon/project_256_256.png").c_str());
for (int i = 0
; i < ApplicationSettings::getInstance()->getMaxRecentProjectsCount()
; i++)
{
QtRecentProjectButton* button = new QtRecentProjectButton(this);
button->setAttribute(Qt::WA_LayoutUsesWidgetRect); // fixes layouting on Mac
button->setIcon(cpp_icon);
button->setIconSize(QSize(25, 25));
button->setMinimumSize(button->fontMetrics().width(button->text()) + 45, 40);
button->setObjectName("recentButtonMissing");
button->minimumSizeHint(); // force font loading
m_recentProjectsButtons.push_back(button);
col->addWidget(button);
}
col->addStretch();
}
layout->addStretch(1);
updateButtons();
QSize size = sizeHint();
move(
parentWidget()->pos().x() + parentWidget()->width() / 2 - size.width() / 2,
parentWidget()->pos().y() + parentWidget()->height() / 2 - size.height() / 2
);
}
void QtStartScreen::handleNewProjectButton()
-2
View File
@@ -47,8 +47,6 @@ private slots:
void updateButtons();
private:
QPushButton* m_openProjectButton;
QPushButton* m_newProjectButton;
std::vector<QtRecentProjectButton*> m_recentProjectsButtons;
};
+37 -8
View File
@@ -50,6 +50,18 @@ QtWindow::QtWindow(QWidget* parent)
m_window->setGraphicsEffect(effect);
}
QVBoxLayout* layout = new QVBoxLayout(m_window);
layout->setSpacing(1);
m_content = new QWidget();
layout->addWidget(m_content);
QHBoxLayout* gripLayout = new QHBoxLayout();
QSizeGrip* sizeGrip = new QSizeGrip(m_window);
gripLayout->addWidget(new QWidget());
gripLayout->addWidget(sizeGrip);
layout->addLayout(gripLayout);
resize(sizeHint());
this->raise();
@@ -67,7 +79,7 @@ void QtWindow::setup()
{
setStyleSheet(utility::getStyleSheet(ResourcePaths::getGuiPath() + "window/window.css").c_str());
QVBoxLayout* layout = new QVBoxLayout();
layout->setContentsMargins(25, 30, 25, 20);
layout->setContentsMargins(25, 30, 25, 0);
m_title = new QLabel();
m_title->setObjectName("title");
@@ -120,7 +132,7 @@ void QtWindow::setup()
layout->addLayout(buttons);
}
m_window->setLayout(layout);
m_content->setLayout(layout);
if (m_showAsPopup)
{
@@ -243,20 +255,32 @@ void QtWindow::hideWindow()
void QtWindow::resizeEvent(QResizeEvent *event)
{
QSize size = event->size();
if (size.width() < 300)
{
size.setWidth(300);
resize(size);
return;
}
if (size.height() < 200)
{
size.setHeight(200);
resize(size);
return;
}
int displacement = 0;
if (m_hasLogo)
{
displacement = 58;
}
QSize windowSize = event->size() - QSize(10, 10 + displacement);
QSize windowSize = size - QSize(10, 10 + displacement);
m_window->resize(windowSize);
m_window->move(5, displacement + 10);
move(
parentWidget()->pos().x() + parentWidget()->width() / 2 - event->size().width() / 2,
parentWidget()->pos().y() + parentWidget()->height() / 2 - event->size().height() / 2
);
}
void QtWindow::keyPressEvent(QKeyEvent *event)
@@ -331,6 +355,11 @@ void QtWindow::setupDone()
QSize size(qMax(actualSize.width(), preferredSize.width()), qMax(actualSize.height(), preferredSize.height()));
resize(size);
move(
parentWidget()->pos().x() + parentWidget()->width() / 2 - size.width() / 2,
parentWidget()->pos().y() + parentWidget()->height() / 2 - size.height() / 2
);
}
void QtWindow::addLogo()
+4
View File
@@ -3,6 +3,7 @@
#include <QHBoxLayout>
#include <QResizeEvent>
#include <QSizeGrip>
#include <QWidget>
#include "qt/window/QtWindowStack.h"
@@ -71,6 +72,7 @@ protected:
void addLogo();
QWidget* m_window;
QWidget* m_content;
QLabel* m_title;
@@ -92,6 +94,8 @@ private:
QPoint m_dragPosition;
bool m_mousePressedInWindow;
QSizeGrip* m_sizeGrip;
};
#endif // QT_WINDOW_H
@@ -105,15 +105,16 @@ bool QtProjectWizzardContentPaths::check()
if (!fi.exists())
{
missingPaths.append("\n");
missingPaths.append(f.str().c_str());
missingPaths.append("\n");
}
}
if (!missingPaths.isEmpty())
{
QMessageBox msgBox;
msgBox.setText("These paths do not exist:" + missingPaths);
msgBox.setText("Some project paths do not exist.");
msgBox.setDetailedText(missingPaths);
msgBox.exec();
return false;
}