]> git.cworth.org Git - apitrace/blobdiff - gui/apitracemodel.h
Use skiplist-based FastCallSet within trace::CallSet
[apitrace] / gui / apitracemodel.h
index 422259e84405898063fb4d8ecf2cb65cbd4313fe..e7354aa6350191ad55aee5a8abe9d675079dfeeb 100644 (file)
@@ -4,22 +4,33 @@
 
 #include <QAbstractItemModel>
 #include <QModelIndex>
+#include <QSet>
 #include <QVariant>
 
+class ApiTrace;
 class ApiTraceCall;
-class LoaderThread;
-namespace Trace {
-    class Call;
-}
+class ApiTraceEvent;
+class ApiTraceFrame;
 
 class ApiTraceModel : public QAbstractItemModel
 {
     Q_OBJECT
-
+public:
+    enum Roles {
+        EventRole = Qt::UserRole + 1
+    };
 public:
     ApiTraceModel(QObject *parent = 0);
     ~ApiTraceModel();
 
+    void setApiTrace(ApiTrace *trace);
+    const ApiTrace *apiTrace() const;
+    void stateSetOnEvent(ApiTraceEvent *event);
+
+    QModelIndex indexForCall(ApiTraceCall *call) const;
+
+public:
+    /* QAbstractItemModel { */
     QVariant data(const QModelIndex &index, int role) const;
     Qt::ItemFlags flags(const QModelIndex &index) const;
     QVariant headerData(int section, Qt::Orientation orientation,
@@ -35,14 +46,26 @@ public:
                     const QModelIndex &parent = QModelIndex());
     bool removeRows(int position, int rows,
                     const QModelIndex &parent = QModelIndex());
+    virtual bool canFetchMore(const QModelIndex & parent) const;
+    virtual void fetchMore(const QModelIndex &parent);
+    /* } QAbstractItemModel; */
+
+private slots:
+    void invalidateFrames();
+    void beginAddingFrames(int oldCount, int numAdded);
+    void endAddingFrames();
+    void changed(ApiTraceEvent *event);
+    void callChanged(ApiTraceCall *call);
+    void frameChanged(ApiTraceFrame *frame);
+    void beginLoadingFrame(ApiTraceFrame *frame, int numAdded);
+    void endLoadingFrame(ApiTraceFrame *frame);
 
-public slots:
-    void loadTraceFile(const QString &fileName);
-    void appendCalls(const QList<Trace::Call*> traceCalls);
+private:
+    ApiTraceEvent *item(const QModelIndex &index) const;
 
 private:
-    QList<ApiTraceCall*> m_calls;
-    LoaderThread        *m_loader;
+    ApiTrace *m_trace;
+    QSet<ApiTraceFrame*> m_loadingFrames;
 };
 
 #endif