]> git.cworth.org Git - apitrace/commitdiff
Introduce ApiEnum.
authorZack Rusin <zack@kde.org>
Sun, 17 Apr 2011 22:27:28 +0000 (18:27 -0400)
committerZack Rusin <zack@kde.org>
Sun, 17 Apr 2011 22:27:28 +0000 (18:27 -0400)
we also need the value when saving back so just a string is not enough
anymore

gui/apitracecall.cpp
gui/apitracecall.h
gui/argumentseditor.cpp

index 608e48244b48e2064cadc2580cfca27b4dbdb709..6024b15c8a6c8913ce455f21e345d938b1695382 100644 (file)
@@ -52,6 +52,9 @@ QString apiVariantToString(const QVariant &variant)
     if (variant.canConvert<ApiArray>()) {
         return variant.value<ApiArray>().toString();
     }
+    if (variant.canConvert<ApiEnum>()) {
+        return variant.value<ApiEnum>().toString();
+    }
 
     return QString();
 }
@@ -176,7 +179,13 @@ void VariantVisitor::visit(Trace::String *node)
 
 void VariantVisitor::visit(Trace::Enum *e)
 {
-    m_variant = QVariant(QString::fromStdString(e->sig->first));
+    VariantVisitor vis;
+    e->sig->second->visit(vis);
+
+    QVariant val = vis.variant();
+
+    m_variant = QVariant::fromValue(
+        ApiEnum(QString::fromStdString(e->sig->first), val));
 }
 
 void VariantVisitor::visit(Trace::Bitmask *bitmask)
@@ -692,3 +701,24 @@ bool ApiTraceCall::edited() const
     return !m_editedValues.isEmpty();
 }
 
+ApiEnum::ApiEnum(const QString &name, const QVariant &val)
+    : m_name(name),
+      m_value(val)
+{
+}
+
+QString ApiEnum::toString() const
+{
+    return m_name;
+}
+
+QVariant ApiEnum::value() const
+{
+    return m_value;
+}
+
+QString ApiEnum::name() const
+{
+    return m_name;
+}
+
index b9e23121181f26938b61204bf206e411cdd62ed7..1b4e5ab17b6a2e6c2ff480187972b56729fae326 100644 (file)
@@ -37,6 +37,20 @@ private:
     QVariant m_variant;
 };
 
+class ApiEnum
+{
+public:
+    ApiEnum(const QString &name = QString(), const QVariant &val=QVariant());
+
+    QString toString() const;
+
+    QVariant value() const;
+    QString name() const;
+private:
+    QString m_name;
+    QVariant m_value;
+};
+Q_DECLARE_METATYPE(ApiEnum);
 
 class ApiPointer
 {
index 3ac381e6c4b52f2fcc09f3e397e645608a3db9ad..125e12d9f788c8c4dcdb7d8bf39925297ab16e73 100644 (file)
@@ -239,6 +239,15 @@ void ArgumentsEditor::setupCall()
             item->setIcon(icon);
             item->setToolTip(tr("Argument is read-only"));
             topRow.append(item);
+        } else if (val.canConvert<ApiEnum>()) {
+            ApiEnum en = val.value<ApiEnum>();
+            QStandardItem *item = new QStandardItem();
+            item->setFlags(item->flags() ^ Qt::ItemIsEditable);
+            item->setText(en.toString());
+            QIcon icon(":/resources/emblem-locked.png");
+            item->setIcon(icon);
+            item->setToolTip(tr("Argument is read-only"));
+            topRow.append(item);
         } else if (val.canConvert<ApiBitmask>()) {
             ApiBitmask mask = val.value<ApiBitmask>();
             QStandardItem *item = new QStandardItem();