CMake generator: Improve dialog size adjustability

Task-number: QDS-6466
Change-Id: I97cc262405a9a2be0a36217777f2804fb341518c
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
Tapani Mattila
2022-03-25 11:40:25 +02:00
parent 65f747c8f8
commit ce4395320f
2 changed files with 63 additions and 22 deletions

View File

@@ -34,7 +34,8 @@
#include <QPushButton> #include <QPushButton>
#include <QLayout> #include <QLayout>
#include <QLabel> #include <QLabel>
#include <QTreeView>
#include <QSplitter>
using namespace Utils; using namespace Utils;
@@ -49,36 +50,62 @@ CmakeGeneratorDialog::CmakeGeneratorDialog(const FilePath &rootDir, const FilePa
setWindowTitle(QCoreApplication::translate("QmlDesigner::GenerateCmake", setWindowTitle(QCoreApplication::translate("QmlDesigner::GenerateCmake",
"Select Files to Generate")); "Select Files to Generate"));
m_model = new CMakeGeneratorDialogTreeModel(rootDir, files, this); QLabel *mainLabel = new QLabel(QCoreApplication::translate("QmlDesigner::GenerateCmake",
"Start CMakeFiles.txt generation"),
this);
mainLabel->setMargin(30);
QVBoxLayout *dialogLayout = new QVBoxLayout(this); QVBoxLayout *dialogLayout = new QVBoxLayout(this);
dialogLayout->setSizeConstraint(QLayout::SetFixedSize); dialogLayout->addWidget(mainLabel);
dialogLayout->addWidget(createDetailsWidget());
dialogLayout->addWidget(createButtons());
setLayout(dialogLayout); setLayout(dialogLayout);
QWidget *advancedInnerWidget = new QWidget(this); setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
QVBoxLayout *advancedInnerLayout = new QVBoxLayout(advancedInnerWidget); setMaximumHeight(layout()->totalSizeHint().height());
advancedInnerWidget->setLayout(advancedInnerLayout);
advancedInnerWidget->setMinimumHeight(640); refreshNotificationText();
}
QTreeView* CmakeGeneratorDialog::createFileTree()
{
m_model = new CMakeGeneratorDialogTreeModel(m_rootDir, m_files, this);
QTreeView *tree = new QTreeView(this); QTreeView *tree = new QTreeView(this);
tree->setModel(m_model); tree->setModel(m_model);
tree->expandAll(); tree->expandAll();
tree->setHeaderHidden(true); tree->setHeaderHidden(true);
return tree;
}
QWidget* CmakeGeneratorDialog::createDetailsWidget()
{
QTreeView* tree = createFileTree();
m_notifications = new QTextEdit(this); m_notifications = new QTextEdit(this);
m_warningIcon = Utils::Icons::WARNING.pixmap(); m_warningIcon = Utils::Icons::WARNING.pixmap();
refreshNotificationText(); QSplitter *advancedInnerWidget = new QSplitter(this);
advancedInnerWidget->addWidget(tree);
advancedInnerLayout->addWidget(tree, 2); advancedInnerWidget->addWidget(m_notifications);
advancedInnerLayout->addWidget(m_notifications, 1); advancedInnerWidget->setStretchFactor(0, 2);
advancedInnerWidget->setStretchFactor(1, 1);
advancedInnerWidget->setOrientation(Qt::Vertical);
advancedInnerWidget->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::MinimumExpanding);
DetailsWidget *advancedWidget = new DetailsWidget(this); DetailsWidget *advancedWidget = new DetailsWidget(this);
advancedWidget->setMinimumWidth(600); advancedWidget->setMinimumWidth(600);
advancedWidget->setWidget(advancedInnerWidget); advancedWidget->setWidget(advancedInnerWidget);
advancedWidget->setSummaryText(QCoreApplication::translate("QmlDesigner::GenerateCmake", advancedWidget->setSummaryText(QCoreApplication::translate("QmlDesigner::GenerateCmake",
"Advanced Options")); "Advanced Options"));
connect(advancedWidget, &DetailsWidget::expanded, this, &CmakeGeneratorDialog::advancedVisibilityChanged);
return advancedWidget;
}
QWidget* CmakeGeneratorDialog::createButtons()
{
QDialogButtonBox *buttons = new QDialogButtonBox(QDialogButtonBox::Ok|QDialogButtonBox::Cancel); QDialogButtonBox *buttons = new QDialogButtonBox(QDialogButtonBox::Ok|QDialogButtonBox::Cancel);
auto *okButton = buttons->button(QDialogButtonBox::Ok); auto *okButton = buttons->button(QDialogButtonBox::Ok);
okButton->setDefault(true); okButton->setDefault(true);
@@ -87,14 +114,7 @@ CmakeGeneratorDialog::CmakeGeneratorDialog(const FilePath &rootDir, const FilePa
connect(buttons, &QDialogButtonBox::rejected, this, &QDialog::reject); connect(buttons, &QDialogButtonBox::rejected, this, &QDialog::reject);
connect(m_model, &CMakeGeneratorDialogTreeModel::checkedStateChanged, this, &CmakeGeneratorDialog::refreshNotificationText); connect(m_model, &CMakeGeneratorDialogTreeModel::checkedStateChanged, this, &CmakeGeneratorDialog::refreshNotificationText);
QLabel *mainLabel = new QLabel(QCoreApplication::translate("QmlDesigner::GenerateCmake", return buttons;
"Start CMakeFiles.txt generation"),
this);
mainLabel->setMargin(50);
dialogLayout->addWidget(mainLabel);
dialogLayout->addWidget(advancedWidget);
dialogLayout->addWidget(buttons);
} }
FilePaths CmakeGeneratorDialog::getFilePaths() FilePaths CmakeGeneratorDialog::getFilePaths()
@@ -151,5 +171,19 @@ void CmakeGeneratorDialog::refreshNotificationText()
} }
} }
void CmakeGeneratorDialog::advancedVisibilityChanged(bool visible)
{
if (visible) {
setMaximumHeight(QWIDGETSIZE_MAX);
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
}
else {
setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
int height = layout()->totalSizeHint().height();
setMaximumHeight(height);
resize(width(), height);
}
}
} //GenerateCmake } //GenerateCmake
} //QmlDesigner } //QmlDesigner

View File

@@ -33,7 +33,8 @@
#include <QDialog> #include <QDialog>
#include <QTextEdit> #include <QTextEdit>
#include <QTreeView>
#include <QLabel>
namespace QmlDesigner { namespace QmlDesigner {
namespace GenerateCmake { namespace GenerateCmake {
@@ -48,6 +49,12 @@ public:
public slots: public slots:
void refreshNotificationText(); void refreshNotificationText();
void advancedVisibilityChanged(bool visible);
private:
QTreeView* createFileTree();
QWidget* createDetailsWidget();
QWidget* createButtons();
private: private:
CMakeGeneratorDialogTreeModel *m_model; CMakeGeneratorDialogTreeModel *m_model;
@@ -57,7 +64,7 @@ private:
Utils::FilePaths m_files; Utils::FilePaths m_files;
}; };
} } //GenerateCmake
} } //QmlDesigner
#endif // CMAKEGENERATORDIALOG_H #endif // CMAKEGENERATORDIALOG_H