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