]> git.cworth.org Git - apitrace/blobdiff - gui/traceloader.h
Implement goto start of the frame and goto end of the frame.
[apitrace] / gui / traceloader.h
index 791a19c8f3fc68bc5c0bd0cbc3832cc56743d020..929317ca14f5bc38322a098a3076d3808b9a7588 100644 (file)
@@ -28,6 +28,14 @@ public slots:
     void loadTrace(const QString &filename);
     void loadFrame(ApiTraceFrame *frame);
     void setFrameMarker(ApiTrace::FrameMarker marker);
+    void searchNext(int startFrame,
+                    const QString &str,
+                    Qt::CaseSensitivity sensitivity);
+    void searchPrev(int startFrame,
+                    const QString &str,
+                    Qt::CaseSensitivity sensitivity);
+    void findFrameStart(ApiTraceFrame *frame);
+    void findFrameEnd(ApiTraceFrame *frame);
 
 signals:
     void startedParsing();
@@ -35,21 +43,25 @@ signals:
     void finishedParsing();
 
     void framesLoaded(const QList<ApiTraceFrame*> &frames);
-    void frameLoaded(ApiTraceFrame *frame);
+    void frameContentsLoaded(ApiTraceFrame *frame,
+                             const QVector<ApiTraceCall*> &calls,
+                             quint64 binaryDataSize);
 
+    void searchResult(ApiTrace::SearchResult result, ApiTraceCall *call);
+    void foundFrameStart(ApiTraceFrame *frame);
+    void foundFrameEnd(ApiTraceFrame *frame);
 private:
-    struct FrameOffset {
-        FrameOffset()
+    struct FrameBookmark {
+        FrameBookmark()
             : numberOfCalls(0)
         {}
-        FrameOffset(const Trace::File::Offset &s)
+        FrameBookmark(const Trace::ParseBookmark &s)
             : start(s),
               numberOfCalls(0)
         {}
 
-        Trace::File::Offset start;
+        Trace::ParseBookmark start;
         int numberOfCalls;
-        unsigned callNumber;
     };
     bool isCallAFrameMarker(const Trace::Call *call) const;
     int numberOfFrames() const;
@@ -59,13 +71,24 @@ private:
     void scanTrace();
     void parseTrace();
 
+    int callInFrame(int callIdx) const;
+    bool callContains(Trace::Call *call,
+                      const QString &str,
+                      Qt::CaseSensitivity sensitivity);
+     QVector<ApiTraceCall*> fetchFrameContents(ApiTraceFrame *frame);
+     bool searchCallsBackwards(const QList<Trace::Call*> &calls,
+                               int frameIdx,
+                               const QString &str,
+                               Qt::CaseSensitivity sensitivity);
+
 private:
     Trace::Parser m_parser;
     QString m_fileName;
     ApiTrace::FrameMarker m_frameMarker;
 
-    typedef QMap<int, FrameOffset> FrameOffsets;
-    FrameOffsets m_frameOffsets;
+    typedef QMap<int, FrameBookmark> FrameBookmarks;
+    FrameBookmarks m_frameBookmarks;
+    QList<ApiTraceFrame*> m_createdFrames;
 
     QHash<QString, QUrl> m_helpHash;