SkDebuggerGUI.cpp revision 30d35f23ae390043462e2aa5fc6863a4621aa74d
1902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com/*
2902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com * Copyright 2012 Google Inc.
3902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com *
4902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com * Use of this source code is governed by a BSD-style license that can be
5902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com * found in the LICENSE file.
6902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com */
7902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
8902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com#include "SkDebuggerGUI.h"
9bbad34de3b117347bedea619feaf1685586d4202chudy@google.com#include "SkGraphics.h"
10902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com#include <QListWidgetItem>
11902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
12902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comSkDebuggerGUI::SkDebuggerGUI(QWidget *parent) :
13c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com        QMainWindow(parent)
142d537a18f49cb492358c2b051f4786075dd9406cchudy@google.com    , fCentralWidget(this)
152d537a18f49cb492358c2b051f4786075dd9406cchudy@google.com    , fStatusBar(this)
162d537a18f49cb492358c2b051f4786075dd9406cchudy@google.com    , fToolBar(this)
17c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    , fActionOpen(this)
18c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    , fActionBreakpoint(this)
19c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    , fActionCancel(this)
207e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    , fActionClearBreakpoints(this)
21e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    , fActionClearDeletes(this)
22c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    , fActionClose(this)
23e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    , fActionCreateBreakpoint(this)
24c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    , fActionDelete(this)
25c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    , fActionDirectory(this)
26c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    , fActionGoToLine(this)
27c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    , fActionInspector(this)
28c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    , fActionPlay(this)
29e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    , fActionPause(this)
30c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    , fActionRewind(this)
310ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    , fActionSave(this)
320ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    , fActionSaveAs(this)
337e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    , fActionShowDeletes(this)
34c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    , fActionStepBack(this)
35c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    , fActionStepForward(this)
36a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com    , fActionZoomIn(this)
37a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com    , fActionZoomOut(this)
38a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com    , fMapper(this)
39c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    , fListWidget(&fCentralWidget)
40c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    , fDirectoryWidget(&fCentralWidget)
41607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    , fCanvasWidget(this, &fDebugger)
42c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    , fMenuBar(this)
43c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    , fMenuFile(this)
44c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    , fMenuNavigate(this)
45c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    , fMenuView(this)
467e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    , fBreakpointsActivated(false)
477e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    , fDeletesActivated(false)
487e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    , fPause(false)
49d3058f5fd8bb786c5b70a0dd222bde646502258achudy@google.com    , fLoading(false)
50c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com{
51902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    setupUi(this);
52ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com    connect(&fListWidget, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)), this, SLOT(registerListClick(QListWidgetItem *)));
53c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    connect(&fActionOpen, SIGNAL(triggered()), this, SLOT(openFile()));
54ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com    connect(&fActionDirectory, SIGNAL(triggered()), this, SLOT(toggleDirectory()));
55ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com    connect(&fDirectoryWidget, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)), this, SLOT(loadFile(QListWidgetItem *)));
56c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    connect(&fActionDelete, SIGNAL(triggered()), this, SLOT(actionDelete()));
57ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com    connect(&fListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(toggleBreakpoint()));
58c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    connect(&fActionRewind, SIGNAL(triggered()), this, SLOT(actionRewind()));
59c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    connect(&fActionPlay, SIGNAL(triggered()), this, SLOT(actionPlay()));
60c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    connect(&fActionStepBack, SIGNAL(triggered()), this, SLOT(actionStepBack()));
61ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com    connect(&fActionStepForward, SIGNAL(triggered()), this, SLOT(actionStepForward()));
62ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com    connect(&fActionBreakpoint, SIGNAL(triggered()), this, SLOT(actionBreakpoints()));
63ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com    connect(&fActionInspector, SIGNAL(triggered()), this, SLOT(actionInspector()));
64ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com    connect(&fActionInspector, SIGNAL(triggered()), this, SLOT(actionSettings()));
65ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com    connect(&fFilter, SIGNAL(activated(QString)), this, SLOT(toggleFilter(QString)));
66c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    connect(&fActionCancel, SIGNAL(triggered()), this, SLOT(actionCancel()));
677e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    connect(&fActionClearBreakpoints, SIGNAL(triggered()), this, SLOT(actionClearBreakpoints()));
687e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    connect(&fActionClearDeletes, SIGNAL(triggered()), this, SLOT(actionClearDeletes()));
69c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    connect(&fActionClose, SIGNAL(triggered()), this, SLOT(actionClose()));
70ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com    connect(fSettingsWidget.getVisibilityButton(), SIGNAL(toggled(bool)), this, SLOT(actionCommandFilter()));
71ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com    connect(fSettingsWidget.getGLCheckBox(), SIGNAL(toggled(bool)), this, SLOT(actionGLWidget(bool)));
72ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com    connect(fSettingsWidget.getRasterCheckBox(), SIGNAL(toggled(bool)), this, SLOT(actionRasterWidget(bool)));
73ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com    connect(&fActionPause, SIGNAL(toggled(bool)), this, SLOT(pauseDrawing(bool)));
74e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    connect(&fActionCreateBreakpoint, SIGNAL(activated()), this, SLOT(toggleBreakpoint()));
757e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    connect(&fActionShowDeletes, SIGNAL(triggered()), this, SLOT(showDeletes()));
76ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com    connect(&fCanvasWidget, SIGNAL(hitChanged(int)), this, SLOT(selectCommand(int)));
77ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com    connect(&fCanvasWidget, SIGNAL(hitChanged(int)), &fSettingsWidget, SLOT(updateHit(int)));
78ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com    connect(&fCanvasWidget, SIGNAL(scaleFactorChanged(float)), this, SLOT(actionScale(float)));
79ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com    connect(&fCanvasWidget, SIGNAL(commandChanged(int)), &fSettingsWidget, SLOT(updateCommand(int)));
800ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    connect(&fActionSaveAs, SIGNAL(triggered()), this, SLOT(actionSaveAs()));
810ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    connect(&fActionSave, SIGNAL(triggered()), this, SLOT(actionSave()));
827e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com
83a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com    fMapper.setMapping(&fActionZoomIn, 1);
84a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com    fMapper.setMapping(&fActionZoomOut, -1);
85a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com
86a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com    connect(&fActionZoomIn, SIGNAL(triggered()), &fMapper, SLOT(map()));
87a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com    connect(&fActionZoomOut, SIGNAL(triggered()), &fMapper, SLOT(map()));
88a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com    connect(&fMapper, SIGNAL(mapped(int)), &fCanvasWidget, SLOT(keyZoom(int)));
89a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com
907e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    fInspectorWidget.setDisabled(true);
91d3058f5fd8bb786c5b70a0dd222bde646502258achudy@google.com    fMenuEdit.setDisabled(true);
92d3058f5fd8bb786c5b70a0dd222bde646502258achudy@google.com    fMenuNavigate.setDisabled(true);
93d3058f5fd8bb786c5b70a0dd222bde646502258achudy@google.com    fMenuView.setDisabled(true);
94bbad34de3b117347bedea619feaf1685586d4202chudy@google.com
95bbad34de3b117347bedea619feaf1685586d4202chudy@google.com    SkGraphics::Init();
96902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
97902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
98bbad34de3b117347bedea619feaf1685586d4202chudy@google.comSkDebuggerGUI::~SkDebuggerGUI() {
99bbad34de3b117347bedea619feaf1685586d4202chudy@google.com    SkGraphics::Term();
100bbad34de3b117347bedea619feaf1685586d4202chudy@google.com}
101902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
102902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::actionBreakpoints() {
1037e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    fBreakpointsActivated = !fBreakpointsActivated;
1047e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    for (int row = 0; row < fListWidget.count(); row++) {
1057e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com        QListWidgetItem *item = fListWidget.item(row);
1067e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com        item->setHidden(item->checkState() == Qt::Unchecked && fBreakpointsActivated);
107902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    }
1087e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com}
109902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
1107e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.comvoid SkDebuggerGUI::showDeletes() {
1117e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    fDeletesActivated = !fDeletesActivated;
112c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    for (int row = 0; row < fListWidget.count(); row++) {
113c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com        QListWidgetItem *item = fListWidget.item(row);
114607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com        item->setHidden(fDebugger.isCommandVisible(row)
115607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com                && fDeletesActivated);
116902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    }
117902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
118902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
119902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::actionCancel() {
120c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    for (int row = 0; row < fListWidget.count(); row++) {
121c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com        fListWidget.item(row)->setHidden(false);
122902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    }
123902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
124902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
1257e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.comvoid SkDebuggerGUI::actionClearBreakpoints() {
1267e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    for (int row = 0; row < fListWidget.count(); row++) {
1277e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com        QListWidgetItem* item = fListWidget.item(row);
1287e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com        item->setCheckState(Qt::Unchecked);
1297e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com        item->setData(Qt::DecorationRole,
1307e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com                QPixmap(":/images/Icons/blank.png"));
1317e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    }
1327e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com}
1337e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com
1347e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.comvoid SkDebuggerGUI::actionClearDeletes() {
1357e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    for (int row = 0; row < fListWidget.count(); row++) {
1367e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com        QListWidgetItem* item = fListWidget.item(row);
1377e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com        item->setData(Qt::UserRole + 2, QPixmap(":/images/Icons/blank.png"));
138607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com        fDebugger.setCommandVisible(row, true);
1397e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    }
1407e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    if (fPause) {
1417e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com        fCanvasWidget.drawTo(fPausedRow);
1427e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    } else {
1437e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com        fCanvasWidget.drawTo(fListWidget.currentRow());
1447e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    }
1457e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com}
1467e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com
147902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::actionCommandFilter() {
148607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    fDebugger.highlightCurrentCommand(
149c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com            fSettingsWidget.getVisibilityButton()->isChecked());
150c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fCanvasWidget.drawTo(fListWidget.currentRow());
151902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
152902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
153902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::actionClose() {
154902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    this->close();
155902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
156902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
157902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::actionDelete() {
1587e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    int currentRow = fListWidget.currentRow();
159c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    QListWidgetItem* item = fListWidget.currentItem();
1607e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com
161607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    if (fDebugger.isCommandVisible(currentRow)) {
1627e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com        item->setData(Qt::UserRole + 2, QPixmap(":/images/Icons/delete.png"));
163607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com        fDebugger.setCommandVisible(currentRow, false);
164902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    } else {
1657e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com        item->setData(Qt::UserRole + 2, QPixmap(":/images/Icons/blank.png"));
166607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com        fDebugger.setCommandVisible(currentRow, true);
167902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    }
1687e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com
169e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    if (fPause) {
170e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com        fCanvasWidget.drawTo(fPausedRow);
171e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    } else {
172e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com        fCanvasWidget.drawTo(currentRow);
173e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    }
174902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
175902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
176ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.comvoid SkDebuggerGUI::actionGLWidget(bool isToggled) {
177ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com    fCanvasWidget.setWidgetVisibility(SkCanvasWidget::kGPU_WidgetType, !isToggled);
178ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com}
179ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com
180902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::actionInspector() {
181c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    if (fInspectorWidget.isHidden()) {
182c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com        fInspectorWidget.setHidden(false);
183902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    } else {
184c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com        fInspectorWidget.setHidden(true);
185902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    }
186902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
187902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
188902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::actionPlay() {
189c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    for (int row = fListWidget.currentRow() + 1; row < fListWidget.count();
1907dcae67cae277549accdd38d0496b72d00151239chudy@google.com            row++) {
191c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com        QListWidgetItem *item = fListWidget.item(row);
192902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        if (item->checkState() == Qt::Checked) {
193c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com            fListWidget.setCurrentItem(item);
194902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com            return;
195902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        }
196902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    }
197c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fListWidget.setCurrentRow(fListWidget.count() - 1);
198902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
199902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
200ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.comvoid SkDebuggerGUI::actionRasterWidget(bool isToggled) {
201ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com    fCanvasWidget.setWidgetVisibility(SkCanvasWidget::kRaster_8888_WidgetType, !isToggled);
202ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com}
203ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com
204902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::actionRewind() {
205e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fListWidget.setCurrentRow(0);
206902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
207902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
2080ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.comvoid SkDebuggerGUI::actionSave() {
2090ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    QString filename;
2100ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    filename.append(fPath);
2110ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    filename.append("/");
2120ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    filename.append(fDirectoryWidget.currentItem()->text());
2130ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    saveToFile(filename);
2140ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com}
2150ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com
2160ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.comvoid SkDebuggerGUI::actionSaveAs() {
2170ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    QString filename = QFileDialog::getSaveFileName(this, "Save File", "",
2180ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com            "Skia Picture (*skp)");
21938b08ce020f451a66263110b32e70f5022df4f83chudy@google.com    if (!filename.endsWith(".skp", Qt::CaseInsensitive)) {
2200ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com        filename.append(".skp");
2210ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    }
2220ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    saveToFile(filename);
2230ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com}
2240ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com
2257dcae67cae277549accdd38d0496b72d00151239chudy@google.comvoid SkDebuggerGUI::actionScale(float scaleFactor) {
226c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fSettingsWidget.setZoomText(scaleFactor);
2277dcae67cae277549accdd38d0496b72d00151239chudy@google.com}
2287dcae67cae277549accdd38d0496b72d00151239chudy@google.com
229902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::actionSettings() {
230c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    if (fSettingsWidget.isHidden()) {
231c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com        fSettingsWidget.setHidden(false);
232902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    } else {
233c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com        fSettingsWidget.setHidden(true);
234902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    }
235902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
236902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
237902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::actionStepBack() {
238c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    int currentRow = fListWidget.currentRow();
239902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    if (currentRow != 0) {
240c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com        fListWidget.setCurrentRow(currentRow - 1);
241902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    }
242902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
243902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
244902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::actionStepForward() {
245c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    int currentRow = fListWidget.currentRow();
246902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    QString curRow = QString::number(currentRow);
247c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    QString curCount = QString::number(fListWidget.count());
248c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    if (currentRow < fListWidget.count() - 1) {
249c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com        fListWidget.setCurrentRow(currentRow + 1);
250902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    }
251902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
252902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
253a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.comvoid SkDebuggerGUI::drawComplete() {
254607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    fInspectorWidget.setMatrix(fDebugger.getCurrentMatrix());
255607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    fInspectorWidget.setClip(fDebugger.getCurrentClip());
256a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com}
257a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com
2580ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.comvoid SkDebuggerGUI::saveToFile(QString filename) {
2590ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    SkFILEWStream file(filename.toAscii());
260607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    fDebugger.makePicture()->serialize(&file);
2610ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com}
2620ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com
263902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::loadFile(QListWidgetItem *item) {
264902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    if (fDirectoryWidgetActive) {
265902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        QString fileName;
266902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        fileName.append(fPath);
267902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        fileName.append("/");
268902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        fileName.append(item->text());
269902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        loadPicture(fileName);
270902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    }
271902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
272902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
273902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::openFile() {
2747dcae67cae277549accdd38d0496b72d00151239chudy@google.com    QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"), "",
2757dcae67cae277549accdd38d0496b72d00151239chudy@google.com            tr("Files (*.*)"));
276902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    fDirectoryWidgetActive = false;
277902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    if (!fileName.isNull()) {
278902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        QFileInfo pathInfo(fileName);
279902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        fPath = pathInfo.path();
280902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        loadPicture(fileName);
281902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        setupDirectoryWidget();
282902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    }
283902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    fDirectoryWidgetActive = true;
284902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
285902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
286c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.comvoid SkDebuggerGUI::pauseDrawing(bool isPaused) {
287607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    fPause = isPaused;
288607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    fPausedRow = fListWidget.currentRow();
289607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    fCanvasWidget.drawTo(fPausedRow);
2907dcae67cae277549accdd38d0496b72d00151239chudy@google.com}
2917dcae67cae277549accdd38d0496b72d00151239chudy@google.com
292902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::registerListClick(QListWidgetItem *item) {
293d3058f5fd8bb786c5b70a0dd222bde646502258achudy@google.com    if(!fLoading) {
294d3058f5fd8bb786c5b70a0dd222bde646502258achudy@google.com        int currentRow = fListWidget.currentRow();
295ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com
296ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com        if (currentRow != -1) {
297ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com            if (!fPause) {
298ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com                fCanvasWidget.drawTo(currentRow);
299ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com            }
30097cee9735350cb472249ce1a827ba1aa6b2a5f59chudy@google.com            SkTDArray<SkString*> *currInfo = fDebugger.getCommandInfo(
301ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com                    currentRow);
302ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com
303ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com            /* TODO(chudy): Add command type before parameters. Rename v
304ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com             * to something more informative. */
30597cee9735350cb472249ce1a827ba1aa6b2a5f59chudy@google.com            if (currInfo) {
306ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com                QString info;
307ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com                info.append("<b>Parameters: </b><br/>");
30897cee9735350cb472249ce1a827ba1aa6b2a5f59chudy@google.com                for (int i = 0; i < currInfo->count(); i++) {
30997cee9735350cb472249ce1a827ba1aa6b2a5f59chudy@google.com
31097cee9735350cb472249ce1a827ba1aa6b2a5f59chudy@google.com                    info.append(QString((*currInfo)[i]->c_str()));
311ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com                    info.append("<br/>");
312ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com                }
3136bd109a39370d21bfd4b48f5a28df8bcfc7f5ba2chudy@google.com                fInspectorWidget.setText(info, SkInspectorWidget::kDetail_TabType);
314ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com                fInspectorWidget.setDisabled(false);
315d3058f5fd8bb786c5b70a0dd222bde646502258achudy@google.com            }
316902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        }
317ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com
318902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    }
319902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
320902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
3219ca9bfe9f6eaae41841446386e40be1013907e99chudy@google.comvoid SkDebuggerGUI::selectCommand(int command) {
3229ca9bfe9f6eaae41841446386e40be1013907e99chudy@google.com    if (fPause) {
3239ca9bfe9f6eaae41841446386e40be1013907e99chudy@google.com        fListWidget.setCurrentRow(command);
3249ca9bfe9f6eaae41841446386e40be1013907e99chudy@google.com    }
3259ca9bfe9f6eaae41841446386e40be1013907e99chudy@google.com}
3269ca9bfe9f6eaae41841446386e40be1013907e99chudy@google.com
327902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::toggleBreakpoint() {
328c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    QListWidgetItem* item = fListWidget.currentItem();
329902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    if (item->checkState() == Qt::Unchecked) {
330902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        item->setCheckState(Qt::Checked);
331e565de4fad5598890124daadf385930043269415chudy@google.com        item->setData(Qt::DecorationRole,
332e565de4fad5598890124daadf385930043269415chudy@google.com                QPixmap(":/images/Icons/breakpoint_16x16.png"));
333902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    } else {
334902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        item->setCheckState(Qt::Unchecked);
335e565de4fad5598890124daadf385930043269415chudy@google.com        item->setData(Qt::DecorationRole,
336e565de4fad5598890124daadf385930043269415chudy@google.com                QPixmap(":/images/Icons/blank.png"));
337902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    }
338902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
339902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
340902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::toggleDirectory() {
341607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    fDirectoryWidget.setHidden(!fDirectoryWidget.isHidden());
342902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
343902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
344902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::toggleFilter(QString string) {
345c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    for (int row = 0; row < fListWidget.count(); row++) {
346c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com        QListWidgetItem *item = fListWidget.item(row);
347607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com        item->setHidden(item->text() != string);
348902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    }
349902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
350902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
351902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::setupUi(QMainWindow *SkDebuggerGUI) {
352902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    QIcon windowIcon;
3537dcae67cae277549accdd38d0496b72d00151239chudy@google.com    windowIcon.addFile(QString::fromUtf8(":/images/Icons/skia.png"), QSize(),
3547dcae67cae277549accdd38d0496b72d00151239chudy@google.com            QIcon::Normal, QIcon::Off);
355902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    SkDebuggerGUI->setObjectName(QString::fromUtf8("SkDebuggerGUI"));
356902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    SkDebuggerGUI->resize(1200, 1000);
357902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    SkDebuggerGUI->setWindowIcon(windowIcon);
358c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    SkDebuggerGUI->setWindowTitle("Skia Debugger");
359902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
360e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionOpen.setShortcuts(QKeySequence::Open);
361c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionOpen.setText("Open");
362902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
363c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    QIcon breakpoint;
364c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    breakpoint.addFile(QString::fromUtf8(":/images/Icons/breakpoint.png"),
3657dcae67cae277549accdd38d0496b72d00151239chudy@google.com            QSize(), QIcon::Normal, QIcon::Off);
366e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionBreakpoint.setShortcut(QKeySequence(tr("Ctrl+B")));
367c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionBreakpoint.setIcon(breakpoint);
3687e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    fActionBreakpoint.setText("Breakpoints");
369902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
370c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    QIcon cancel;
371e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    cancel.addFile(QString::fromUtf8(":/images/Ico/reload.png"), QSize(),
3727dcae67cae277549accdd38d0496b72d00151239chudy@google.com            QIcon::Normal, QIcon::Off);
373c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionCancel.setIcon(cancel);
374c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionCancel.setText("Clear Filter");
375902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
3767e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    fActionClearBreakpoints.setShortcut(QKeySequence(tr("Alt+B")));
3777e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    fActionClearBreakpoints.setText("Clear Breakpoints");
3787e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com
3797e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    fActionClearDeletes.setShortcut(QKeySequence(tr("Alt+X")));
3807e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    fActionClearDeletes.setText("Clear Deletes");
3817e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com
382e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionClose.setShortcuts(QKeySequence::Quit);
383c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionClose.setText("Exit");
384902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
385e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionCreateBreakpoint.setShortcut(QKeySequence(tr("B")));
386e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionCreateBreakpoint.setText("Set Breakpoint");
387e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com
388e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionDelete.setShortcut(QKeySequence(tr("X")));
389c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionDelete.setText("Delete Command");
390902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
391e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionDirectory.setShortcut(QKeySequence(tr("Ctrl+D")));
392e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionDirectory.setText("Directory");
393902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
394902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    QIcon inspector;
395e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    inspector.addFile(QString::fromUtf8(":/images/Ico/inspector.png"),
3967dcae67cae277549accdd38d0496b72d00151239chudy@google.com            QSize(), QIcon::Normal, QIcon::Off);
397e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionInspector.setShortcut(QKeySequence(tr("Ctrl+I")));
398c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionInspector.setIcon(inspector);
399e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionInspector.setText("Inspector");
400902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
401c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    QIcon play;
402e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    play.addFile(QString::fromUtf8(":/images/Ico/play.png"), QSize(),
4037dcae67cae277549accdd38d0496b72d00151239chudy@google.com            QIcon::Normal, QIcon::Off);
404e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionPlay.setShortcut(QKeySequence(tr("Ctrl+P")));
405c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionPlay.setIcon(play);
406c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionPlay.setText("Play");
407902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
408e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    QIcon pause;
409e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    pause.addFile(QString::fromUtf8(":/images/Ico/pause.png"), QSize(),
4107dcae67cae277549accdd38d0496b72d00151239chudy@google.com            QIcon::Normal, QIcon::Off);
411e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionPause.setShortcut(QKeySequence(tr("Space")));
412e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionPause.setCheckable(true);
413e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionPause.setIcon(pause);
414e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionPause.setText("Pause");
415e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com
416c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    QIcon rewind;
417e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    rewind.addFile(QString::fromUtf8(":/images/Ico/rewind.png"), QSize(),
418c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com            QIcon::Normal, QIcon::Off);
419e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionRewind.setShortcut(QKeySequence(tr("Ctrl+R")));
420c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionRewind.setIcon(rewind);
421c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionRewind.setText("Rewind");
422902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
4230ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    fActionSave.setShortcut(QKeySequence::Save);
4240ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    fActionSave.setText("Save");
4250ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    fActionSave.setDisabled(true);
4260ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    fActionSaveAs.setShortcut(QKeySequence::SaveAs);
4270ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    fActionSaveAs.setText("Save As");
4280ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    fActionSaveAs.setDisabled(true);
4290ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com
4307e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    fActionShowDeletes.setShortcut(QKeySequence(tr("Ctrl+X")));
4317e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    fActionShowDeletes.setText("Deleted Commands");
4327e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com
433c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    QIcon stepBack;
434e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    stepBack.addFile(QString::fromUtf8(":/images/Ico/previous.png"), QSize(),
4357dcae67cae277549accdd38d0496b72d00151239chudy@google.com            QIcon::Normal, QIcon::Off);
436e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionStepBack.setShortcut(QKeySequence(tr("[")));
437c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionStepBack.setIcon(stepBack);
438c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionStepBack.setText("Step Back");
439902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
440c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    QIcon stepForward;
441e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    stepForward.addFile(QString::fromUtf8(":/images/Ico/next.png"),
442c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com            QSize(), QIcon::Normal, QIcon::Off);
443e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionStepForward.setShortcut(QKeySequence(tr("]")));
444c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionStepForward.setIcon(stepForward);
445c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionStepForward.setText("Step Forward");
446c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com
447a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com    fActionZoomIn.setShortcut(QKeySequence(tr("Ctrl+=")));
448a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com    fActionZoomIn.setText("Zoom In");
449a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com    fActionZoomOut.setShortcut(QKeySequence(tr("Ctrl+-")));
450a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com    fActionZoomOut.setText("Zoom Out");
451a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com
452c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fListWidget.setItemDelegate(new SkListWidget(&fListWidget));
453c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fListWidget.setObjectName(QString::fromUtf8("listWidget"));
454c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fListWidget.setMaximumWidth(250);
455902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
456c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fFilter.addItem("--Filter By Available Commands--");
457902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
458c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fDirectoryWidget.setMaximumWidth(250);
459c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fDirectoryWidget.setStyleSheet("QListWidget::Item {padding: 5px;}");
460902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
461c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fCanvasWidget.setSizePolicy(QSizePolicy::Expanding,
4627dcae67cae277549accdd38d0496b72d00151239chudy@google.com            QSizePolicy::Expanding);
463902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
464c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fInspectorWidget.setSizePolicy(QSizePolicy::Expanding,
4657dcae67cae277549accdd38d0496b72d00151239chudy@google.com            QSizePolicy::Expanding);
466c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fInspectorWidget.setMaximumHeight(300);
467c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com
468c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fSettingsWidget.setSizePolicy(QSizePolicy::Expanding,
469c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com            QSizePolicy::Expanding);
470c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fSettingsWidget.setMaximumWidth(250);
471c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com
472c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fLeftColumnLayout.setSpacing(6);
473c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fLeftColumnLayout.addWidget(&fListWidget);
474c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fLeftColumnLayout.addWidget(&fDirectoryWidget);
475902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
476c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fCanvasAndSettingsLayout.setSpacing(6);
477c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fCanvasAndSettingsLayout.addWidget(&fCanvasWidget);
478c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fCanvasAndSettingsLayout.addWidget(&fSettingsWidget);
479902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
480c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fMainAndRightColumnLayout.setSpacing(6);
481c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fMainAndRightColumnLayout.addLayout(&fCanvasAndSettingsLayout);
482c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fMainAndRightColumnLayout.addWidget(&fInspectorWidget);
483902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
4842d537a18f49cb492358c2b051f4786075dd9406cchudy@google.com    fCentralWidget.setLayout(&fContainerLayout);
485c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fContainerLayout.setSpacing(6);
486c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fContainerLayout.setContentsMargins(11, 11, 11, 11);
487c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fContainerLayout.addLayout(&fLeftColumnLayout);
488c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fContainerLayout.addLayout(&fMainAndRightColumnLayout);
489902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
490c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    SkDebuggerGUI->setCentralWidget(&fCentralWidget);
491c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    SkDebuggerGUI->setStatusBar(&fStatusBar);
492902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
493e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fToolBar.setIconSize(QSize(32, 32));
494c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fToolBar.setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
495c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    SkDebuggerGUI->addToolBar(Qt::TopToolBarArea, &fToolBar);
496902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
4970ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    fSpacer.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
498902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
499c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fToolBar.addAction(&fActionRewind);
500c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fToolBar.addAction(&fActionStepBack);
501e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fToolBar.addAction(&fActionPause);
502c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fToolBar.addAction(&fActionStepForward);
503c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fToolBar.addAction(&fActionPlay);
504c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fToolBar.addSeparator();
505e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fToolBar.addAction(&fActionInspector);
506c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fToolBar.addSeparator();
5070ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    fToolBar.addWidget(&fSpacer);
508c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fToolBar.addWidget(&fFilter);
509c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fToolBar.addAction(&fActionCancel);
510902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
511902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    // TODO(chudy): Remove static call.
512902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    fDirectoryWidgetActive = false;
513ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com    fPath = "/usr/local/google/home/chudy/trunk-git/trunk/skp";
514902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    setupDirectoryWidget();
515902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    fDirectoryWidgetActive = true;
516902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
517902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    // Menu Bar
518c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fMenuFile.setTitle("File");
519c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fMenuFile.addAction(&fActionOpen);
5200ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    fMenuFile.addAction(&fActionSave);
5210ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    fMenuFile.addAction(&fActionSaveAs);
522c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fMenuFile.addAction(&fActionClose);
523e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com
524e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fMenuEdit.setTitle("Edit");
525e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fMenuEdit.addAction(&fActionDelete);
5267e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    fMenuEdit.addAction(&fActionClearDeletes);
5277e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    fMenuEdit.addSeparator();
528e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fMenuEdit.addAction(&fActionCreateBreakpoint);
5297e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    fMenuEdit.addAction(&fActionClearBreakpoints);
530e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com
531c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fMenuNavigate.setTitle("Navigate");
532e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fMenuNavigate.addAction(&fActionRewind);
533e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fMenuNavigate.addAction(&fActionStepBack);
534e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fMenuNavigate.addAction(&fActionStepForward);
535e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fMenuNavigate.addAction(&fActionPlay);
536e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fMenuNavigate.addAction(&fActionPause);
537c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fMenuNavigate.addAction(&fActionGoToLine);
538e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com
539c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fMenuView.setTitle("View");
540e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fMenuView.addAction(&fActionBreakpoint);
5417e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    fMenuView.addAction(&fActionShowDeletes);
542a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com    fMenuView.addAction(&fActionZoomIn);
543a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com    fMenuView.addAction(&fActionZoomOut);
544e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com
545e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fMenuWindows.setTitle("Window");
546e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fMenuWindows.addAction(&fActionInspector);
547e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fMenuWindows.addAction(&fActionDirectory);
548c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com
549c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionGoToLine.setText("Go to Line...");
550c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionGoToLine.setDisabled(true);
551c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fMenuBar.addAction(fMenuFile.menuAction());
552e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fMenuBar.addAction(fMenuEdit.menuAction());
553c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fMenuBar.addAction(fMenuView.menuAction());
554c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fMenuBar.addAction(fMenuNavigate.menuAction());
555e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fMenuBar.addAction(fMenuWindows.menuAction());
556902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
5577dcae67cae277549accdd38d0496b72d00151239chudy@google.com    fPause = false;
5587dcae67cae277549accdd38d0496b72d00151239chudy@google.com
559c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    SkDebuggerGUI->setMenuBar(&fMenuBar);
560902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    QMetaObject::connectSlotsByName(SkDebuggerGUI);
561902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
562902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
563902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::setupDirectoryWidget() {
564c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    QDir dir(fPath);
565902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    QRegExp r(".skp");
566c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fDirectoryWidget.clear();
567c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    const QStringList files = dir.entryList();
568902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    foreach (QString f, files) {
5697dcae67cae277549accdd38d0496b72d00151239chudy@google.com        if (f.contains(r))
570c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com            fDirectoryWidget.addItem(f);
571902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    }
572902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
573902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
574902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::loadPicture(QString fileName) {
575d3058f5fd8bb786c5b70a0dd222bde646502258achudy@google.com    fLoading = true;
576607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    SkStream* stream = new SkFILEStream(fileName.toAscii());
577607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    SkPicture* picture = new SkPicture(stream);
578686e68019374dca3692cac6d5f8d94515e53d6c8chudy@google.com    fCanvasWidget.resetWidgetTransform();
579607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    fDebugger.loadPicture(picture);
5804c7962e0a866b8416fa7046791c129eb5430b677chudy@google.com
581607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    SkSafeUnref(stream);
582607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    SkSafeUnref(picture);
583607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com
58497cee9735350cb472249ce1a827ba1aa6b2a5f59chudy@google.com    // Will this automatically clear out due to nature of refcnt?
58597cee9735350cb472249ce1a827ba1aa6b2a5f59chudy@google.com    SkTDArray<SkString*>* commands = fDebugger.getDrawCommands();
586607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com
5877dcae67cae277549accdd38d0496b72d00151239chudy@google.com    /* fDebugCanvas is reinitialized every load picture. Need it to retain value
588607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com     * of the visibility filter.
589607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com     * TODO(chudy): This should be deprecated since fDebugger is not
590607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com     * recreated.
591607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com     * */
592607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    fDebugger.highlightCurrentCommand(fSettingsWidget.getVisibilityButton()->isChecked());
593607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com
59497cee9735350cb472249ce1a827ba1aa6b2a5f59chudy@google.com    setupListWidget(commands);
59597cee9735350cb472249ce1a827ba1aa6b2a5f59chudy@google.com    setupComboBox(commands);
5967e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    fInspectorWidget.setDisabled(false);
597e606d6e210b17dd9dd582d4d3ec70acb4f3213d5chudy@google.com    fSettingsWidget.setDisabled(false);
598d3058f5fd8bb786c5b70a0dd222bde646502258achudy@google.com    fMenuEdit.setDisabled(false);
599d3058f5fd8bb786c5b70a0dd222bde646502258achudy@google.com    fMenuNavigate.setDisabled(false);
600d3058f5fd8bb786c5b70a0dd222bde646502258achudy@google.com    fMenuView.setDisabled(false);
6010ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    fActionSave.setDisabled(false);
6020ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    fActionSaveAs.setDisabled(false);
603d3058f5fd8bb786c5b70a0dd222bde646502258achudy@google.com    fLoading = false;
604d3058f5fd8bb786c5b70a0dd222bde646502258achudy@google.com    actionPlay();
605902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
606902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
60797cee9735350cb472249ce1a827ba1aa6b2a5f59chudy@google.comvoid SkDebuggerGUI::setupListWidget(SkTDArray<SkString*>* command) {
608c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fListWidget.clear();
609902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    int counter = 0;
61030d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com    int indent = 0;
61197cee9735350cb472249ce1a827ba1aa6b2a5f59chudy@google.com    for (int i = 0; i < command->count(); i++) {
612902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        QListWidgetItem *item = new QListWidgetItem();
61397cee9735350cb472249ce1a827ba1aa6b2a5f59chudy@google.com        item->setData(Qt::DisplayRole, (*command)[i]->c_str());
614902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        item->setData(Qt::UserRole + 1, counter++);
61530d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com
61630d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com        if (0 == strcmp("Restore", (*command)[i]->c_str())) {
61730d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com            indent -= 10;
61830d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com        }
61930d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com
62030d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com        item->setData(Qt::UserRole + 3, indent);
62130d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com
62230d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com        if (0 == strcmp("Save", (*command)[i]->c_str()) ||
62330d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com            0 == strcmp("Save Layer", (*command)[i]->c_str())) {
62430d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com            indent += 10;
62530d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com        }
62630d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com
627c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com        fListWidget.addItem(item);
628902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    }
629902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
630902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
63197cee9735350cb472249ce1a827ba1aa6b2a5f59chudy@google.comvoid SkDebuggerGUI::setupComboBox(SkTDArray<SkString*>* command) {
632c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fFilter.clear();
633c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fFilter.addItem("--Filter By Available Commands--");
634902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
635902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    std::map<std::string, int> map;
63697cee9735350cb472249ce1a827ba1aa6b2a5f59chudy@google.com    for (int i = 0; i < command->count(); i++) {
63797cee9735350cb472249ce1a827ba1aa6b2a5f59chudy@google.com        map[(*command)[i]->c_str()]++;
638902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    }
639902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
640902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    QString overview;
641607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    int counter = 0;
6427dcae67cae277549accdd38d0496b72d00151239chudy@google.com    for (std::map<std::string, int>::iterator it = map.begin(); it != map.end();
6437dcae67cae277549accdd38d0496b72d00151239chudy@google.com            ++it) {
644902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        overview.append((it->first).c_str());
645902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        overview.append(": ");
646902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        overview.append(QString::number(it->second));
647902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        overview.append("<br/>");
6487dcae67cae277549accdd38d0496b72d00151239chudy@google.com        counter += it->second;
649c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com        fFilter.addItem((it->first).c_str());
650902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    }
651902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    QString total;
652902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    total.append("Total Draw Commands: ");
653902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    total.append(QString::number(counter));
654902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    total.append("<br/>");
655902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    overview.insert(0, total);
656902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
657902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    overview.append("<br/>");
658607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    overview.append("SkPicture Width: ");
659902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    // NOTE(chudy): This is where we can pull out the SkPictures width.
660607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    overview.append(QString::number(fDebugger.pictureWidth()));
661902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    overview.append("px<br/>");
662607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    overview.append("SkPicture Height: ");
663607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    overview.append(QString::number(fDebugger.pictureHeight()));
664902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    overview.append("px");
6656bd109a39370d21bfd4b48f5a28df8bcfc7f5ba2chudy@google.com    fInspectorWidget.setText(overview, SkInspectorWidget::kOverview_TabType);
666902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
667902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    // NOTE(chudy): Makes first item unselectable.
6687dcae67cae277549accdd38d0496b72d00151239chudy@google.com    QStandardItemModel* model = qobject_cast<QStandardItemModel*>(
669c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com            fFilter.model());
670c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    QModelIndex firstIndex = model->index(0, fFilter.modelColumn(),
671c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com            fFilter.rootModelIndex());
672902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    QStandardItem* firstItem = model->itemFromIndex(firstIndex);
673902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    firstItem->setSelectable(false);
674902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
675