blob: f460067675a22c289f1ad5be550c7dfc3c2f6a35 [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"
chudy@google.com902ebe52012-06-29 14:21:22 +000020#include "SkSettingsWidget.h"
21#include <QtCore/QVariant>
22#include <QtGui/QAction>
23#include <QtGui/QApplication>
24#include <QtGui/QButtonGroup>
25#include <QtGui/QHBoxLayout>
26#include <QtGui/QHeaderView>
27#include <QtGui/QListView>
28#include <QtGui/QListWidget>
29#include <QtGui/QMainWindow>
30#include <QtGui/QStatusBar>
31#include <QtGui/QToolBar>
32#include <QtGui/QVBoxLayout>
33#include <QtGui/QWidget>
34#include <QtGui/QMenu>
35#include <QtGui/QMenuBar>
36#include <vector>
37
38/** \class SkDebuggerGUI
39
40 Container for the UI and it's functions.
41 */
42class SkDebuggerGUI : public QMainWindow {
43 Q_OBJECT
44
45public:
46 /**
47 Constructs the view of the application.
48 @param parent The parent container of this widget.
49 */
50 SkDebuggerGUI(QWidget *parent = 0);
51
52 ~SkDebuggerGUI();
53
chudy@google.com7dcae672012-07-09 20:26:53 +000054signals:
55 void commandChanged(int command);
56
chudy@google.com902ebe52012-06-29 14:21:22 +000057private slots:
58 /**
59 Toggles breakpoint view in the list widget.
60 */
61 void actionBreakpoints();
62
63 /**
64 Cancels the command filter in the list widget.
65 */
66 void actionCancel();
67
68 /**
chudy@google.com7e4cfbf2012-07-17 15:40:51 +000069 Clears the breakpoint state off of all commands marked as breakpoints.
70 */
71 void actionClearBreakpoints();
72
73 /**
74 Clears the deleted state off of all commands marked as deleted.
75 */
76 void actionClearDeletes();
77
78 /**
chudy@google.com902ebe52012-06-29 14:21:22 +000079 Applies a visible filter to all drawing commands other than the previous.
80 */
81 void actionCommandFilter();
82
83 /**
84 Closes the application.
85 */
86 void actionClose();
87
88 /**
89 Deletes the command in question.
90 */
91 void actionDelete();
92
93 /**
chudy@google.comea5488b2012-07-26 19:38:22 +000094 Toggles the visibility of the GL canvas widget.
95 */
96 void actionGLWidget(bool isToggled);
97
98 /**
chudy@google.com902ebe52012-06-29 14:21:22 +000099 Toggles the visibility of the inspector widget.
100 */
101 void actionInspector();
102
103 /**
104 Plays from the current step to the next breakpoint if it exists, otherwise
105 executes all remaining draw commands.
106 */
107 void actionPlay();
108
109 /**
chudy@google.comea5488b2012-07-26 19:38:22 +0000110 Toggles the visibility of the raster canvas widget.
111 */
112 void actionRasterWidget(bool isToggled);
113
114 /**
chudy@google.com902ebe52012-06-29 14:21:22 +0000115 Rewinds from the current step back to the start of the commands.
116 */
117 void actionRewind();
118
119 /**
chudy@google.com0ab03392012-07-28 20:16:11 +0000120 Saves the current SKP with all modifications.
121 */
122 void actionSave();
123
124 /**
125 Saves the current SKP under a different name and/or location.
126 */
127 void actionSaveAs();
128
129 /**
chudy@google.com7dcae672012-07-09 20:26:53 +0000130 Sends the scale factor information to the settings widget.
131 */
132 void actionScale(float scaleFactor);
133
134 /**
chudy@google.com902ebe52012-06-29 14:21:22 +0000135 Toggles the settings widget visibility.
136 */
137 void actionSettings();
138
139 /**
140 Steps forward to the next draw command.
141 */
142 void actionStepBack();
143
144 /**
145 Steps backwards to the next draw command.
146 */
147 void actionStepForward();
148
149 /**
chudy@google.coma9e937c2012-08-03 17:32:05 +0000150 Called when the canvas is done being drawn to by SkCanvasWidget.
151 */
152 void drawComplete();
153
154 /**
chudy@google.com902ebe52012-06-29 14:21:22 +0000155 Loads an skpicture selected from the directory.
156 */
157 void loadFile(QListWidgetItem *item);
158
159 /**
160 Toggles a dialog with a file browser for navigating to a skpicture. Loads
161 the seleced file.
162 */
163 void openFile();
164
165 /**
chudy@google.com7dcae672012-07-09 20:26:53 +0000166 Toggles whether drawing to a new command requires a double click
167 or simple focus.
168 */
chudy@google.come504de02012-07-16 18:35:23 +0000169 void pauseDrawing(bool isPaused = true);
chudy@google.com7dcae672012-07-09 20:26:53 +0000170
171 /**
chudy@google.com902ebe52012-06-29 14:21:22 +0000172 Executes draw commands up to the selected command
173 */
174 void registerListClick(QListWidgetItem *item);
175
176 /**
chudy@google.com9ca9bfe2012-07-12 21:58:14 +0000177 Sets the command to active in the list widget.
178 */
179 void selectCommand(int command);
180
181 /**
chudy@google.com7e4cfbf2012-07-17 15:40:51 +0000182 Toggles the exclusive listing of commands set as deleted.
183 */
184 void showDeletes();
185
186 /**
chudy@google.com902ebe52012-06-29 14:21:22 +0000187 Toggles a breakpoint on the current step in the list widget.
188 */
189 void toggleBreakpoint();
190
191 /**
192 Toggles the visibility of the directory widget.
193 */
194 void toggleDirectory();
195
196 /**
197 Filters the list widgets command visibility based on the currently
198 active selection.
199 */
200 void toggleFilter(QString string);
201
202private:
chudy@google.com2d537a12012-07-31 12:49:52 +0000203 QWidget fCentralWidget;
204 QStatusBar fStatusBar;
205 QToolBar fToolBar;
206
chudy@google.comc432f002012-07-10 13:19:25 +0000207 QAction fActionOpen;
208 QAction fActionBreakpoint;
209 QAction fActionCancel;
chudy@google.com7e4cfbf2012-07-17 15:40:51 +0000210 QAction fActionClearBreakpoints;
chudy@google.come504de02012-07-16 18:35:23 +0000211 QAction fActionClearDeletes;
chudy@google.comc432f002012-07-10 13:19:25 +0000212 QAction fActionClose;
chudy@google.come504de02012-07-16 18:35:23 +0000213 QAction fActionCreateBreakpoint;
chudy@google.comc432f002012-07-10 13:19:25 +0000214 QAction fActionDelete;
215 QAction fActionDirectory;
216 QAction fActionGoToLine;
217 QAction fActionInspector;
218 QAction fActionPlay;
chudy@google.come504de02012-07-16 18:35:23 +0000219 QAction fActionPause;
chudy@google.comc432f002012-07-10 13:19:25 +0000220 QAction fActionRewind;
chudy@google.com0ab03392012-07-28 20:16:11 +0000221 QAction fActionSave;
222 QAction fActionSaveAs;
chudy@google.com7e4cfbf2012-07-17 15:40:51 +0000223 QAction fActionShowDeletes;
chudy@google.comc432f002012-07-10 13:19:25 +0000224 QAction fActionStepBack;
225 QAction fActionStepForward;
chudy@google.coma1226312012-07-26 20:26:44 +0000226 QAction fActionZoomIn;
227 QAction fActionZoomOut;
228 QSignalMapper fMapper;
chudy@google.com2d537a12012-07-31 12:49:52 +0000229
chudy@google.com0ab03392012-07-28 20:16:11 +0000230 QWidget fSpacer;
chudy@google.comc432f002012-07-10 13:19:25 +0000231 QComboBox fFilter;
chudy@google.com902ebe52012-06-29 14:21:22 +0000232
chudy@google.com2d537a12012-07-31 12:49:52 +0000233 QHBoxLayout fContainerLayout;
chudy@google.comc432f002012-07-10 13:19:25 +0000234 QVBoxLayout fLeftColumnLayout;
235 QVBoxLayout fMainAndRightColumnLayout;
chudy@google.comc432f002012-07-10 13:19:25 +0000236 QHBoxLayout fCanvasAndSettingsLayout;
chudy@google.com902ebe52012-06-29 14:21:22 +0000237
chudy@google.comc432f002012-07-10 13:19:25 +0000238 QListWidget fListWidget;
239 QListWidget fDirectoryWidget;
chudy@google.com902ebe52012-06-29 14:21:22 +0000240
chudy@google.com607357f2012-08-07 16:12:23 +0000241 SkDebugger fDebugger;
chudy@google.comc432f002012-07-10 13:19:25 +0000242 SkCanvasWidget fCanvasWidget;
243 SkInspectorWidget fInspectorWidget;
244 SkSettingsWidget fSettingsWidget;
chudy@google.comc432f002012-07-10 13:19:25 +0000245
chudy@google.com902ebe52012-06-29 14:21:22 +0000246 QString fPath;
247 bool fDirectoryWidgetActive;
chudy@google.com902ebe52012-06-29 14:21:22 +0000248
chudy@google.comc432f002012-07-10 13:19:25 +0000249 QMenuBar fMenuBar;
250 QMenu fMenuFile;
chudy@google.come504de02012-07-16 18:35:23 +0000251 QMenu fMenuEdit;
chudy@google.comc432f002012-07-10 13:19:25 +0000252 QMenu fMenuNavigate;
253 QMenu fMenuView;
chudy@google.come504de02012-07-16 18:35:23 +0000254 QMenu fMenuWindows;
chudy@google.com902ebe52012-06-29 14:21:22 +0000255
256 bool fBreakpointsActivated;
chudy@google.com7e4cfbf2012-07-17 15:40:51 +0000257 bool fDeletesActivated;
chudy@google.com7dcae672012-07-09 20:26:53 +0000258 bool fPause;
chudy@google.comd3058f52012-07-19 13:41:27 +0000259 bool fLoading;
chudy@google.com2d537a12012-07-31 12:49:52 +0000260 int fPausedRow;
chudy@google.com902ebe52012-06-29 14:21:22 +0000261
262 /**
263 Creates the entire UI.
264 */
265 void setupUi(QMainWindow *SkDebuggerGUI);
266
267 /**
chudy@google.com902ebe52012-06-29 14:21:22 +0000268 Pipes a QString in with the location of the filename, proceeds to updating
269 the listwidget, combowidget and inspectorwidget.
270 */
271 void loadPicture(QString fileName);
272
273 /**
chudy@google.com0ab03392012-07-28 20:16:11 +0000274 Creates a picture of the current canvas.
275 */
276 void saveToFile(QString filename);
277
278 /**
chudy@google.com902ebe52012-06-29 14:21:22 +0000279 Populates the list widget with the vector of strings passed in.
280 */
chudy@google.com97cee972012-08-07 20:41:37 +0000281 void setupListWidget(SkTDArray<SkString*>* command);
chudy@google.com902ebe52012-06-29 14:21:22 +0000282
283 /**
284 Populates the combo box widget with the vector of strings passed in.
285 */
chudy@google.com97cee972012-08-07 20:41:37 +0000286 void setupComboBox(SkTDArray<SkString*>* command);
chudy@google.com902ebe52012-06-29 14:21:22 +0000287
288 /**
289 Updates the directory widget with the latest directory path stored in
290 the global class variable fPath.
291 */
292 void setupDirectoryWidget();
293};
294
295#endif // SKDEBUGGERUI_H