blob: 66be2e20d88692802fe31c5952947077db237747 [file] [log] [blame]
Zack Rusin601e8372011-03-24 22:23:21 -04001#ifndef MAINWINDOW_H
2#define MAINWINDOW_H
3
4#include "ui_mainwindow.h"
5
José Fonseca62997b42011-11-27 15:16:34 +00006#include "trace_api.hpp"
Zack Rusin8f98c3a2011-09-11 18:21:29 -04007#include "apitrace.h"
8
Zack Rusin96130ac2011-03-27 01:48:36 -04009#include <QMainWindow>
Zack Rusin27cb2c42011-03-27 23:53:36 -040010#include <QProcess>
Zack Rusin96130ac2011-03-27 01:48:36 -040011
Zack Rusinf6667d12011-03-30 11:03:37 -040012class ApiTrace;
Zack Rusincc0b4912011-04-19 01:59:20 -040013class ApiTraceCall;
Zack Rusin581e3ff2011-03-31 23:58:07 -040014class ApiTraceEvent;
15class ApiTraceFilter;
Zack Rusin2caa06d2011-03-30 18:30:20 -040016class ApiTraceFrame;
Zack Rusin601e8372011-03-24 22:23:21 -040017class ApiTraceModel;
Zack Rusinf389ae82011-04-10 19:27:28 -040018class ApiTraceState;
Zack Rusin963102f2011-04-15 01:45:05 -040019class ArgumentsEditor;
Zack Rusinc52d18a2011-04-11 00:15:07 -040020class JumpWidget;
Zack Rusin96130ac2011-03-27 01:48:36 -040021class QModelIndex;
Zack Rusinde4ea412011-03-30 11:30:08 -040022class QProgressBar;
Zack Rusind9239342011-04-19 23:43:06 -040023class QTreeWidgetItem;
Zack Rusinc97fadc2011-04-07 15:16:59 -040024class QUrl;
Zack Rusin10fd4772011-09-14 01:45:12 -040025struct ApiTraceError;
Zack Rusin3acde362011-04-06 01:11:55 -040026class Retracer;
Zack Rusinf04cf8a2011-04-12 23:21:52 -040027class SearchWidget;
Zack Rusin7c814f12011-04-09 19:20:58 -040028class ShadersSourceWidget;
Zack Rusinca164112011-04-11 02:23:09 -040029class TraceProcess;
Zack Rusin8e7a4ff2011-04-07 01:15:48 -040030class VertexDataInterpreter;
Zack Rusin601e8372011-03-24 22:23:21 -040031
32class MainWindow : public QMainWindow
33{
34 Q_OBJECT
35public:
36 MainWindow();
Zack Rusin11f7e632011-03-30 22:47:51 -040037 ~MainWindow();
Zack Rusin601e8372011-03-24 22:23:21 -040038
39public slots:
José Fonsecab7eb1522011-11-27 15:15:33 +000040 void loadTrace(const QString &fileName, int callNum = -1);
Zack Rusin601e8372011-03-24 22:23:21 -040041
42private slots:
Zack Rusin96130ac2011-03-27 01:48:36 -040043 void callItemSelected(const QModelIndex &index);
José Fonseca63d59402011-10-30 10:56:04 +000044 void callItemActivated(const QModelIndex &index);
Zack Rusin3438a522011-04-10 22:56:31 -040045 void createTrace();
Zack Rusin601e8372011-03-24 22:23:21 -040046 void openTrace();
Zack Rusin27cb2c42011-03-27 23:53:36 -040047 void replayStart();
48 void replayStop();
Zack Rusinf389ae82011-04-10 19:27:28 -040049 void replayFinished(const QString &output);
Zack Rusined40bc62011-08-28 17:11:02 -040050 void replayStateFound(ApiTraceState *state);
Zack Rusin3acde362011-04-06 01:11:55 -040051 void replayError(const QString &msg);
Zack Rusinde4ea412011-03-30 11:30:08 -040052 void startedLoadingTrace();
Zack Rusinebf971e2011-09-06 17:44:43 -040053 void loadProgess(int percent);
Zack Rusinde4ea412011-03-30 11:30:08 -040054 void finishedLoadingTrace();
Zack Rusin2caa06d2011-03-30 18:30:20 -040055 void lookupState();
Zack Rusine1745572011-04-03 14:30:19 -040056 void showSettings();
Zack Rusinc97fadc2011-04-07 15:16:59 -040057 void openHelp(const QUrl &url);
Zack Rusin09ec4842011-04-10 01:57:17 -040058 void showSurfacesMenu(const QPoint &pos);
59 void showSelectedSurface();
Zack Rusinfd638e52011-06-20 19:46:17 -040060 void saveSelectedSurface();
Zack Rusinc52d18a2011-04-11 00:15:07 -040061 void slotGoTo();
62 void slotJumpTo(int callNum);
Zack Rusinca164112011-04-11 02:23:09 -040063 void createdTrace(const QString &path);
64 void traceError(const QString &msg);
Zack Rusinf04cf8a2011-04-12 23:21:52 -040065 void slotSearch();
66 void slotSearchNext(const QString &str, Qt::CaseSensitivity sensitivity);
67 void slotSearchPrev(const QString &str, Qt::CaseSensitivity sensitivity);
Zack Rusine2dfa2e2011-04-13 01:35:03 -040068 void fillState(bool nonDefaults);
Zack Rusinfb23ba12011-04-15 19:29:45 -040069 void customContextMenuRequested(QPoint pos);
70 void editCall();
Zack Rusin9af5bff2011-04-18 01:05:50 -040071 void slotStartedSaving();
72 void slotSaved();
Zack Rusin9623daf2011-04-18 18:03:34 -040073 void slotGoFrameStart();
74 void slotGoFrameEnd();
Zack Rusincc0b4912011-04-19 01:59:20 -040075 void slotTraceChanged(ApiTraceCall *call);
Zack Rusin10fd4772011-09-14 01:45:12 -040076 void slotRetraceErrors(const QList<ApiTraceError> &errors);
Zack Rusind9239342011-04-19 23:43:06 -040077 void slotErrorSelected(QTreeWidgetItem *current);
Zack Rusinad513b32011-09-25 14:33:41 -040078 void slotSearchResult(const ApiTrace::SearchRequest &request,
79 ApiTrace::SearchResult result,
Zack Rusin8f98c3a2011-09-11 18:21:29 -040080 ApiTraceCall *call);
Zack Rusin93e4d152011-09-13 02:23:39 -040081 void slotFoundFrameStart(ApiTraceFrame *frame);
82 void slotFoundFrameEnd(ApiTraceFrame *frame);
Zack Rusinda7579b2011-09-13 17:33:05 -040083 void slotJumpToResult(ApiTraceCall *call);
Zack Rusin27cb2c42011-03-27 23:53:36 -040084
85private:
Zack Rusin46678422011-04-10 12:15:46 -040086 void initObjects();
87 void initConnections();
Zack Rusin27cb2c42011-03-27 23:53:36 -040088 void newTraceFile(const QString &fileName);
Zack Rusin2caa06d2011-03-30 18:30:20 -040089 void replayTrace(bool dumpState);
Zack Rusin11f7e632011-03-30 22:47:51 -040090 void fillStateForFrame();
Zack Rusin8f98c3a2011-09-11 18:21:29 -040091
92 /* there's a difference between selected frame/call and
93 * current call/frame. the former implies actual selection
94 * the latter might be just a highlight, e.g. during searching
95 */
96 ApiTraceFrame *selectedFrame() const;
97 ApiTraceCall *selectedCall() const;
Zack Rusin9623daf2011-04-18 18:03:34 -040098 ApiTraceFrame *currentFrame() const;
Zack Rusinbe547732011-04-23 17:16:34 -040099 ApiTraceCall *currentCall() const;
Zack Rusin601e8372011-03-24 22:23:21 -0400100
Zack Rusin8f98c3a2011-09-11 18:21:29 -0400101
Zack Rusin601e8372011-03-24 22:23:21 -0400102private:
103 Ui_MainWindow m_ui;
Zack Rusin7c814f12011-04-09 19:20:58 -0400104 ShadersSourceWidget *m_sourcesWidget;
105
José Fonseca62997b42011-11-27 15:16:34 +0000106 trace::API m_api;
107
Zack Rusinf6667d12011-03-30 11:03:37 -0400108 ApiTrace *m_trace;
Zack Rusin601e8372011-03-24 22:23:21 -0400109 ApiTraceModel *m_model;
Zack Rusin91065372011-03-26 01:54:10 -0400110 ApiTraceFilter *m_proxyModel;
José Fonsecab7eb1522011-11-27 15:15:33 +0000111 int m_initalCallNum;
Zack Rusin27cb2c42011-03-27 23:53:36 -0400112
Zack Rusinde4ea412011-03-30 11:30:08 -0400113 QProgressBar *m_progressBar;
114
Zack Rusin581e3ff2011-03-31 23:58:07 -0400115 ApiTraceEvent *m_selectedEvent;
Zack Rusin11f7e632011-03-30 22:47:51 -0400116
Zack Rusin581e3ff2011-03-31 23:58:07 -0400117 ApiTraceEvent *m_stateEvent;
Zack Rusin11f7e632011-03-30 22:47:51 -0400118
Zack Rusin3acde362011-04-06 01:11:55 -0400119 Retracer *m_retracer;
Zack Rusin8e7a4ff2011-04-07 01:15:48 -0400120
121 VertexDataInterpreter *m_vdataInterpreter;
Zack Rusin09ec4842011-04-10 01:57:17 -0400122
Zack Rusinc52d18a2011-04-11 00:15:07 -0400123 JumpWidget *m_jumpWidget;
Zack Rusinf04cf8a2011-04-12 23:21:52 -0400124 SearchWidget *m_searchWidget;
Zack Rusinca164112011-04-11 02:23:09 -0400125
126 TraceProcess *m_traceProcess;
Zack Rusin963102f2011-04-15 01:45:05 -0400127
128 ArgumentsEditor *m_argsEditor;
Zack Rusin3b7fbd72011-04-27 23:48:16 -0400129
130 ApiTraceEvent *m_nonDefaultsLookupEvent;
Zack Rusin601e8372011-03-24 22:23:21 -0400131};
132
133
134#endif