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());
282587ea71a522cd05601b401d17ad207c01f0ee0d6robertphillips    sk_sp<SkPicture> copy(fDebugger.copyPicture());
28325bc2f86c2b94ee1f0921d90e6629d8cb22f69b7robertphillips@google.com
284db6830162eca5b94e61d9825ec93306fc615d204Hal Canary    sk_sp<SkPixelSerializer> serializer(sk_tool_utils::MakePixelSerializer());
285f530586c417800d086e6e727ecb1b31e678f4183Florin Malita    copy->serialize(&file, serializer.get());
2860ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com}
2870ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com
288902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::loadFile(QListWidgetItem *item) {
289a745186c939ec641a861c74064155ec4aa3beb33djsollen    if (item == nullptr) {
290a745186c939ec641a861c74064155ec4aa3beb33djsollen        return;
291a745186c939ec641a861c74064155ec4aa3beb33djsollen    }
292a745186c939ec641a861c74064155ec4aa3beb33djsollen
293a745186c939ec641a861c74064155ec4aa3beb33djsollen    SkString fileName(fPath.toAscii().data());
294a745186c939ec641a861c74064155ec4aa3beb33djsollen    // don't add a '/' to files in the local directory
295a745186c939ec641a861c74064155ec4aa3beb33djsollen    if (fileName.size() > 0) {
296a745186c939ec641a861c74064155ec4aa3beb33djsollen        fileName.append("/");
297a745186c939ec641a861c74064155ec4aa3beb33djsollen    }
298a745186c939ec641a861c74064155ec4aa3beb33djsollen    fileName.append(item->text().toAscii().data());
299a745186c939ec641a861c74064155ec4aa3beb33djsollen
300a745186c939ec641a861c74064155ec4aa3beb33djsollen    if (!fileName.equals(fFileName)) {
301a745186c939ec641a861c74064155ec4aa3beb33djsollen        fFileName = fileName;
302d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com        loadPicture(fFileName);
303902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    }
304902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
305902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
306902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::openFile() {
307d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com    QString temp = QFileDialog::getOpenFileName(this, tr("Open File"), "",
3087dcae67cae277549accdd38d0496b72d00151239chudy@google.com            tr("Files (*.*)"));
309ff6e6bade36c34a4c4fce4c14b480b9d2435bcd5robertphillips@google.com    openFile(temp);
310ff6e6bade36c34a4c4fce4c14b480b9d2435bcd5robertphillips@google.com}
311ff6e6bade36c34a4c4fce4c14b480b9d2435bcd5robertphillips@google.com
312ff6e6bade36c34a4c4fce4c14b480b9d2435bcd5robertphillips@google.comvoid SkDebuggerGUI::openFile(const QString &filename) {
313ff6e6bade36c34a4c4fce4c14b480b9d2435bcd5robertphillips@google.com    if (!filename.isEmpty()) {
314ff6e6bade36c34a4c4fce4c14b480b9d2435bcd5robertphillips@google.com        QFileInfo pathInfo(filename);
315ff6e6bade36c34a4c4fce4c14b480b9d2435bcd5robertphillips@google.com        loadPicture(SkString(filename.toAscii().data()));
316ff6e6bade36c34a4c4fce4c14b480b9d2435bcd5robertphillips@google.com        setupDirectoryWidget(pathInfo.path());
317902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    }
318902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
319902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
320c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.comvoid SkDebuggerGUI::pauseDrawing(bool isPaused) {
321607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    fPausedRow = fListWidget.currentRow();
322cfdc0e3fee69694e0f6b083d8455665b2a810589kkinnunen    this->updateDrawCommandInfo();
3237dcae67cae277549accdd38d0496b72d00151239chudy@google.com}
3247dcae67cae277549accdd38d0496b72d00151239chudy@google.com
3250cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunenvoid SkDebuggerGUI::updateDrawCommandInfo() {
3260cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen    int currentRow = -1;
3270cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen    if (!fLoading) {
3280cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen        currentRow = fListWidget.currentRow();
3290cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen    }
3300cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen    if (currentRow == -1) {
3310cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen        fInspectorWidget.setText("", SkInspectorWidget::kDetail_TabType);
3320cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen        fInspectorWidget.setText("", SkInspectorWidget::kClipStack_TabType);
3330cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen        fCurrentCommandBox.setText("");
3340cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen        fDrawCommandGeometryWidget.setDrawCommandIndex(-1);
3350cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen    } else {
336cfdc0e3fee69694e0f6b083d8455665b2a810589kkinnunen        this->updateImage();
337cfdc0e3fee69694e0f6b083d8455665b2a810589kkinnunen
3380cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen        const SkTDArray<SkString*> *currInfo = fDebugger.getCommandInfo(currentRow);
3390cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen
3400cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen        /* TODO(chudy): Add command type before parameters. Rename v
3410cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen         * to something more informative. */
3420cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen        if (currInfo) {
3430cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen            QString info;
3440cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen            info.append("<b>Parameters: </b><br/>");
3450cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen            for (int i = 0; i < currInfo->count(); i++) {
3460cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen                info.append(QString((*currInfo)[i]->c_str()));
3470cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen                info.append("<br/>");
348d3058f5fd8bb786c5b70a0dd222bde646502258achudy@google.com            }
3490cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen            fInspectorWidget.setText(info, SkInspectorWidget::kDetail_TabType);
350902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        }
351ea5488b9655fc7d71345c3a823de85f8b74e3279chudy@google.com
3520cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen        fCurrentCommandBox.setText(QString::number(currentRow));
3530cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen
3540cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen        fDrawCommandGeometryWidget.setDrawCommandIndex(currentRow);
3550cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen
3560cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen        fInspectorWidget.setDisabled(false);
3570cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen        fViewStateFrame.setDisabled(false);
358902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    }
359902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
360902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
3619ca9bfe9f6eaae41841446386e40be1013907e99chudy@google.comvoid SkDebuggerGUI::selectCommand(int command) {
362f3a9e993399fcb8dae4bf6f1dd9674a72b289da3kkinnunen    if (this->isPaused()) {
3639ca9bfe9f6eaae41841446386e40be1013907e99chudy@google.com        fListWidget.setCurrentRow(command);
3649ca9bfe9f6eaae41841446386e40be1013907e99chudy@google.com    }
3659ca9bfe9f6eaae41841446386e40be1013907e99chudy@google.com}
3669ca9bfe9f6eaae41841446386e40be1013907e99chudy@google.com
367902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::toggleBreakpoint() {
368c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    QListWidgetItem* item = fListWidget.currentItem();
369902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    if (item->checkState() == Qt::Unchecked) {
370902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        item->setCheckState(Qt::Checked);
371e565de4fad5598890124daadf385930043269415chudy@google.com        item->setData(Qt::DecorationRole,
3728e41a168b0c4eedfcfb05d46f6a19895cc9459ecrobertphillips@google.com                QPixmap(":/breakpoint_16x16.png"));
373902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    } else {
374902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        item->setCheckState(Qt::Unchecked);
375e565de4fad5598890124daadf385930043269415chudy@google.com        item->setData(Qt::DecorationRole,
3768e41a168b0c4eedfcfb05d46f6a19895cc9459ecrobertphillips@google.com                QPixmap(":/blank.png"));
377902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    }
378902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
379902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
380902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::toggleDirectory() {
381607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com    fDirectoryWidget.setHidden(!fDirectoryWidget.isHidden());
382902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
383902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
384902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::toggleFilter(QString string) {
385c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    for (int row = 0; row < fListWidget.count(); row++) {
386c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com        QListWidgetItem *item = fListWidget.item(row);
387607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com        item->setHidden(item->text() != string);
388902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    }
389902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
390902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
391902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.comvoid SkDebuggerGUI::setupUi(QMainWindow *SkDebuggerGUI) {
392902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    QIcon windowIcon;
3938e41a168b0c4eedfcfb05d46f6a19895cc9459ecrobertphillips@google.com    windowIcon.addFile(QString::fromUtf8(":/skia.png"), QSize(),
3947dcae67cae277549accdd38d0496b72d00151239chudy@google.com            QIcon::Normal, QIcon::Off);
395902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    SkDebuggerGUI->setObjectName(QString::fromUtf8("SkDebuggerGUI"));
396902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    SkDebuggerGUI->resize(1200, 1000);
397902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    SkDebuggerGUI->setWindowIcon(windowIcon);
398c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    SkDebuggerGUI->setWindowTitle("Skia Debugger");
399902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
400e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionOpen.setShortcuts(QKeySequence::Open);
401c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionOpen.setText("Open");
402902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
403c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    QIcon breakpoint;
4048e41a168b0c4eedfcfb05d46f6a19895cc9459ecrobertphillips@google.com    breakpoint.addFile(QString::fromUtf8(":/breakpoint.png"),
4057dcae67cae277549accdd38d0496b72d00151239chudy@google.com            QSize(), QIcon::Normal, QIcon::Off);
406e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionBreakpoint.setShortcut(QKeySequence(tr("Ctrl+B")));
407c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionBreakpoint.setIcon(breakpoint);
4087e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    fActionBreakpoint.setText("Breakpoints");
409f3a9e993399fcb8dae4bf6f1dd9674a72b289da3kkinnunen    fActionBreakpoint.setCheckable(true);
410902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
411c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    QIcon cancel;
4128e41a168b0c4eedfcfb05d46f6a19895cc9459ecrobertphillips@google.com    cancel.addFile(QString::fromUtf8(":/reload.png"), QSize(),
4137dcae67cae277549accdd38d0496b72d00151239chudy@google.com            QIcon::Normal, QIcon::Off);
414c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionCancel.setIcon(cancel);
415c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionCancel.setText("Clear Filter");
416902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
4177e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    fActionClearBreakpoints.setShortcut(QKeySequence(tr("Alt+B")));
4187e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    fActionClearBreakpoints.setText("Clear Breakpoints");
4197e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com
4207e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    fActionClearDeletes.setShortcut(QKeySequence(tr("Alt+X")));
4217e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    fActionClearDeletes.setText("Clear Deletes");
4227e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com
423e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionClose.setShortcuts(QKeySequence::Quit);
424c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionClose.setText("Exit");
425902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
426e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionCreateBreakpoint.setShortcut(QKeySequence(tr("B")));
427e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionCreateBreakpoint.setText("Set Breakpoint");
428e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com
429e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionDelete.setShortcut(QKeySequence(tr("X")));
430c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionDelete.setText("Delete Command");
431902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
432e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionDirectory.setShortcut(QKeySequence(tr("Ctrl+D")));
433e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionDirectory.setText("Directory");
434902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
435902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    QIcon inspector;
436d163636ec6914a95c7a8333dc94bc0cae68b226arobertphillips@google.com    inspector.addFile(QString::fromUtf8(":/inspector.png"),
4377dcae67cae277549accdd38d0496b72d00151239chudy@google.com            QSize(), QIcon::Normal, QIcon::Off);
438e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionInspector.setShortcut(QKeySequence(tr("Ctrl+I")));
439c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionInspector.setIcon(inspector);
440e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionInspector.setText("Inspector");
441902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
4422ff6d1d1dc2c4668b0c587c55fd37407fb8d68abbungeman@google.com    QIcon settings;
4432ff6d1d1dc2c4668b0c587c55fd37407fb8d68abbungeman@google.com    settings.addFile(QString::fromUtf8(":/inspector.png"),
4442ff6d1d1dc2c4668b0c587c55fd37407fb8d68abbungeman@google.com            QSize(), QIcon::Normal, QIcon::Off);
4452ff6d1d1dc2c4668b0c587c55fd37407fb8d68abbungeman@google.com    fActionSettings.setShortcut(QKeySequence(tr("Ctrl+G")));
4462ff6d1d1dc2c4668b0c587c55fd37407fb8d68abbungeman@google.com    fActionSettings.setIcon(settings);
4472ff6d1d1dc2c4668b0c587c55fd37407fb8d68abbungeman@google.com    fActionSettings.setText("Settings");
4480d55dd7d2c07a77b22478bed9b30ff44ceecad68skia.committer@gmail.com
449c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    QIcon play;
450d163636ec6914a95c7a8333dc94bc0cae68b226arobertphillips@google.com    play.addFile(QString::fromUtf8(":/play.png"), QSize(),
4517dcae67cae277549accdd38d0496b72d00151239chudy@google.com            QIcon::Normal, QIcon::Off);
452e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionPlay.setShortcut(QKeySequence(tr("Ctrl+P")));
453c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionPlay.setIcon(play);
454c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionPlay.setText("Play");
455902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
456e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    QIcon pause;
457d163636ec6914a95c7a8333dc94bc0cae68b226arobertphillips@google.com    pause.addFile(QString::fromUtf8(":/pause.png"), QSize(),
4587dcae67cae277549accdd38d0496b72d00151239chudy@google.com            QIcon::Normal, QIcon::Off);
459e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionPause.setShortcut(QKeySequence(tr("Space")));
460e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionPause.setCheckable(true);
461e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionPause.setIcon(pause);
462e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionPause.setText("Pause");
463e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com
464c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    QIcon rewind;
4658e41a168b0c4eedfcfb05d46f6a19895cc9459ecrobertphillips@google.com    rewind.addFile(QString::fromUtf8(":/rewind.png"), QSize(),
466c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com            QIcon::Normal, QIcon::Off);
467e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionRewind.setShortcut(QKeySequence(tr("Ctrl+R")));
468c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionRewind.setIcon(rewind);
469c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionRewind.setText("Rewind");
470902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
4710ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    fActionSave.setShortcut(QKeySequence::Save);
4720ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    fActionSave.setText("Save");
4730ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    fActionSave.setDisabled(true);
4740ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    fActionSaveAs.setShortcut(QKeySequence::SaveAs);
4750ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    fActionSaveAs.setText("Save As");
4760ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    fActionSaveAs.setDisabled(true);
4770ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com
4787e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    fActionShowDeletes.setShortcut(QKeySequence(tr("Ctrl+X")));
4797e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    fActionShowDeletes.setText("Deleted Commands");
480f3a9e993399fcb8dae4bf6f1dd9674a72b289da3kkinnunen    fActionShowDeletes.setCheckable(true);
4817e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com
482c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    QIcon stepBack;
4838e41a168b0c4eedfcfb05d46f6a19895cc9459ecrobertphillips@google.com    stepBack.addFile(QString::fromUtf8(":/previous.png"), QSize(),
4847dcae67cae277549accdd38d0496b72d00151239chudy@google.com            QIcon::Normal, QIcon::Off);
485e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionStepBack.setShortcut(QKeySequence(tr("[")));
486c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionStepBack.setIcon(stepBack);
487c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionStepBack.setText("Step Back");
488902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
489c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    QIcon stepForward;
4908e41a168b0c4eedfcfb05d46f6a19895cc9459ecrobertphillips@google.com    stepForward.addFile(QString::fromUtf8(":/next.png"),
491c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com            QSize(), QIcon::Normal, QIcon::Off);
492e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fActionStepForward.setShortcut(QKeySequence(tr("]")));
493c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionStepForward.setIcon(stepForward);
494c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionStepForward.setText("Step Forward");
495c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com
496a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com    fActionZoomIn.setShortcut(QKeySequence(tr("Ctrl+=")));
497a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com    fActionZoomIn.setText("Zoom In");
498a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com    fActionZoomOut.setShortcut(QKeySequence(tr("Ctrl+-")));
499a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com    fActionZoomOut.setText("Zoom Out");
500a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com
501c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fListWidget.setItemDelegate(new SkListWidget(&fListWidget));
502c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fListWidget.setObjectName(QString::fromUtf8("listWidget"));
503bcd431e1778001990c4d877929b14959dc96a0d3commit-bot@chromium.org    fListWidget.setMinimumWidth(250);
504902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
505c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fFilter.addItem("--Filter By Available Commands--");
506902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
507bcd431e1778001990c4d877929b14959dc96a0d3commit-bot@chromium.org    fDirectoryWidget.setMinimumWidth(250);
508c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fDirectoryWidget.setStyleSheet("QListWidget::Item {padding: 5px;}");
509902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
510c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fCanvasWidget.setSizePolicy(QSizePolicy::Expanding,
5117dcae67cae277549accdd38d0496b72d00151239chudy@google.com            QSizePolicy::Expanding);
512902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
51363a470227beed0de553d769724e0108808391e42kkinnunen    fDrawCommandGeometryWidget.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
5146dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com
5156dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com    fSettingsAndImageLayout.addWidget(&fSettingsWidget);
5166dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com
51741c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    // View state group, part of inspector.
51841c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fViewStateFrame.setFrameStyle(QFrame::Panel);
51941c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fViewStateFrame.setLayout(&fViewStateFrameLayout);
52041c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fViewStateFrameLayout.addWidget(&fViewStateGroup);
52163a470227beed0de553d769724e0108808391e42kkinnunen    fViewStateGroup.setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
52241c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fViewStateGroup.setTitle("View");
52341c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fViewStateLayout.addRow("Zoom Level", &fZoomBox);
52441c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fZoomBox.setText("100%");
52541c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fZoomBox.setMinimumSize(QSize(50,25));
52641c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fZoomBox.setMaximumSize(QSize(50,25));
52741c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fZoomBox.setAlignment(Qt::AlignRight);
52841c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fZoomBox.setReadOnly(true);
52941c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fViewStateLayout.addRow("Command HitBox", &fCommandHitBox);
53041c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fCommandHitBox.setText("0");
53141c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fCommandHitBox.setMinimumSize(QSize(50,25));
53241c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fCommandHitBox.setMaximumSize(QSize(50,25));
53341c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fCommandHitBox.setAlignment(Qt::AlignRight);
53441c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fCommandHitBox.setReadOnly(true);
53541c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fViewStateLayout.addRow("Current Command", &fCurrentCommandBox);
53641c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fCurrentCommandBox.setText("0");
53741c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fCurrentCommandBox.setMinimumSize(QSize(50,25));
53841c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fCurrentCommandBox.setMaximumSize(QSize(50,25));
53941c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fCurrentCommandBox.setAlignment(Qt::AlignRight);
54041c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fCurrentCommandBox.setReadOnly(true);
54141c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fViewStateGroup.setLayout(&fViewStateLayout);
54241c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fSettingsAndImageLayout.addWidget(&fViewStateFrame);
54341c79cc0ff3003ef77cb48590f7887221856f941kkinnunen
54463a470227beed0de553d769724e0108808391e42kkinnunen    fDrawCommandGeometryWidget.setToolTip("Current Command Geometry");
54563a470227beed0de553d769724e0108808391e42kkinnunen    fSettingsAndImageLayout.addWidget(&fDrawCommandGeometryWidget);
546c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com
547bcd431e1778001990c4d877929b14959dc96a0d3commit-bot@chromium.org    fLeftColumnSplitter.addWidget(&fListWidget);
548bcd431e1778001990c4d877929b14959dc96a0d3commit-bot@chromium.org    fLeftColumnSplitter.addWidget(&fDirectoryWidget);
549bcd431e1778001990c4d877929b14959dc96a0d3commit-bot@chromium.org    fLeftColumnSplitter.setOrientation(Qt::Vertical);
550902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
5516dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com    fCanvasSettingsAndImageLayout.setSpacing(6);
55241c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fCanvasSettingsAndImageLayout.addWidget(&fCanvasWidget, 1);
55341c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fCanvasSettingsAndImageLayout.addLayout(&fSettingsAndImageLayout, 0);
5546dec8fcb4427c68649aede96864cff7c71df6393robertphillips@google.com
555c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fMainAndRightColumnLayout.setSpacing(6);
5567c339ae1e362e9f02cdfb9b32007f143dec0bc0ekkinnunen    fMainAndRightColumnLayout.addLayout(&fCanvasSettingsAndImageLayout, 1);
5577c339ae1e362e9f02cdfb9b32007f143dec0bc0ekkinnunen    fMainAndRightColumnLayout.addWidget(&fInspectorWidget, 0);
558bcd431e1778001990c4d877929b14959dc96a0d3commit-bot@chromium.org    fMainAndRightColumnWidget.setLayout(&fMainAndRightColumnLayout);
559902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
560bcd431e1778001990c4d877929b14959dc96a0d3commit-bot@chromium.org    fCentralSplitter.addWidget(&fLeftColumnSplitter);
561bcd431e1778001990c4d877929b14959dc96a0d3commit-bot@chromium.org    fCentralSplitter.addWidget(&fMainAndRightColumnWidget);
562bcd431e1778001990c4d877929b14959dc96a0d3commit-bot@chromium.org    fCentralSplitter.setStretchFactor(0, 0);
563bcd431e1778001990c4d877929b14959dc96a0d3commit-bot@chromium.org    fCentralSplitter.setStretchFactor(1, 1);
564902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
565bcd431e1778001990c4d877929b14959dc96a0d3commit-bot@chromium.org    SkDebuggerGUI->setCentralWidget(&fCentralSplitter);
566c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    SkDebuggerGUI->setStatusBar(&fStatusBar);
567902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
568e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fToolBar.setIconSize(QSize(32, 32));
569c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fToolBar.setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
570c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    SkDebuggerGUI->addToolBar(Qt::TopToolBarArea, &fToolBar);
571902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
5720ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    fSpacer.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
573902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
574c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fToolBar.addAction(&fActionRewind);
575c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fToolBar.addAction(&fActionStepBack);
576e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fToolBar.addAction(&fActionPause);
577c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fToolBar.addAction(&fActionStepForward);
578c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fToolBar.addAction(&fActionPlay);
579c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fToolBar.addSeparator();
580e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fToolBar.addAction(&fActionInspector);
5812ff6d1d1dc2c4668b0c587c55fd37407fb8d68abbungeman@google.com    fToolBar.addAction(&fActionSettings);
582d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com
583d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com    fToolBar.addSeparator();
5840ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    fToolBar.addWidget(&fSpacer);
585c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fToolBar.addWidget(&fFilter);
586c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fToolBar.addAction(&fActionCancel);
587902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
588d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com    fFileName = "";
589ff6e6bade36c34a4c4fce4c14b480b9d2435bcd5robertphillips@google.com    setupDirectoryWidget("");
590902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
591902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    // Menu Bar
592c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fMenuFile.setTitle("File");
593c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fMenuFile.addAction(&fActionOpen);
5940ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    fMenuFile.addAction(&fActionSave);
5950ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    fMenuFile.addAction(&fActionSaveAs);
596c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fMenuFile.addAction(&fActionClose);
597e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com
598e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fMenuEdit.setTitle("Edit");
599e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fMenuEdit.addAction(&fActionDelete);
6007e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    fMenuEdit.addAction(&fActionClearDeletes);
6017e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    fMenuEdit.addSeparator();
602e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fMenuEdit.addAction(&fActionCreateBreakpoint);
6037e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    fMenuEdit.addAction(&fActionClearBreakpoints);
604e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com
605c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fMenuNavigate.setTitle("Navigate");
606e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fMenuNavigate.addAction(&fActionRewind);
607e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fMenuNavigate.addAction(&fActionStepBack);
608e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fMenuNavigate.addAction(&fActionStepForward);
609e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fMenuNavigate.addAction(&fActionPlay);
610e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fMenuNavigate.addAction(&fActionPause);
611c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fMenuNavigate.addAction(&fActionGoToLine);
612e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com
613c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fMenuView.setTitle("View");
614e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fMenuView.addAction(&fActionBreakpoint);
6157e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    fMenuView.addAction(&fActionShowDeletes);
616a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com    fMenuView.addAction(&fActionZoomIn);
617a1226319b72df0fb4c8a9a6aae5e493a4e3527cbchudy@google.com    fMenuView.addAction(&fActionZoomOut);
618e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com
619e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fMenuWindows.setTitle("Window");
620e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fMenuWindows.addAction(&fActionInspector);
6212ff6d1d1dc2c4668b0c587c55fd37407fb8d68abbungeman@google.com    fMenuWindows.addAction(&fActionSettings);
622e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fMenuWindows.addAction(&fActionDirectory);
623c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com
624c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionGoToLine.setText("Go to Line...");
625c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fActionGoToLine.setDisabled(true);
626c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fMenuBar.addAction(fMenuFile.menuAction());
627e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fMenuBar.addAction(fMenuEdit.menuAction());
628c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fMenuBar.addAction(fMenuView.menuAction());
629c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fMenuBar.addAction(fMenuNavigate.menuAction());
630e504de0a50f268189399567f58183c8c6a27b2afchudy@google.com    fMenuBar.addAction(fMenuWindows.menuAction());
631902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
632c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    SkDebuggerGUI->setMenuBar(&fMenuBar);
633902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    QMetaObject::connectSlotsByName(SkDebuggerGUI);
634902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
635902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
636ff6e6bade36c34a4c4fce4c14b480b9d2435bcd5robertphillips@google.comvoid SkDebuggerGUI::setupDirectoryWidget(const QString& path) {
637ff6e6bade36c34a4c4fce4c14b480b9d2435bcd5robertphillips@google.com    fPath = path;
638a745186c939ec641a861c74064155ec4aa3beb33djsollen    populateDirectoryWidget();
639a745186c939ec641a861c74064155ec4aa3beb33djsollen
640a745186c939ec641a861c74064155ec4aa3beb33djsollen    // clear the existing watched directory and setup a new directory to watch
641a745186c939ec641a861c74064155ec4aa3beb33djsollen    if (!fDirectoryWatcher.directories().empty()) {
642a745186c939ec641a861c74064155ec4aa3beb33djsollen        fDirectoryWatcher.removePaths(fDirectoryWatcher.directories());
643a745186c939ec641a861c74064155ec4aa3beb33djsollen    }
644a745186c939ec641a861c74064155ec4aa3beb33djsollen    if (!path.isEmpty()) {
645a745186c939ec641a861c74064155ec4aa3beb33djsollen        fDirectoryWatcher.addPath(fPath);
646a745186c939ec641a861c74064155ec4aa3beb33djsollen    }
647a745186c939ec641a861c74064155ec4aa3beb33djsollen}
648a745186c939ec641a861c74064155ec4aa3beb33djsollen
649a745186c939ec641a861c74064155ec4aa3beb33djsollenvoid SkDebuggerGUI::populateDirectoryWidget() {
650a745186c939ec641a861c74064155ec4aa3beb33djsollen    QDir dir(fPath);
651902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    QRegExp r(".skp");
652c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    const QStringList files = dir.entryList();
653a745186c939ec641a861c74064155ec4aa3beb33djsollen
654a745186c939ec641a861c74064155ec4aa3beb33djsollen    // check if a file has been removed
655a745186c939ec641a861c74064155ec4aa3beb33djsollen    for (int i = fDirectoryWidget.count() - 1; i >= 0; i--) {
656a745186c939ec641a861c74064155ec4aa3beb33djsollen        QListWidgetItem* item = fDirectoryWidget.item(i);
657a745186c939ec641a861c74064155ec4aa3beb33djsollen        if (!files.contains(item->text())) {
658a745186c939ec641a861c74064155ec4aa3beb33djsollen            fDirectoryWidget.removeItemWidget(item);
659a745186c939ec641a861c74064155ec4aa3beb33djsollen            delete item;
660a745186c939ec641a861c74064155ec4aa3beb33djsollen        }
661a745186c939ec641a861c74064155ec4aa3beb33djsollen    }
662a745186c939ec641a861c74064155ec4aa3beb33djsollen
663a745186c939ec641a861c74064155ec4aa3beb33djsollen    // add any new files
6649ea8acdf3ff8b7787e59de8c393e12a72b34ddc0robertphillips    Q_FOREACH (QString f, files) {
665a745186c939ec641a861c74064155ec4aa3beb33djsollen        if (f.contains(r) && fDirectoryWidget.findItems(f, Qt::MatchExactly).size() == 0) {
666c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com            fDirectoryWidget.addItem(f);
667a745186c939ec641a861c74064155ec4aa3beb33djsollen        }
668902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    }
669902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
670902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
671d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.comvoid SkDebuggerGUI::loadPicture(const SkString& fileName) {
672d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com    fFileName = fileName;
673d3058f5fd8bb786c5b70a0dd222bde646502258achudy@google.com    fLoading = true;
674f530586c417800d086e6e727ecb1b31e678f4183Florin Malita    SkFILEStream stream(fileName.c_str());
6752d40ec4e9a3fb3540756fa45a6cffd541ada2c78robertphillips@google.com
676f530586c417800d086e6e727ecb1b31e678f4183Florin Malita    auto picture = SkPicture::MakeFromStream(&stream);
6772d40ec4e9a3fb3540756fa45a6cffd541ada2c78robertphillips@google.com
67896fcdcc219d2a0d3579719b84b28bede76efba64halcanary    if (nullptr == picture) {
6792d40ec4e9a3fb3540756fa45a6cffd541ada2c78robertphillips@google.com        QMessageBox::critical(this, "Error loading file", "Couldn't read file, sorry.");
6802d40ec4e9a3fb3540756fa45a6cffd541ada2c78robertphillips@google.com        return;
6812d40ec4e9a3fb3540756fa45a6cffd541ada2c78robertphillips@google.com    }
6822bde91dcb6f2840e01216054897fe98a930e9104robertphillips@google.com
683686e68019374dca3692cac6d5f8d94515e53d6c8chudy@google.com    fCanvasWidget.resetWidgetTransform();
684ca2622ba051829fed5f30facd74c5b41cd4b931creed    fDebugger.loadPicture(picture.get());
6854c7962e0a866b8416fa7046791c129eb5430b677chudy@google.com
6866d9c92b2f6e5be64dd5dd98e44d672877e4c9fbcrobertphillips@google.com    fSkipCommands.setCount(fDebugger.getSize());
6876d9c92b2f6e5be64dd5dd98e44d672877e4c9fbcrobertphillips@google.com    for (int i = 0; i < fSkipCommands.count(); ++i) {
6885f97114fd28e03e8c4c1c22c924d383b45cdced1robertphillips@google.com        fSkipCommands[i] = false;
6895f97114fd28e03e8c4c1c22c924d383b45cdced1robertphillips@google.com    }
6905f97114fd28e03e8c4c1c22c924d383b45cdced1robertphillips@google.com
691ca2622ba051829fed5f30facd74c5b41cd4b931creed    picture.reset();
692607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com
6937dcae67cae277549accdd38d0496b72d00151239chudy@google.com    /* fDebugCanvas is reinitialized every load picture. Need it to retain value
694607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com     * of the visibility filter.
695607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com     * TODO(chudy): This should be deprecated since fDebugger is not
696607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com     * recreated.
697607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com     * */
69841c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fDebugger.highlightCurrentCommand(fSettingsWidget.isVisibilityFilterEnabled());
699607357fde8a9c4c70549d4223e0bd1181b012e0echudy@google.com
7005037e9de94e57d36592cc596d831cc2b5ec45bd3kkinnunen    this->setupListWidget();
7015037e9de94e57d36592cc596d831cc2b5ec45bd3kkinnunen    this->setupComboBox();
70296fcdcc219d2a0d3579719b84b28bede76efba64halcanary    this->setupOverviewText(nullptr, 0.0, 1);
7037e4cfbf144af7d530d552946cee2a21d30b9b50fchudy@google.com    fInspectorWidget.setDisabled(false);
70441c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fViewStateFrame.setDisabled(false);
705e606d6e210b17dd9dd582d4d3ec70acb4f3213d5chudy@google.com    fSettingsWidget.setDisabled(false);
706d3058f5fd8bb786c5b70a0dd222bde646502258achudy@google.com    fMenuEdit.setDisabled(false);
707d3058f5fd8bb786c5b70a0dd222bde646502258achudy@google.com    fMenuNavigate.setDisabled(false);
708d3058f5fd8bb786c5b70a0dd222bde646502258achudy@google.com    fMenuView.setDisabled(false);
7090ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    fActionSave.setDisabled(false);
7100ab03397afd3420ea8fd9323d78ddd562a7b7bdfchudy@google.com    fActionSaveAs.setDisabled(false);
711f3a9e993399fcb8dae4bf6f1dd9674a72b289da3kkinnunen    fActionPause.setChecked(false);
7120cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen    fDrawCommandGeometryWidget.setDrawCommandIndex(-1);
7130cfeaf3ac1e7edcf3b618c9f33f4b4bc30321324kkinnunen
714d3058f5fd8bb786c5b70a0dd222bde646502258achudy@google.com    fLoading = false;
715d3058f5fd8bb786c5b70a0dd222bde646502258achudy@google.com    actionPlay();
716902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
717902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
7185037e9de94e57d36592cc596d831cc2b5ec45bd3kkinnunenvoid SkDebuggerGUI::setupListWidget() {
719546db46a76ad5f7485cebeb27efaf8b4806fa914robertphillips
720546db46a76ad5f7485cebeb27efaf8b4806fa914robertphillips    SkASSERT(!strcmp("Save",
721546db46a76ad5f7485cebeb27efaf8b4806fa914robertphillips                     SkDrawCommand::GetCommandString(SkDrawCommand::kSave_OpType)));
722546db46a76ad5f7485cebeb27efaf8b4806fa914robertphillips    SkASSERT(!strcmp("SaveLayer",
723546db46a76ad5f7485cebeb27efaf8b4806fa914robertphillips                     SkDrawCommand::GetCommandString(SkDrawCommand::kSaveLayer_OpType)));
724546db46a76ad5f7485cebeb27efaf8b4806fa914robertphillips    SkASSERT(!strcmp("Restore",
725546db46a76ad5f7485cebeb27efaf8b4806fa914robertphillips                     SkDrawCommand::GetCommandString(SkDrawCommand::kRestore_OpType)));
726160ebb2bfa0794d72d31a786793b13413289863dfmalita    SkASSERT(!strcmp("BeginDrawPicture",
727160ebb2bfa0794d72d31a786793b13413289863dfmalita                     SkDrawCommand::GetCommandString(SkDrawCommand::kBeginDrawPicture_OpType)));
728160ebb2bfa0794d72d31a786793b13413289863dfmalita    SkASSERT(!strcmp("EndDrawPicture",
729160ebb2bfa0794d72d31a786793b13413289863dfmalita                     SkDrawCommand::GetCommandString(SkDrawCommand::kEndDrawPicture_OpType)));
730546db46a76ad5f7485cebeb27efaf8b4806fa914robertphillips
731c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    fListWidget.clear();
732902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    int counter = 0;
73330d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com    int indent = 0;
7345037e9de94e57d36592cc596d831cc2b5ec45bd3kkinnunen    for (int i = 0; i < fDebugger.getSize(); i++) {
735902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        QListWidgetItem *item = new QListWidgetItem();
7365037e9de94e57d36592cc596d831cc2b5ec45bd3kkinnunen        SkDrawCommand* command = fDebugger.getDrawCommandAt(i);
7375037e9de94e57d36592cc596d831cc2b5ec45bd3kkinnunen        SkString commandString = command->toString();
7385037e9de94e57d36592cc596d831cc2b5ec45bd3kkinnunen        item->setData(Qt::DisplayRole, commandString.c_str());
739902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com        item->setData(Qt::UserRole + 1, counter++);
74030d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com
7415037e9de94e57d36592cc596d831cc2b5ec45bd3kkinnunen        if (0 == strcmp("Restore", commandString.c_str()) ||
742160ebb2bfa0794d72d31a786793b13413289863dfmalita            0 == strcmp("EndDrawPicture", commandString.c_str())) {
74330d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com            indent -= 10;
74430d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com        }
74530d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com
74630d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com        item->setData(Qt::UserRole + 3, indent);
74730d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com
7485037e9de94e57d36592cc596d831cc2b5ec45bd3kkinnunen        if (0 == strcmp("Save", commandString.c_str()) ||
749546db46a76ad5f7485cebeb27efaf8b4806fa914robertphillips            0 == strcmp("SaveLayer", commandString.c_str()) ||
750160ebb2bfa0794d72d31a786793b13413289863dfmalita            0 == strcmp("BeginDrawPicture", commandString.c_str())) {
75130d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com            indent += 10;
75230d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com        }
75330d35f23ae390043462e2aa5fc6863a4621aa74drobertphillips@google.com
75457f74e0aa931e7784d47cba3ecc83020aa8e72b2commit-bot@chromium.org        item->setData(Qt::UserRole + 4, -1);
755d26c70688fda9dd33369f5ea9da78f26c8666d63robertphillips@google.com
756c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com        fListWidget.addItem(item);
757902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    }
758902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
759902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
76091274b99722d9be62e077ab979c630c23cdd04b1skia.committer@gmail.comvoid SkDebuggerGUI::setupOverviewText(const SkTDArray<double>* typeTimes,
761e428f9b1132c12299c204a333192495d7e748511robertphillips@google.com                                      double totTime,
762e428f9b1132c12299c204a333192495d7e748511robertphillips@google.com                                      int numRuns) {
7632d9dbd4f78314b4b36f67d6ebbf3e0f2d9a163e3borenet@google.com    SkString overview;
764e428f9b1132c12299c204a333192495d7e748511robertphillips@google.com    fDebugger.getOverviewText(typeTimes, totTime, &overview, numRuns);
7652d9dbd4f78314b4b36f67d6ebbf3e0f2d9a163e3borenet@google.com    fInspectorWidget.setText(overview.c_str(), SkInspectorWidget::kOverview_TabType);
7668a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com}
7678a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com
7682a67e123a3e559774a16a58cbe5106bc0fb86740commit-bot@chromium.org
7695037e9de94e57d36592cc596d831cc2b5ec45bd3kkinnunenvoid SkDebuggerGUI::setupComboBox() {
7708a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com    fFilter.clear();
7718a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com    fFilter.addItem("--Filter By Available Commands--");
7728a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com
7738a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com    std::map<std::string, int> map;
7745037e9de94e57d36592cc596d831cc2b5ec45bd3kkinnunen    for (int i = 0; i < fDebugger.getSize(); i++) {
7755037e9de94e57d36592cc596d831cc2b5ec45bd3kkinnunen        map[fDebugger.getDrawCommandAt(i)->toString().c_str()]++;
7768a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com    }
7778a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com
7783458716b52aa25dcd1b270141c7628c380696e35skia.committer@gmail.com    for (std::map<std::string, int>::iterator it = map.begin(); it != map.end();
7798a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com         ++it) {
7808a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com        fFilter.addItem((it->first).c_str());
7818a1cdaece7e1d009befb84f21bb82370025bf4d6robertphillips@google.com    }
782902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com
783902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    // NOTE(chudy): Makes first item unselectable.
7847dcae67cae277549accdd38d0496b72d00151239chudy@google.com    QStandardItemModel* model = qobject_cast<QStandardItemModel*>(
785c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com            fFilter.model());
786c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com    QModelIndex firstIndex = model->index(0, fFilter.modelColumn(),
787c432f00a84e2b3d759b3f24ec687af7320121eeachudy@google.com            fFilter.rootModelIndex());
788902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    QStandardItem* firstItem = model->itemFromIndex(firstIndex);
789902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com    firstItem->setSelectable(false);
790902ebe5eb41a350b766238b3b103c22fe9fc0fb5chudy@google.com}
79141c79cc0ff3003ef77cb48590f7887221856f941kkinnunen
792cfdc0e3fee69694e0f6b083d8455665b2a810589kkinnunenvoid SkDebuggerGUI::updateImage() {
793cfdc0e3fee69694e0f6b083d8455665b2a810589kkinnunen    if (this->isPaused()) {
794cfdc0e3fee69694e0f6b083d8455665b2a810589kkinnunen        fCanvasWidget.drawTo(fPausedRow);
795cfdc0e3fee69694e0f6b083d8455665b2a810589kkinnunen    } else {
796cfdc0e3fee69694e0f6b083d8455665b2a810589kkinnunen        fCanvasWidget.drawTo(fListWidget.currentRow());
797cfdc0e3fee69694e0f6b083d8455665b2a810589kkinnunen    }
798cfdc0e3fee69694e0f6b083d8455665b2a810589kkinnunen}
799cfdc0e3fee69694e0f6b083d8455665b2a810589kkinnunen
80041c79cc0ff3003ef77cb48590f7887221856f941kkinnunenvoid SkDebuggerGUI::updateHit(int newHit) {
80141c79cc0ff3003ef77cb48590f7887221856f941kkinnunen    fCommandHitBox.setText(QString::number(newHit));
80241c79cc0ff3003ef77cb48590f7887221856f941kkinnunen}
80341c79cc0ff3003ef77cb48590f7887221856f941kkinnunen
804