]> git.cworth.org Git - apitrace/blob - gui/mainwindow.h
gui/mainwindow: Add functions that toggle actions enables and use it.
[apitrace] / gui / mainwindow.h
1 #ifndef MAINWINDOW_H
2 #define MAINWINDOW_H
3
4 #include "ui_mainwindow.h"
5
6 #include "trace_api.hpp"
7 #include "apitrace.h"
8
9 #include <QMainWindow>
10 #include <QProcess>
11 #include <QList>
12 #include <QImage>
13
14 class ApiTrace;
15 class ApiTraceCall;
16 class ApiTraceEvent;
17 class ApiTraceFilter;
18 class ApiTraceFrame;
19 class ApiTraceModel;
20 class ApiTraceState;
21 class ArgumentsEditor;
22 class JumpWidget;
23 class QModelIndex;
24 class QProgressBar;
25 class QTreeWidgetItem;
26 class QUrl;
27 struct ApiTraceError;
28 class Retracer;
29 class SearchWidget;
30 class ShadersSourceWidget;
31 class TraceProcess;
32 class TrimProcess;
33 class ProfileDialog;
34 class VertexDataInterpreter;
35
36 namespace trace { struct Profile; }
37
38 class MainWindow : public QMainWindow
39 {
40     Q_OBJECT
41 public:
42     MainWindow();
43     ~MainWindow();
44
45 public slots:
46     void loadTrace(const QString &fileName, int callNum = -1);
47
48 private slots:
49     void callItemSelected(const QModelIndex &index);
50     void callItemActivated(const QModelIndex &index);
51     void createTrace();
52     void openTrace();
53     void replayStart();
54     void replayProfile();
55     void replayStop();
56     void replayFinished(const QString &message);
57     void replayStateFound(ApiTraceState *state);
58     void replayProfileFound(trace::Profile *state);
59     void replayThumbnailsFound(const QList<QImage> &thumbnails);
60     void replayError(const QString &msg);
61     void startedLoadingTrace();
62     void loadProgess(int percent);
63     void finishedLoadingTrace();
64     void lookupState();
65     void showThumbnails();
66     void trim();
67     void showSettings();
68     void openHelp(const QUrl &url);
69     void showSurfacesMenu(const QPoint &pos);
70     void showSelectedSurface();
71     void saveSelectedSurface();
72     void slotGoTo();
73     void slotJumpTo(int callNum);
74     void createdTrace(const QString &path);
75     void traceError(const QString &msg);
76     void createdTrim(const QString &path);
77     void trimError(const QString &msg);
78     void slotSearch();
79     void slotSearchNext(const QString &str, Qt::CaseSensitivity sensitivity);
80     void slotSearchPrev(const QString &str, Qt::CaseSensitivity sensitivity);
81     void fillState(bool nonDefaults);
82     void customContextMenuRequested(QPoint pos);
83     void editCall();
84     void slotStartedSaving();
85     void slotSaved();
86     void slotGoFrameStart();
87     void slotGoFrameEnd();
88     void slotTraceChanged(ApiTraceEvent *event);
89     void slotRetraceErrors(const QList<ApiTraceError> &errors);
90     void slotErrorSelected(QTreeWidgetItem *current);
91     void slotSearchResult(const ApiTrace::SearchRequest &request,
92                           ApiTrace::SearchResult result,
93                           ApiTraceCall *call);
94     void slotFoundFrameStart(ApiTraceFrame *frame);
95     void slotFoundFrameEnd(ApiTraceFrame *frame);
96     void slotJumpToResult(ApiTraceCall *call);
97
98 private:
99     void initObjects();
100     void initConnections();
101     void updateActionsState(bool traceLoaded, bool stopped = true);
102     void newTraceFile(const QString &fileName);
103     void replayTrace(bool dumpState, bool dumpThumbnails);
104     void trimEvent();
105     void fillStateForFrame();
106
107     /* there's a difference between selected frame/call and
108      * current call/frame. the former implies actual selection
109      * the latter might be just a highlight, e.g. during searching
110      */
111     ApiTraceFrame *selectedFrame() const;
112     ApiTraceCall *selectedCall() const;
113     ApiTraceFrame *currentFrame() const;
114     ApiTraceCall *currentCall() const;
115
116 protected:
117     virtual void closeEvent(QCloseEvent * event);
118
119 private:
120     Ui_MainWindow m_ui;
121     ShadersSourceWidget *m_sourcesWidget;
122
123     trace::API m_api;
124
125     ApiTrace *m_trace;
126     ApiTraceModel *m_model;
127     ApiTraceFilter *m_proxyModel;
128     int m_initalCallNum;
129
130     QProgressBar *m_progressBar;
131
132     ApiTraceEvent *m_selectedEvent;
133
134     ApiTraceEvent *m_stateEvent;
135
136     ApiTraceEvent *m_trimEvent;
137
138     Retracer *m_retracer;
139
140     VertexDataInterpreter *m_vdataInterpreter;
141
142     JumpWidget *m_jumpWidget;
143     SearchWidget *m_searchWidget;
144
145     TraceProcess *m_traceProcess;
146
147     TrimProcess *m_trimProcess;
148
149     ArgumentsEditor *m_argsEditor;
150
151     ApiTraceEvent *m_nonDefaultsLookupEvent;
152
153     ProfileDialog* m_profileDialog;
154 };
155
156
157 #endif