Home | History | Annotate | Download | only in QT
      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