• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
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"
14 #include "SkCanvasWidget.h"
15 #include "SkDebugger.h"
16 #include "SkGLWidget.h"
17 #include "SkListWidget.h"
18 #include "SkInspectorWidget.h"
19 #include "SkRasterWidget.h"
20 #include "SkImageWidget.h"
21 #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>
31 #include <QtGui/QSplitter>
32 #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 
40 class SkTimedPicture;
41 namespace sk_tools {
42     class PictureRenderer;
43 }
44 
45 /** \class SkDebuggerGUI
46 
47     Container for the UI and it's functions.
48  */
49 class SkDebuggerGUI : public QMainWindow {
50     Q_OBJECT
51 
52 public:
53     /**
54         Constructs the view of the application.
55         @param parent  The parent container of this widget.
56      */
57     SkDebuggerGUI(QWidget *parent = 0);
58 
59     ~SkDebuggerGUI();
60 
61     /**
62         Updates the directory widget with the latest directory path stored in
63         the global class variable fPath.
64      */
65     void setupDirectoryWidget(const QString& path);
66 
67     /**
68         Loads the specified file.
69     */
70     void openFile(const QString& filename);
71 
72 signals:
73     void commandChanged(int command);
74 
75 private slots:
76     /**
77         Toggles breakpoint view in the list widget.
78      */
79     void actionBreakpoints();
80 
81     /**
82         Toggles between count and offset style of command indexing in GUI
83      */
84     void actionToggleIndexStyle();
85 
86     /**
87         Profile the commands
88      */
89     void actionProfile();
90 
91     /**
92         Cancels the command filter in the list widget.
93      */
94     void actionCancel();
95 
96     /**
97         Clears the breakpoint state off of all commands marked as breakpoints.
98      */
99     void actionClearBreakpoints();
100 
101     /**
102         Clears the deleted state off of all commands marked as deleted.
103      */
104     void actionClearDeletes();
105 
106     /**
107         Applies a visible filter to all drawing commands other than the previous.
108      */
109     void actionCommandFilter();
110 
111     /**
112         Closes the application.
113      */
114     void actionClose();
115 
116     /**
117         Deletes the command in question.
118      */
119     void actionDelete();
120 
121 #if SK_SUPPORT_GPU
122     /**
123         Updates the visibility of the GL canvas widget and sample count of the GL surface.
124      */
125     void actionGLWidget();
126 #endif
127 
128     /**
129         Toggles the visibility of the inspector widget.
130      */
131     void actionInspector();
132 
133     /**
134         Plays from the current step to the next breakpoint if it exists, otherwise
135         executes all remaining draw commands.
136      */
137     void actionPlay();
138 
139     /**
140         Toggles the visibility of the raster canvas widget.
141      */
142     void actionRasterWidget(bool isToggled);
143 
144     /**
145         Toggles the the overdraw visualization on and off
146      */
147     void actionOverdrawVizWidget(bool isToggled);
148 
149     /**
150         Toggles the the mega visualization on and off
151      */
152     void actionMegaVizWidget(bool isToggled);
153 
154     /**
155         Toggles using path ops to simplify the clip stack
156      */
157     void actionPathOpsWidget(bool );
158 
159     /**
160         Applies the new texture filter override
161      */
162     void actionTextureFilter();
163 
164     /**
165         Rewinds from the current step back to the start of the commands.
166      */
167     void actionRewind();
168 
169     /**
170         Saves the current SKP with all modifications.
171      */
172     void actionSave();
173 
174     /**
175         Saves the current SKP under a different name and/or location.
176      */
177     void actionSaveAs();
178 
179     /**
180         Sends the scale factor information to the settings widget.
181      */
182     void actionScale(float scaleFactor);
183 
184     /**
185         Toggles the settings widget visibility.
186      */
187     void actionSettings();
188 
189     /**
190         Steps forward to the next draw command.
191      */
192     void actionStepBack();
193 
194     /**
195         Steps backwards to the next draw command.
196      */
197     void actionStepForward();
198 
199     /**
200         Called when the canvas is done being drawn to by SkCanvasWidget.
201      */
202     void drawComplete();
203 
204     /**
205         Loads an skpicture selected from the directory.
206      */
207     void loadFile(QListWidgetItem *item);
208 
209     /**
210         Toggles a dialog with a file browser for navigating to a skpicture. Loads
211         the selected file.
212      */
213     void openFile();
214 
215     /**
216         Toggles whether drawing to a new command requires a double click
217         or simple focus.
218      */
219     void pauseDrawing(bool isPaused = true);
220 
221     /**
222         Executes draw commands up to the selected command
223      */
224     void registerListClick(QListWidgetItem *item);
225 
226     /**
227         Sets the command to active in the list widget.
228      */
229     void selectCommand(int command);
230 
231     /**
232         Toggles the exclusive listing of commands set as deleted.
233      */
234     void showDeletes();
235 
236     /**
237         Toggles a breakpoint on the current step in the list widget.
238      */
239     void toggleBreakpoint();
240 
241     /**
242         Toggles the visibility of the directory widget.
243      */
244     void toggleDirectory();
245 
246     /**
247         Filters the list widgets command visibility based on the currently
248         active selection.
249      */
250     void toggleFilter(QString string);
251 
252 private:
253     QSplitter fCentralSplitter;
254     QStatusBar fStatusBar;
255     QToolBar fToolBar;
256 
257     QAction fActionOpen;
258     QAction fActionBreakpoint;
259     QAction fActionToggleIndexStyle;
260     QAction fActionProfile;
261     QAction fActionCancel;
262     QAction fActionClearBreakpoints;
263     QAction fActionClearDeletes;
264     QAction fActionClose;
265     QAction fActionCreateBreakpoint;
266     QAction fActionDelete;
267     QAction fActionDirectory;
268     QAction fActionGoToLine;
269     QAction fActionInspector;
270     QAction fActionSettings;
271     QAction fActionPlay;
272     QAction fActionPause;
273     QAction fActionRewind;
274     QAction fActionSave;
275     QAction fActionSaveAs;
276     QAction fActionShowDeletes;
277     QAction fActionStepBack;
278     QAction fActionStepForward;
279     QAction fActionZoomIn;
280     QAction fActionZoomOut;
281     QSignalMapper fMapper;
282 
283     QWidget fSpacer;
284     QComboBox fFilter;
285 
286     QSplitter fLeftColumnSplitter;
287     QWidget fMainAndRightColumnWidget;
288     QVBoxLayout fMainAndRightColumnLayout;
289     QHBoxLayout fCanvasSettingsAndImageLayout;
290     QVBoxLayout fSettingsAndImageLayout;
291 
292     QListWidget fListWidget;
293     QListWidget fDirectoryWidget;
294 
295     SkDebugger fDebugger;
296     SkCanvasWidget fCanvasWidget;
297     SkImageWidget fImageWidget;
298     SkInspectorWidget fInspectorWidget;
299     SkSettingsWidget fSettingsWidget;
300 
301     QString fPath;
302     SkString fFileName;
303     SkTDArray<bool> fSkipCommands; // has a specific command been deleted?
304     bool fDirectoryWidgetActive;
305 
306     QMenuBar fMenuBar;
307     QMenu fMenuFile;
308     QMenu fMenuEdit;
309     QMenu fMenuNavigate;
310     QMenu fMenuView;
311     QMenu fMenuWindows;
312 
313     bool fBreakpointsActivated;
314     bool fIndexStyleToggle;
315     bool fDeletesActivated;
316     bool fPause;
317     bool fLoading;
318     int fPausedRow;
319 
320     /**
321         Creates the entire UI.
322      */
323     void setupUi(QMainWindow *SkDebuggerGUI);
324 
325     /**
326         Pipes a QString in with the location of the filename, proceeds to updating
327         the listwidget, combowidget and inspectorwidget.
328      */
329     void loadPicture(const SkString& fileName);
330 
331     /**
332         Creates a picture of the current canvas.
333      */
334     void saveToFile(const SkString& filename);
335 
336     /**
337         Populates the list widget with the vector of strings passed in.
338      */
339     void setupListWidget(SkTArray<SkString>* commands, SkTDArray<size_t>* offsets);
340 
341     /**
342         Populates the combo box widget with the vector of strings passed in.
343      */
344     void setupComboBox(SkTArray<SkString>* command);
345 
346     /**
347         Fills in the overview pane with text
348      */
349     void setupOverviewText(const SkTDArray<double>* typeTimes, double totTime, int numRuns);
350 
351     /**
352         Fills in the clip stack pane with text
353      */
354     void setupClipStackText();
355 
356     /**
357         Render the supplied picture several times tracking the time consumed
358         by each command.
359      */
360     void run(SkTimedPicture* pict,
361              sk_tools::PictureRenderer* renderer,
362              int repeats);
363 };
364 
365 #endif // SKDEBUGGERUI_H
366