diff options
author | Friedemann Kleint <Friedemann.Kleint@nokia.com> | 2012-05-16 16:31:58 +0200 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@nokia.com> | 2012-05-16 17:38:02 +0200 |
commit | f1b52256cd894e61483aeb113c748ce91aaab911 (patch) | |
tree | c2840652519fbf944ff6546a94de8f90856c73b0 /src/plugins/git/gerrit/gerritdialog.cpp | |
parent | 6e224d502db53ce420f3854e8a63b1fabfd2c3f6 (diff) | |
download | qt-creator-f1b52256cd894e61483aeb113c748ce91aaab911.tar.gz |
Gerrit: Add 'Details' text to dialog.
- Add a splitter and a text browser containing detailed text
for the change using HTML links for email and URL, allowing
for removal of 'Open', 'Copy URL' buttons.
- Remove large tooltip from list, rename methods to toHtml()
and use them for the details text.
- Parse out reviewer email.
- Display approval level with sign.
Change-Id: I2d71a80bbe19643e5bfa9deeaaeb3650976f00b4
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
Reviewed-by: Tobias Hunger <tobias.hunger@nokia.com>
Diffstat (limited to 'src/plugins/git/gerrit/gerritdialog.cpp')
-rw-r--r-- | src/plugins/git/gerrit/gerritdialog.cpp | 81 |
1 files changed, 47 insertions, 34 deletions
diff --git a/src/plugins/git/gerrit/gerritdialog.cpp b/src/plugins/git/gerrit/gerritdialog.cpp index c9dea26d59..a3843517d7 100644 --- a/src/plugins/git/gerrit/gerritdialog.cpp +++ b/src/plugins/git/gerrit/gerritdialog.cpp @@ -38,13 +38,17 @@ #include <QVBoxLayout> #include <QHBoxLayout> +#include <QSplitter> #include <QSpacerItem> +#include <QLabel> +#include <QTextBrowser> #include <QTreeView> #include <QHeaderView> #include <QDialogButtonBox> #include <QPushButton> #include <QDesktopServices> #include <QSortFilterProxyModel> +#include <QGroupBox> #include <QUrl> #include <QClipboard> #include <QApplication> @@ -53,6 +57,8 @@ namespace Gerrit { namespace Internal { +enum { layoutSpacing = 5 }; + GerritDialog::GerritDialog(const QSharedPointer<GerritParameters> &p, QWidget *parent) : QDialog(parent) @@ -60,21 +66,26 @@ GerritDialog::GerritDialog(const QSharedPointer<GerritParameters> &p, , m_filterModel(new QSortFilterProxyModel(this)) , m_model(new GerritModel(p, this)) , m_treeView(new QTreeView) + , m_detailsBrowser(new QTextBrowser) , m_filterLineEdit(new Utils::FilterLineEdit) , m_buttonBox(new QDialogButtonBox(QDialogButtonBox::Close)) { setWindowTitle(tr("Gerrit %1@%2").arg(p->user, p->host)); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); - QVBoxLayout *l = new QVBoxLayout(this); - QHBoxLayout *hl = new QHBoxLayout; - hl->addItem(new QSpacerItem(0, 0, QSizePolicy::MinimumExpanding, QSizePolicy::Ignored)); + + QGroupBox *changesGroup = new QGroupBox(tr("Changes")); + QVBoxLayout *changesLayout = new QVBoxLayout(changesGroup); + changesLayout->setMargin(layoutSpacing); + QHBoxLayout *filterLayout = new QHBoxLayout; + filterLayout->addItem(new QSpacerItem(0, 0, QSizePolicy::MinimumExpanding, QSizePolicy::Ignored)); m_filterLineEdit->setFixedWidth(300); - hl->addWidget(m_filterLineEdit); + filterLayout->addWidget(m_filterLineEdit); connect(m_filterLineEdit, SIGNAL(filterChanged(QString)), m_filterModel, SLOT(setFilterFixedString(QString))); m_filterModel->setFilterCaseSensitivity(Qt::CaseInsensitive); - l->addLayout(hl); - l->addWidget(m_treeView); + changesLayout->addLayout(filterLayout); + changesLayout->addWidget(m_treeView); + m_filterModel->setSourceModel(m_model); m_filterModel->setFilterRole(GerritModel::FilterRole); m_treeView->setModel(m_filterModel); @@ -85,11 +96,17 @@ GerritDialog::GerritDialog(const QSharedPointer<GerritParameters> &p, QItemSelectionModel *selectionModel = m_treeView->selectionModel(); connect(selectionModel, SIGNAL(currentChanged(QModelIndex,QModelIndex)), - this, SLOT(slotEnableButtons())); + this, SLOT(slotCurrentChanged())); connect(m_treeView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(slotDoubleClicked(QModelIndex))); - m_openButton = addActionButton(tr("Open"), SLOT(slotOpenBrowser())); - m_copyUrlButton = addActionButton(tr("Copy URL"), SLOT(slotCopyUrl())); + + 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_displayButton = addActionButton(tr("Diff..."), SLOT(slotFetchDisplay())); m_applyButton = addActionButton(tr("Apply..."), SLOT(slotFetchApply())); m_checkoutButton = addActionButton(tr("Checkout..."), SLOT(slotFetchCheckout())); @@ -99,14 +116,22 @@ GerritDialog::GerritDialog(const QSharedPointer<GerritParameters> &p, m_refreshButton, SLOT(setDisabled(bool))); connect(m_model, SIGNAL(refreshStateChanged(bool)), this, SLOT(slotRefreshStateChanged(bool))); - l->addWidget(m_buttonBox); connect(m_buttonBox, SIGNAL(accepted()), this, SLOT(accept())); connect(m_buttonBox, SIGNAL(rejected()), this, SLOT(reject())); - slotEnableButtons(); + QSplitter *splitter = new QSplitter(Qt::Vertical, this); + splitter->addWidget(changesGroup); + splitter->addWidget(detailsGroup); + splitter->setSizes(QList<int>() << 400 << 200); + + QVBoxLayout *mainLayout = new QVBoxLayout(this); + mainLayout->addWidget(splitter); + mainLayout->addWidget(m_buttonBox); + + slotCurrentChanged(); m_model->refresh(); - resize(QSize(1200, 400)); + resize(QSize(1200, 600)); } QPushButton *GerritDialog::addActionButton(const QString &text, const char *buttonSlot) @@ -123,7 +148,7 @@ GerritDialog::~GerritDialog() void GerritDialog::slotDoubleClicked(const QModelIndex &i) { if (const QStandardItem *item = itemAt(i)) - openUrl(item->row()); + QDesktopServices::openUrl(QUrl(m_model->change(item->row())->url)); } void GerritDialog::slotRefreshStateChanged(bool v) @@ -133,12 +158,6 @@ void GerritDialog::slotRefreshStateChanged(bool v) m_treeView->resizeColumnToContents(c); } -void GerritDialog::slotOpenBrowser() -{ - if (const QStandardItem *item = currentItem()) - openUrl(item->row()); -} - void GerritDialog::slotFetchDisplay() { if (const QStandardItem *item = currentItem()) @@ -157,22 +176,11 @@ void GerritDialog::slotFetchCheckout() emit fetchCheckout(m_model->change(item->row())); } -void GerritDialog::slotCopyUrl() -{ - if (const QStandardItem *item = currentItem()) - QApplication::clipboard()->setText(m_model->change(item->row())->url); -} - void GerritDialog::slotRefresh() { m_model->refresh(); } -void GerritDialog::openUrl(int row) const -{ - QDesktopServices::openUrl(QUrl(m_model->change(row)->url)); -} - const QStandardItem *GerritDialog::itemAt(const QModelIndex &i, int column) const { if (i.isValid()) { @@ -191,12 +199,17 @@ const QStandardItem *GerritDialog::currentItem(int column) const return 0; } -void GerritDialog::slotEnableButtons() +void GerritDialog::slotCurrentChanged() { - const bool valid = m_treeView->selectionModel()->currentIndex().isValid(); - m_openButton->setEnabled(valid); + const QModelIndex current = m_treeView->selectionModel()->currentIndex(); + const bool valid = current.isValid(); + if (valid) { + const int row = m_filterModel->mapToSource(current).row(); + m_detailsBrowser->setText(m_model->change(row)->toHtml()); + } else { + m_detailsBrowser->setText(QString()); + } m_displayButton->setEnabled(valid); - m_copyUrlButton->setEnabled(valid); m_applyButton->setEnabled(valid); m_checkoutButton->setEnabled(valid); } |