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 "SkDrawCommandGeometryWidget.h" 21 #include "SkSettingsWidget.h" 22 #include <QtCore/QFileSystemWatcher> 23 #include <QtCore/QSignalMapper> 24 #include <QtCore/QVariant> 25 #include <QtGui/QAction> 26 #include <QtGui/QApplication> 27 #include <QtGui/QButtonGroup> 28 #include <QtGui/QHBoxLayout> 29 #include <QtGui/QHeaderView> 30 #include <QtGui/QListView> 31 #include <QtGui/QListWidget> 32 #include <QtGui/QMainWindow> 33 #include <QtGui/QSplitter> 34 #include <QtGui/QStatusBar> 35 #include <QtGui/QToolBar> 36 #include <QtGui/QVBoxLayout> 37 #include <QtGui/QWidget> 38 #include <QtGui/QMenu> 39 #include <QtGui/QMenuBar> 40 #include <vector> 41 42 /** \class SkDebuggerGUI 43 44 Container for the UI and it's functions. 45 */ 46 class SkDebuggerGUI : public QMainWindow { 47 Q_OBJECT 48 49 public: 50 /** 51 Constructs the view of the application. 52 @param parent The parent container of this widget. 53 */ 54 SkDebuggerGUI(QWidget *parent = 0); 55 56 /** 57 Updates the directory widget with the latest directory path stored in 58 the global class variable fPath. 59 */ 60 void setupDirectoryWidget(const QString& path); 61 62 /** 63 Loads the specified file. 64 */ 65 void openFile(const QString& filename); 66 67 signals: 68 void commandChanged(int command); 69 70 private slots: 71 /** 72 Toggles breakpoint view in the list widget. 73 */ 74 void actionBreakpoints(); 75 76 /** 77 Cancels the command filter in the list widget. 78 */ 79 void actionCancel(); 80 81 /** 82 Clears the breakpoint state off of all commands marked as breakpoints. 83 */ 84 void actionClearBreakpoints(); 85 86 /** 87 Clears the deleted state off of all commands marked as deleted. 88 */ 89 void actionClearDeletes(); 90 91 /** 92 Closes the application. 93 */ 94 void actionClose(); 95 96 /** 97 Deletes the command in question. 98 */ 99 void actionDelete(); 100 101 #if SK_SUPPORT_GPU 102 /** 103 Updates the visibility of the GL canvas widget and sample count of the GL surface. 104 */ 105 void actionGLSettingsChanged(); 106 #endif 107 108 /** 109 Toggles the visibility of the inspector widget. 110 */ 111 void actionInspector(); 112 113 /** 114 Plays from the current step to the next breakpoint if it exists, otherwise 115 executes all remaining draw commands. 116 */ 117 void actionPlay(); 118 119 /** 120 Sets the visibility of the raster canvas widget according to the settings widget. 121 */ 122 void actionRasterSettingsChanged(); 123 124 /** 125 Sets the visualization settings according to the settings widget. 126 */ 127 void actionVisualizationsChanged(); 128 129 /** 130 Applies the new texture filter override 131 */ 132 void actionTextureFilter(); 133 134 /** 135 Rewinds from the current step back to the start of the commands. 136 */ 137 void actionRewind(); 138 139 /** 140 Saves the current SKP with all modifications. 141 */ 142 void actionSave(); 143 144 /** 145 Saves the current SKP under a different name and/or location. 146 */ 147 void actionSaveAs(); 148 149 /** 150 Sends the scale factor information to the settings widget. 151 */ 152 void actionScale(float scaleFactor); 153 154 /** 155 Toggles the settings widget visibility. 156 */ 157 void actionSettings(); 158 159 /** 160 Steps forward to the next draw command. 161 */ 162 void actionStepBack(); 163 164 /** 165 Steps backwards to the next draw command. 166 */ 167 void actionStepForward(); 168 169 /** 170 Called when the canvas is done being drawn to by SkCanvasWidget. 171 */ 172 void drawComplete(); 173 174 /** 175 Loads an skpicture selected from the directory. 176 */ 177 void loadFile(QListWidgetItem *item); 178 179 /** 180 Toggles a dialog with a file browser for navigating to a skpicture. Loads 181 the selected file. 182 */ 183 void openFile(); 184 185 /** 186 Toggles whether drawing to a new command requires a double click 187 or simple focus. 188 */ 189 void pauseDrawing(bool isPaused = true); 190 191 /** 192 Updates the UI based on the selected command. 193 */ 194 void updateDrawCommandInfo(); 195 196 /** 197 Sets the command to active in the list widget. 198 */ 199 void selectCommand(int command); 200 201 /** 202 Toggles the exclusive listing of commands set as deleted. 203 */ 204 void showDeletes(); 205 206 /** 207 Toggles a breakpoint on the current step in the list widget. 208 */ 209 void toggleBreakpoint(); 210 211 /** 212 Toggles the visibility of the directory widget. 213 */ 214 void toggleDirectory(); 215 216 /** 217 Populates the contents of the directory widget with the skp files in the 218 current directory pointed to by fFile. 219 */ 220 void populateDirectoryWidget(); 221 222 /** 223 Filters the list widgets command visibility based on the currently 224 active selection. 225 */ 226 void toggleFilter(QString string); 227 228 void updateHit(int newHit); 229 230 void updateImage(); 231 private: 232 QSplitter fCentralSplitter; 233 QStatusBar fStatusBar; 234 QToolBar fToolBar; 235 236 QAction fActionOpen; 237 QAction fActionBreakpoint; 238 QAction fActionCancel; 239 QAction fActionClearBreakpoints; 240 QAction fActionClearDeletes; 241 QAction fActionClose; 242 QAction fActionCreateBreakpoint; 243 QAction fActionDelete; 244 QAction fActionDirectory; 245 QAction fActionGoToLine; 246 QAction fActionInspector; 247 QAction fActionSettings; 248 QAction fActionPlay; 249 QAction fActionPause; 250 QAction fActionRewind; 251 QAction fActionSave; 252 QAction fActionSaveAs; 253 QAction fActionShowDeletes; 254 QAction fActionStepBack; 255 QAction fActionStepForward; 256 QAction fActionZoomIn; 257 QAction fActionZoomOut; 258 QSignalMapper fMapper; 259 260 QWidget fSpacer; 261 QComboBox fFilter; 262 263 QSplitter fLeftColumnSplitter; 264 QWidget fMainAndRightColumnWidget; 265 QVBoxLayout fMainAndRightColumnLayout; 266 QHBoxLayout fCanvasSettingsAndImageLayout; 267 QVBoxLayout fSettingsAndImageLayout; 268 269 QListWidget fListWidget; 270 QListWidget fDirectoryWidget; 271 272 QFileSystemWatcher fDirectoryWatcher; 273 274 SkDebugger fDebugger; 275 SkCanvasWidget fCanvasWidget; 276 277 SkInspectorWidget fInspectorWidget; 278 SkSettingsWidget fSettingsWidget; 279 280 QFrame fViewStateFrame; 281 QVBoxLayout fViewStateFrameLayout; 282 QGroupBox fViewStateGroup; 283 QFormLayout fViewStateLayout; 284 QLineEdit fCurrentCommandBox; 285 QLineEdit fCommandHitBox; 286 QLineEdit fZoomBox; 287 SkDrawCommandGeometryWidget fDrawCommandGeometryWidget; 288 289 QString fPath; 290 SkString fFileName; 291 SkTDArray<bool> fSkipCommands; // has a specific command been deleted? 292 293 QMenuBar fMenuBar; 294 QMenu fMenuFile; 295 QMenu fMenuEdit; 296 QMenu fMenuNavigate; 297 QMenu fMenuView; 298 QMenu fMenuWindows; 299 300 bool fLoading; 301 int fPausedRow; 302 303 /** 304 Creates the entire UI. 305 */ 306 void setupUi(QMainWindow *SkDebuggerGUI); 307 308 /** 309 Pipes a QString in with the location of the filename, proceeds to updating 310 the listwidget, combowidget and inspectorwidget. 311 */ 312 void loadPicture(const SkString& fileName); 313 314 /** 315 Creates a picture of the current canvas. 316 */ 317 void saveToFile(const SkString& filename); 318 319 /** 320 Populates the list widget with the debugger draw command info. 321 */ 322 void setupListWidget(); 323 324 /** 325 Populates the combo box widget with with the debugger draw command info. 326 */ 327 void setupComboBox(); 328 329 /** 330 Fills in the overview pane with text 331 */ 332 void setupOverviewText(const SkTDArray<double>* typeTimes, double totTime, int numRuns); 333 334 bool isPaused() const { 335 return fActionPause.isChecked(); 336 } 337 }; 338 339 #endif // SKDEBUGGERUI_H 340