[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [purpose] src/plugins/phabricator: Prepare to use Arc's status colours in the revision drop-down lis
From: René J.V. Bertin <null () kde ! org>
Date: 2018-07-10 18:58:46
Message-ID: E1fcxqY-0006pH-B3 () code ! kde ! org
[Download RAW message or body]
Git commit 6d518089aa1c461431c69e027d698e7060d4d99c by René J.V. Bertin.
Committed on 10/07/2018 at 17:50.
Pushed by rjvbb into branch 'master'.
Prepare to use Arc's status colours in the revision drop-down list
Arcanist uses green, magenta and red to distinguish the user's open
differential revision by status: accepted vs. "needs review" vs. "needs
revision" respectively.
This uses that same convention for the Phabricator plugin drop-down list
of open revisions that can be updated - in Qt versions that (will) support
controlling text colour through a ComboBox model.
Differential Revision: https://phabricator.kde.org/D13933
M +1 -1 src/plugins/phabricator/CMakeLists.txt
M +4 -0 src/plugins/phabricator/phabricatorjobs.cpp
M +9 -0 src/plugins/phabricator/phabricatorjobs.h
M +29 -2 src/plugins/phabricator/quick/difflistmodel.cpp
M +5 -2 src/plugins/phabricator/quick/difflistmodel.h
https://commits.kde.org/purpose/6d518089aa1c461431c69e027d698e7060d4d99c
diff --git a/src/plugins/phabricator/CMakeLists.txt \
b/src/plugins/phabricator/CMakeLists.txt index 184bbc2..5319adc 100644
--- a/src/plugins/phabricator/CMakeLists.txt
+++ b/src/plugins/phabricator/CMakeLists.txt
@@ -31,7 +31,7 @@ set_target_properties(PhabricatorHelpers PROPERTIES VERSION \
${PURPOSE_VERSION_ST install(TARGETS PhabricatorHelpers \
${KF5_INSTALL_TARGETS_DEFAULT_ARGS} LIBRARY NAMELINK_SKIP)
add_library(phabricatorquickplugin quick/phabricatorquickplugin.cpp \
quick/difflistmodel.cpp quick/phabricatorrc.cpp)
-target_link_libraries(phabricatorquickplugin Qt5::Qml PhabricatorHelpers)
+target_link_libraries(phabricatorquickplugin Qt5::Qml Qt5::Gui PhabricatorHelpers)
install(TARGETS phabricatorquickplugin DESTINATION \
${QML_INSTALL_DIR}/org/kde/purpose/phabricator) install(FILES quick/qmldir \
DESTINATION ${QML_INSTALL_DIR}/org/kde/purpose/phabricator)
diff --git a/src/plugins/phabricator/phabricatorjobs.cpp \
b/src/plugins/phabricator/phabricatorjobs.cpp index 8657ace..fc1dcb1 100644
--- a/src/plugins/phabricator/phabricatorjobs.cpp
+++ b/src/plugins/phabricator/phabricatorjobs.cpp
@@ -251,10 +251,14 @@ void DiffRevList::done(int exitCode, QProcess::ExitStatus \
exitStatus) if (rev.startsWith(QStringLiteral("* Accepted "))) {
// append a Unicode "Heavy Check Mark" to signal accepted \
revisions
revTitle += QStringLiteral(" ") + QString(QChar(0x2714));
+ m_statusMap[revTitle] = Accepted;
} else if (rev.startsWith(QStringLiteral("* Needs Revision "))) {
// append a Unicode "Heavy Ballot X" for lack of a Unicode glyph
// resembling the icon used on the Phab site.
revTitle += QStringLiteral(" ") + QString(QChar(0x2718));
+ m_statusMap[revTitle] = NeedsRevision;
+ } else if (rev.startsWith(QStringLiteral("* Needs Review "))) {
+ m_statusMap[revTitle] = NeedsReview;
}
m_reviews << qMakePair(revID, revTitle);
m_revMap[revTitle] = revID;
diff --git a/src/plugins/phabricator/phabricatorjobs.h \
b/src/plugins/phabricator/phabricatorjobs.h index 00ce63d..6e05c90 100644
--- a/src/plugins/phabricator/phabricatorjobs.h
+++ b/src/plugins/phabricator/phabricatorjobs.h
@@ -113,6 +113,9 @@ namespace Phabricator
{
Q_OBJECT
public:
+ enum Status { Accepted, NeedsReview, NeedsRevision };
+ Q_ENUM(Status)
+
DiffRevList(const QString& projectDir, QObject* parent = nullptr);
// return the open diff. revisions as a list of <diffID,diffDescription> \
pairs QList<QPair<QString,QString> > reviews() const
@@ -124,6 +127,11 @@ namespace Phabricator
{
return m_revMap;
}
+ // return the open diff. revision statuses as a map of \
diffDescription->Status entries + QHash<QString,Status> statusMap() const
+ {
+ return m_statusMap;
+ }
private Q_SLOTS:
void done(int exitCode, QProcess::ExitStatus exitStatus) override;
@@ -133,6 +141,7 @@ namespace Phabricator
private:
QList<QPair<QString,QString> > m_reviews;
QHash<QString,QString> m_revMap;
+ QHash<QString,Status> m_statusMap;
QString m_projectDir;
};
}
diff --git a/src/plugins/phabricator/quick/difflistmodel.cpp \
b/src/plugins/phabricator/quick/difflistmodel.cpp index 866b29a..0e8faca 100644
--- a/src/plugins/phabricator/quick/difflistmodel.cpp
+++ b/src/plugins/phabricator/quick/difflistmodel.cpp
@@ -21,6 +21,7 @@
#include "phabricatorjobs.h"
#include <QDir>
+#include <QBrush>
#include <QTemporaryDir>
#include <QDebug>
@@ -90,10 +91,12 @@ void DiffListModel::receivedDiffRevs(KJob* job)
return;
}
- const auto revs = dynamic_cast<Phabricator::DiffRevList*>(job)->reviews();
+ const auto diffRevList = dynamic_cast<Phabricator::DiffRevList*>(job);
+ const auto revs = diffRevList->reviews();
QVector<Value> tmpValues;
foreach (const auto review, revs) {
- tmpValues += Value { review.second, review.first };
+ auto status = diffRevList->statusMap()[review.second];
+ tmpValues += Value { review.second, review.first, status };
}
qSort(tmpValues.begin(), tmpValues.end());
@@ -116,6 +119,15 @@ void DiffListModel::receivedDiffRevs(KJob* job)
}
}
+QHash<int, QByteArray> DiffListModel::roleNames() const
+{
+ const QHash<int, QByteArray> roles = {
+ {Qt::DisplayRole, QByteArrayLiteral("display")},
+ {Qt::ToolTipRole, QByteArrayLiteral("toolTip")},
+ {Qt::TextColorRole, QByteArrayLiteral("textColor")} };
+ return roles;
+}
+
QVariant DiffListModel::data(const QModelIndex &idx, int role) const
{
if (!idx.isValid() || idx.column() != 0 || idx.row() >= m_values.size()) {
@@ -127,6 +139,21 @@ QVariant DiffListModel::data(const QModelIndex &idx, int role) \
const return m_values[idx.row()].summary;
case Qt::ToolTipRole:
return m_values[idx.row()].id;
+ case Qt::TextColorRole:
+ // Use the colours arc also uses
+ QVariant ret;
+ switch (m_values[idx.row()].status.value<Phabricator::DiffRevList::Status>()) \
{ + case Phabricator::DiffRevList::Accepted:
+ // alternative: KColorScheme::ForegroundRole::PositiveText
+ ret = QBrush(Qt::green);
+ case Phabricator::DiffRevList::NeedsReview:
+ // alternative: KColorScheme::ForegroundRole::NeutralText
+ ret = QBrush(Qt::magenta);
+ case Phabricator::DiffRevList::NeedsRevision:
+ // alternative: KColorScheme::ForegroundRole::NegativeText
+ ret = QBrush(Qt::red);
+ }
+ return ret;
}
return QVariant();
}
diff --git a/src/plugins/phabricator/quick/difflistmodel.h \
b/src/plugins/phabricator/quick/difflistmodel.h index 3b4af14..751059f 100644
--- a/src/plugins/phabricator/quick/difflistmodel.h
+++ b/src/plugins/phabricator/quick/difflistmodel.h
@@ -23,6 +23,7 @@
#include <QAbstractListModel>
#include <QUrl>
#include <QVector>
+#include <QHash>
#include <QDebug>
class KJob;
@@ -37,6 +38,7 @@ class DiffListModel : public QAbstractListModel
void refresh();
+ QHash<int, QByteArray> roleNames() const override;
QVariant data(const QModelIndex &idx, int role) const override;
int rowCount(const QModelIndex & parent) const override;
@@ -51,6 +53,7 @@ class DiffListModel : public QAbstractListModel
struct Value {
QVariant summary;
QVariant id;
+ QVariant status;
inline bool operator<(const DiffListModel::Value &b) const
{
return summary.toString().localeAwareCompare(b.summary.toString());
@@ -58,8 +61,8 @@ class DiffListModel : public QAbstractListModel
#ifndef QT_NO_DEBUG_STREAM
operator QString() const
{
- QString ret = QStringLiteral("DiffListModel::Value{summary=\"%1\" \
id=\"%2\"}");
- return ret.arg(this->summary.toString()).arg(this->id.toString());
+ QString ret = QStringLiteral("DiffListModel::Value{summary=\"%1\" \
id=\"%2\" status=\"%3\"}"); + return \
ret.arg(this->summary.toString()).arg(this->id.toString()).arg(this->status.toInt()); \
} #endif
};
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic