#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*>)),
QString ApiTrace::fileName() const
{
+ if (edited())
+ return m_tempFileName;
+
return m_fileName;
}
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);
}
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"
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();
void invalidated();
void framesInvalidated();
void changed(ApiTraceCall *call);
+ void traceSaved();
void framesAdded(int oldCount, int numAdded);
void callsAdded(int oldCount, int numAdded);
void detectFrames();
private:
QString m_fileName;
+ QString m_tempFileName;
QList<ApiTraceFrame*> m_frames;
QList<ApiTraceCall*> m_calls;
LoaderThread *m_loader;
QSet<ApiTraceCall*> m_editedCalls;
+
+ bool m_needsSaving;
};
#endif
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"