]> git.cworth.org Git - apitrace/commitdiff
Various part now propagate the values.
authorZack Rusin <zack@kde.org>
Sun, 17 Apr 2011 05:59:16 +0000 (01:59 -0400)
committerZack Rusin <zack@kde.org>
Sun, 17 Apr 2011 05:59:16 +0000 (01:59 -0400)
gui/apitrace.cpp
gui/apitrace.h
gui/apitracecall.cpp
gui/apitracecall.h
gui/argumentseditor.cpp
gui/argumentseditor.h

index abdae27591e03db46d7e2086998a50cbe4caccee..ffe9ae845fdd0dd01b18078123ede16344b01dd2 100644 (file)
@@ -192,4 +192,21 @@ ApiTraceState ApiTrace::defaultState() const
     return frame->state();
 }
 
+void ApiTrace::callEdited(ApiTraceCall *call)
+{
+    m_editedCalls.insert(call);
+    emit changed(call);
+}
+
+void ApiTrace::callReverted(ApiTraceCall *call)
+{
+    m_editedCalls.remove(call);
+    emit changed(call);
+}
+
+bool ApiTrace::isEdited() const
+{
+    return !m_editedCalls.isEmpty();
+}
+
 #include "apitrace.moc"
index 2bf916af8f4aab21bb0e3fae8ac9f9c46c949cb1..51abe8b9076e7568d667b05ac06901d84288d828 100644 (file)
@@ -4,6 +4,7 @@
 #include "apitracecall.h"
 
 #include <QObject>
+#include <QSet>
 
 class LoaderThread;
 
@@ -41,6 +42,11 @@ public:
     int numFrames() const;
     int numCallsInFrame(int idx) const;
 
+    void callEdited(ApiTraceCall *call);
+    void callReverted(ApiTraceCall *call);
+
+    bool isEdited() const;
+
 public slots:
     void setFileName(const QString &name);
     void setFrameMarker(FrameMarker marker);
@@ -50,6 +56,7 @@ signals:
     void finishedLoadingTrace();
     void invalidated();
     void framesInvalidated();
+    void changed(ApiTraceCall *call);
 
     void framesAdded(int oldCount, int numAdded);
     void callsAdded(int oldCount, int numAdded);
@@ -67,6 +74,8 @@ private:
     FrameMarker m_frameMarker;
 
     LoaderThread *m_loader;
+
+    QSet<ApiTraceCall*> m_editedCalls;
 };
 
 #endif
index f027987c0bb5985246fedf8d8202477452bcfdfa..a43c699a2d3b029ae5f5a39824549efd40e62f89 100644 (file)
@@ -1,5 +1,6 @@
 #include "apitracecall.h"
 
+#include "apitrace.h"
 #include "trace_model.hpp"
 
 #include <QDebug>
@@ -571,7 +572,10 @@ QStringList ApiTraceCall::argNames() const
 
 QVariantList ApiTraceCall::arguments() const
 {
-    return m_argValues;
+    if (m_editedValues.isEmpty())
+        return m_argValues;
+    else
+        return m_editedValues;
 }
 
 QVariant ApiTraceCall::returnValue() const
@@ -656,3 +660,34 @@ void ApiTraceFrame::setParentTrace(ApiTrace *trace)
     m_parentTrace = trace;
 }
 
+QVariantList ApiTraceCall::originalValues() const
+{
+    return m_argValues;
+}
+
+void ApiTraceCall::setEditedValues(const QVariantList &lst)
+{
+    ApiTrace *trace = 0;
+    if (m_parentFrame)
+        trace = m_parentFrame->parentTrace();
+    m_editedValues = lst;
+
+    if (trace) {
+        if (!lst.isEmpty()) {
+            trace->callEdited(this);
+        } else {
+            trace->callReverted(this);
+        }
+    }
+}
+
+QVariantList ApiTraceCall::editedValues() const
+{
+    return m_editedValues;
+}
+
+bool ApiTraceCall::edited() const
+{
+    return !m_editedValues.isEmpty();
+}
+
index 0f395a5b501b17a7103695b121770bf68196d2be..b9e23121181f26938b61204bf206e411cdd62ed7 100644 (file)
@@ -173,6 +173,11 @@ public:
     ApiTraceFrame *parentFrame()const;
     void setParentFrame(ApiTraceFrame *frame);
 
+    QVariantList originalValues() const;
+
+    bool edited() const;
+    void setEditedValues(const QVariantList &lst);
+    QVariantList editedValues() const;
     void revert();
 
     QString toHtml() const;
@@ -190,6 +195,8 @@ private:
     ApiTraceFrame *m_parentFrame;
     QUrl m_helpUrl;
 
+    QVariantList m_editedValues;
+
     mutable QString m_richText;
     mutable QString m_filterText;
     mutable bool m_hasBinaryData;
