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"
93f0424ff57f93666df7347d4787816b210233eb0fmalita#include "SkPicture.h"
10cfdc0e3fee69694e0f6b083d8455665b2a810589kkinnunen#include <QListWidgetItem>
11cfdc0e3fee69694e0f6b083d8455665b2a810589kkinnunen#include <QtGui>
123e5c2b1041b15641931638d1d78b30d3c435fc71robertphillips#include "sk_tool_utils.h"
13e174a8bd74f35fafec1f740d9265efae092cea90robertphillips@google.com
14902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comSkDebuggerGUI::SkDebuggerGUI(QWidget *parent) :
15c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com        QMainWindow(parent)
16bcd431e1778001990c4d877929b14959dc96a0d3commit-bot@chromium.org    , fCentralSplitter(this)
172d537a18f49cb492358c2b051f4786075dd9406cchudy@google.com    , fStatusBar(this)
182d537a18f49cb492358c2b051f4786075dd9406cchudy@google.com    , fToolBar(this)
19c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    , fActionOpen(this)
20c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    , fActionBreakpoint(this)
21c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    , fActionCancel(this)
227e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    , fActionClearBreakpoints(this)
23e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    , fActionClearDeletes(this)
24c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    , fActionClose(this)
25e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    , fActionCreateBreakpoint(this)
26c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    , fActionDelete(this)
27c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    , fActionDirectory(this)
28c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    , fActionGoToLine(this)
29c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    , fActionInspector(this)
302ff6d1d1dc2c4668b0c587c55fd37407fb8d68abbungeman@google.com    , fActionSettings(this)
31c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    , fActionPlay(this)
32e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    , fActionPause(this)
33c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    , fActionRewind(this)
340ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    , fActionSave(this)
350ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    , fActionSaveAs(this)
367e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    , fActionShowDeletes(this)
37c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    , fActionStepBack(this)
38c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    , fActionStepForward(this)
39a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com    , fActionZoomIn(this)
40a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com    , fActionZoomOut(this)
41a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com    , fMapper(this)
42bcd431e1778001990c4d877929b14959dc96a0d3commit-bot@chromium.org    , fListWidget(&fCentralSplitter)
43bcd431e1778001990c4d877929b14959dc96a0d3commit-bot@chromium.org    , fDirectoryWidget(&fCentralSplitter)
44607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    , fCanvasWidget(this, &fDebugger)
4563a470227beed0de553d769724e0108808391e42kkinnunen    , fDrawCommandGeometryWidget(&fDebugger)
46c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    , fMenuBar(this)
47c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    , fMenuFile(this)
48c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    , fMenuNavigate(this)
49c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    , fMenuView(this)
50d3058f5fd8bb786c5b70a0dd222bde646502258achudy@google.com    , fLoading(false)
51c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com{
52902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    setupUi(this);
53dd4b74548accfbf42b8e6b8d7eefbfb8c8f17e00robertphillips@google.com    fListWidget.setSelectionMode(QAbstractItemView::ExtendedSelection);
540cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen    connect(&fListWidget, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)), this,
550cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen            SLOT(updateDrawCommandInfo()));
56c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    connect(&fActionOpen, SIGNAL(triggered()), this, SLOT(openFile()));
57ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com    connect(&fActionDirectory, SIGNAL(triggered()), this, SLOT(toggleDirectory()));
58ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com    connect(&fDirectoryWidget, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)), this, SLOT(loadFile(QListWidgetItem *)));
59a745186c939ec641a861c74064155ec4aa3beb33djsollen    connect(&fDirectoryWatcher, SIGNAL(directoryChanged(QString)), this, SLOT(populateDirectoryWidget()));
60c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    connect(&fActionDelete, SIGNAL(triggered()), this, SLOT(actionDelete()));
61ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com    connect(&fListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(toggleBreakpoint()));
62c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    connect(&fActionRewind, SIGNAL(triggered()), this, SLOT(actionRewind()));
63c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    connect(&fActionPlay, SIGNAL(triggered()), this, SLOT(actionPlay()));
64c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    connect(&fActionStepBack, SIGNAL(triggered()), this, SLOT(actionStepBack()));
65ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com    connect(&fActionStepForward, SIGNAL(triggered()), this, SLOT(actionStepForward()));
66ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com    connect(&fActionBreakpoint, SIGNAL(triggered()), this, SLOT(actionBreakpoints()));
67ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com    connect(&fActionInspector, SIGNAL(triggered()), this, SLOT(actionInspector()));
682ff6d1d1dc2c4668b0c587c55fd37407fb8d68abbungeman@google.com    connect(&fActionSettings, SIGNAL(triggered()), this, SLOT(actionSettings()));
69ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com    connect(&fFilter, SIGNAL(activated(QString)), this, SLOT(toggleFilter(QString)));
70c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    connect(&fActionCancel, SIGNAL(triggered()), this, SLOT(actionCancel()));
717e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    connect(&fActionClearBreakpoints, SIGNAL(triggered()), this, SLOT(actionClearBreakpoints()));
727e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    connect(&fActionClearDeletes, SIGNAL(triggered()), this, SLOT(actionClearDeletes()));
73c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    connect(&fActionClose, SIGNAL(triggered()), this, SLOT(actionClose()));
74e8fe4bc3efa8f18f5651c5d005fba1935a741be0robertphillips@google.com#if SK_SUPPORT_GPU
7541c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    connect(&fSettingsWidget, SIGNAL(glSettingsChanged()), this, SLOT(actionGLSettingsChanged()));
76e8fe4bc3efa8f18f5651c5d005fba1935a741be0robertphillips@google.com#endif
7741c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    connect(&fSettingsWidget, SIGNAL(rasterSettingsChanged()), this, SLOT(actionRasterSettingsChanged()));
7841c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    connect(&fSettingsWidget, SIGNAL(visualizationsChanged()), this, SLOT(actionVisualizationsChanged()));
7932bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com    connect(&fSettingsWidget, SIGNAL(texFilterSettingsChanged()), this, SLOT(actionTextureFilter()));
80ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com    connect(&fActionPause, SIGNAL(toggled(bool)), this, SLOT(pauseDrawing(bool)));
81e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    connect(&fActionCreateBreakpoint, SIGNAL(activated()), this, SLOT(toggleBreakpoint()));
827e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    connect(&fActionShowDeletes, SIGNAL(triggered()), this, SLOT(showDeletes()));
83ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com    connect(&fCanvasWidget, SIGNAL(hitChanged(int)), this, SLOT(selectCommand(int)));
8441c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    connect(&fCanvasWidget, SIGNAL(hitChanged(int)), this, SLOT(updateHit(int)));
85ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com    connect(&fCanvasWidget, SIGNAL(scaleFactorChanged(float)), this, SLOT(actionScale(float)));
8663a470227beed0de553d769724e0108808391e42kkinnunen
870ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    connect(&fActionSaveAs, SIGNAL(triggered()), this, SLOT(actionSaveAs()));
880ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    connect(&fActionSave, SIGNAL(triggered()), this, SLOT(actionSave()));
897e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com
90e8cc6e8071935339a06548b13a0668b56a7540f5bungeman@google.com    fMapper.setMapping(&fActionZoomIn, SkCanvasWidget::kIn_ZoomCommand);
91e8cc6e8071935339a06548b13a0668b56a7540f5bungeman@google.com    fMapper.setMapping(&fActionZoomOut, SkCanvasWidget::kOut_ZoomCommand);
92a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com
93a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com    connect(&fActionZoomIn, SIGNAL(triggered()), &fMapper, SLOT(map()));
94a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com    connect(&fActionZoomOut, SIGNAL(triggered()), &fMapper, SLOT(map()));
95e8cc6e8071935339a06548b13a0668b56a7540f5bungeman@google.com    connect(&fMapper, SIGNAL(mapped(int)), &fCanvasWidget, SLOT(zoom(int)));
96a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com
9741c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fViewStateFrame.setDisabled(true);
987e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    fInspectorWidget.setDisabled(true);
99d3058f5fd8bb786c5b70a0dd222bde646502258achudy@google.com    fMenuEdit.setDisabled(true);
100d3058f5fd8bb786c5b70a0dd222bde646502258achudy@google.com    fMenuNavigate.setDisabled(true);
101d3058f5fd8bb786c5b70a0dd222bde646502258achudy@google.com    fMenuView.setDisabled(true);
102bbad34de3b117347bedea619feaf1685586d4202chudy@google.com}
103902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
104902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::actionBreakpoints() {
105f3a9e993399fcb8dae4bf6f1dd9674a72b289da3kkinnunen    bool breakpointsActivated = fActionBreakpoint.isChecked();
1067e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    for (int row = 0; row < fListWidget.count(); row++) {
1077e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com        QListWidgetItem *item = fListWidget.item(row);
108f3a9e993399fcb8dae4bf6f1dd9674a72b289da3kkinnunen        item->setHidden(item->checkState() == Qt::Unchecked && breakpointsActivated);
109902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    }
1107e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com}
111902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
1127e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.comvoid SkDebuggerGUI::showDeletes() {
113f3a9e993399fcb8dae4bf6f1dd9674a72b289da3kkinnunen    bool deletesActivated = fActionShowDeletes.isChecked();
114c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    for (int row = 0; row < fListWidget.count(); row++) {
115c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com        QListWidgetItem *item = fListWidget.item(row);
116f3a9e993399fcb8dae4bf6f1dd9674a72b289da3kkinnunen        item->setHidden(fDebugger.isCommandVisible(row) && deletesActivated);
117902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    }
118902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
119d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com
120902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::actionCancel() {
121c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    for (int row = 0; row < fListWidget.count(); row++) {
122c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com        fListWidget.item(row)->setHidden(false);
123902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    }
124902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
125902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
1267e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.comvoid SkDebuggerGUI::actionClearBreakpoints() {
1277e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    for (int row = 0; row < fListWidget.count(); row++) {
1287e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com        QListWidgetItem* item = fListWidget.item(row);
1297e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com        item->setCheckState(Qt::Unchecked);
1307e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com        item->setData(Qt::DecorationRole,
1318e41a168b0c4eedfcfb05d46f6a19895cc9459ecrobertphillips@google.com                QPixmap(":/blank.png"));
1327e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    }
1337e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com}
1347e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com
1357e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.comvoid SkDebuggerGUI::actionClearDeletes() {
1367e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    for (int row = 0; row < fListWidget.count(); row++) {
1377e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com        QListWidgetItem* item = fListWidget.item(row);
1388e41a168b0c4eedfcfb05d46f6a19895cc9459ecrobertphillips@google.com        item->setData(Qt::UserRole + 2, QPixmap(":/blank.png"));
139607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com        fDebugger.setCommandVisible(row, true);
1405f97114fd28e03e8c4c1c22c924d383b45cdced1robertphillips@google.com        fSkipCommands[row] = false;
1417e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    }
142cfdc0e3fee69694e0f6b083d8455665b2a810589kkinnunen    this->updateImage();
1437e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com}
1447e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com
145902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::actionClose() {
146902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    this->close();
147902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
148902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
149902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::actionDelete() {
1507e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com
151dd4b74548accfbf42b8e6b8d7eefbfb8c8f17e00robertphillips@google.com    for (int row = 0; row < fListWidget.count(); ++row) {
152dd4b74548accfbf42b8e6b8d7eefbfb8c8f17e00robertphillips@google.com        QListWidgetItem* item = fListWidget.item(row);
153dd4b74548accfbf42b8e6b8d7eefbfb8c8f17e00robertphillips@google.com
154dd4b74548accfbf42b8e6b8d7eefbfb8c8f17e00robertphillips@google.com        if (!item->isSelected()) {
155dd4b74548accfbf42b8e6b8d7eefbfb8c8f17e00robertphillips@google.com            continue;
156dd4b74548accfbf42b8e6b8d7eefbfb8c8f17e00robertphillips@google.com        }
157dd4b74548accfbf42b8e6b8d7eefbfb8c8f17e00robertphillips@google.com
158dd4b74548accfbf42b8e6b8d7eefbfb8c8f17e00robertphillips@google.com        if (fDebugger.isCommandVisible(row)) {
159dd4b74548accfbf42b8e6b8d7eefbfb8c8f17e00robertphillips@google.com            item->setData(Qt::UserRole + 2, QPixmap(":/delete.png"));
160dd4b74548accfbf42b8e6b8d7eefbfb8c8f17e00robertphillips@google.com            fDebugger.setCommandVisible(row, false);
161dd4b74548accfbf42b8e6b8d7eefbfb8c8f17e00robertphillips@google.com            fSkipCommands[row] = true;
162dd4b74548accfbf42b8e6b8d7eefbfb8c8f17e00robertphillips@google.com        } else {
163dd4b74548accfbf42b8e6b8d7eefbfb8c8f17e00robertphillips@google.com            item->setData(Qt::UserRole + 2, QPixmap(":/blank.png"));
164dd4b74548accfbf42b8e6b8d7eefbfb8c8f17e00robertphillips@google.com            fDebugger.setCommandVisible(row, true);
165dd4b74548accfbf42b8e6b8d7eefbfb8c8f17e00robertphillips@google.com            fSkipCommands[row] = false;
166dd4b74548accfbf42b8e6b8d7eefbfb8c8f17e00robertphillips@google.com        }
167902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    }
1687e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com
169cfdc0e3fee69694e0f6b083d8455665b2a810589kkinnunen    this->updateImage();
170902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
171902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
172e8fe4bc3efa8f18f5651c5d005fba1935a741be0robertphillips@google.com#if SK_SUPPORT_GPU
17341c79cc0ff3003ef77cb48590f7887221856f941kkinnunenvoid SkDebuggerGUI::actionGLSettingsChanged() {
174fde1e7ccb4524aa2e0c42872e529ee25d09e7f34commit-bot@chromium.org    bool isToggled = fSettingsWidget.isGLActive();
175fde1e7ccb4524aa2e0c42872e529ee25d09e7f34commit-bot@chromium.org    if (isToggled) {
176fde1e7ccb4524aa2e0c42872e529ee25d09e7f34commit-bot@chromium.org        fCanvasWidget.setGLSampleCount(fSettingsWidget.getGLSampleCount());
177fde1e7ccb4524aa2e0c42872e529ee25d09e7f34commit-bot@chromium.org    }
178ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com    fCanvasWidget.setWidgetVisibility(SkCanvasWidget::kGPU_WidgetType, !isToggled);
179ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com}
180e8fe4bc3efa8f18f5651c5d005fba1935a741be0robertphillips@google.com#endif
181ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com
182902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::actionInspector() {
18341c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    bool newState = !fInspectorWidget.isHidden();
18441c79cc0ff3003ef77cb48590f7887221856f941kkinnunen
18541c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fInspectorWidget.setHidden(newState);
18641c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fViewStateFrame.setHidden(newState);
18763a470227beed0de553d769724e0108808391e42kkinnunen    fDrawCommandGeometryWidget.setHidden(newState);
188902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
189902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
190902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::actionPlay() {
191c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    for (int row = fListWidget.currentRow() + 1; row < fListWidget.count();
1927dcae67cae277549accdd38d0496b72d00151239chudy@google.com            row++) {
193c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com        QListWidgetItem *item = fListWidget.item(row);
194902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        if (item->checkState() == Qt::Checked) {
195c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com            fListWidget.setCurrentItem(item);
196902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com            return;
197902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        }
198902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    }
199c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fListWidget.setCurrentRow(fListWidget.count() - 1);
200902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
201902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
20241c79cc0ff3003ef77cb48590f7887221856f941kkinnunenvoid SkDebuggerGUI::actionRasterSettingsChanged() {
20341c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fCanvasWidget.setWidgetVisibility(SkCanvasWidget::kRaster_8888_WidgetType,
20441c79cc0ff3003ef77cb48590f7887221856f941kkinnunen                                      !fSettingsWidget.isRasterEnabled());
205cfdc0e3fee69694e0f6b083d8455665b2a810589kkinnunen    this->updateImage();
206768ac85655017d4106444bf3ad044680a575ccaacommit-bot@chromium.org}
207768ac85655017d4106444bf3ad044680a575ccaacommit-bot@chromium.org
20841c79cc0ff3003ef77cb48590f7887221856f941kkinnunenvoid SkDebuggerGUI::actionVisualizationsChanged() {
20941c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fDebugger.setMegaViz(fSettingsWidget.isMegaVizEnabled());
21041c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fDebugger.setPathOps(fSettingsWidget.isPathOpsEnabled());
21141c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fDebugger.highlightCurrentCommand(fSettingsWidget.isVisibilityFilterEnabled());
212f42fca4027ed4f235ef927786813a5ed0e6652b9robertphillips    fDebugger.setOverdrawViz(fSettingsWidget.isOverdrawVizEnabled());
213cfdc0e3fee69694e0f6b083d8455665b2a810589kkinnunen    this->updateImage();
2142a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org}
2152a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org
21632bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.comvoid SkDebuggerGUI::actionTextureFilter() {
217e7903c7397c694e343c2c0fcc5cabea351212f23reed    SkFilterQuality quality;
218e7903c7397c694e343c2c0fcc5cabea351212f23reed    bool enabled = fSettingsWidget.getFilterOverride(&quality);
219e7903c7397c694e343c2c0fcc5cabea351212f23reed    fDebugger.setTexFilterOverride(enabled, quality);
22032bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com    fCanvasWidget.update();
22132bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com}
22232bbcf828d66ad244fa25b468bc3a229e531491frobertphillips@google.com
223902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::actionRewind() {
224e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fListWidget.setCurrentRow(0);
225902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
226902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
2270ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.comvoid SkDebuggerGUI::actionSave() {
228e219baf74742ee5cda3c99fabe6acaa8f878fe00robertphillips@google.com    fFileName = fPath.toAscii().data();
229d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com    fFileName.append("/");
230e219baf74742ee5cda3c99fabe6acaa8f878fe00robertphillips@google.com    fFileName.append(fDirectoryWidget.currentItem()->text().toAscii().data());
231d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com    saveToFile(fFileName);
2320ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com}
2330ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com
2340ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.comvoid SkDebuggerGUI::actionSaveAs() {
2350ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    QString filename = QFileDialog::getSaveFileName(this, "Save File", "",
2360ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com            "Skia Picture (*skp)");
23738b08ce020f451a66263110b32e70f5022df4f83chudy@google.com    if (!filename.endsWith(".skp", Qt::CaseInsensitive)) {
2380ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com        filename.append(".skp");
2390ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    }
240c3c8216949146641222f7d2f7a464340627ae43adjsollen@google.com    saveToFile(SkString(filename.toAscii().data()));
2410ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com}
2420ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com
2437dcae67cae277549accdd38d0496b72d00151239chudy@google.comvoid SkDebuggerGUI::actionScale(float scaleFactor) {
24441c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fZoomBox.setText(QString::number(scaleFactor * 100, 'f', 0).append("%"));
2457dcae67cae277549accdd38d0496b72d00151239chudy@google.com}
2467dcae67cae277549accdd38d0496b72d00151239chudy@google.com
247902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::actionSettings() {
248c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    if (fSettingsWidget.isHidden()) {
249c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com        fSettingsWidget.setHidden(false);
250902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    } else {
251c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com        fSettingsWidget.setHidden(true);
252902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    }
253902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
254902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
255902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::actionStepBack() {
256c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    int currentRow = fListWidget.currentRow();
257902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    if (currentRow != 0) {
258c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com        fListWidget.setCurrentRow(currentRow - 1);
259902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    }
260902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
261902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
262902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::actionStepForward() {
263c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    int currentRow = fListWidget.currentRow();
264902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    QString curRow = QString::number(currentRow);
265c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    QString curCount = QString::number(fListWidget.count());
266c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    if (currentRow < fListWidget.count() - 1) {
267c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com        fListWidget.setCurrentRow(currentRow + 1);
268902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    }
269902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
270902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
271a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.comvoid SkDebuggerGUI::drawComplete() {
272cfdc0e3fee69694e0f6b083d8455665b2a810589kkinnunen    SkString clipStack;
273cfdc0e3fee69694e0f6b083d8455665b2a810589kkinnunen    fDebugger.getClipStackText(&clipStack);
274cfdc0e3fee69694e0f6b083d8455665b2a810589kkinnunen    fInspectorWidget.setText(clipStack.c_str(), SkInspectorWidget::kClipStack_TabType);
275cfdc0e3fee69694e0f6b083d8455665b2a810589kkinnunen
276607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    fInspectorWidget.setMatrix(fDebugger.getCurrentMatrix());
277607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    fInspectorWidget.setClip(fDebugger.getCurrentClip());
278a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com}
279a9e937c7b712b024de108fa963f92d0e70e4a296chudy@google.com
280d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.comvoid SkDebuggerGUI::saveToFile(const SkString& filename) {
281d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com    SkFILEWStream file(filename.c_str());
28225bc2f86c2b94ee1f0921d90e6629d8cb22f69b7robertphillips@google.com    SkAutoTUnref<SkPicture> copy(fDebugger.copyPicture());
28325bc2f86c2b94ee1f0921d90e6629d8cb22f69b7robertphillips@google.com
284f2848b60358deb23eca38a4587247c1d2e335d30halcanary    SkAutoTUnref<SkPixelSerializer> serializer(
285f2848b60358deb23eca38a4587247c1d2e335d30halcanary            SkImageEncoder::CreatePixelSerializer());
286f2848b60358deb23eca38a4587247c1d2e335d30halcanary    copy->serialize(&file, serializer);
2870ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com}
2880ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com
289902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::loadFile(QListWidgetItem *item) {
290a745186c939ec641a861c74064155ec4aa3beb33djsollen    if (item == nullptr) {
291a745186c939ec641a861c74064155ec4aa3beb33djsollen        return;
292a745186c939ec641a861c74064155ec4aa3beb33djsollen    }
293a745186c939ec641a861c74064155ec4aa3beb33djsollen
294a745186c939ec641a861c74064155ec4aa3beb33djsollen    SkString fileName(fPath.toAscii().data());
295a745186c939ec641a861c74064155ec4aa3beb33djsollen    // don't add a '/' to files in the local directory
296a745186c939ec641a861c74064155ec4aa3beb33djsollen    if (fileName.size() > 0) {
297a745186c939ec641a861c74064155ec4aa3beb33djsollen        fileName.append("/");
298a745186c939ec641a861c74064155ec4aa3beb33djsollen    }
299a745186c939ec641a861c74064155ec4aa3beb33djsollen    fileName.append(item->text().toAscii().data());
300a745186c939ec641a861c74064155ec4aa3beb33djsollen
301a745186c939ec641a861c74064155ec4aa3beb33djsollen    if (!fileName.equals(fFileName)) {
302a745186c939ec641a861c74064155ec4aa3beb33djsollen        fFileName = fileName;
303d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com        loadPicture(fFileName);
304902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    }
305902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
306902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
307902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::openFile() {
308d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com    QString temp = QFileDialog::getOpenFileName(this, tr("Open File"), "",
3097dcae67cae277549accdd38d0496b72d00151239chudy@google.com            tr("Files (*.*)"));
310ff6e6bade36c34a4c4fce4c14b480b9d2435bcd5robertphillips@google.com    openFile(temp);
311ff6e6bade36c34a4c4fce4c14b480b9d2435bcd5robertphillips@google.com}
312ff6e6bade36c34a4c4fce4c14b480b9d2435bcd5robertphillips@google.com
313ff6e6bade36c34a4c4fce4c14b480b9d2435bcd5robertphillips@google.comvoid SkDebuggerGUI::openFile(const QString &filename) {
314ff6e6bade36c34a4c4fce4c14b480b9d2435bcd5robertphillips@google.com    if (!filename.isEmpty()) {
315ff6e6bade36c34a4c4fce4c14b480b9d2435bcd5robertphillips@google.com        QFileInfo pathInfo(filename);
316ff6e6bade36c34a4c4fce4c14b480b9d2435bcd5robertphillips@google.com        loadPicture(SkString(filename.toAscii().data()));
317ff6e6bade36c34a4c4fce4c14b480b9d2435bcd5robertphillips@google.com        setupDirectoryWidget(pathInfo.path());
318902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    }
319902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
320902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
321c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.comvoid SkDebuggerGUI::pauseDrawing(bool isPaused) {
322607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    fPausedRow = fListWidget.currentRow();
323cfdc0e3fee69694e0f6b083d8455665b2a810589kkinnunen    this->updateDrawCommandInfo();
3247dcae67cae277549accdd38d0496b72d00151239chudy@google.com}
3257dcae67cae277549accdd38d0496b72d00151239chudy@google.com
3260cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunenvoid SkDebuggerGUI::updateDrawCommandInfo() {
3270cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen    int currentRow = -1;
3280cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen    if (!fLoading) {
3290cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen        currentRow = fListWidget.currentRow();
3300cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen    }
3310cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen    if (currentRow == -1) {
3320cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen        fInspectorWidget.setText("", SkInspectorWidget::kDetail_TabType);
3330cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen        fInspectorWidget.setText("", SkInspectorWidget::kClipStack_TabType);
3340cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen        fCurrentCommandBox.setText("");
3350cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen        fDrawCommandGeometryWidget.setDrawCommandIndex(-1);
3360cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen    } else {
337cfdc0e3fee69694e0f6b083d8455665b2a810589kkinnunen        this->updateImage();
338cfdc0e3fee69694e0f6b083d8455665b2a810589kkinnunen
3390cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen        const SkTDArray<SkString*> *currInfo = fDebugger.getCommandInfo(currentRow);
3400cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen
3410cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen        /* TODO(chudy): Add command type before parameters. Rename v
3420cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen         * to something more informative. */
3430cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen        if (currInfo) {
3440cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen            QString info;
3450cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen            info.append("<b>Parameters: </b><br/>");
3460cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen            for (int i = 0; i < currInfo->count(); i++) {
3470cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen                info.append(QString((*currInfo)[i]->c_str()));
3480cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen                info.append("<br/>");
349d3058f5fd8bb786c5b70a0dd222bde646502258achudy@google.com            }
3500cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen            fInspectorWidget.setText(info, SkInspectorWidget::kDetail_TabType);
351902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        }
352ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com
3530cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen        fCurrentCommandBox.setText(QString::number(currentRow));
3540cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen
3550cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen        fDrawCommandGeometryWidget.setDrawCommandIndex(currentRow);
3560cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen
3570cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen        fInspectorWidget.setDisabled(false);
3580cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen        fViewStateFrame.setDisabled(false);
359902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    }
360902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
361902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
3629ca9bfe9f6eaae41841446386e40be1013907e99chudy@google.comvoid SkDebuggerGUI::selectCommand(int command) {
363f3a9e993399fcb8dae4bf6f1dd9674a72b289da3kkinnunen    if (this->isPaused()) {
3649ca9bfe9f6eaae41841446386e40be1013907e99chudy@google.com        fListWidget.setCurrentRow(command);
3659ca9bfe9f6eaae41841446386e40be1013907e99chudy@google.com    }
3669ca9bfe9f6eaae41841446386e40be1013907e99chudy@google.com}
3679ca9bfe9f6eaae41841446386e40be1013907e99chudy@google.com
368902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::toggleBreakpoint() {
369c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    QListWidgetItem* item = fListWidget.currentItem();
370902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    if (item->checkState() == Qt::Unchecked) {
371902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        item->setCheckState(Qt::Checked);
372e565de4fad5598890124daadf385930043269415chudy@google.com        item->setData(Qt::DecorationRole,
3738e41a168b0c4eedfcfb05d46f6a19895cc9459ecrobertphillips@google.com                QPixmap(":/breakpoint_16x16.png"));
374902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    } else {
375902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        item->setCheckState(Qt::Unchecked);
376e565de4fad5598890124daadf385930043269415chudy@google.com        item->setData(Qt::DecorationRole,
3778e41a168b0c4eedfcfb05d46f6a19895cc9459ecrobertphillips@google.com                QPixmap(":/blank.png"));
378902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    }
379902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
380902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
381902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::toggleDirectory() {
382607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    fDirectoryWidget.setHidden(!fDirectoryWidget.isHidden());
383902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
384902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
385902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::toggleFilter(QString string) {
386c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    for (int row = 0; row < fListWidget.count(); row++) {
387c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com        QListWidgetItem *item = fListWidget.item(row);
388607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com        item->setHidden(item->text() != string);
389902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    }
390902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
391902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
392902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::setupUi(QMainWindow *SkDebuggerGUI) {
393902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    QIcon windowIcon;
3948e41a168b0c4eedfcfb05d46f6a19895cc9459ecrobertphillips@google.com    windowIcon.addFile(QString::fromUtf8(":/skia.png"), QSize(),
3957dcae67cae277549accdd38d0496b72d00151239chudy@google.com            QIcon::Normal, QIcon::Off);
396902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    SkDebuggerGUI->setObjectName(QString::fromUtf8("SkDebuggerGUI"));
397902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    SkDebuggerGUI->resize(1200, 1000);
398902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    SkDebuggerGUI->setWindowIcon(windowIcon);
399c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    SkDebuggerGUI->setWindowTitle("Skia Debugger");
400902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
401e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionOpen.setShortcuts(QKeySequence::Open);
402c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionOpen.setText("Open");
403902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
404c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    QIcon breakpoint;
4058e41a168b0c4eedfcfb05d46f6a19895cc9459ecrobertphillips@google.com    breakpoint.addFile(QString::fromUtf8(":/breakpoint.png"),
4067dcae67cae277549accdd38d0496b72d00151239chudy@google.com            QSize(), QIcon::Normal, QIcon::Off);
407e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionBreakpoint.setShortcut(QKeySequence(tr("Ctrl+B")));
408c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionBreakpoint.setIcon(breakpoint);
4097e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    fActionBreakpoint.setText("Breakpoints");
410f3a9e993399fcb8dae4bf6f1dd9674a72b289da3kkinnunen    fActionBreakpoint.setCheckable(true);
411902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
412c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    QIcon cancel;
4138e41a168b0c4eedfcfb05d46f6a19895cc9459ecrobertphillips@google.com    cancel.addFile(QString::fromUtf8(":/reload.png"), QSize(),
4147dcae67cae277549accdd38d0496b72d00151239chudy@google.com            QIcon::Normal, QIcon::Off);
415c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionCancel.setIcon(cancel);
416c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionCancel.setText("Clear Filter");
417902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
4187e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    fActionClearBreakpoints.setShortcut(QKeySequence(tr("Alt+B")));
4197e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    fActionClearBreakpoints.setText("Clear Breakpoints");
4207e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com
4217e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    fActionClearDeletes.setShortcut(QKeySequence(tr("Alt+X")));
4227e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    fActionClearDeletes.setText("Clear Deletes");
4237e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com
424e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionClose.setShortcuts(QKeySequence::Quit);
425c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionClose.setText("Exit");
426902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
427e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionCreateBreakpoint.setShortcut(QKeySequence(tr("B")));
428e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionCreateBreakpoint.setText("Set Breakpoint");
429e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com
430e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionDelete.setShortcut(QKeySequence(tr("X")));
431c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionDelete.setText("Delete Command");
432902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
433e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionDirectory.setShortcut(QKeySequence(tr("Ctrl+D")));
434e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionDirectory.setText("Directory");
435902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
436902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    QIcon inspector;
437d163636ec6914a95c7a8333dc94bc0cae68b226arobertphillips@google.com    inspector.addFile(QString::fromUtf8(":/inspector.png"),
4387dcae67cae277549accdd38d0496b72d00151239chudy@google.com            QSize(), QIcon::Normal, QIcon::Off);
439e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionInspector.setShortcut(QKeySequence(tr("Ctrl+I")));
440c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionInspector.setIcon(inspector);
441e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionInspector.setText("Inspector");
442902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
4432ff6d1d1dc2c4668b0c587c55fd37407fb8d68abbungeman@google.com    QIcon settings;
4442ff6d1d1dc2c4668b0c587c55fd37407fb8d68abbungeman@google.com    settings.addFile(QString::fromUtf8(":/inspector.png"),
4452ff6d1d1dc2c4668b0c587c55fd37407fb8d68abbungeman@google.com            QSize(), QIcon::Normal, QIcon::Off);
4462ff6d1d1dc2c4668b0c587c55fd37407fb8d68abbungeman@google.com    fActionSettings.setShortcut(QKeySequence(tr("Ctrl+G")));
4472ff6d1d1dc2c4668b0c587c55fd37407fb8d68abbungeman@google.com    fActionSettings.setIcon(settings);
4482ff6d1d1dc2c4668b0c587c55fd37407fb8d68abbungeman@google.com    fActionSettings.setText("Settings");
4490d55dd7d2c07a77b22478bed9b30ff44ceecad68skia.committer@gmail.com
450c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    QIcon play;
451d163636ec6914a95c7a8333dc94bc0cae68b226arobertphillips@google.com    play.addFile(QString::fromUtf8(":/play.png"), QSize(),
4527dcae67cae277549accdd38d0496b72d00151239chudy@google.com            QIcon::Normal, QIcon::Off);
453e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionPlay.setShortcut(QKeySequence(tr("Ctrl+P")));
454c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionPlay.setIcon(play);
455c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionPlay.setText("Play");
456902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
457e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    QIcon pause;
458d163636ec6914a95c7a8333dc94bc0cae68b226arobertphillips@google.com    pause.addFile(QString::fromUtf8(":/pause.png"), QSize(),
4597dcae67cae277549accdd38d0496b72d00151239chudy@google.com            QIcon::Normal, QIcon::Off);
460e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionPause.setShortcut(QKeySequence(tr("Space")));
461e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionPause.setCheckable(true);
462e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionPause.setIcon(pause);
463e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionPause.setText("Pause");
464e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com
465c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    QIcon rewind;
4668e41a168b0c4eedfcfb05d46f6a19895cc9459ecrobertphillips@google.com    rewind.addFile(QString::fromUtf8(":/rewind.png"), QSize(),
467c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com            QIcon::Normal, QIcon::Off);
468e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionRewind.setShortcut(QKeySequence(tr("Ctrl+R")));
469c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionRewind.setIcon(rewind);
470c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionRewind.setText("Rewind");
471902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
4720ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    fActionSave.setShortcut(QKeySequence::Save);
4730ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    fActionSave.setText("Save");
4740ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    fActionSave.setDisabled(true);
4750ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    fActionSaveAs.setShortcut(QKeySequence::SaveAs);
4760ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    fActionSaveAs.setText("Save As");
4770ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    fActionSaveAs.setDisabled(true);
4780ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com
4797e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    fActionShowDeletes.setShortcut(QKeySequence(tr("Ctrl+X")));
4807e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    fActionShowDeletes.setText("Deleted Commands");
481f3a9e993399fcb8dae4bf6f1dd9674a72b289da3kkinnunen    fActionShowDeletes.setCheckable(true);
4827e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com
483c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    QIcon stepBack;
4848e41a168b0c4eedfcfb05d46f6a19895cc9459ecrobertphillips@google.com    stepBack.addFile(QString::fromUtf8(":/previous.png"), QSize(),
4857dcae67cae277549accdd38d0496b72d00151239chudy@google.com            QIcon::Normal, QIcon::Off);
486e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionStepBack.setShortcut(QKeySequence(tr("[")));
487c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionStepBack.setIcon(stepBack);
488c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionStepBack.setText("Step Back");
489902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
490c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    QIcon stepForward;
4918e41a168b0c4eedfcfb05d46f6a19895cc9459ecrobertphillips@google.com    stepForward.addFile(QString::fromUtf8(":/next.png"),
492c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com            QSize(), QIcon::Normal, QIcon::Off);
493e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionStepForward.setShortcut(QKeySequence(tr("]")));
494c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionStepForward.setIcon(stepForward);
495c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionStepForward.setText("Step Forward");
496c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com
497a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com    fActionZoomIn.setShortcut(QKeySequence(tr("Ctrl+=")));
498a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com    fActionZoomIn.setText("Zoom In");
499a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com    fActionZoomOut.setShortcut(QKeySequence(tr("Ctrl+-")));
500a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com    fActionZoomOut.setText("Zoom Out");
501a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com
502c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fListWidget.setItemDelegate(new SkListWidget(&fListWidget));
503c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fListWidget.setObjectName(QString::fromUtf8("listWidget"));
504bcd431e1778001990c4d877929b14959dc96a0d3commit-bot@chromium.org    fListWidget.setMinimumWidth(250);
505902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
506c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fFilter.addItem("--Filter By Available Commands--");
507902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
508bcd431e1778001990c4d877929b14959dc96a0d3commit-bot@chromium.org    fDirectoryWidget.setMinimumWidth(250);
509c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fDirectoryWidget.setStyleSheet("QListWidget::Item {padding: 5px;}");
510902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
511c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fCanvasWidget.setSizePolicy(QSizePolicy::Expanding,
5127dcae67cae277549accdd38d0496b72d00151239chudy@google.com            QSizePolicy::Expanding);
513902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
51463a470227beed0de553d769724e0108808391e42kkinnunen    fDrawCommandGeometryWidget.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
5156dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com
5166dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com    fSettingsAndImageLayout.addWidget(&fSettingsWidget);
5176dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com
51841c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    // View state group, part of inspector.
51941c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fViewStateFrame.setFrameStyle(QFrame::Panel);
52041c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fViewStateFrame.setLayout(&fViewStateFrameLayout);
52141c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fViewStateFrameLayout.addWidget(&fViewStateGroup);
52263a470227beed0de553d769724e0108808391e42kkinnunen    fViewStateGroup.setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
52341c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fViewStateGroup.setTitle("View");
52441c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fViewStateLayout.addRow("Zoom Level", &fZoomBox);
52541c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fZoomBox.setText("100%");
52641c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fZoomBox.setMinimumSize(QSize(50,25));
52741c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fZoomBox.setMaximumSize(QSize(50,25));
52841c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fZoomBox.setAlignment(Qt::AlignRight);
52941c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fZoomBox.setReadOnly(true);
53041c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fViewStateLayout.addRow("Command HitBox", &fCommandHitBox);
53141c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fCommandHitBox.setText("0");
53241c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fCommandHitBox.setMinimumSize(QSize(50,25));
53341c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fCommandHitBox.setMaximumSize(QSize(50,25));
53441c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fCommandHitBox.setAlignment(Qt::AlignRight);
53541c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fCommandHitBox.setReadOnly(true);
53641c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fViewStateLayout.addRow("Current Command", &fCurrentCommandBox);
53741c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fCurrentCommandBox.setText("0");
53841c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fCurrentCommandBox.setMinimumSize(QSize(50,25));
53941c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fCurrentCommandBox.setMaximumSize(QSize(50,25));
54041c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fCurrentCommandBox.setAlignment(Qt::AlignRight);
54141c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fCurrentCommandBox.setReadOnly(true);
54241c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fViewStateGroup.setLayout(&fViewStateLayout);
54341c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fSettingsAndImageLayout.addWidget(&fViewStateFrame);
54441c79cc0ff3003ef77cb48590f7887221856f941kkinnunen
54563a470227beed0de553d769724e0108808391e42kkinnunen    fDrawCommandGeometryWidget.setToolTip("Current Command Geometry");
54663a470227beed0de553d769724e0108808391e42kkinnunen    fSettingsAndImageLayout.addWidget(&fDrawCommandGeometryWidget);
547c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com
548bcd431e1778001990c4d877929b14959dc96a0d3commit-bot@chromium.org    fLeftColumnSplitter.addWidget(&fListWidget);
549bcd431e1778001990c4d877929b14959dc96a0d3commit-bot@chromium.org    fLeftColumnSplitter.addWidget(&fDirectoryWidget);
550bcd431e1778001990c4d877929b14959dc96a0d3commit-bot@chromium.org    fLeftColumnSplitter.setOrientation(Qt::Vertical);
551902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
5526dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com    fCanvasSettingsAndImageLayout.setSpacing(6);
55341c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fCanvasSettingsAndImageLayout.addWidget(&fCanvasWidget, 1);
55441c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fCanvasSettingsAndImageLayout.addLayout(&fSettingsAndImageLayout, 0);
5556dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com
556c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fMainAndRightColumnLayout.setSpacing(6);
5577c339ae1e362e9f02cdfb9b32007f143dec0bc0ekkinnunen    fMainAndRightColumnLayout.addLayout(&fCanvasSettingsAndImageLayout, 1);
5587c339ae1e362e9f02cdfb9b32007f143dec0bc0ekkinnunen    fMainAndRightColumnLayout.addWidget(&fInspectorWidget, 0);
559bcd431e1778001990c4d877929b14959dc96a0d3commit-bot@chromium.org    fMainAndRightColumnWidget.setLayout(&fMainAndRightColumnLayout);
560902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
561bcd431e1778001990c4d877929b14959dc96a0d3commit-bot@chromium.org    fCentralSplitter.addWidget(&fLeftColumnSplitter);
562bcd431e1778001990c4d877929b14959dc96a0d3commit-bot@chromium.org    fCentralSplitter.addWidget(&fMainAndRightColumnWidget);
563bcd431e1778001990c4d877929b14959dc96a0d3commit-bot@chromium.org    fCentralSplitter.setStretchFactor(0, 0);
564bcd431e1778001990c4d877929b14959dc96a0d3commit-bot@chromium.org    fCentralSplitter.setStretchFactor(1, 1);
565902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
566bcd431e1778001990c4d877929b14959dc96a0d3commit-bot@chromium.org    SkDebuggerGUI->setCentralWidget(&fCentralSplitter);
567c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    SkDebuggerGUI->setStatusBar(&fStatusBar);
568902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
569e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fToolBar.setIconSize(QSize(32, 32));
570c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fToolBar.setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
571c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    SkDebuggerGUI->addToolBar(Qt::TopToolBarArea, &fToolBar);
572902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
5730ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    fSpacer.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
574902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
575c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fToolBar.addAction(&fActionRewind);
576c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fToolBar.addAction(&fActionStepBack);
577e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fToolBar.addAction(&fActionPause);
578c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fToolBar.addAction(&fActionStepForward);
579c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fToolBar.addAction(&fActionPlay);
580c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fToolBar.addSeparator();
581e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fToolBar.addAction(&fActionInspector);
5822ff6d1d1dc2c4668b0c587c55fd37407fb8d68abbungeman@google.com    fToolBar.addAction(&fActionSettings);
583d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com
584d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com    fToolBar.addSeparator();
5850ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    fToolBar.addWidget(&fSpacer);
586c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fToolBar.addWidget(&fFilter);
587c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fToolBar.addAction(&fActionCancel);
588902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
589d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com    fFileName = "";
590ff6e6bade36c34a4c4fce4c14b480b9d2435bcd5robertphillips@google.com    setupDirectoryWidget("");
591902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
592902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    // Menu Bar
593c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fMenuFile.setTitle("File");
594c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fMenuFile.addAction(&fActionOpen);
5950ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    fMenuFile.addAction(&fActionSave);
5960ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    fMenuFile.addAction(&fActionSaveAs);
597c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fMenuFile.addAction(&fActionClose);
598e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com
599e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fMenuEdit.setTitle("Edit");
600e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fMenuEdit.addAction(&fActionDelete);
6017e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    fMenuEdit.addAction(&fActionClearDeletes);
6027e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    fMenuEdit.addSeparator();
603e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fMenuEdit.addAction(&fActionCreateBreakpoint);
6047e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    fMenuEdit.addAction(&fActionClearBreakpoints);
605e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com
606c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fMenuNavigate.setTitle("Navigate");
607e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fMenuNavigate.addAction(&fActionRewind);
608e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fMenuNavigate.addAction(&fActionStepBack);
609e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fMenuNavigate.addAction(&fActionStepForward);
610e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fMenuNavigate.addAction(&fActionPlay);
611e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fMenuNavigate.addAction(&fActionPause);
612c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fMenuNavigate.addAction(&fActionGoToLine);
613e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com
614c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fMenuView.setTitle("View");
615e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fMenuView.addAction(&fActionBreakpoint);
6167e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    fMenuView.addAction(&fActionShowDeletes);
617a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com    fMenuView.addAction(&fActionZoomIn);
618a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com    fMenuView.addAction(&fActionZoomOut);
619e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com
620e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fMenuWindows.setTitle("Window");
621e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fMenuWindows.addAction(&fActionInspector);
6222ff6d1d1dc2c4668b0c587c55fd37407fb8d68abbungeman@google.com    fMenuWindows.addAction(&fActionSettings);
623e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fMenuWindows.addAction(&fActionDirectory);
624c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com
625c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionGoToLine.setText("Go to Line...");
626c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionGoToLine.setDisabled(true);
627c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fMenuBar.addAction(fMenuFile.menuAction());
628e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fMenuBar.addAction(fMenuEdit.menuAction());
629c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fMenuBar.addAction(fMenuView.menuAction());
630c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fMenuBar.addAction(fMenuNavigate.menuAction());
631e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fMenuBar.addAction(fMenuWindows.menuAction());
632902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
633c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    SkDebuggerGUI->setMenuBar(&fMenuBar);
634902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    QMetaObject::connectSlotsByName(SkDebuggerGUI);
635902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
636902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
637ff6e6bade36c34a4c4fce4c14b480b9d2435bcd5robertphillips@google.comvoid SkDebuggerGUI::setupDirectoryWidget(const QString& path) {
638ff6e6bade36c34a4c4fce4c14b480b9d2435bcd5robertphillips@google.com    fPath = path;
639a745186c939ec641a861c74064155ec4aa3beb33djsollen    populateDirectoryWidget();
640a745186c939ec641a861c74064155ec4aa3beb33djsollen
641a745186c939ec641a861c74064155ec4aa3beb33djsollen    // clear the existing watched directory and setup a new directory to watch
642a745186c939ec641a861c74064155ec4aa3beb33djsollen    if (!fDirectoryWatcher.directories().empty()) {
643a745186c939ec641a861c74064155ec4aa3beb33djsollen        fDirectoryWatcher.removePaths(fDirectoryWatcher.directories());
644a745186c939ec641a861c74064155ec4aa3beb33djsollen    }
645a745186c939ec641a861c74064155ec4aa3beb33djsollen    if (!path.isEmpty()) {
646a745186c939ec641a861c74064155ec4aa3beb33djsollen        fDirectoryWatcher.addPath(fPath);
647a745186c939ec641a861c74064155ec4aa3beb33djsollen    }
648a745186c939ec641a861c74064155ec4aa3beb33djsollen}
649a745186c939ec641a861c74064155ec4aa3beb33djsollen
650a745186c939ec641a861c74064155ec4aa3beb33djsollenvoid SkDebuggerGUI::populateDirectoryWidget() {
651a745186c939ec641a861c74064155ec4aa3beb33djsollen    QDir dir(fPath);
652902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    QRegExp r(".skp");
653c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    const QStringList files = dir.entryList();
654a745186c939ec641a861c74064155ec4aa3beb33djsollen
655a745186c939ec641a861c74064155ec4aa3beb33djsollen    // check if a file has been removed
656a745186c939ec641a861c74064155ec4aa3beb33djsollen    for (int i = fDirectoryWidget.count() - 1; i >= 0; i--) {
657a745186c939ec641a861c74064155ec4aa3beb33djsollen        QListWidgetItem* item = fDirectoryWidget.item(i);
658a745186c939ec641a861c74064155ec4aa3beb33djsollen        if (!files.contains(item->text())) {
659a745186c939ec641a861c74064155ec4aa3beb33djsollen            fDirectoryWidget.removeItemWidget(item);
660a745186c939ec641a861c74064155ec4aa3beb33djsollen            delete item;
661a745186c939ec641a861c74064155ec4aa3beb33djsollen        }
662a745186c939ec641a861c74064155ec4aa3beb33djsollen    }
663a745186c939ec641a861c74064155ec4aa3beb33djsollen
664a745186c939ec641a861c74064155ec4aa3beb33djsollen    // add any new files
665902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    foreach (QString f, files) {
666a745186c939ec641a861c74064155ec4aa3beb33djsollen        if (f.contains(r) && fDirectoryWidget.findItems(f, Qt::MatchExactly).size() == 0) {
667c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com            fDirectoryWidget.addItem(f);
668a745186c939ec641a861c74064155ec4aa3beb33djsollen        }
669902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    }
670902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
671902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
672d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.comvoid SkDebuggerGUI::loadPicture(const SkString& fileName) {
673d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com    fFileName = fileName;
674d3058f5fd8bb786c5b70a0dd222bde646502258achudy@google.com    fLoading = true;
675385fe4d4b62d7d1dd76116dd570df3290a2f487bhalcanary    SkAutoTDelete<SkStream> stream(new SkFILEStream(fileName.c_str()));
6762d40ec4e9a3fb3540756fa45a6cffd541ada2c78robertphillips@google.com
677f1754ec69131801c1a6ed3c704501a9400bbf324scroggo@google.com    SkPicture* picture = SkPicture::CreateFromStream(stream);
6782d40ec4e9a3fb3540756fa45a6cffd541ada2c78robertphillips@google.com
67996fcdcc219d2a0d3579719b84b28bede76efba64halcanary    if (nullptr == picture) {
6802d40ec4e9a3fb3540756fa45a6cffd541ada2c78robertphillips@google.com        QMessageBox::critical(this, "Error loading file", "Couldn't read file, sorry.");
6812d40ec4e9a3fb3540756fa45a6cffd541ada2c78robertphillips@google.com        return;
6822d40ec4e9a3fb3540756fa45a6cffd541ada2c78robertphillips@google.com    }
6832bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com
684686e68019374dca3692cac6d5f8d94515e53d6c8chudy@google.com    fCanvasWidget.resetWidgetTransform();
685607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    fDebugger.loadPicture(picture);
6864c7962e0a866b8416fa7046791c129eb5430b677chudy@google.com
6876d9c92b2f6e5be64dd5dd98e44d672877e4c9fbcrobertphillips@google.com    fSkipCommands.setCount(fDebugger.getSize());
6886d9c92b2f6e5be64dd5dd98e44d672877e4c9fbcrobertphillips@google.com    for (int i = 0; i < fSkipCommands.count(); ++i) {
6895f97114fd28e03e8c4c1c22c924d383b45cdced1robertphillips@google.com        fSkipCommands[i] = false;
6905f97114fd28e03e8c4c1c22c924d383b45cdced1robertphillips@google.com    }
6915f97114fd28e03e8c4c1c22c924d383b45cdced1robertphillips@google.com
692607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    SkSafeUnref(picture);
693607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com
6947dcae67cae277549accdd38d0496b72d00151239chudy@google.com    /* fDebugCanvas is reinitialized every load picture. Need it to retain value
695607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com     * of the visibility filter.
696607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com     * TODO(chudy): This should be deprecated since fDebugger is not
697607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com     * recreated.
698607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com     * */
69941c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fDebugger.highlightCurrentCommand(fSettingsWidget.isVisibilityFilterEnabled());
700607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com
7015037e9de94e57d36592cc596d831cc2b5ec45bd3kkinnunen    this->setupListWidget();
7025037e9de94e57d36592cc596d831cc2b5ec45bd3kkinnunen    this->setupComboBox();
70396fcdcc219d2a0d3579719b84b28bede76efba64halcanary    this->setupOverviewText(nullptr, 0.0, 1);
7047e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    fInspectorWidget.setDisabled(false);
70541c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fViewStateFrame.setDisabled(false);
706e606d6e210b17dd9dd582d4d3ec70acb4f3213d5chudy@google.com    fSettingsWidget.setDisabled(false);
707d3058f5fd8bb786c5b70a0dd222bde646502258achudy@google.com    fMenuEdit.setDisabled(false);
708d3058f5fd8bb786c5b70a0dd222bde646502258achudy@google.com    fMenuNavigate.setDisabled(false);
709d3058f5fd8bb786c5b70a0dd222bde646502258achudy@google.com    fMenuView.setDisabled(false);
7100ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    fActionSave.setDisabled(false);
7110ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    fActionSaveAs.setDisabled(false);
712f3a9e993399fcb8dae4bf6f1dd9674a72b289da3kkinnunen    fActionPause.setChecked(false);
7130cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen    fDrawCommandGeometryWidget.setDrawCommandIndex(-1);
7140cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen
715d3058f5fd8bb786c5b70a0dd222bde646502258achudy@google.com    fLoading = false;
716d3058f5fd8bb786c5b70a0dd222bde646502258achudy@google.com    actionPlay();
717902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
718902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
7195037e9de94e57d36592cc596d831cc2b5ec45bd3kkinnunenvoid SkDebuggerGUI::setupListWidget() {
720546db46a76ad5f7485cebeb27efaf8b4806fa914robertphillips
721546db46a76ad5f7485cebeb27efaf8b4806fa914robertphillips    SkASSERT(!strcmp("Save",
722546db46a76ad5f7485cebeb27efaf8b4806fa914robertphillips                     SkDrawCommand::GetCommandString(SkDrawCommand::kSave_OpType)));
723546db46a76ad5f7485cebeb27efaf8b4806fa914robertphillips    SkASSERT(!strcmp("SaveLayer",
724546db46a76ad5f7485cebeb27efaf8b4806fa914robertphillips                     SkDrawCommand::GetCommandString(SkDrawCommand::kSaveLayer_OpType)));
725546db46a76ad5f7485cebeb27efaf8b4806fa914robertphillips    SkASSERT(!strcmp("Restore",
726546db46a76ad5f7485cebeb27efaf8b4806fa914robertphillips                     SkDrawCommand::GetCommandString(SkDrawCommand::kRestore_OpType)));
727160ebb2bfa0794d72d31a786793b13413289863dfmalita    SkASSERT(!strcmp("BeginDrawPicture",
728160ebb2bfa0794d72d31a786793b13413289863dfmalita                     SkDrawCommand::GetCommandString(SkDrawCommand::kBeginDrawPicture_OpType)));
729160ebb2bfa0794d72d31a786793b13413289863dfmalita    SkASSERT(!strcmp("EndDrawPicture",
730160ebb2bfa0794d72d31a786793b13413289863dfmalita                     SkDrawCommand::GetCommandString(SkDrawCommand::kEndDrawPicture_OpType)));
731546db46a76ad5f7485cebeb27efaf8b4806fa914robertphillips
732c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fListWidget.clear();
733902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    int counter = 0;
73430d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com    int indent = 0;
7355037e9de94e57d36592cc596d831cc2b5ec45bd3kkinnunen    for (int i = 0; i < fDebugger.getSize(); i++) {
736902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        QListWidgetItem *item = new QListWidgetItem();
7375037e9de94e57d36592cc596d831cc2b5ec45bd3kkinnunen        SkDrawCommand* command = fDebugger.getDrawCommandAt(i);
7385037e9de94e57d36592cc596d831cc2b5ec45bd3kkinnunen        SkString commandString = command->toString();
7395037e9de94e57d36592cc596d831cc2b5ec45bd3kkinnunen        item->setData(Qt::DisplayRole, commandString.c_str());
740902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        item->setData(Qt::UserRole + 1, counter++);
74130d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com
7425037e9de94e57d36592cc596d831cc2b5ec45bd3kkinnunen        if (0 == strcmp("Restore", commandString.c_str()) ||
743160ebb2bfa0794d72d31a786793b13413289863dfmalita            0 == strcmp("EndDrawPicture", commandString.c_str())) {
74430d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com            indent -= 10;
74530d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com        }
74630d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com
74730d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com        item->setData(Qt::UserRole + 3, indent);
74830d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com
7495037e9de94e57d36592cc596d831cc2b5ec45bd3kkinnunen        if (0 == strcmp("Save", commandString.c_str()) ||
750546db46a76ad5f7485cebeb27efaf8b4806fa914robertphillips            0 == strcmp("SaveLayer", commandString.c_str()) ||
751160ebb2bfa0794d72d31a786793b13413289863dfmalita            0 == strcmp("BeginDrawPicture", commandString.c_str())) {
75230d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com            indent += 10;
75330d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com        }
75430d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com
75557f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org        item->setData(Qt::UserRole + 4, -1);
756d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com
757c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com        fListWidget.addItem(item);
758902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    }
759902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
760902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
76191274b99722d9be62e077ab979c630c23cdd04b1skia.committer@gmail.comvoid SkDebuggerGUI::setupOverviewText(const SkTDArray<double>* typeTimes,
762e428f9b1132c12299c204a333192495d7e748511robertphillips@google.com                                      double totTime,
763e428f9b1132c12299c204a333192495d7e748511robertphillips@google.com                                      int numRuns) {
7642d9dbd4f78314b4b36f67d6ebbf3e0f2d9a163e3borenet@google.com    SkString overview;
765e428f9b1132c12299c204a333192495d7e748511robertphillips@google.com    fDebugger.getOverviewText(typeTimes, totTime, &overview, numRuns);
7662d9dbd4f78314b4b36f67d6ebbf3e0f2d9a163e3borenet@google.com    fInspectorWidget.setText(overview.c_str(), SkInspectorWidget::kOverview_TabType);
7678a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com}
7688a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com
7692a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org
7705037e9de94e57d36592cc596d831cc2b5ec45bd3kkinnunenvoid SkDebuggerGUI::setupComboBox() {
7718a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com    fFilter.clear();
7728a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com    fFilter.addItem("--Filter By Available Commands--");
7738a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com
7748a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com    std::map<std::string, int> map;
7755037e9de94e57d36592cc596d831cc2b5ec45bd3kkinnunen    for (int i = 0; i < fDebugger.getSize(); i++) {
7765037e9de94e57d36592cc596d831cc2b5ec45bd3kkinnunen        map[fDebugger.getDrawCommandAt(i)->toString().c_str()]++;
7778a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com    }
7788a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com
7793458716b52aa25dcd1b270141c7628c380696e35skia.committer@gmail.com    for (std::map<std::string, int>::iterator it = map.begin(); it != map.end();
7808a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com         ++it) {
7818a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com        fFilter.addItem((it->first).c_str());
7828a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com    }
783902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
784902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    // NOTE(chudy): Makes first item unselectable.
7857dcae67cae277549accdd38d0496b72d00151239chudy@google.com    QStandardItemModel* model = qobject_cast<QStandardItemModel*>(
786c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com            fFilter.model());
787c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    QModelIndex firstIndex = model->index(0, fFilter.modelColumn(),
788c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com            fFilter.rootModelIndex());
789902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    QStandardItem* firstItem = model->itemFromIndex(firstIndex);
790902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    firstItem->setSelectable(false);
791902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
79241c79cc0ff3003ef77cb48590f7887221856f941kkinnunen
793cfdc0e3fee69694e0f6b083d8455665b2a810589kkinnunenvoid SkDebuggerGUI::updateImage() {
794cfdc0e3fee69694e0f6b083d8455665b2a810589kkinnunen    if (this->isPaused()) {
795cfdc0e3fee69694e0f6b083d8455665b2a810589kkinnunen        fCanvasWidget.drawTo(fPausedRow);
796cfdc0e3fee69694e0f6b083d8455665b2a810589kkinnunen    } else {
797cfdc0e3fee69694e0f6b083d8455665b2a810589kkinnunen        fCanvasWidget.drawTo(fListWidget.currentRow());
798cfdc0e3fee69694e0f6b083d8455665b2a810589kkinnunen    }
799cfdc0e3fee69694e0f6b083d8455665b2a810589kkinnunen}
800cfdc0e3fee69694e0f6b083d8455665b2a810589kkinnunen
80141c79cc0ff3003ef77cb48590f7887221856f941kkinnunenvoid SkDebuggerGUI::updateHit(int newHit) {
80241c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fCommandHitBox.setText(QString::number(newHit));
80341c79cc0ff3003ef77cb48590f7887221856f941kkinnunen}
80441c79cc0ff3003ef77cb48590f7887221856f941kkinnunen
805