From 63efea8b0fce2d01afa3f96540487841d6a488f0 Mon Sep 17 00:00:00 2001 From: Zack Rusin Date: Sun, 17 Apr 2011 17:10:45 -0400 Subject: [PATCH] Make sure that the trace knows when it needs saving. --- gui/apitrace.cpp | 36 +++++++++++++++++++++++++++++++++++- gui/apitrace.h | 6 ++++++ gui/apitracemodel.cpp | 5 ++++- 3 files changed, 45 insertions(+), 2 deletions(-) diff --git a/gui/apitrace.cpp b/gui/apitrace.cpp index 8bae919..7d02b5d 100644 --- a/gui/apitrace.cpp +++ b/gui/apitrace.cpp @@ -2,8 +2,11 @@ #include "loaderthread.h" +#include + ApiTrace::ApiTrace() - : m_frameMarker(ApiTrace::FrameMarker_SwapBuffers) + : m_frameMarker(ApiTrace::FrameMarker_SwapBuffers), + m_needsSaving(false) { m_loader = new LoaderThread(this); connect(m_loader, SIGNAL(parsedFrames(const QList)), @@ -50,6 +53,9 @@ bool ApiTrace::isEmpty() const QString ApiTrace::fileName() const { + if (edited()) + return m_tempFileName; + return m_fileName; } @@ -194,13 +200,28 @@ ApiTraceState ApiTrace::defaultState() const void ApiTrace::callEdited(ApiTraceCall *call) { + if (!m_editedCalls.contains(call)) { + //lets generate a temp filename + QString tempPath = QDir::tempPath(); + //lets make sure it exists + m_tempFileName = QString::fromLatin1("%1/%2.edited") + .arg(tempPath) + .arg(m_fileName); + m_needsSaving = true; + } + m_editedCalls.insert(call); + emit changed(call); } void ApiTrace::callReverted(ApiTraceCall *call) { m_editedCalls.remove(call); + + if (m_editedCalls.isEmpty()) { + m_needsSaving = false; + } emit changed(call); } @@ -209,4 +230,17 @@ bool ApiTrace::edited() const return !m_editedCalls.isEmpty(); } +bool ApiTrace::needsSaving() const +{ + return m_needsSaving; +} + +void ApiTrace::save() +{ + QFileInfo fi(m_tempFileName); + QDir dir; + dir.mkpath(fi.absolutePath()); + m_needsSaving = false; +} + #include "apitrace.moc" diff --git a/gui/apitrace.h b/gui/apitrace.h index 3c27543..3a475b4 100644 --- a/gui/apitrace.h +++ b/gui/apitrace.h @@ -46,10 +46,12 @@ public: void callReverted(ApiTraceCall *call); bool edited() const; + bool needsSaving() const; public slots: void setFileName(const QString &name); void setFrameMarker(FrameMarker marker); + void save(); signals: void startedLoadingTrace(); @@ -57,6 +59,7 @@ signals: void invalidated(); void framesInvalidated(); void changed(ApiTraceCall *call); + void traceSaved(); void framesAdded(int oldCount, int numAdded); void callsAdded(int oldCount, int numAdded); @@ -67,6 +70,7 @@ private: void detectFrames(); private: QString m_fileName; + QString m_tempFileName; QList m_frames; QList m_calls; @@ -76,6 +80,8 @@ private: LoaderThread *m_loader; QSet m_editedCalls; + + bool m_needsSaving; }; #endif diff --git a/gui/apitracemodel.cpp b/gui/apitracemodel.cpp index 4d28cd3..ca9386c 100644 --- a/gui/apitracemodel.cpp +++ b/gui/apitracemodel.cpp @@ -281,7 +281,10 @@ QModelIndex ApiTraceModel::indexForCall(ApiTraceCall *call) const void ApiTraceModel::callChanged(ApiTraceCall *call) { qDebug()<<"Call changed = "<edited(); - qDebug()<<"\ttrace edited = "<parentFrame()->parentTrace()->edited(); + ApiTrace *trace = call->parentFrame()->parentTrace(); + qDebug()<<"\ttrace edited = "<edited(); + qDebug()<<"\ttrace file = "<fileName(); + qDebug()<<"\ttrace needs saving = "<needsSaving(); } #include "apitracemodel.moc" -- 2.43.0