blob: fcbf3b7855b49ee778e1adc1c8432b3ad9c91a99 [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.com902ebe52012-06-29 14:21:22 +000015#include "SkDebugCanvas.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.com7dcae672012-07-09 20:26:53 +0000120 Sends the scale factor information to the settings widget.
121 */
122 void actionScale(float scaleFactor);
123
124 /**
chudy@google.com902ebe52012-06-29 14:21:22 +0000125 Toggles the settings widget visibility.
126 */
127 void actionSettings();
128
129 /**
130 Steps forward to the next draw command.
131 */
132 void actionStepBack();
133
134 /**
135 Steps backwards to the next draw command.
136 */
137 void actionStepForward();
138
139 /**
140 Loads an skpicture selected from the directory.
141 */
142 void loadFile(QListWidgetItem *item);
143
144 /**
145 Toggles a dialog with a file browser for navigating to a skpicture. Loads
146 the seleced file.
147 */
148 void openFile();
149
150 /**
chudy@google.com7dcae672012-07-09 20:26:53 +0000151 Toggles whether drawing to a new command requires a double click
152 or simple focus.
153 */
chudy@google.come504de02012-07-16 18:35:23 +0000154 void pauseDrawing(bool isPaused = true);
chudy@google.com7dcae672012-07-09 20:26:53 +0000155
156 /**
chudy@google.com902ebe52012-06-29 14:21:22 +0000157 Executes draw commands up to the selected command
158 */
159 void registerListClick(QListWidgetItem *item);
160
161 /**
chudy@google.com9ca9bfe2012-07-12 21:58:14 +0000162 Sets the command to active in the list widget.
163 */
164 void selectCommand(int command);
165
166 /**
chudy@google.com7e4cfbf2012-07-17 15:40:51 +0000167 Toggles the exclusive listing of commands set as deleted.
168 */
169 void showDeletes();
170
171 /**
chudy@google.com902ebe52012-06-29 14:21:22 +0000172 Toggles a breakpoint on the current step in the list widget.
173 */
174 void toggleBreakpoint();
175
176 /**
177 Toggles the visibility of the directory widget.
178 */
179 void toggleDirectory();
180
181 /**
182 Filters the list widgets command visibility based on the currently
183 active selection.
184 */
185 void toggleFilter(QString string);
186
187private:
chudy@google.comc432f002012-07-10 13:19:25 +0000188 QAction fActionOpen;
189 QAction fActionBreakpoint;
190 QAction fActionCancel;
chudy@google.com7e4cfbf2012-07-17 15:40:51 +0000191 QAction fActionClearBreakpoints;
chudy@google.come504de02012-07-16 18:35:23 +0000192 QAction fActionClearDeletes;
chudy@google.comc432f002012-07-10 13:19:25 +0000193 QAction fActionClose;
chudy@google.come504de02012-07-16 18:35:23 +0000194 QAction fActionCreateBreakpoint;
chudy@google.comc432f002012-07-10 13:19:25 +0000195 QAction fActionDelete;
196 QAction fActionDirectory;
197 QAction fActionGoToLine;
198 QAction fActionInspector;
199 QAction fActionPlay;
chudy@google.come504de02012-07-16 18:35:23 +0000200 QAction fActionPause;
chudy@google.comc432f002012-07-10 13:19:25 +0000201 QAction fActionRewind;
chudy@google.com7e4cfbf2012-07-17 15:40:51 +0000202 QAction fActionShowDeletes;
chudy@google.comc432f002012-07-10 13:19:25 +0000203 QAction fActionStepBack;
204 QAction fActionStepForward;
chudy@google.coma1226312012-07-26 20:26:44 +0000205 QAction fActionZoomIn;
206 QAction fActionZoomOut;
207 QSignalMapper fMapper;
chudy@google.comc432f002012-07-10 13:19:25 +0000208 QWidget fCentralWidget;
chudy@google.com902ebe52012-06-29 14:21:22 +0000209
chudy@google.comc432f002012-07-10 13:19:25 +0000210 QComboBox fFilter;
chudy@google.com902ebe52012-06-29 14:21:22 +0000211
chudy@google.comc432f002012-07-10 13:19:25 +0000212 QVBoxLayout fLeftColumnLayout;
213 QVBoxLayout fMainAndRightColumnLayout;
214 QHBoxLayout fContainerLayout;
215 QHBoxLayout fCanvasAndSettingsLayout;
chudy@google.com902ebe52012-06-29 14:21:22 +0000216
chudy@google.comc432f002012-07-10 13:19:25 +0000217 QListWidget fListWidget;
218 QListWidget fDirectoryWidget;
chudy@google.com902ebe52012-06-29 14:21:22 +0000219
chudy@google.comc432f002012-07-10 13:19:25 +0000220 SkCanvasWidget fCanvasWidget;
221 SkInspectorWidget fInspectorWidget;
222 SkSettingsWidget fSettingsWidget;
223 QStatusBar fStatusBar;
224
chudy@google.com902ebe52012-06-29 14:21:22 +0000225 QString fPath;
226 bool fDirectoryWidgetActive;
chudy@google.com902ebe52012-06-29 14:21:22 +0000227
chudy@google.comc432f002012-07-10 13:19:25 +0000228 QMenuBar fMenuBar;
229 QMenu fMenuFile;
chudy@google.come504de02012-07-16 18:35:23 +0000230 QMenu fMenuEdit;
chudy@google.comc432f002012-07-10 13:19:25 +0000231 QMenu fMenuNavigate;
232 QMenu fMenuView;
chudy@google.come504de02012-07-16 18:35:23 +0000233 QMenu fMenuWindows;
chudy@google.comc432f002012-07-10 13:19:25 +0000234 QToolBar fToolBar;
chudy@google.com902ebe52012-06-29 14:21:22 +0000235
236 bool fBreakpointsActivated;
chudy@google.com7e4cfbf2012-07-17 15:40:51 +0000237 bool fDeletesActivated;
chudy@google.com7dcae672012-07-09 20:26:53 +0000238 bool fPause;
chudy@google.com233e4b82012-07-12 14:38:49 +0000239 int fPausedRow;
chudy@google.comd3058f52012-07-19 13:41:27 +0000240 bool fLoading;
chudy@google.com902ebe52012-06-29 14:21:22 +0000241
242 /**
243 Creates the entire UI.
244 */
245 void setupUi(QMainWindow *SkDebuggerGUI);
246
247 /**
chudy@google.com902ebe52012-06-29 14:21:22 +0000248 Pipes a QString in with the location of the filename, proceeds to updating
249 the listwidget, combowidget and inspectorwidget.
250 */
251 void loadPicture(QString fileName);
252
253 /**
254 Populates the list widget with the vector of strings passed in.
255 */
256 void setupListWidget(std::vector<std::string>* cv);
257
258 /**
259 Populates the combo box widget with the vector of strings passed in.
260 */
261 void setupComboBox(std::vector<std::string>* cv);
262
263 /**
264 Updates the directory widget with the latest directory path stored in
265 the global class variable fPath.
266 */
267 void setupDirectoryWidget();
268};
269
270#endif // SKDEBUGGERUI_H