From 661842de4c97a5d1660b7148022fdbd6fd473827 Mon Sep 17 00:00:00 2001 From: Zack Rusin Date: Sun, 17 Apr 2011 01:59:16 -0400 Subject: [PATCH] Various part now propagate the values. --- gui/apitrace.cpp | 17 +++++++++++++++++ gui/apitrace.h | 9 +++++++++ gui/apitracecall.cpp | 37 ++++++++++++++++++++++++++++++++++++- gui/apitracecall.h | 7 +++++++ gui/argumentseditor.cpp | 37 +++++++++++++++++++++++++++---------- gui/argumentseditor.h | 9 ++++++--- 6 files changed, 102 insertions(+), 14 deletions(-) diff --git a/gui/apitrace.cpp b/gui/apitrace.cpp index abdae27..ffe9ae8 100644 --- a/gui/apitrace.cpp +++ b/gui/apitrace.cpp @@ -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" diff --git a/gui/apitrace.h b/gui/apitrace.h index 2bf916a..51abe8b 100644 --- a/gui/apitrace.h +++ b/gui/apitrace.h @@ -4,6 +4,7 @@ #include "apitracecall.h" #include +#include 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 m_editedCalls; }; #endif diff --git a/gui/apitracecall.cpp b/gui/apitracecall.cpp index f027987..a43c699 100644 --- a/gui/apitracecall.cpp +++ b/gui/apitracecall.cpp @@ -1,5 +1,6 @@ #include "apitracecall.h" +#include "apitrace.h" #include "trace_model.hpp" #include @@ -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(); +} + diff --git a/gui/apitracecall.h b/gui/apitracecall.h index 0f395a5..b9e2312 100644 --- a/gui/apitracecall.h +++ b/gui/apitracecall.h @@ -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; diff --git a/gui/argumentseditor.cpp b/gui/argumentseditor.cpp index 8a59cb4..c6280ed 100644 --- a/gui/argumentseditor.cpp +++ b/gui/argumentseditor.cpp @@ -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 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 = "<(); - 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 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 "< vals; QList 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)); diff --git a/gui/argumentseditor.h b/gui/argumentseditor.h index 9aa2ffd..e6b3d8f 100644 --- a/gui/argumentseditor.h +++ b/gui/argumentseditor.h @@ -51,10 +51,13 @@ private: void setupCall(); void setupShaderEditor(const QList &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; -- 2.43.0