]> git.cworth.org Git - apitrace/commitdiff
Make sure that the trace knows when it needs saving.
authorZack Rusin <zack@kde.org>
Sun, 17 Apr 2011 21:10:45 +0000 (17:10 -0400)
committerZack Rusin <zack@kde.org>
Sun, 17 Apr 2011 21:10:45 +0000 (17:10 -0400)
gui/apitrace.cpp
gui/apitrace.h
gui/apitracemodel.cpp

index 8bae919ff40e03ee3bb1c3991b57a47cc52f44df..7d02b5dcdd97813af5e29179bcde4fd46bbf8aaf 100644 (file)
@@ -2,8 +2,11 @@
 
 #include "loaderthread.h"
 
+#include <QDir>
+
 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<ApiTraceFrame*>)),
@@ -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"
index 3c27543e9b0b36a3bc053d799c2831fabbd0ea87..3a475b45cfc96498c3e051c3872c0ec0b2f452b2 100644 (file)
@@ -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<ApiTraceFrame*> m_frames;
     QList<ApiTraceCall*> m_calls;
@@ -76,6 +80,8 @@ private:
     LoaderThread *m_loader;
 
     QSet<ApiTraceCall*> m_editedCalls;
+
+    bool m_needsSaving;
 };
 
 #endif
index 4d28cd3bb9f941d2ee4ee29d7bc36f2ae11d9701..ca9386c993f9522300606fb03a06622eb694de59 100644 (file)
@@ -281,7 +281,10 @@ QModelIndex ApiTraceModel::indexForCall(ApiTraceCall *call) const
 void ApiTraceModel::callChanged(ApiTraceCall *call)
 {
     qDebug()<<"Call changed = "<<call->edited();
-    qDebug()<<"\ttrace edited = "<<call->parentFrame()->parentTrace()->edited();
+    ApiTrace *trace = call->parentFrame()->parentTrace();
+    qDebug()<<"\ttrace edited = "<<trace->edited();
+    qDebug()<<"\ttrace file = "<<trace->fileName();
+    qDebug()<<"\ttrace needs saving = "<<trace->needsSaving();
 }
 
 #include "apitracemodel.moc"