From 2a014eaee6b36e59ac85b8489b6e6dfb6f604902 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Mon, 12 Oct 2015 16:17:29 +0200 Subject: [PATCH] Gerrit: No need to subclass FancyLineEdit Change-Id: I9b25c1e0a72e8a7e5ba268e539cf71f5b28d420b Reviewed-by: Tobias Hunger --- src/plugins/git/gerrit/gerritdialog.cpp | 63 ++++--------------------- src/plugins/git/gerrit/gerritdialog.h | 2 +- src/plugins/git/gerrit/gerritmodel.cpp | 15 ++++-- src/plugins/git/gerrit/gerritmodel.h | 14 ++++-- 4 files changed, 30 insertions(+), 64 deletions(-) diff --git a/src/plugins/git/gerrit/gerritdialog.cpp b/src/plugins/git/gerrit/gerritdialog.cpp index 707e9d67de6..75fd293344a 100644 --- a/src/plugins/git/gerrit/gerritdialog.cpp +++ b/src/plugins/git/gerrit/gerritdialog.cpp @@ -35,6 +35,7 @@ #include #include #include +#include #include #include @@ -59,57 +60,6 @@ namespace Internal { static const int layoutSpacing = 5; static const int maxTitleWidth = 350; -class QueryValidatingLineEdit : public Utils::FancyLineEdit -{ - Q_OBJECT - -public: - explicit QueryValidatingLineEdit(QWidget *parent = 0); - void setTextColor(const QColor &c); - -public slots: - void setValid(); - void setInvalid(); - -private: - bool m_valid; - const QColor m_okTextColor; - const QColor m_errorTextColor; -}; - -QueryValidatingLineEdit::QueryValidatingLineEdit(QWidget *parent) - : Utils::FancyLineEdit(parent) - , m_valid(true) - , m_okTextColor(palette().color(QPalette::Active, QPalette::Text)) - , m_errorTextColor(Qt::red) -{ - setFiltering(true); - connect(this, &QLineEdit::textChanged, this, &QueryValidatingLineEdit::setValid); -} - -void QueryValidatingLineEdit::setTextColor(const QColor &c) -{ - QPalette pal; - pal.setColor(QPalette::Active, QPalette::Text, c); - setPalette(pal); -} - -void QueryValidatingLineEdit::setValid() -{ - if (!m_valid) { - m_valid = true; - setTextColor(m_okTextColor); - } -} - -void QueryValidatingLineEdit::setInvalid() -{ - if (m_valid) { - m_valid = false; - setTextColor(m_errorTextColor); - } -} - GerritDialog::GerritDialog(const QSharedPointer &p, QWidget *parent) : QDialog(parent) @@ -119,7 +69,7 @@ GerritDialog::GerritDialog(const QSharedPointer &p, , m_queryModel(new QStringListModel(this)) , m_treeView(new Utils::TreeView) , m_detailsBrowser(new QTextBrowser) - , m_queryLineEdit(new QueryValidatingLineEdit) + , m_queryLineEdit(new Utils::FancyLineEdit) , m_filterLineEdit(new Utils::FancyLineEdit) , m_repositoryChooser(new Utils::PathChooser) , m_buttonBox(new QDialogButtonBox(QDialogButtonBox::Close)) @@ -141,6 +91,11 @@ GerritDialog::GerritDialog(const QSharedPointer &p, 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 *) { + return m_model->state() != GerritModel::Error; + }); filterLayout->addWidget(queryLabel); filterLayout->addWidget(m_queryLineEdit); filterLayout->addItem(new QSpacerItem(0, 0, QSizePolicy::MinimumExpanding, QSizePolicy::Ignored)); @@ -150,7 +105,7 @@ GerritDialog::GerritDialog(const QSharedPointer &p, connect(m_filterLineEdit, &Utils::FancyLineEdit::filterChanged, m_filterModel, &QSortFilterProxyModel::setFilterFixedString); connect(m_queryLineEdit, &QLineEdit::returnPressed, this, &GerritDialog::slotRefresh); - connect(m_model, &GerritModel::queryError, m_queryLineEdit, &QueryValidatingLineEdit::setInvalid); + connect(m_model, &GerritModel::stateChanged, m_queryLineEdit, &Utils::FancyLineEdit::validate); m_filterModel->setFilterCaseSensitivity(Qt::CaseInsensitive); changesLayout->addLayout(filterLayout); changesLayout->addWidget(m_treeView); @@ -339,5 +294,3 @@ void GerritDialog::fetchFinished() } // namespace Internal } // namespace Gerrit - -#include "gerritdialog.moc" diff --git a/src/plugins/git/gerrit/gerritdialog.h b/src/plugins/git/gerrit/gerritdialog.h index a53c8e4a7d3..e5e49c3b67d 100644 --- a/src/plugins/git/gerrit/gerritdialog.h +++ b/src/plugins/git/gerrit/gerritdialog.h @@ -100,7 +100,7 @@ private: QStringListModel *m_queryModel; Utils::TreeView *m_treeView; QTextBrowser *m_detailsBrowser; - QueryValidatingLineEdit *m_queryLineEdit; + Utils::FancyLineEdit *m_queryLineEdit; Utils::FancyLineEdit *m_filterLineEdit; Utils::PathChooser *m_repositoryChooser; QDialogButtonBox *m_buttonBox; diff --git a/src/plugins/git/gerrit/gerritmodel.cpp b/src/plugins/git/gerrit/gerritmodel.cpp index a1bfa56fbd8..54d4ed8892e 100644 --- a/src/plugins/git/gerrit/gerritmodel.cpp +++ b/src/plugins/git/gerrit/gerritmodel.cpp @@ -409,7 +409,6 @@ void QueryContext::timeout() GerritModel::GerritModel(const QSharedPointer &p, QObject *parent) : QStandardItemModel(0, ColumnCount, parent) , m_parameters(p) - , m_query(0) { QStringList headers; // Keep in sync with GerritChange::toHtml() headers << QLatin1String("#") << tr("Subject") << tr("Owner") @@ -546,6 +545,7 @@ void GerritModel::refresh(const QString &query) connect(m_query, &QueryContext::finished, this, &GerritModel::queriesFinished); emit refreshStateChanged(true); m_query->start(); + setState(Running); } void GerritModel::clearData() @@ -554,6 +554,14 @@ void GerritModel::clearData() removeRows(0, rows); } +void GerritModel::setState(GerritModel::QueryState s) +{ + if (s == m_state) + return; + m_state = s; + emit stateChanged(); +} + /* Parse gerrit query Json output. * See http://gerrit.googlecode.com/svn/documentation/2.1.5/cmd-query.html * Note: The url will be present only if "canonicalWebUrl" is configured @@ -746,8 +754,8 @@ bool gerritChangeLessThan(const GerritChangePtr &c1, const GerritChangePtr &c2) void GerritModel::queryFinished(const QByteArray &output) { QList changes; - if (!parseOutput(m_parameters, output, changes)) - emit queryError(); + setState(parseOutput(m_parameters, output, changes) ? Ok : Error); + // Populate a hash with indices for faster access. QHash idIndexHash; const int count = changes.size(); @@ -813,6 +821,7 @@ void GerritModel::queriesFinished() { m_query->deleteLater(); m_query = 0; + setState(Idle); emit refreshStateChanged(false); } diff --git a/src/plugins/git/gerrit/gerritmodel.h b/src/plugins/git/gerrit/gerritmodel.h index b3c48a57511..dab7d27944e 100644 --- a/src/plugins/git/gerrit/gerritmodel.h +++ b/src/plugins/git/gerrit/gerritmodel.h @@ -125,25 +125,29 @@ public: QStandardItem *itemForId(const QString &id) const; -public slots: + enum QueryState { Idle, Running, Ok, Error }; + QueryState state() const { return m_state; } + void refresh(const QString &query); signals: void refreshStateChanged(bool isRefreshing); // For disabling the "Refresh" button. - void queryError(); + void stateChanged(); -private slots: +private: void queryFinished(const QByteArray &); void queriesFinished(); void clearData(); -private: + void setState(QueryState s); + QString dependencyHtml(const QString &header, const QString &changeId, const QString &serverPrefix) const; QList changeToRow(const GerritChangePtr &c) const; const QSharedPointer m_parameters; - QueryContext *m_query; + QueryContext *m_query = 0; + QueryState m_state = Idle; QString m_userName; };