blob: 5c003b000ac9baafab9819f1b584c2398618c420 [file] [log] [blame]
chudy@google.com902ebe52012-06-29 14:21:22 +00001
2/*
3 * Copyright 2012 Google Inc.
4 *
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
7 */
8
9#ifndef SKDEBUGGERUI_H
10#define SKDEBUGGERUI_H
11
12
13#include "SkCanvas.h"
chudy@google.comea5488b2012-07-26 19:38:22 +000014#include "SkCanvasWidget.h"
chudy@google.com607357f2012-08-07 16:12:23 +000015#include "SkDebugger.h"
chudy@google.comea5488b2012-07-26 19:38:22 +000016#include "SkGLWidget.h"
chudy@google.com902ebe52012-06-29 14:21:22 +000017#include "SkListWidget.h"
18#include "SkInspectorWidget.h"
chudy@google.comea5488b2012-07-26 19:38:22 +000019#include "SkRasterWidget.h"
kkinnunen63a47022014-12-30 23:03:56 -080020#include "SkDrawCommandGeometryWidget.h"
chudy@google.com902ebe52012-06-29 14:21:22 +000021#include "SkSettingsWidget.h"
22#include <QtCore/QVariant>
23#include <QtGui/QAction>
24#include <QtGui/QApplication>
25#include <QtGui/QButtonGroup>
26#include <QtGui/QHBoxLayout>
27#include <QtGui/QHeaderView>
28#include <QtGui/QListView>
29#include <QtGui/QListWidget>
30#include <QtGui/QMainWindow>
commit-bot@chromium.orgbcd431e2013-11-21 13:41:37 +000031#include <QtGui/QSplitter>
chudy@google.com902ebe52012-06-29 14:21:22 +000032#include <QtGui/QStatusBar>
33#include <QtGui/QToolBar>
34#include <QtGui/QVBoxLayout>
35#include <QtGui/QWidget>
36#include <QtGui/QMenu>
37#include <QtGui/QMenuBar>
38#include <vector>
39
robertphillips@google.com8a1cdae2012-11-19 20:44:29 +000040class SkTimedPicture;
41namespace sk_tools {
42 class PictureRenderer;
43}
44
chudy@google.com902ebe52012-06-29 14:21:22 +000045/** \class SkDebuggerGUI
46
47 Container for the UI and it's functions.
48 */
49class SkDebuggerGUI : public QMainWindow {
50 Q_OBJECT
51
52public:
53 /**
54 Constructs the view of the application.
55 @param parent The parent container of this widget.
56 */
57 SkDebuggerGUI(QWidget *parent = 0);
58
robertphillips@google.comff6e6ba2013-01-28 17:43:26 +000059 /**
60 Updates the directory widget with the latest directory path stored in
61 the global class variable fPath.
62 */
63 void setupDirectoryWidget(const QString& path);
64
65 /**
66 Loads the specified file.
67 */
68 void openFile(const QString& filename);
69
chudy@google.com7dcae672012-07-09 20:26:53 +000070signals:
71 void commandChanged(int command);
72
chudy@google.com902ebe52012-06-29 14:21:22 +000073private slots:
74 /**
75 Toggles breakpoint view in the list widget.
76 */
77 void actionBreakpoints();
78
79 /**
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +000080 Toggles between count and offset style of command indexing in GUI
81 */
82 void actionToggleIndexStyle();
83
84 /**
robertphillips@google.comd26c7062012-11-12 20:42:12 +000085 Profile the commands
86 */
87 void actionProfile();
88
89 /**
chudy@google.com902ebe52012-06-29 14:21:22 +000090 Cancels the command filter in the list widget.
91 */
92 void actionCancel();
93
94 /**
chudy@google.com7e4cfbf2012-07-17 15:40:51 +000095 Clears the breakpoint state off of all commands marked as breakpoints.
96 */
97 void actionClearBreakpoints();
98
99 /**
100 Clears the deleted state off of all commands marked as deleted.
101 */
102 void actionClearDeletes();
103
104 /**
chudy@google.com902ebe52012-06-29 14:21:22 +0000105 Closes the application.
106 */
107 void actionClose();
108
109 /**
110 Deletes the command in question.
111 */
112 void actionDelete();
113
robertphillips@google.come8fe4bc2013-02-13 13:26:13 +0000114#if SK_SUPPORT_GPU
chudy@google.com902ebe52012-06-29 14:21:22 +0000115 /**
commit-bot@chromium.orgfde1e7c2013-08-02 13:59:50 +0000116 Updates the visibility of the GL canvas widget and sample count of the GL surface.
chudy@google.comea5488b2012-07-26 19:38:22 +0000117 */
kkinnunen41c79cc2014-12-30 22:49:58 -0800118 void actionGLSettingsChanged();
robertphillips@google.come8fe4bc2013-02-13 13:26:13 +0000119#endif
chudy@google.comea5488b2012-07-26 19:38:22 +0000120
121 /**
chudy@google.com902ebe52012-06-29 14:21:22 +0000122 Toggles the visibility of the inspector widget.
123 */
124 void actionInspector();
125
126 /**
127 Plays from the current step to the next breakpoint if it exists, otherwise
128 executes all remaining draw commands.
129 */
130 void actionPlay();
131
132 /**
kkinnunen41c79cc2014-12-30 22:49:58 -0800133 Sets the visibility of the raster canvas widget according to the settings widget.
chudy@google.comea5488b2012-07-26 19:38:22 +0000134 */
kkinnunen41c79cc2014-12-30 22:49:58 -0800135 void actionRasterSettingsChanged();
chudy@google.comea5488b2012-07-26 19:38:22 +0000136
137 /**
kkinnunen41c79cc2014-12-30 22:49:58 -0800138 Sets the visualization settings according to the settings widget.
robertphillips@google.comf4741c12013-02-06 20:13:54 +0000139 */
kkinnunen41c79cc2014-12-30 22:49:58 -0800140 void actionVisualizationsChanged();
commit-bot@chromium.org2a67e122014-05-19 13:53:10 +0000141
142 /**
robertphillips@google.com32bbcf82013-10-17 17:56:10 +0000143 Applies the new texture filter override
144 */
145 void actionTextureFilter();
146
147 /**
chudy@google.com902ebe52012-06-29 14:21:22 +0000148 Rewinds from the current step back to the start of the commands.
149 */
150 void actionRewind();
151
152 /**
chudy@google.com0ab03392012-07-28 20:16:11 +0000153 Saves the current SKP with all modifications.
154 */
155 void actionSave();
156
157 /**
158 Saves the current SKP under a different name and/or location.
159 */
160 void actionSaveAs();
161
162 /**
chudy@google.com7dcae672012-07-09 20:26:53 +0000163 Sends the scale factor information to the settings widget.
164 */
165 void actionScale(float scaleFactor);
166
167 /**
chudy@google.com902ebe52012-06-29 14:21:22 +0000168 Toggles the settings widget visibility.
169 */
170 void actionSettings();
171
172 /**
173 Steps forward to the next draw command.
174 */
175 void actionStepBack();
176
177 /**
178 Steps backwards to the next draw command.
179 */
180 void actionStepForward();
181
182 /**
chudy@google.coma9e937c2012-08-03 17:32:05 +0000183 Called when the canvas is done being drawn to by SkCanvasWidget.
184 */
185 void drawComplete();
186
187 /**
chudy@google.com902ebe52012-06-29 14:21:22 +0000188 Loads an skpicture selected from the directory.
189 */
190 void loadFile(QListWidgetItem *item);
191
192 /**
193 Toggles a dialog with a file browser for navigating to a skpicture. Loads
robertphillips@google.comff6e6ba2013-01-28 17:43:26 +0000194 the selected file.
chudy@google.com902ebe52012-06-29 14:21:22 +0000195 */
196 void openFile();
197
198 /**
chudy@google.com7dcae672012-07-09 20:26:53 +0000199 Toggles whether drawing to a new command requires a double click
200 or simple focus.
201 */
chudy@google.come504de02012-07-16 18:35:23 +0000202 void pauseDrawing(bool isPaused = true);
chudy@google.com7dcae672012-07-09 20:26:53 +0000203
204 /**
chudy@google.com902ebe52012-06-29 14:21:22 +0000205 Executes draw commands up to the selected command
206 */
207 void registerListClick(QListWidgetItem *item);
208
209 /**
chudy@google.com9ca9bfe2012-07-12 21:58:14 +0000210 Sets the command to active in the list widget.
211 */
212 void selectCommand(int command);
213
214 /**
chudy@google.com7e4cfbf2012-07-17 15:40:51 +0000215 Toggles the exclusive listing of commands set as deleted.
216 */
217 void showDeletes();
218
219 /**
chudy@google.com902ebe52012-06-29 14:21:22 +0000220 Toggles a breakpoint on the current step in the list widget.
221 */
222 void toggleBreakpoint();
223
224 /**
225 Toggles the visibility of the directory widget.
226 */
227 void toggleDirectory();
228
229 /**
230 Filters the list widgets command visibility based on the currently
231 active selection.
232 */
233 void toggleFilter(QString string);
234
kkinnunen41c79cc2014-12-30 22:49:58 -0800235 void updateCommand(int newCommand);
236 void updateHit(int newHit);
chudy@google.com902ebe52012-06-29 14:21:22 +0000237private:
commit-bot@chromium.orgbcd431e2013-11-21 13:41:37 +0000238 QSplitter fCentralSplitter;
chudy@google.com2d537a12012-07-31 12:49:52 +0000239 QStatusBar fStatusBar;
240 QToolBar fToolBar;
241
chudy@google.comc432f002012-07-10 13:19:25 +0000242 QAction fActionOpen;
243 QAction fActionBreakpoint;
commit-bot@chromium.org57f74e02014-03-25 23:31:33 +0000244 QAction fActionToggleIndexStyle;
robertphillips@google.comd26c7062012-11-12 20:42:12 +0000245 QAction fActionProfile;
chudy@google.comc432f002012-07-10 13:19:25 +0000246 QAction fActionCancel;
chudy@google.com7e4cfbf2012-07-17 15:40:51 +0000247 QAction fActionClearBreakpoints;
chudy@google.come504de02012-07-16 18:35:23 +0000248 QAction fActionClearDeletes;
chudy@google.comc432f002012-07-10 13:19:25 +0000249 QAction fActionClose;
chudy@google.come504de02012-07-16 18:35:23 +0000250 QAction fActionCreateBreakpoint;
chudy@google.comc432f002012-07-10 13:19:25 +0000251 QAction fActionDelete;
252 QAction fActionDirectory;
253 QAction fActionGoToLine;
254 QAction fActionInspector;
bungeman@google.com2ff6d1d2013-07-01 14:24:12 +0000255 QAction fActionSettings;
chudy@google.comc432f002012-07-10 13:19:25 +0000256 QAction fActionPlay;
chudy@google.come504de02012-07-16 18:35:23 +0000257 QAction fActionPause;
chudy@google.comc432f002012-07-10 13:19:25 +0000258 QAction fActionRewind;
chudy@google.com0ab03392012-07-28 20:16:11 +0000259 QAction fActionSave;
260 QAction fActionSaveAs;
chudy@google.com7e4cfbf2012-07-17 15:40:51 +0000261 QAction fActionShowDeletes;
chudy@google.comc432f002012-07-10 13:19:25 +0000262 QAction fActionStepBack;
263 QAction fActionStepForward;
chudy@google.coma1226312012-07-26 20:26:44 +0000264 QAction fActionZoomIn;
265 QAction fActionZoomOut;
266 QSignalMapper fMapper;
chudy@google.com2d537a12012-07-31 12:49:52 +0000267
chudy@google.com0ab03392012-07-28 20:16:11 +0000268 QWidget fSpacer;
chudy@google.comc432f002012-07-10 13:19:25 +0000269 QComboBox fFilter;
chudy@google.com902ebe52012-06-29 14:21:22 +0000270
commit-bot@chromium.orgbcd431e2013-11-21 13:41:37 +0000271 QSplitter fLeftColumnSplitter;
272 QWidget fMainAndRightColumnWidget;
chudy@google.comc432f002012-07-10 13:19:25 +0000273 QVBoxLayout fMainAndRightColumnLayout;
robertphillips@google.com6dec8fc2012-11-21 17:11:02 +0000274 QHBoxLayout fCanvasSettingsAndImageLayout;
275 QVBoxLayout fSettingsAndImageLayout;
chudy@google.com902ebe52012-06-29 14:21:22 +0000276
chudy@google.comc432f002012-07-10 13:19:25 +0000277 QListWidget fListWidget;
278 QListWidget fDirectoryWidget;
chudy@google.com902ebe52012-06-29 14:21:22 +0000279
chudy@google.com607357f2012-08-07 16:12:23 +0000280 SkDebugger fDebugger;
chudy@google.comc432f002012-07-10 13:19:25 +0000281 SkCanvasWidget fCanvasWidget;
kkinnunen63a47022014-12-30 23:03:56 -0800282
chudy@google.comc432f002012-07-10 13:19:25 +0000283 SkInspectorWidget fInspectorWidget;
284 SkSettingsWidget fSettingsWidget;
chudy@google.comc432f002012-07-10 13:19:25 +0000285
kkinnunen41c79cc2014-12-30 22:49:58 -0800286 QFrame fViewStateFrame;
287 QVBoxLayout fViewStateFrameLayout;
288 QGroupBox fViewStateGroup;
289 QFormLayout fViewStateLayout;
290 QLineEdit fCurrentCommandBox;
291 QLineEdit fCommandHitBox;
292 QLineEdit fZoomBox;
kkinnunen63a47022014-12-30 23:03:56 -0800293 SkDrawCommandGeometryWidget fDrawCommandGeometryWidget;
kkinnunen41c79cc2014-12-30 22:49:58 -0800294
chudy@google.com902ebe52012-06-29 14:21:22 +0000295 QString fPath;
robertphillips@google.comd26c7062012-11-12 20:42:12 +0000296 SkString fFileName;
robertphillips@google.com5f971142012-12-07 20:48:56 +0000297 SkTDArray<bool> fSkipCommands; // has a specific command been deleted?
chudy@google.com902ebe52012-06-29 14:21:22 +0000298 bool fDirectoryWidgetActive;
chudy@google.com902ebe52012-06-29 14:21:22 +0000299
chudy@google.comc432f002012-07-10 13:19:25 +0000300 QMenuBar fMenuBar;
301 QMenu fMenuFile;
chudy@google.come504de02012-07-16 18:35:23 +0000302 QMenu fMenuEdit;
chudy@google.comc432f002012-07-10 13:19:25 +0000303 QMenu fMenuNavigate;
304 QMenu fMenuView;
chudy@google.come504de02012-07-16 18:35:23 +0000305 QMenu fMenuWindows;
chudy@google.com902ebe52012-06-29 14:21:22 +0000306
chudy@google.comd3058f52012-07-19 13:41:27 +0000307 bool fLoading;
chudy@google.com2d537a12012-07-31 12:49:52 +0000308 int fPausedRow;
chudy@google.com902ebe52012-06-29 14:21:22 +0000309
310 /**
311 Creates the entire UI.
312 */
313 void setupUi(QMainWindow *SkDebuggerGUI);
314
315 /**
chudy@google.com902ebe52012-06-29 14:21:22 +0000316 Pipes a QString in with the location of the filename, proceeds to updating
317 the listwidget, combowidget and inspectorwidget.
318 */
robertphillips@google.comd26c7062012-11-12 20:42:12 +0000319 void loadPicture(const SkString& fileName);
chudy@google.com902ebe52012-06-29 14:21:22 +0000320
321 /**
chudy@google.com0ab03392012-07-28 20:16:11 +0000322 Creates a picture of the current canvas.
323 */
robertphillips@google.comd26c7062012-11-12 20:42:12 +0000324 void saveToFile(const SkString& filename);
chudy@google.com0ab03392012-07-28 20:16:11 +0000325
326 /**
kkinnunen5037e9d2014-12-30 07:22:58 -0800327 Populates the list widget with the debugger draw command info.
chudy@google.com902ebe52012-06-29 14:21:22 +0000328 */
kkinnunen5037e9d2014-12-30 07:22:58 -0800329 void setupListWidget();
chudy@google.com902ebe52012-06-29 14:21:22 +0000330
331 /**
kkinnunen5037e9d2014-12-30 07:22:58 -0800332 Populates the combo box widget with with the debugger draw command info.
chudy@google.com902ebe52012-06-29 14:21:22 +0000333 */
kkinnunen5037e9d2014-12-30 07:22:58 -0800334 void setupComboBox();
robertphillips@google.com8a1cdae2012-11-19 20:44:29 +0000335
336 /**
337 Fills in the overview pane with text
338 */
robertphillips@google.com20beb482013-03-07 19:32:45 +0000339 void setupOverviewText(const SkTDArray<double>* typeTimes, double totTime, int numRuns);
chudy@google.com902ebe52012-06-29 14:21:22 +0000340
341 /**
commit-bot@chromium.org2a67e122014-05-19 13:53:10 +0000342 Fills in the clip stack pane with text
343 */
344 void setupClipStackText();
345
346 /**
robertphillips@google.com8a1cdae2012-11-19 20:44:29 +0000347 Render the supplied picture several times tracking the time consumed
348 by each command.
349 */
robertphillipsce4dd3d2014-07-07 13:46:35 -0700350 void run(const SkPicture* pict,
skia.committer@gmail.com34587162012-11-20 02:01:23 +0000351 sk_tools::PictureRenderer* renderer,
robertphillips@google.com8a1cdae2012-11-19 20:44:29 +0000352 int repeats);
kkinnunenf3a9e992015-01-05 01:14:11 -0800353
354 bool isPaused() const {
355 return fActionPause.isChecked();
356 }
chudy@google.com902ebe52012-06-29 14:21:22 +0000357};
358
359#endif // SKDEBUGGERUI_H