diff --git a/bin/app/data/gui/startscreen/startscreen.css b/bin/app/data/gui/startscreen/startscreen.css index ce7e1984..934450bd 100644 --- a/bin/app/data/gui/startscreen/startscreen.css +++ b/bin/app/data/gui/startscreen/startscreen.css @@ -36,6 +36,7 @@ color: black; font-size: 16pt; font-weight: bold; + margin-left: 6px; } #versionLabel { diff --git a/src/lib_gui/qt/window/QtAbout.cpp b/src/lib_gui/qt/window/QtAbout.cpp index 3f4149aa..cc83c425 100644 --- a/src/lib_gui/qt/window/QtAbout.cpp +++ b/src/lib_gui/qt/window/QtAbout.cpp @@ -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("Developed by:", this); @@ -104,9 +113,9 @@ void QtAbout::setupAbout() QLabel* companyLabel = new QLabel( "Coati Software OG
" - "Schlossallee 7/1
" - "5412 Puch bei Hallein
" - "Austria
" + "Schlossallee 7/1
" + "5412 Puch bei Hallein
" + "Austria
" "support@coati.io
" "coati.io", 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() diff --git a/src/lib_gui/qt/window/QtStartScreen.cpp b/src/lib_gui/qt/window/QtStartScreen.cpp index 8547ee1f..37f7ddf9 100644 --- a/src/lib_gui/qt/window/QtStartScreen.cpp +++ b/src/lib_gui/qt/window/QtStartScreen.cpp @@ -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 Coati trial!

" - "Explore our preindexed projects to experience Coati's unique user interface.

" - "If you want to use Coati on your own source code please " - "purchase a license, " - "or ask us for a temporary test license by writing to support@coati.io.", 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 Coati trial!

" + "Explore our preindexed projects to experience Coati's unique user interface.

" + "If you want to use Coati on your own source code please " + "purchase a license, " + "or ask us for a temporary test license by writing to support@coati.io.", this); + welcomeLabel->setOpenExternalLinks(true); + welcomeLabel->setObjectName("welcomeLabel"); + welcomeLabel->setWordWrap(true); + welcomeLabel->setAlignment(Qt::AlignTop); - QLabel* updateLabel = new QLabel( - "check for new version", 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( + "check for new version", 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() diff --git a/src/lib_gui/qt/window/QtStartScreen.h b/src/lib_gui/qt/window/QtStartScreen.h index 654e87af..56d67a32 100644 --- a/src/lib_gui/qt/window/QtStartScreen.h +++ b/src/lib_gui/qt/window/QtStartScreen.h @@ -47,8 +47,6 @@ private slots: void updateButtons(); private: - QPushButton* m_openProjectButton; - QPushButton* m_newProjectButton; std::vector m_recentProjectsButtons; }; diff --git a/src/lib_gui/qt/window/QtWindow.cpp b/src/lib_gui/qt/window/QtWindow.cpp index 7bd931ff..dde61adf 100644 --- a/src/lib_gui/qt/window/QtWindow.cpp +++ b/src/lib_gui/qt/window/QtWindow.cpp @@ -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() diff --git a/src/lib_gui/qt/window/QtWindow.h b/src/lib_gui/qt/window/QtWindow.h index b5304d9f..5f7d8166 100644 --- a/src/lib_gui/qt/window/QtWindow.h +++ b/src/lib_gui/qt/window/QtWindow.h @@ -3,6 +3,7 @@ #include #include +#include #include #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 diff --git a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPaths.cpp b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPaths.cpp index f1334b13..b23dcba3 100644 --- a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPaths.cpp +++ b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPaths.cpp @@ -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; }