index 8a59cb4c9e8cbb2114f1e772b2269c923cf0b6be..c6280ed3e816225d85c1dfc042fa62c68c5cdc09 100644 (file)
@@ -147,10 +147,8 @@ ArgumentsEditor::~ArgumentsEditor()
 
 void ArgumentsEditor::setCall(ApiTraceCall *call)
 {
-    if (m_call != call) {
-        m_call = call;
-        setupCall();
-    }
+    m_call = call;
+    setupCall();
 }
 
 ApiTraceCall * ArgumentsEditor::call() const
@@ -325,26 +323,31 @@ void ArgumentsEditor::accept()
     QStringList argNames = m_call->argNames();
     QList<QVariant> originalValues = m_call->arguments();
     for (int i = 0; i < argNames.count(); ++i) {
+        bool changed = false;
         QString argName = argNames[i];
         QVariant argValue = originalValues[i];
-        QVariant editorValue = valueForName(argName, argValue);
+        QVariant editorValue = valueForName(argName, argValue, &changed);
         qDebug()<<"Arg = "<<argName;
         qDebug()<<"\toriginal = "<<argValue;
         qDebug()<<"\teditor   = "<<editorValue;
+        qDebug()<<"\tchanged  = "<<changed;
     }
 
     QDialog::accept();
 }
 
 QVariant ArgumentsEditor::valueForName(const QString &name,
-                                       const QVariant &originalValue) const
+                                       const QVariant &originalValue,
+                                       bool *changed) const
 {
     QVariant val;
 
+    *changed = false;
+
     //Handle string arrays specially
     if (isVariantStringArray(originalValue)) {
         ApiArray array = originalValue.value<ApiArray>();
-        return arrayFromEditor(array);
+        return arrayFromEditor(array, changed);
     }
 
     for (int topRow = 0; topRow < m_model->rowCount(); ++topRow) {
@@ -355,10 +358,12 @@ QVariant ArgumentsEditor::valueForName(const QString &name,
         if (argName == name) {
             if (originalValue.userType() == QMetaType::type("ApiArray")) {
                 ApiArray array = originalValue.value<ApiArray>();
-                val = arrayFromIndex(nameIdx, array);
+                val = arrayFromIndex(nameIdx, array, changed);
             } else {
                 QModelIndex valIdx = m_model->index(topRow, 1, QModelIndex());
                 val = valIdx.data();
+                if (val != originalValue)
+                    *changed = true;
             }
         }
     }
@@ -366,9 +371,13 @@ QVariant ArgumentsEditor::valueForName(const QString &name,
 }
 
 QVariant ArgumentsEditor::arrayFromIndex(const QModelIndex &parentIndex,
-                                         const ApiArray &origArray) const
+                                         const ApiArray &origArray,
+                                         bool *changed) const
 {
     QList<QVariant> origValues = origArray.values();
+
+    *changed = false;
+
     if (origValues.isEmpty())
         return QVariant::fromValue(ApiArray());
 
@@ -376,21 +385,29 @@ QVariant ArgumentsEditor::arrayFromIndex(const QModelIndex &parentIndex,
     for (int i = 0; i < origValues.count(); ++i) {
         QModelIndex valIdx = m_model->index(i, 1, parentIndex);
         QVariant var = valIdx.data();
+        QVariant origValue = origValues[i];
+        if (var != origValue)
+            *changed = true;
         //qDebug()<<"\t\tarray "<<i<<") "<<var;
         lst.append(var);
     }
     return QVariant::fromValue(ApiArray(lst));
 }
 
-QVariant ArgumentsEditor::arrayFromEditor(const ApiArray &origArray) const
+QVariant ArgumentsEditor::arrayFromEditor(const ApiArray &origArray,
+                                          bool *changed) const
 {
     QList<QVariant> vals;
     QList<QVariant> origValues = origArray.values();
 
     Q_ASSERT(isVariantStringArray(QVariant::fromValue(origArray)));
+    *changed = false;
     //shaders
     for (int i = 0; i < m_ui.selectStringCB->count(); ++i) {
         QVariant val = m_ui.selectStringCB->itemData(i);
+        QVariant origValue = origValues[i];
+        if (origValue != val)
+            *changed = true;
         vals.append(val);
     }
     return QVariant::fromValue(ApiArray(vals));
index 9aa2ffd255fd5f3d9d8714556af8420f30133b49..e6b3d8fd65f01043ad5072787d0a622a18a90d44 100644 (file)
@@ -51,10 +51,13 @@ private:
     void setupCall();
     void setupShaderEditor(const QList<QVariant> &sources);
     QVariant valueForName(const QString &name,
-                          const QVariant &orignalValue) const;
+                          const QVariant &orignalValue,
+                          bool *changed) const;
     QVariant arrayFromIndex(const QModelIndex &index,
-                            const ApiArray &array) const;
-    QVariant arrayFromEditor(const ApiArray &origArray) const;
+                            const ApiArray &array,
+                            bool *changed) const;
+    QVariant arrayFromEditor(const ApiArray &origArray,
+                             bool *changed) const;
 private:
     Ui_ArgumentsEditor m_ui;
     QStandardItemModel *m_model;