]> git.cworth.org Git - apitrace/blobdiff - gui/apitrace.h
Implement find next for the on-demand-loaded files.
[apitrace] / gui / apitrace.h
index 2bf916af8f4aab21bb0e3fae8ac9f9c46c949cb1..3edffef700d573c87a5b2386b860b834bc04fd3a 100644 (file)
@@ -4,8 +4,11 @@
 #include "apitracecall.h"
 
 #include <QObject>
+#include <QSet>
 
-class LoaderThread;
+class TraceLoader;
+class SaverThread;
+class QThread;
 
 class ApiTrace : public QObject
 {
@@ -17,6 +20,12 @@ public:
         FrameMarker_Finish,
         FrameMarker_Clear
     };
+    enum SearchResult {
+        SearchNotFound,
+        SearchFound,
+        SearchWrapped
+    };
+
     static bool isCallAFrameMarker(const ApiTraceCall *call,
                                    FrameMarker marker);
 public:
@@ -31,8 +40,7 @@ public:
 
     ApiTraceState defaultState() const;
 
-    QList<ApiTraceCall*> calls() const;
-    ApiTraceCall *callAt(int idx) const;
+    QVector<ApiTraceCall*> calls() const;
     ApiTraceCall *callWithIndex(int idx) const;
     int numCalls() const;
 
@@ -41,32 +49,91 @@ public:
     int numFrames() const;
     int numCallsInFrame(int idx) const;
 
+    void callEdited(ApiTraceCall *call);
+    void callReverted(ApiTraceCall *call);
+    void callError(ApiTraceCall *call);
+
+    bool edited() const;
+    bool needsSaving() const;
+
+    bool isSaving() const;
+
+    bool hasErrors() const;
+
 public slots:
     void setFileName(const QString &name);
     void setFrameMarker(FrameMarker marker);
+    void save();
+    void loadFrame(ApiTraceFrame *frame);
+    void findNext(ApiTraceFrame *frame,
+                  ApiTraceCall *call,
+                  const QString &str,
+                  Qt::CaseSensitivity sensitivity);
+    void findPrev(ApiTraceFrame *frame,
+                  ApiTraceCall *call,
+                  const QString &str,
+                  Qt::CaseSensitivity sensitivity);
+
 
 signals:
+    void loadTrace(const QString &name);
+    void requestFrame(ApiTraceFrame *frame);
     void startedLoadingTrace();
+    void loaded(int percent);
     void finishedLoadingTrace();
     void invalidated();
     void framesInvalidated();
-
-    void framesAdded(int oldCount, int numAdded);
+    void changed(ApiTraceCall *call);
+    void startedSaving();
+    void saved();
+    void findResult(ApiTrace::SearchResult result,
+                    ApiTraceCall *call);
+
+    void beginAddingFrames(int oldCount, int numAdded);
+    void endAddingFrames();
     void callsAdded(int oldCount, int numAdded);
+    void beginLoadingFrame(ApiTraceFrame *frame, int numAdded);
+    void endLoadingFrame(ApiTraceFrame *frame);
+
+
+signals:
+    void loaderSearchNext(int startFrame,
+                          const QString &str,
+                          Qt::CaseSensitivity sensitivity);
+    void loaderSearchPrev(int startFrame,
+                          const QString &str,
+                          Qt::CaseSensitivity sensitivity);
 
 private slots:
     void addFrames(const QList<ApiTraceFrame*> &frames);
+    void slotSaved();
+    void finishedParsing();
+    void loaderFrameLoaded(ApiTraceFrame *frame,
+                           const QVector<ApiTraceCall*> &calls,
+                           quint64 binaryDataSize);
+    void loaderSearchResult(ApiTrace::SearchResult result,
+                            ApiTraceCall *call);
+
 private:
     void detectFrames();
 private:
     QString m_fileName;
+    QString m_tempFileName;
 
     QList<ApiTraceFrame*> m_frames;
-    QList<ApiTraceCall*> m_calls;
+    QVector<ApiTraceCall*> m_calls;
 
     FrameMarker m_frameMarker;
 
-    LoaderThread *m_loader;
+    TraceLoader *m_loader;
+    QThread     *m_loaderThread;
+    SaverThread  *m_saver;
+
+    QSet<ApiTraceCall*> m_editedCalls;
+
+    bool m_needsSaving;
+
+    QSet<ApiTraceCall*> m_errors;
 };
 
 #endif