[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