diff --git a/src/plugins/git/gerrit/gerrit.pri b/src/plugins/git/gerrit/gerrit.pri index c13f9e210b6..01d71f89864 100644 --- a/src/plugins/git/gerrit/gerrit.pri +++ b/src/plugins/git/gerrit/gerrit.pri @@ -14,4 +14,6 @@ HEADERS += $$PWD/gerritdialog.h \ $$PWD/gerritpushdialog.h \ $$PWD/branchcombobox.h -FORMS += $$PWD/gerritpushdialog.ui +FORMS += $$PWD/gerritdialog.ui \ + $$PWD/gerritpushdialog.ui + diff --git a/src/plugins/git/gerrit/gerritdialog.cpp b/src/plugins/git/gerrit/gerritdialog.cpp index 19660fa6700..48f27a14093 100644 --- a/src/plugins/git/gerrit/gerritdialog.cpp +++ b/src/plugins/git/gerrit/gerritdialog.cpp @@ -24,41 +24,31 @@ ****************************************************************************/ #include "gerritdialog.h" +#include "ui_gerritdialog.h" #include "gerritmodel.h" #include "gerritparameters.h" -#include #include "../gitplugin.h" #include "../gitclient.h" -#include -#include -#include -#include -#include +#include + #include #include +#include +#include +#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include +#include +#include +#include +#include +#include namespace Gerrit { namespace Internal { -static const int layoutSpacing = 5; static const int maxTitleWidth = 350; GerritDialog::GerritDialog(const QSharedPointer &p, @@ -69,61 +59,34 @@ GerritDialog::GerritDialog(const QSharedPointer &p, , m_parameters(p) , m_server(s) , m_filterModel(new QSortFilterProxyModel(this)) + , m_ui(new Ui::GerritDialog) , m_model(new GerritModel(p, this)) , m_queryModel(new QStringListModel(this)) - , m_treeView(new Utils::TreeView) - , m_detailsBrowser(new QTextBrowser) - , m_queryLineEdit(new Utils::FancyLineEdit) - , m_filterLineEdit(new Utils::FancyLineEdit) - , m_repositoryChooser(new Utils::PathChooser) - , m_buttonBox(new QDialogButtonBox(QDialogButtonBox::Close)) - , m_repositoryChooserLabel(new QLabel(tr("Apply in:") + ' ', this)) , m_fetchRunning(false) { setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); - QGroupBox *changesGroup = new QGroupBox(tr("Changes")); - QVBoxLayout *changesLayout = new QVBoxLayout(changesGroup); - changesLayout->setMargin(layoutSpacing); - QHBoxLayout *filterLayout = new QHBoxLayout; - QLabel *queryLabel = new QLabel(tr("&Query:")); - queryLabel->setBuddy(m_queryLineEdit); - m_queryLineEdit->setFixedWidth(400); - m_queryLineEdit->setPlaceholderText(tr("Change #, SHA-1, tr:id, owner:email or reviewer:email")); + m_ui->setupUi(this); m_queryModel->setStringList(m_parameters->savedQueries); QCompleter *completer = new QCompleter(this); completer->setModel(m_queryModel); - m_queryLineEdit->setSpecialCompleter(completer); - m_queryLineEdit->setOkColor(Utils::creatorTheme()->color(Utils::Theme::TextColorNormal)); - m_queryLineEdit->setErrorColor(Utils::creatorTheme()->color(Utils::Theme::TextColorError)); - m_queryLineEdit->setValidationFunction([this](Utils::FancyLineEdit *, QString *) { + m_ui->queryLineEdit->setSpecialCompleter(completer); + m_ui->queryLineEdit->setOkColor(Utils::creatorTheme()->color(Utils::Theme::TextColorNormal)); + m_ui->queryLineEdit->setErrorColor(Utils::creatorTheme()->color(Utils::Theme::TextColorError)); + m_ui->queryLineEdit->setValidationFunction([this](Utils::FancyLineEdit *, QString *) { return m_model->state() != GerritModel::Error; }); - filterLayout->addWidget(queryLabel); - filterLayout->addWidget(m_queryLineEdit); - filterLayout->addItem(new QSpacerItem(0, 0, QSizePolicy::MinimumExpanding, QSizePolicy::Ignored)); - m_filterLineEdit->setFixedWidth(300); - m_filterLineEdit->setFiltering(true); - filterLayout->addWidget(m_filterLineEdit); - connect(m_filterLineEdit, &Utils::FancyLineEdit::filterChanged, + m_ui->filterLineEdit->setFiltering(true); + connect(m_ui->filterLineEdit, &Utils::FancyLineEdit::filterChanged, m_filterModel, &QSortFilterProxyModel::setFilterFixedString); - connect(m_queryLineEdit, &QLineEdit::returnPressed, this, &GerritDialog::slotRefresh); - connect(m_model, &GerritModel::stateChanged, m_queryLineEdit, &Utils::FancyLineEdit::validate); + connect(m_ui->queryLineEdit, &QLineEdit::returnPressed, this, &GerritDialog::slotRefresh); + connect(m_model, &GerritModel::stateChanged, m_ui->queryLineEdit, &Utils::FancyLineEdit::validate); m_filterModel->setFilterCaseSensitivity(Qt::CaseInsensitive); - changesLayout->addLayout(filterLayout); - changesLayout->addWidget(m_treeView); - m_filterModel->setSourceModel(m_model); m_filterModel->setFilterRole(GerritModel::FilterRole); m_filterModel->setSortRole(GerritModel::SortRole); - m_treeView->setRootIsDecorated(true); - m_treeView->setModel(m_filterModel); - m_treeView->setMinimumWidth(600); - m_treeView->setUniformRowHeights(true); - m_treeView->setRootIsDecorated(false); - m_treeView->setSelectionBehavior(QAbstractItemView::SelectRows); - m_treeView->setSortingEnabled(true); - m_treeView->setActivationMode(Utils::DoubleClickActivation); + m_ui->treeView->setModel(m_filterModel); + m_ui->treeView->setActivationMode(Utils::DoubleClickActivation); connect(&m_progressIndicatorTimer, &QTimer::timeout, [this]() { setProgressIndicatorVisible(true); }); @@ -131,31 +94,21 @@ GerritDialog::GerritDialog(const QSharedPointer &p, m_progressIndicatorTimer.setInterval(50); // don't show progress for < 50ms tasks m_progressIndicator = new Utils::ProgressIndicator(Utils::ProgressIndicator::Large, - m_treeView); - m_progressIndicator->attachToWidget(m_treeView->viewport()); + m_ui->treeView); + m_progressIndicator->attachToWidget(m_ui->treeView->viewport()); m_progressIndicator->hide(); connect(m_model, &GerritModel::stateChanged, this, &GerritDialog::manageProgressIndicator); - QItemSelectionModel *selectionModel = m_treeView->selectionModel(); + QItemSelectionModel *selectionModel = m_ui->treeView->selectionModel(); connect(selectionModel, &QItemSelectionModel::currentChanged, this, &GerritDialog::slotCurrentChanged); - connect(m_treeView, &QAbstractItemView::activated, + connect(m_ui->treeView, &QAbstractItemView::activated, this, &GerritDialog::slotActivated); - QGroupBox *detailsGroup = new QGroupBox(tr("Details")); - QVBoxLayout *detailsLayout = new QVBoxLayout(detailsGroup); - detailsLayout->setMargin(layoutSpacing); - m_detailsBrowser->setOpenExternalLinks(true); - m_detailsBrowser->setTextInteractionFlags(Qt::TextBrowserInteraction); - detailsLayout->addWidget(m_detailsBrowser); - - m_repositoryChooser->setExpectedKind(Utils::PathChooser::ExistingDirectory); - m_repositoryChooser->setHistoryCompleter("Git.RepoDir.History"); - QHBoxLayout *repoPathLayout = new QHBoxLayout; - repoPathLayout->addWidget(m_repositoryChooserLabel); - repoPathLayout->addWidget(m_repositoryChooser); - detailsLayout->addLayout(repoPathLayout); + m_ui->repositoryChooser->setExpectedKind(Utils::PathChooser::ExistingDirectory); + m_ui->repositoryChooser->setHistoryCompleter("Git.RepoDir.History"); + m_ui->repositoryChooser->setPath(repository); m_displayButton = addActionButton(tr("&Show"), [this]() { slotFetchDisplay(); }); m_cherryPickButton = addActionButton(tr("Cherry &Pick"), [this]() { slotFetchCherryPick(); }); @@ -166,41 +119,28 @@ GerritDialog::GerritDialog(const QSharedPointer &p, m_refreshButton, &QWidget::setDisabled); connect(m_model, &GerritModel::refreshStateChanged, this, &GerritDialog::slotRefreshStateChanged); - connect(m_buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept); - connect(m_buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject); - QSplitter *splitter = new QSplitter(Qt::Vertical, this); - splitter->addWidget(changesGroup); - splitter->addWidget(detailsGroup); - splitter->setSizes(QList() << 400 << 200); - - QVBoxLayout *mainLayout = new QVBoxLayout(this); - mainLayout->addWidget(splitter); - mainLayout->addWidget(m_buttonBox); - - m_repositoryChooser->setPath(repository); slotCurrentChanged(); slotRefresh(); - resize(QSize(950, 600)); - m_treeView->setFocus(); + m_ui->treeView->setFocus(); m_refreshButton->setDefault(true); } QString GerritDialog::repositoryPath() const { - return m_repositoryChooser->path(); + return m_ui->repositoryChooser->path(); } void GerritDialog::setCurrentPath(const QString &path) { - m_repositoryChooser->setPath(path); + m_ui->repositoryChooser->setPath(path); } QPushButton *GerritDialog::addActionButton(const QString &text, const std::function &buttonSlot) { - QPushButton *button = m_buttonBox->addButton(text, QDialogButtonBox::ActionRole); + QPushButton *button = m_ui->buttonBox->addButton(text, QDialogButtonBox::ActionRole); connect(button, &QPushButton::clicked, this, buttonSlot); return button; } @@ -218,6 +158,7 @@ void GerritDialog::updateCompletions(const QString &query) GerritDialog::~GerritDialog() { + delete m_ui; } void GerritDialog::slotActivated(const QModelIndex &i) @@ -230,11 +171,11 @@ void GerritDialog::slotActivated(const QModelIndex &i) void GerritDialog::slotRefreshStateChanged(bool v) { if (!v && m_model->rowCount()) { - m_treeView->expandAll(); + m_ui->treeView->expandAll(); for (int c = 0; c < GerritModel::ColumnCount; ++c) - m_treeView->resizeColumnToContents(c); - if (m_treeView->columnWidth(GerritModel::TitleColumn) > maxTitleWidth) - m_treeView->setColumnWidth(GerritModel::TitleColumn, maxTitleWidth); + m_ui->treeView->resizeColumnToContents(c); + if (m_ui->treeView->columnWidth(GerritModel::TitleColumn) > maxTitleWidth) + m_ui->treeView->setColumnWidth(GerritModel::TitleColumn, maxTitleWidth); } } @@ -261,17 +202,17 @@ void GerritDialog::slotFetchCheckout() void GerritDialog::slotRefresh() { - const QString &query = m_queryLineEdit->text().trimmed(); + const QString &query = m_ui->queryLineEdit->text().trimmed(); updateCompletions(query); updateRemote(); m_model->refresh(m_server, query); - m_treeView->sortByColumn(-1); + m_ui->treeView->sortByColumn(-1); } void GerritDialog::updateRemote() { - const QString repository = m_repositoryChooser->path(); - if (m_repository == repository || !m_repositoryChooser->isValid()) + const QString repository = m_ui->repositoryChooser->path(); + if (m_repository == repository || !m_ui->repositoryChooser->isValid()) return; static const QRegularExpression sshPattern( "^(?:(?[^:]+)://)?(?:(?[^@]+)@)?(?[^:/]+)(?::(?\\d+))?"); @@ -338,13 +279,13 @@ void GerritDialog::manageProgressIndicator() QModelIndex GerritDialog::currentIndex() const { - const QModelIndex index = m_treeView->selectionModel()->currentIndex(); + const QModelIndex index = m_ui->treeView->selectionModel()->currentIndex(); return index.isValid() ? m_filterModel->mapToSource(index) : QModelIndex(); } void GerritDialog::updateButtons() { - const bool enabled = !m_fetchRunning && m_treeView->selectionModel()->currentIndex().isValid(); + const bool enabled = !m_fetchRunning && m_ui->treeView->selectionModel()->currentIndex().isValid(); m_displayButton->setEnabled(enabled); m_cherryPickButton->setEnabled(enabled); m_checkoutButton->setEnabled(enabled); @@ -353,7 +294,7 @@ void GerritDialog::updateButtons() void GerritDialog::slotCurrentChanged() { const QModelIndex current = currentIndex(); - m_detailsBrowser->setText(current.isValid() ? m_model->toHtml(current) : QString()); + m_ui->detailsBrowser->setText(current.isValid() ? m_model->toHtml(current) : QString()); updateButtons(); } diff --git a/src/plugins/git/gerrit/gerritdialog.h b/src/plugins/git/gerrit/gerritdialog.h index 740c7733d76..c6e3d12c644 100644 --- a/src/plugins/git/gerrit/gerritdialog.h +++ b/src/plugins/git/gerrit/gerritdialog.h @@ -25,37 +25,28 @@ #pragma once -#include - #include #include #include +#include + QT_BEGIN_NAMESPACE -class QTreeView; -class QLabel; class QModelIndex; class QSortFilterProxyModel; -class QStandardItem; class QStringListModel; class QPushButton; -class QDialogButtonBox; -class QTextBrowser; QT_END_NAMESPACE -namespace Utils { -class FancyLineEdit; -class ProgressIndicator; -class TreeView; -} +namespace Utils { class ProgressIndicator; } namespace Gerrit { namespace Internal { +namespace Ui { class GerritDialog; } class GerritChange; class GerritModel; class GerritParameters; class GerritServer; -class QueryValidatingLineEdit; class GerritDialog : public QDialog { @@ -99,19 +90,13 @@ private: const QSharedPointer m_parameters; const QSharedPointer m_server; QSortFilterProxyModel *m_filterModel; + Ui::GerritDialog *m_ui; GerritModel *m_model; QStringListModel *m_queryModel; - Utils::TreeView *m_treeView; - QTextBrowser *m_detailsBrowser; - Utils::FancyLineEdit *m_queryLineEdit; - Utils::FancyLineEdit *m_filterLineEdit; - Utils::PathChooser *m_repositoryChooser; - QDialogButtonBox *m_buttonBox; QPushButton *m_displayButton; QPushButton *m_cherryPickButton; QPushButton *m_checkoutButton; QPushButton *m_refreshButton; - QLabel *m_repositoryChooserLabel; Utils::ProgressIndicator *m_progressIndicator; QTimer m_progressIndicatorTimer; QString m_repository; diff --git a/src/plugins/git/gerrit/gerritdialog.ui b/src/plugins/git/gerrit/gerritdialog.ui new file mode 100644 index 00000000000..787cd8e1824 --- /dev/null +++ b/src/plugins/git/gerrit/gerritdialog.ui @@ -0,0 +1,256 @@ + + + Gerrit::Internal::GerritDialog + + + + 0 + 0 + 950 + 672 + + + + Gerrit + + + + + + + + + Qt::Vertical + + + false + + + + + 0 + 2 + + + + + 0 + 400 + + + + Changes + + + + + + + + &Query: + + + queryLineEdit + + + + + + + + 0 + 0 + + + + + 400 + 0 + + + + Change #, SHA-1, tr:id, owner:email or reviewer:email + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + + 300 + 0 + + + + + + + + + + + 600 + 0 + + + + false + + + true + + + true + + + + + + + + + 0 + 1 + + + + + 0 + 200 + + + + Details + + + + 5 + + + 5 + + + 5 + + + 5 + + + + + true + + + + + + + + + + 0 + 0 + + + + Apply in: + + + + + + + + + + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Close + + + + + + + + Utils::FancyLineEdit + QLineEdit +
utils/fancylineedit.h
+
+ + Utils::TreeView + QTreeView +
utils/itemviews.h
+
+ + Utils::PathChooser + QWidget +
utils/pathchooser.h
+ 1 +
+
+ + + + buttonBox + accepted() + Gerrit::Internal::GerritDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + Gerrit::Internal::GerritDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + +
diff --git a/src/plugins/git/git.qbs b/src/plugins/git/git.qbs index dad838db6b2..964bfe32195 100644 --- a/src/plugins/git/git.qbs +++ b/src/plugins/git/git.qbs @@ -79,6 +79,7 @@ QtcPlugin { "branchcombobox.h", "gerritdialog.cpp", "gerritdialog.h", + "gerritdialog.ui", "gerritmodel.cpp", "gerritmodel.h", "gerritoptionspage.cpp",