blob: f61371b293d6b73c6d6749f9ed00b20b0fd353d8 [file] [log] [blame]
chudy@google.com902ebe52012-06-29 14:21:22 +00001/*
2 * Copyright 2012 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
chudy@google.com902ebe52012-06-29 14:21:22 +00008#include "SkDebuggerGUI.h"
chudy@google.combbad34d2012-08-13 14:26:36 +00009#include "SkGraphics.h"
scroggo@google.comb4467e62012-11-06 23:10:09 +000010#include "SkImageDecoder.h"
chudy@google.com902ebe52012-06-29 14:21:22 +000011#include <QListWidgetItem>
12
13SkDebuggerGUI::SkDebuggerGUI(QWidget *parent) :
chudy@google.comc432f002012-07-10 13:19:25 +000014 QMainWindow(parent)
chudy@google.com2d537a12012-07-31 12:49:52 +000015 , fCentralWidget(this)
16 , fStatusBar(this)
17 , fToolBar(this)
chudy@google.comc432f002012-07-10 13:19:25 +000018 , fActionOpen(this)
19 , fActionBreakpoint(this)
robertphillips@google.comd26c7062012-11-12 20:42:12 +000020 , fActionProfile(this)
chudy@google.comc432f002012-07-10 13:19:25 +000021 , fActionCancel(this)
chudy@google.com7e4cfbf2012-07-17 15:40:51 +000022 , fActionClearBreakpoints(this)
chudy@google.come504de02012-07-16 18:35:23 +000023 , fActionClearDeletes(this)
chudy@google.comc432f002012-07-10 13:19:25 +000024 , fActionClose(this)
chudy@google.come504de02012-07-16 18:35:23 +000025 , fActionCreateBreakpoint(this)
chudy@google.comc432f002012-07-10 13:19:25 +000026 , fActionDelete(this)
27 , fActionDirectory(this)
28 , fActionGoToLine(this)
29 , fActionInspector(this)
30 , fActionPlay(this)
chudy@google.come504de02012-07-16 18:35:23 +000031 , fActionPause(this)
chudy@google.comc432f002012-07-10 13:19:25 +000032 , fActionRewind(this)
chudy@google.com0ab03392012-07-28 20:16:11 +000033 , fActionSave(this)
34 , fActionSaveAs(this)
chudy@google.com7e4cfbf2012-07-17 15:40:51 +000035 , fActionShowDeletes(this)
chudy@google.comc432f002012-07-10 13:19:25 +000036 , fActionStepBack(this)
37 , fActionStepForward(this)
chudy@google.coma1226312012-07-26 20:26:44 +000038 , fActionZoomIn(this)
39 , fActionZoomOut(this)
40 , fMapper(this)
chudy@google.comc432f002012-07-10 13:19:25 +000041 , fListWidget(&fCentralWidget)
42 , fDirectoryWidget(&fCentralWidget)
chudy@google.com607357f2012-08-07 16:12:23 +000043 , fCanvasWidget(this, &fDebugger)
chudy@google.comc432f002012-07-10 13:19:25 +000044 , fMenuBar(this)
45 , fMenuFile(this)
46 , fMenuNavigate(this)
47 , fMenuView(this)
chudy@google.com7e4cfbf2012-07-17 15:40:51 +000048 , fBreakpointsActivated(false)
49 , fDeletesActivated(false)
50 , fPause(false)
chudy@google.comd3058f52012-07-19 13:41:27 +000051 , fLoading(false)
chudy@google.comc432f002012-07-10 13:19:25 +000052{
chudy@google.com902ebe52012-06-29 14:21:22 +000053 setupUi(this);
chudy@google.comea5488b2012-07-26 19:38:22 +000054 connect(&fListWidget, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)), this, SLOT(registerListClick(QListWidgetItem *)));
chudy@google.comc432f002012-07-10 13:19:25 +000055 connect(&fActionOpen, SIGNAL(triggered()), this, SLOT(openFile()));
chudy@google.comea5488b2012-07-26 19:38:22 +000056 connect(&fActionDirectory, SIGNAL(triggered()), this, SLOT(toggleDirectory()));
57 connect(&fDirectoryWidget, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)), this, SLOT(loadFile(QListWidgetItem *)));
chudy@google.comc432f002012-07-10 13:19:25 +000058 connect(&fActionDelete, SIGNAL(triggered()), this, SLOT(actionDelete()));
chudy@google.comea5488b2012-07-26 19:38:22 +000059 connect(&fListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(toggleBreakpoint()));
chudy@google.comc432f002012-07-10 13:19:25 +000060 connect(&fActionRewind, SIGNAL(triggered()), this, SLOT(actionRewind()));
61 connect(&fActionPlay, SIGNAL(triggered()), this, SLOT(actionPlay()));
62 connect(&fActionStepBack, SIGNAL(triggered()), this, SLOT(actionStepBack()));
chudy@google.comea5488b2012-07-26 19:38:22 +000063 connect(&fActionStepForward, SIGNAL(triggered()), this, SLOT(actionStepForward()));
64 connect(&fActionBreakpoint, SIGNAL(triggered()), this, SLOT(actionBreakpoints()));
65 connect(&fActionInspector, SIGNAL(triggered()), this, SLOT(actionInspector()));
66 connect(&fActionInspector, SIGNAL(triggered()), this, SLOT(actionSettings()));
67 connect(&fFilter, SIGNAL(activated(QString)), this, SLOT(toggleFilter(QString)));
robertphillips@google.comd26c7062012-11-12 20:42:12 +000068 connect(&fActionProfile, SIGNAL(triggered()), this, SLOT(actionProfile()));
chudy@google.comc432f002012-07-10 13:19:25 +000069 connect(&fActionCancel, SIGNAL(triggered()), this, SLOT(actionCancel()));
chudy@google.com7e4cfbf2012-07-17 15:40:51 +000070 connect(&fActionClearBreakpoints, SIGNAL(triggered()), this, SLOT(actionClearBreakpoints()));
71 connect(&fActionClearDeletes, SIGNAL(triggered()), this, SLOT(actionClearDeletes()));
chudy@google.comc432f002012-07-10 13:19:25 +000072 connect(&fActionClose, SIGNAL(triggered()), this, SLOT(actionClose()));
chudy@google.comea5488b2012-07-26 19:38:22 +000073 connect(fSettingsWidget.getVisibilityButton(), SIGNAL(toggled(bool)), this, SLOT(actionCommandFilter()));
74 connect(fSettingsWidget.getGLCheckBox(), SIGNAL(toggled(bool)), this, SLOT(actionGLWidget(bool)));
75 connect(fSettingsWidget.getRasterCheckBox(), SIGNAL(toggled(bool)), this, SLOT(actionRasterWidget(bool)));
76 connect(&fActionPause, SIGNAL(toggled(bool)), this, SLOT(pauseDrawing(bool)));
chudy@google.come504de02012-07-16 18:35:23 +000077 connect(&fActionCreateBreakpoint, SIGNAL(activated()), this, SLOT(toggleBreakpoint()));
chudy@google.com7e4cfbf2012-07-17 15:40:51 +000078 connect(&fActionShowDeletes, SIGNAL(triggered()), this, SLOT(showDeletes()));
chudy@google.comea5488b2012-07-26 19:38:22 +000079 connect(&fCanvasWidget, SIGNAL(hitChanged(int)), this, SLOT(selectCommand(int)));
80 connect(&fCanvasWidget, SIGNAL(hitChanged(int)), &fSettingsWidget, SLOT(updateHit(int)));
81 connect(&fCanvasWidget, SIGNAL(scaleFactorChanged(float)), this, SLOT(actionScale(float)));
82 connect(&fCanvasWidget, SIGNAL(commandChanged(int)), &fSettingsWidget, SLOT(updateCommand(int)));
chudy@google.com0ab03392012-07-28 20:16:11 +000083 connect(&fActionSaveAs, SIGNAL(triggered()), this, SLOT(actionSaveAs()));
84 connect(&fActionSave, SIGNAL(triggered()), this, SLOT(actionSave()));
chudy@google.com7e4cfbf2012-07-17 15:40:51 +000085
chudy@google.coma1226312012-07-26 20:26:44 +000086 fMapper.setMapping(&fActionZoomIn, 1);
87 fMapper.setMapping(&fActionZoomOut, -1);
88
89 connect(&fActionZoomIn, SIGNAL(triggered()), &fMapper, SLOT(map()));
90 connect(&fActionZoomOut, SIGNAL(triggered()), &fMapper, SLOT(map()));
91 connect(&fMapper, SIGNAL(mapped(int)), &fCanvasWidget, SLOT(keyZoom(int)));
92
chudy@google.com7e4cfbf2012-07-17 15:40:51 +000093 fInspectorWidget.setDisabled(true);
chudy@google.comd3058f52012-07-19 13:41:27 +000094 fMenuEdit.setDisabled(true);
95 fMenuNavigate.setDisabled(true);
96 fMenuView.setDisabled(true);
chudy@google.combbad34d2012-08-13 14:26:36 +000097
98 SkGraphics::Init();
chudy@google.com902ebe52012-06-29 14:21:22 +000099}
100
chudy@google.combbad34d2012-08-13 14:26:36 +0000101SkDebuggerGUI::~SkDebuggerGUI() {
102 SkGraphics::Term();
103}
chudy@google.com902ebe52012-06-29 14:21:22 +0000104
105void SkDebuggerGUI::actionBreakpoints() {
chudy@google.com7e4cfbf2012-07-17 15:40:51 +0000106 fBreakpointsActivated = !fBreakpointsActivated;
chudy@google.comc432f002012-07-10 13:19:25 +0000107 for (int row = 0; row < fListWidget.count(); row++) {
108 QListWidgetItem *item = fListWidget.item(row);
chudy@google.com7e4cfbf2012-07-17 15:40:51 +0000109 item->setHidden(item->checkState() == Qt::Unchecked && fBreakpointsActivated);
110 }
111}
chudy@google.com902ebe52012-06-29 14:21:22 +0000112
chudy@google.com7e4cfbf2012-07-17 15:40:51 +0000113void SkDebuggerGUI::showDeletes() {
114 fDeletesActivated = !fDeletesActivated;
115 for (int row = 0; row < fListWidget.count(); row++) {
116 QListWidgetItem *item = fListWidget.item(row);
chudy@google.com607357f2012-08-07 16:12:23 +0000117 item->setHidden(fDebugger.isCommandVisible(row)
118 && fDeletesActivated);
chudy@google.com902ebe52012-06-29 14:21:22 +0000119 }
120}
121
robertphillips@google.comd26c7062012-11-12 20:42:12 +0000122void SkDebuggerGUI::actionProfile() {
123}
124
chudy@google.com902ebe52012-06-29 14:21:22 +0000125void SkDebuggerGUI::actionCancel() {
chudy@google.comc432f002012-07-10 13:19:25 +0000126 for (int row = 0; row < fListWidget.count(); row++) {
127 fListWidget.item(row)->setHidden(false);
chudy@google.com902ebe52012-06-29 14:21:22 +0000128 }
129}
130
chudy@google.com7e4cfbf2012-07-17 15:40:51 +0000131void SkDebuggerGUI::actionClearBreakpoints() {
132 for (int row = 0; row < fListWidget.count(); row++) {
133 QListWidgetItem* item = fListWidget.item(row);
134 item->setCheckState(Qt::Unchecked);
135 item->setData(Qt::DecorationRole,
136 QPixmap(":/images/Icons/blank.png"));
137 }
138}
139
140void SkDebuggerGUI::actionClearDeletes() {
141 for (int row = 0; row < fListWidget.count(); row++) {
142 QListWidgetItem* item = fListWidget.item(row);
143 item->setData(Qt::UserRole + 2, QPixmap(":/images/Icons/blank.png"));
chudy@google.com607357f2012-08-07 16:12:23 +0000144 fDebugger.setCommandVisible(row, true);
chudy@google.com7e4cfbf2012-07-17 15:40:51 +0000145 }
146 if (fPause) {
147 fCanvasWidget.drawTo(fPausedRow);
148 } else {
149 fCanvasWidget.drawTo(fListWidget.currentRow());
150 }
151}
152
chudy@google.com902ebe52012-06-29 14:21:22 +0000153void SkDebuggerGUI::actionCommandFilter() {
chudy@google.com607357f2012-08-07 16:12:23 +0000154 fDebugger.highlightCurrentCommand(
chudy@google.comc432f002012-07-10 13:19:25 +0000155 fSettingsWidget.getVisibilityButton()->isChecked());
156 fCanvasWidget.drawTo(fListWidget.currentRow());
chudy@google.com902ebe52012-06-29 14:21:22 +0000157}
158
159void SkDebuggerGUI::actionClose() {
160 this->close();
161}
162
163void SkDebuggerGUI::actionDelete() {
chudy@google.comc432f002012-07-10 13:19:25 +0000164 int currentRow = fListWidget.currentRow();
chudy@google.com7e4cfbf2012-07-17 15:40:51 +0000165 QListWidgetItem* item = fListWidget.currentItem();
166
chudy@google.com607357f2012-08-07 16:12:23 +0000167 if (fDebugger.isCommandVisible(currentRow)) {
chudy@google.com7e4cfbf2012-07-17 15:40:51 +0000168 item->setData(Qt::UserRole + 2, QPixmap(":/images/Icons/delete.png"));
chudy@google.com607357f2012-08-07 16:12:23 +0000169 fDebugger.setCommandVisible(currentRow, false);
chudy@google.com7e4cfbf2012-07-17 15:40:51 +0000170 } else {
171 item->setData(Qt::UserRole + 2, QPixmap(":/images/Icons/blank.png"));
chudy@google.com607357f2012-08-07 16:12:23 +0000172 fDebugger.setCommandVisible(currentRow, true);
chudy@google.com7e4cfbf2012-07-17 15:40:51 +0000173 }
174
chudy@google.come504de02012-07-16 18:35:23 +0000175 if (fPause) {
176 fCanvasWidget.drawTo(fPausedRow);
177 } else {
178 fCanvasWidget.drawTo(currentRow);
179 }
chudy@google.com902ebe52012-06-29 14:21:22 +0000180}
181
chudy@google.comea5488b2012-07-26 19:38:22 +0000182void SkDebuggerGUI::actionGLWidget(bool isToggled) {
183 fCanvasWidget.setWidgetVisibility(SkCanvasWidget::kGPU_WidgetType, !isToggled);
184}
185
chudy@google.com902ebe52012-06-29 14:21:22 +0000186void SkDebuggerGUI::actionInspector() {
chudy@google.comc432f002012-07-10 13:19:25 +0000187 if (fInspectorWidget.isHidden()) {
188 fInspectorWidget.setHidden(false);
chudy@google.com902ebe52012-06-29 14:21:22 +0000189 } else {
chudy@google.comc432f002012-07-10 13:19:25 +0000190 fInspectorWidget.setHidden(true);
chudy@google.com902ebe52012-06-29 14:21:22 +0000191 }
192}
193
194void SkDebuggerGUI::actionPlay() {
chudy@google.comc432f002012-07-10 13:19:25 +0000195 for (int row = fListWidget.currentRow() + 1; row < fListWidget.count();
chudy@google.com7dcae672012-07-09 20:26:53 +0000196 row++) {
chudy@google.comc432f002012-07-10 13:19:25 +0000197 QListWidgetItem *item = fListWidget.item(row);
chudy@google.com902ebe52012-06-29 14:21:22 +0000198 if (item->checkState() == Qt::Checked) {
chudy@google.comc432f002012-07-10 13:19:25 +0000199 fListWidget.setCurrentItem(item);
chudy@google.com902ebe52012-06-29 14:21:22 +0000200 return;
201 }
202 }
chudy@google.comc432f002012-07-10 13:19:25 +0000203 fListWidget.setCurrentRow(fListWidget.count() - 1);
chudy@google.com902ebe52012-06-29 14:21:22 +0000204}
205
chudy@google.comea5488b2012-07-26 19:38:22 +0000206void SkDebuggerGUI::actionRasterWidget(bool isToggled) {
207 fCanvasWidget.setWidgetVisibility(SkCanvasWidget::kRaster_8888_WidgetType, !isToggled);
208}
209
chudy@google.com902ebe52012-06-29 14:21:22 +0000210void SkDebuggerGUI::actionRewind() {
chudy@google.come504de02012-07-16 18:35:23 +0000211 fListWidget.setCurrentRow(0);
chudy@google.com902ebe52012-06-29 14:21:22 +0000212}
213
chudy@google.com0ab03392012-07-28 20:16:11 +0000214void SkDebuggerGUI::actionSave() {
robertphillips@google.comd26c7062012-11-12 20:42:12 +0000215 fFileName = fPath.toAscii();
216 fFileName.append("/");
217 fFileName.append(fDirectoryWidget.currentItem()->text().toAscii());
218 saveToFile(fFileName);
chudy@google.com0ab03392012-07-28 20:16:11 +0000219}
220
221void SkDebuggerGUI::actionSaveAs() {
222 QString filename = QFileDialog::getSaveFileName(this, "Save File", "",
223 "Skia Picture (*skp)");
chudy@google.com38b08ce2012-07-28 23:26:10 +0000224 if (!filename.endsWith(".skp", Qt::CaseInsensitive)) {
chudy@google.com0ab03392012-07-28 20:16:11 +0000225 filename.append(".skp");
226 }
djsollen@google.comc3c82162012-11-13 18:35:10 +0000227 saveToFile(SkString(filename.toAscii().data()));
chudy@google.com0ab03392012-07-28 20:16:11 +0000228}
229
chudy@google.com7dcae672012-07-09 20:26:53 +0000230void SkDebuggerGUI::actionScale(float scaleFactor) {
chudy@google.comc432f002012-07-10 13:19:25 +0000231 fSettingsWidget.setZoomText(scaleFactor);
chudy@google.com7dcae672012-07-09 20:26:53 +0000232}
233
chudy@google.com902ebe52012-06-29 14:21:22 +0000234void SkDebuggerGUI::actionSettings() {
chudy@google.comc432f002012-07-10 13:19:25 +0000235 if (fSettingsWidget.isHidden()) {
236 fSettingsWidget.setHidden(false);
chudy@google.com902ebe52012-06-29 14:21:22 +0000237 } else {
chudy@google.comc432f002012-07-10 13:19:25 +0000238 fSettingsWidget.setHidden(true);
chudy@google.com902ebe52012-06-29 14:21:22 +0000239 }
240}
241
242void SkDebuggerGUI::actionStepBack() {
chudy@google.comc432f002012-07-10 13:19:25 +0000243 int currentRow = fListWidget.currentRow();
chudy@google.com902ebe52012-06-29 14:21:22 +0000244 if (currentRow != 0) {
chudy@google.comc432f002012-07-10 13:19:25 +0000245 fListWidget.setCurrentRow(currentRow - 1);
chudy@google.com902ebe52012-06-29 14:21:22 +0000246 }
247}
248
249void SkDebuggerGUI::actionStepForward() {
chudy@google.comc432f002012-07-10 13:19:25 +0000250 int currentRow = fListWidget.currentRow();
chudy@google.com902ebe52012-06-29 14:21:22 +0000251 QString curRow = QString::number(currentRow);
chudy@google.comc432f002012-07-10 13:19:25 +0000252 QString curCount = QString::number(fListWidget.count());
253 if (currentRow < fListWidget.count() - 1) {
254 fListWidget.setCurrentRow(currentRow + 1);
chudy@google.com902ebe52012-06-29 14:21:22 +0000255 }
256}
257
chudy@google.coma9e937c2012-08-03 17:32:05 +0000258void SkDebuggerGUI::drawComplete() {
chudy@google.com607357f2012-08-07 16:12:23 +0000259 fInspectorWidget.setMatrix(fDebugger.getCurrentMatrix());
260 fInspectorWidget.setClip(fDebugger.getCurrentClip());
chudy@google.coma9e937c2012-08-03 17:32:05 +0000261}
262
robertphillips@google.comd26c7062012-11-12 20:42:12 +0000263void SkDebuggerGUI::saveToFile(const SkString& filename) {
264 SkFILEWStream file(filename.c_str());
chudy@google.com607357f2012-08-07 16:12:23 +0000265 fDebugger.makePicture()->serialize(&file);
chudy@google.com0ab03392012-07-28 20:16:11 +0000266}
267
chudy@google.com902ebe52012-06-29 14:21:22 +0000268void SkDebuggerGUI::loadFile(QListWidgetItem *item) {
269 if (fDirectoryWidgetActive) {
robertphillips@google.comd26c7062012-11-12 20:42:12 +0000270 fFileName = fPath.toAscii();
271 fFileName.append("/");
272 fFileName.append(item->text().toAscii());
273 loadPicture(fFileName);
chudy@google.com902ebe52012-06-29 14:21:22 +0000274 }
275}
276
277void SkDebuggerGUI::openFile() {
robertphillips@google.comd26c7062012-11-12 20:42:12 +0000278 QString temp = QFileDialog::getOpenFileName(this, tr("Open File"), "",
chudy@google.com7dcae672012-07-09 20:26:53 +0000279 tr("Files (*.*)"));
chudy@google.com902ebe52012-06-29 14:21:22 +0000280 fDirectoryWidgetActive = false;
robertphillips@google.comd26c7062012-11-12 20:42:12 +0000281 if (!temp.isEmpty()) {
282 QFileInfo pathInfo(temp);
chudy@google.com902ebe52012-06-29 14:21:22 +0000283 fPath = pathInfo.path();
djsollen@google.comc3c82162012-11-13 18:35:10 +0000284 loadPicture(SkString(temp.toAscii().data()));
chudy@google.com902ebe52012-06-29 14:21:22 +0000285 setupDirectoryWidget();
286 }
chudy@google.com902ebe52012-06-29 14:21:22 +0000287 fDirectoryWidgetActive = true;
288}
289
chudy@google.comc432f002012-07-10 13:19:25 +0000290void SkDebuggerGUI::pauseDrawing(bool isPaused) {
chudy@google.com607357f2012-08-07 16:12:23 +0000291 fPause = isPaused;
292 fPausedRow = fListWidget.currentRow();
293 fCanvasWidget.drawTo(fPausedRow);
chudy@google.com7dcae672012-07-09 20:26:53 +0000294}
295
chudy@google.com902ebe52012-06-29 14:21:22 +0000296void SkDebuggerGUI::registerListClick(QListWidgetItem *item) {
chudy@google.comd3058f52012-07-19 13:41:27 +0000297 if(!fLoading) {
298 int currentRow = fListWidget.currentRow();
chudy@google.comd3058f52012-07-19 13:41:27 +0000299
chudy@google.comea5488b2012-07-26 19:38:22 +0000300 if (currentRow != -1) {
301 if (!fPause) {
302 fCanvasWidget.drawTo(currentRow);
chudy@google.comd3058f52012-07-19 13:41:27 +0000303 }
chudy@google.com97cee972012-08-07 20:41:37 +0000304 SkTDArray<SkString*> *currInfo = fDebugger.getCommandInfo(
chudy@google.comea5488b2012-07-26 19:38:22 +0000305 currentRow);
306
307 /* TODO(chudy): Add command type before parameters. Rename v
308 * to something more informative. */
chudy@google.com97cee972012-08-07 20:41:37 +0000309 if (currInfo) {
chudy@google.comea5488b2012-07-26 19:38:22 +0000310 QString info;
311 info.append("<b>Parameters: </b><br/>");
chudy@google.com97cee972012-08-07 20:41:37 +0000312 for (int i = 0; i < currInfo->count(); i++) {
313
314 info.append(QString((*currInfo)[i]->c_str()));
chudy@google.comea5488b2012-07-26 19:38:22 +0000315 info.append("<br/>");
316 }
chudy@google.com6bd109a2012-08-14 19:34:13 +0000317 fInspectorWidget.setText(info, SkInspectorWidget::kDetail_TabType);
chudy@google.comea5488b2012-07-26 19:38:22 +0000318 fInspectorWidget.setDisabled(false);
chudy@google.comea5488b2012-07-26 19:38:22 +0000319 }
chudy@google.comd3058f52012-07-19 13:41:27 +0000320 }
chudy@google.comea5488b2012-07-26 19:38:22 +0000321
chudy@google.com902ebe52012-06-29 14:21:22 +0000322 }
323}
324
chudy@google.com9ca9bfe2012-07-12 21:58:14 +0000325void SkDebuggerGUI::selectCommand(int command) {
326 if (fPause) {
327 fListWidget.setCurrentRow(command);
328 }
329}
330
chudy@google.com902ebe52012-06-29 14:21:22 +0000331void SkDebuggerGUI::toggleBreakpoint() {
chudy@google.comc432f002012-07-10 13:19:25 +0000332 QListWidgetItem* item = fListWidget.currentItem();
chudy@google.com902ebe52012-06-29 14:21:22 +0000333 if (item->checkState() == Qt::Unchecked) {
334 item->setCheckState(Qt::Checked);
chudy@google.come565de42012-07-12 14:15:54 +0000335 item->setData(Qt::DecorationRole,
336 QPixmap(":/images/Icons/breakpoint_16x16.png"));
chudy@google.com902ebe52012-06-29 14:21:22 +0000337 } else {
chudy@google.com902ebe52012-06-29 14:21:22 +0000338 item->setCheckState(Qt::Unchecked);
chudy@google.come565de42012-07-12 14:15:54 +0000339 item->setData(Qt::DecorationRole,
340 QPixmap(":/images/Icons/blank.png"));
chudy@google.com902ebe52012-06-29 14:21:22 +0000341 }
342}
343
344void SkDebuggerGUI::toggleDirectory() {
chudy@google.com607357f2012-08-07 16:12:23 +0000345 fDirectoryWidget.setHidden(!fDirectoryWidget.isHidden());
chudy@google.com902ebe52012-06-29 14:21:22 +0000346}
347
348void SkDebuggerGUI::toggleFilter(QString string) {
chudy@google.comc432f002012-07-10 13:19:25 +0000349 for (int row = 0; row < fListWidget.count(); row++) {
350 QListWidgetItem *item = fListWidget.item(row);
chudy@google.com607357f2012-08-07 16:12:23 +0000351 item->setHidden(item->text() != string);
chudy@google.com902ebe52012-06-29 14:21:22 +0000352 }
353}
354
355void SkDebuggerGUI::setupUi(QMainWindow *SkDebuggerGUI) {
356 QIcon windowIcon;
chudy@google.com7dcae672012-07-09 20:26:53 +0000357 windowIcon.addFile(QString::fromUtf8(":/images/Icons/skia.png"), QSize(),
358 QIcon::Normal, QIcon::Off);
chudy@google.com902ebe52012-06-29 14:21:22 +0000359 SkDebuggerGUI->setObjectName(QString::fromUtf8("SkDebuggerGUI"));
360 SkDebuggerGUI->resize(1200, 1000);
361 SkDebuggerGUI->setWindowIcon(windowIcon);
chudy@google.comc432f002012-07-10 13:19:25 +0000362 SkDebuggerGUI->setWindowTitle("Skia Debugger");
chudy@google.com902ebe52012-06-29 14:21:22 +0000363
chudy@google.come504de02012-07-16 18:35:23 +0000364 fActionOpen.setShortcuts(QKeySequence::Open);
chudy@google.comc432f002012-07-10 13:19:25 +0000365 fActionOpen.setText("Open");
chudy@google.com902ebe52012-06-29 14:21:22 +0000366
367 QIcon breakpoint;
chudy@google.com7dcae672012-07-09 20:26:53 +0000368 breakpoint.addFile(QString::fromUtf8(":/images/Icons/breakpoint.png"),
369 QSize(), QIcon::Normal, QIcon::Off);
chudy@google.come504de02012-07-16 18:35:23 +0000370 fActionBreakpoint.setShortcut(QKeySequence(tr("Ctrl+B")));
chudy@google.comc432f002012-07-10 13:19:25 +0000371 fActionBreakpoint.setIcon(breakpoint);
chudy@google.com7e4cfbf2012-07-17 15:40:51 +0000372 fActionBreakpoint.setText("Breakpoints");
chudy@google.com902ebe52012-06-29 14:21:22 +0000373
374 QIcon cancel;
chudy@google.come504de02012-07-16 18:35:23 +0000375 cancel.addFile(QString::fromUtf8(":/images/Ico/reload.png"), QSize(),
chudy@google.com7dcae672012-07-09 20:26:53 +0000376 QIcon::Normal, QIcon::Off);
chudy@google.comc432f002012-07-10 13:19:25 +0000377 fActionCancel.setIcon(cancel);
378 fActionCancel.setText("Clear Filter");
chudy@google.com902ebe52012-06-29 14:21:22 +0000379
chudy@google.com7e4cfbf2012-07-17 15:40:51 +0000380 fActionClearBreakpoints.setShortcut(QKeySequence(tr("Alt+B")));
381 fActionClearBreakpoints.setText("Clear Breakpoints");
382
383 fActionClearDeletes.setShortcut(QKeySequence(tr("Alt+X")));
384 fActionClearDeletes.setText("Clear Deletes");
385
chudy@google.come504de02012-07-16 18:35:23 +0000386 fActionClose.setShortcuts(QKeySequence::Quit);
chudy@google.comc432f002012-07-10 13:19:25 +0000387 fActionClose.setText("Exit");
chudy@google.com902ebe52012-06-29 14:21:22 +0000388
chudy@google.come504de02012-07-16 18:35:23 +0000389 fActionCreateBreakpoint.setShortcut(QKeySequence(tr("B")));
390 fActionCreateBreakpoint.setText("Set Breakpoint");
391
392 fActionDelete.setShortcut(QKeySequence(tr("X")));
chudy@google.comc432f002012-07-10 13:19:25 +0000393 fActionDelete.setText("Delete Command");
chudy@google.com902ebe52012-06-29 14:21:22 +0000394
chudy@google.come504de02012-07-16 18:35:23 +0000395 fActionDirectory.setShortcut(QKeySequence(tr("Ctrl+D")));
396 fActionDirectory.setText("Directory");
chudy@google.com902ebe52012-06-29 14:21:22 +0000397
robertphillips@google.comd26c7062012-11-12 20:42:12 +0000398 QIcon profile;
399 profile.addFile(QString::fromUtf8(":/images/Ico/reload.png"), QSize(),
400 QIcon::Normal, QIcon::Off);
401 fActionProfile.setIcon(profile);
402 fActionProfile.setText("Profile");
403
chudy@google.comc432f002012-07-10 13:19:25 +0000404 QIcon inspector;
chudy@google.come504de02012-07-16 18:35:23 +0000405 inspector.addFile(QString::fromUtf8(":/images/Ico/inspector.png"),
chudy@google.comc432f002012-07-10 13:19:25 +0000406 QSize(), QIcon::Normal, QIcon::Off);
chudy@google.come504de02012-07-16 18:35:23 +0000407 fActionInspector.setShortcut(QKeySequence(tr("Ctrl+I")));
chudy@google.comc432f002012-07-10 13:19:25 +0000408 fActionInspector.setIcon(inspector);
chudy@google.come504de02012-07-16 18:35:23 +0000409 fActionInspector.setText("Inspector");
chudy@google.com902ebe52012-06-29 14:21:22 +0000410
chudy@google.comc432f002012-07-10 13:19:25 +0000411 QIcon play;
chudy@google.come504de02012-07-16 18:35:23 +0000412 play.addFile(QString::fromUtf8(":/images/Ico/play.png"), QSize(),
chudy@google.comc432f002012-07-10 13:19:25 +0000413 QIcon::Normal, QIcon::Off);
chudy@google.come504de02012-07-16 18:35:23 +0000414 fActionPlay.setShortcut(QKeySequence(tr("Ctrl+P")));
chudy@google.comc432f002012-07-10 13:19:25 +0000415 fActionPlay.setIcon(play);
416 fActionPlay.setText("Play");
chudy@google.com902ebe52012-06-29 14:21:22 +0000417
chudy@google.come504de02012-07-16 18:35:23 +0000418 QIcon pause;
419 pause.addFile(QString::fromUtf8(":/images/Ico/pause.png"), QSize(),
chudy@google.comc432f002012-07-10 13:19:25 +0000420 QIcon::Normal, QIcon::Off);
chudy@google.come504de02012-07-16 18:35:23 +0000421 fActionPause.setShortcut(QKeySequence(tr("Space")));
422 fActionPause.setCheckable(true);
423 fActionPause.setIcon(pause);
424 fActionPause.setText("Pause");
425
chudy@google.comc432f002012-07-10 13:19:25 +0000426 QIcon rewind;
chudy@google.come504de02012-07-16 18:35:23 +0000427 rewind.addFile(QString::fromUtf8(":/images/Ico/rewind.png"), QSize(),
chudy@google.comc432f002012-07-10 13:19:25 +0000428 QIcon::Normal, QIcon::Off);
chudy@google.come504de02012-07-16 18:35:23 +0000429 fActionRewind.setShortcut(QKeySequence(tr("Ctrl+R")));
chudy@google.comc432f002012-07-10 13:19:25 +0000430 fActionRewind.setIcon(rewind);
431 fActionRewind.setText("Rewind");
chudy@google.com902ebe52012-06-29 14:21:22 +0000432
chudy@google.com0ab03392012-07-28 20:16:11 +0000433 fActionSave.setShortcut(QKeySequence::Save);
434 fActionSave.setText("Save");
435 fActionSave.setDisabled(true);
436 fActionSaveAs.setShortcut(QKeySequence::SaveAs);
437 fActionSaveAs.setText("Save As");
438 fActionSaveAs.setDisabled(true);
439
chudy@google.com7e4cfbf2012-07-17 15:40:51 +0000440 fActionShowDeletes.setShortcut(QKeySequence(tr("Ctrl+X")));
441 fActionShowDeletes.setText("Deleted Commands");
442
chudy@google.comc432f002012-07-10 13:19:25 +0000443 QIcon stepBack;
chudy@google.come504de02012-07-16 18:35:23 +0000444 stepBack.addFile(QString::fromUtf8(":/images/Ico/previous.png"), QSize(),
chudy@google.comc432f002012-07-10 13:19:25 +0000445 QIcon::Normal, QIcon::Off);
chudy@google.come504de02012-07-16 18:35:23 +0000446 fActionStepBack.setShortcut(QKeySequence(tr("[")));
chudy@google.comc432f002012-07-10 13:19:25 +0000447 fActionStepBack.setIcon(stepBack);
448 fActionStepBack.setText("Step Back");
chudy@google.com902ebe52012-06-29 14:21:22 +0000449
chudy@google.comc432f002012-07-10 13:19:25 +0000450 QIcon stepForward;
chudy@google.come504de02012-07-16 18:35:23 +0000451 stepForward.addFile(QString::fromUtf8(":/images/Ico/next.png"),
chudy@google.comc432f002012-07-10 13:19:25 +0000452 QSize(), QIcon::Normal, QIcon::Off);
chudy@google.come504de02012-07-16 18:35:23 +0000453 fActionStepForward.setShortcut(QKeySequence(tr("]")));
chudy@google.comc432f002012-07-10 13:19:25 +0000454 fActionStepForward.setIcon(stepForward);
455 fActionStepForward.setText("Step Forward");
456
chudy@google.coma1226312012-07-26 20:26:44 +0000457 fActionZoomIn.setShortcut(QKeySequence(tr("Ctrl+=")));
458 fActionZoomIn.setText("Zoom In");
459 fActionZoomOut.setShortcut(QKeySequence(tr("Ctrl+-")));
460 fActionZoomOut.setText("Zoom Out");
461
chudy@google.comc432f002012-07-10 13:19:25 +0000462 fListWidget.setItemDelegate(new SkListWidget(&fListWidget));
463 fListWidget.setObjectName(QString::fromUtf8("listWidget"));
464 fListWidget.setMaximumWidth(250);
465
466 fFilter.addItem("--Filter By Available Commands--");
467
468 fDirectoryWidget.setMaximumWidth(250);
469 fDirectoryWidget.setStyleSheet("QListWidget::Item {padding: 5px;}");
470
471 fCanvasWidget.setSizePolicy(QSizePolicy::Expanding,
chudy@google.com7dcae672012-07-09 20:26:53 +0000472 QSizePolicy::Expanding);
chudy@google.com902ebe52012-06-29 14:21:22 +0000473
chudy@google.comc432f002012-07-10 13:19:25 +0000474 fInspectorWidget.setSizePolicy(QSizePolicy::Expanding,
chudy@google.com7dcae672012-07-09 20:26:53 +0000475 QSizePolicy::Expanding);
chudy@google.comc432f002012-07-10 13:19:25 +0000476 fInspectorWidget.setMaximumHeight(300);
chudy@google.com902ebe52012-06-29 14:21:22 +0000477
chudy@google.comc432f002012-07-10 13:19:25 +0000478 fSettingsWidget.setSizePolicy(QSizePolicy::Expanding,
479 QSizePolicy::Expanding);
480 fSettingsWidget.setMaximumWidth(250);
chudy@google.com902ebe52012-06-29 14:21:22 +0000481
chudy@google.comc432f002012-07-10 13:19:25 +0000482 fLeftColumnLayout.setSpacing(6);
483 fLeftColumnLayout.addWidget(&fListWidget);
484 fLeftColumnLayout.addWidget(&fDirectoryWidget);
chudy@google.com902ebe52012-06-29 14:21:22 +0000485
chudy@google.comc432f002012-07-10 13:19:25 +0000486 fCanvasAndSettingsLayout.setSpacing(6);
487 fCanvasAndSettingsLayout.addWidget(&fCanvasWidget);
488 fCanvasAndSettingsLayout.addWidget(&fSettingsWidget);
chudy@google.com902ebe52012-06-29 14:21:22 +0000489
chudy@google.comc432f002012-07-10 13:19:25 +0000490 fMainAndRightColumnLayout.setSpacing(6);
491 fMainAndRightColumnLayout.addLayout(&fCanvasAndSettingsLayout);
492 fMainAndRightColumnLayout.addWidget(&fInspectorWidget);
chudy@google.com902ebe52012-06-29 14:21:22 +0000493
chudy@google.com2d537a12012-07-31 12:49:52 +0000494 fCentralWidget.setLayout(&fContainerLayout);
chudy@google.comc432f002012-07-10 13:19:25 +0000495 fContainerLayout.setSpacing(6);
496 fContainerLayout.setContentsMargins(11, 11, 11, 11);
497 fContainerLayout.addLayout(&fLeftColumnLayout);
498 fContainerLayout.addLayout(&fMainAndRightColumnLayout);
499
500 SkDebuggerGUI->setCentralWidget(&fCentralWidget);
501 SkDebuggerGUI->setStatusBar(&fStatusBar);
502
chudy@google.come504de02012-07-16 18:35:23 +0000503 fToolBar.setIconSize(QSize(32, 32));
chudy@google.comc432f002012-07-10 13:19:25 +0000504 fToolBar.setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
505 SkDebuggerGUI->addToolBar(Qt::TopToolBarArea, &fToolBar);
chudy@google.com902ebe52012-06-29 14:21:22 +0000506
chudy@google.com0ab03392012-07-28 20:16:11 +0000507 fSpacer.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
chudy@google.com902ebe52012-06-29 14:21:22 +0000508
chudy@google.comc432f002012-07-10 13:19:25 +0000509 fToolBar.addAction(&fActionRewind);
510 fToolBar.addAction(&fActionStepBack);
chudy@google.come504de02012-07-16 18:35:23 +0000511 fToolBar.addAction(&fActionPause);
chudy@google.comc432f002012-07-10 13:19:25 +0000512 fToolBar.addAction(&fActionStepForward);
513 fToolBar.addAction(&fActionPlay);
514 fToolBar.addSeparator();
chudy@google.come504de02012-07-16 18:35:23 +0000515 fToolBar.addAction(&fActionInspector);
chudy@google.comc432f002012-07-10 13:19:25 +0000516 fToolBar.addSeparator();
robertphillips@google.comd26c7062012-11-12 20:42:12 +0000517 fToolBar.addAction(&fActionProfile);
518
519 fToolBar.addSeparator();
chudy@google.com0ab03392012-07-28 20:16:11 +0000520 fToolBar.addWidget(&fSpacer);
chudy@google.comc432f002012-07-10 13:19:25 +0000521 fToolBar.addWidget(&fFilter);
522 fToolBar.addAction(&fActionCancel);
chudy@google.com902ebe52012-06-29 14:21:22 +0000523
524 // TODO(chudy): Remove static call.
525 fDirectoryWidgetActive = false;
robertphillips@google.comd26c7062012-11-12 20:42:12 +0000526 fPath = "";
527 fFileName = "";
chudy@google.com902ebe52012-06-29 14:21:22 +0000528 setupDirectoryWidget();
529 fDirectoryWidgetActive = true;
530
chudy@google.com902ebe52012-06-29 14:21:22 +0000531 // Menu Bar
chudy@google.comc432f002012-07-10 13:19:25 +0000532 fMenuFile.setTitle("File");
533 fMenuFile.addAction(&fActionOpen);
chudy@google.com0ab03392012-07-28 20:16:11 +0000534 fMenuFile.addAction(&fActionSave);
535 fMenuFile.addAction(&fActionSaveAs);
chudy@google.comc432f002012-07-10 13:19:25 +0000536 fMenuFile.addAction(&fActionClose);
chudy@google.come504de02012-07-16 18:35:23 +0000537
538 fMenuEdit.setTitle("Edit");
539 fMenuEdit.addAction(&fActionDelete);
chudy@google.com7e4cfbf2012-07-17 15:40:51 +0000540 fMenuEdit.addAction(&fActionClearDeletes);
541 fMenuEdit.addSeparator();
chudy@google.come504de02012-07-16 18:35:23 +0000542 fMenuEdit.addAction(&fActionCreateBreakpoint);
chudy@google.com7e4cfbf2012-07-17 15:40:51 +0000543 fMenuEdit.addAction(&fActionClearBreakpoints);
chudy@google.come504de02012-07-16 18:35:23 +0000544
chudy@google.comc432f002012-07-10 13:19:25 +0000545 fMenuNavigate.setTitle("Navigate");
chudy@google.come504de02012-07-16 18:35:23 +0000546 fMenuNavigate.addAction(&fActionRewind);
547 fMenuNavigate.addAction(&fActionStepBack);
548 fMenuNavigate.addAction(&fActionStepForward);
549 fMenuNavigate.addAction(&fActionPlay);
550 fMenuNavigate.addAction(&fActionPause);
chudy@google.comc432f002012-07-10 13:19:25 +0000551 fMenuNavigate.addAction(&fActionGoToLine);
chudy@google.come504de02012-07-16 18:35:23 +0000552
chudy@google.comc432f002012-07-10 13:19:25 +0000553 fMenuView.setTitle("View");
chudy@google.come504de02012-07-16 18:35:23 +0000554 fMenuView.addAction(&fActionBreakpoint);
chudy@google.com7e4cfbf2012-07-17 15:40:51 +0000555 fMenuView.addAction(&fActionShowDeletes);
chudy@google.coma1226312012-07-26 20:26:44 +0000556 fMenuView.addAction(&fActionZoomIn);
557 fMenuView.addAction(&fActionZoomOut);
chudy@google.come504de02012-07-16 18:35:23 +0000558
559 fMenuWindows.setTitle("Window");
560 fMenuWindows.addAction(&fActionInspector);
561 fMenuWindows.addAction(&fActionDirectory);
chudy@google.comc432f002012-07-10 13:19:25 +0000562
563 fActionGoToLine.setText("Go to Line...");
564 fActionGoToLine.setDisabled(true);
565 fMenuBar.addAction(fMenuFile.menuAction());
chudy@google.come504de02012-07-16 18:35:23 +0000566 fMenuBar.addAction(fMenuEdit.menuAction());
chudy@google.comc432f002012-07-10 13:19:25 +0000567 fMenuBar.addAction(fMenuView.menuAction());
568 fMenuBar.addAction(fMenuNavigate.menuAction());
chudy@google.come504de02012-07-16 18:35:23 +0000569 fMenuBar.addAction(fMenuWindows.menuAction());
chudy@google.com902ebe52012-06-29 14:21:22 +0000570
chudy@google.com7dcae672012-07-09 20:26:53 +0000571 fPause = false;
572
chudy@google.comc432f002012-07-10 13:19:25 +0000573 SkDebuggerGUI->setMenuBar(&fMenuBar);
chudy@google.com902ebe52012-06-29 14:21:22 +0000574 QMetaObject::connectSlotsByName(SkDebuggerGUI);
575}
576
577void SkDebuggerGUI::setupDirectoryWidget() {
chudy@google.comc432f002012-07-10 13:19:25 +0000578 QDir dir(fPath);
chudy@google.com902ebe52012-06-29 14:21:22 +0000579 QRegExp r(".skp");
chudy@google.comc432f002012-07-10 13:19:25 +0000580 fDirectoryWidget.clear();
581 const QStringList files = dir.entryList();
chudy@google.com902ebe52012-06-29 14:21:22 +0000582 foreach (QString f, files) {
chudy@google.com7dcae672012-07-09 20:26:53 +0000583 if (f.contains(r))
chudy@google.comc432f002012-07-10 13:19:25 +0000584 fDirectoryWidget.addItem(f);
chudy@google.com902ebe52012-06-29 14:21:22 +0000585 }
586}
587
robertphillips@google.comd26c7062012-11-12 20:42:12 +0000588void SkDebuggerGUI::loadPicture(const SkString& fileName) {
589 fFileName = fileName;
chudy@google.comd3058f52012-07-19 13:41:27 +0000590 fLoading = true;
robertphillips@google.comd26c7062012-11-12 20:42:12 +0000591 SkStream* stream = SkNEW_ARGS(SkFILEStream, (fileName.c_str()));
scroggo@google.comb4467e62012-11-06 23:10:09 +0000592 SkPicture* picture = SkNEW_ARGS(SkPicture, (stream, NULL, &SkImageDecoder::DecodeStream));
chudy@google.com686e6802012-08-14 16:00:32 +0000593 fCanvasWidget.resetWidgetTransform();
chudy@google.com607357f2012-08-07 16:12:23 +0000594 fDebugger.loadPicture(picture);
chudy@google.com4c7962e2012-08-14 19:38:31 +0000595
chudy@google.com607357f2012-08-07 16:12:23 +0000596 SkSafeUnref(stream);
597 SkSafeUnref(picture);
598
chudy@google.com97cee972012-08-07 20:41:37 +0000599 // Will this automatically clear out due to nature of refcnt?
600 SkTDArray<SkString*>* commands = fDebugger.getDrawCommands();
chudy@google.com607357f2012-08-07 16:12:23 +0000601
chudy@google.com7dcae672012-07-09 20:26:53 +0000602 /* fDebugCanvas is reinitialized every load picture. Need it to retain value
chudy@google.com607357f2012-08-07 16:12:23 +0000603 * of the visibility filter.
604 * TODO(chudy): This should be deprecated since fDebugger is not
605 * recreated.
606 * */
607 fDebugger.highlightCurrentCommand(fSettingsWidget.getVisibilityButton()->isChecked());
608
chudy@google.com97cee972012-08-07 20:41:37 +0000609 setupListWidget(commands);
610 setupComboBox(commands);
chudy@google.com7e4cfbf2012-07-17 15:40:51 +0000611 fInspectorWidget.setDisabled(false);
chudy@google.come606d6e2012-07-12 14:31:25 +0000612 fSettingsWidget.setDisabled(false);
chudy@google.comd3058f52012-07-19 13:41:27 +0000613 fMenuEdit.setDisabled(false);
614 fMenuNavigate.setDisabled(false);
615 fMenuView.setDisabled(false);
chudy@google.com0ab03392012-07-28 20:16:11 +0000616 fActionSave.setDisabled(false);
617 fActionSaveAs.setDisabled(false);
chudy@google.comd3058f52012-07-19 13:41:27 +0000618 fLoading = false;
619 actionPlay();
chudy@google.com902ebe52012-06-29 14:21:22 +0000620}
621
chudy@google.com97cee972012-08-07 20:41:37 +0000622void SkDebuggerGUI::setupListWidget(SkTDArray<SkString*>* command) {
chudy@google.comc432f002012-07-10 13:19:25 +0000623 fListWidget.clear();
chudy@google.com902ebe52012-06-29 14:21:22 +0000624 int counter = 0;
robertphillips@google.com30d35f22012-11-06 16:45:36 +0000625 int indent = 0;
chudy@google.com97cee972012-08-07 20:41:37 +0000626 for (int i = 0; i < command->count(); i++) {
chudy@google.com902ebe52012-06-29 14:21:22 +0000627 QListWidgetItem *item = new QListWidgetItem();
chudy@google.com97cee972012-08-07 20:41:37 +0000628 item->setData(Qt::DisplayRole, (*command)[i]->c_str());
chudy@google.com902ebe52012-06-29 14:21:22 +0000629 item->setData(Qt::UserRole + 1, counter++);
robertphillips@google.com30d35f22012-11-06 16:45:36 +0000630
631 if (0 == strcmp("Restore", (*command)[i]->c_str())) {
632 indent -= 10;
633 }
634
635 item->setData(Qt::UserRole + 3, indent);
636
637 if (0 == strcmp("Save", (*command)[i]->c_str()) ||
638 0 == strcmp("Save Layer", (*command)[i]->c_str())) {
639 indent += 10;
640 }
641
robertphillips@google.comd26c7062012-11-12 20:42:12 +0000642 item->setData(Qt::UserRole + 4, -1.0);
643
chudy@google.comc432f002012-07-10 13:19:25 +0000644 fListWidget.addItem(item);
chudy@google.com902ebe52012-06-29 14:21:22 +0000645 }
646}
647
chudy@google.com97cee972012-08-07 20:41:37 +0000648void SkDebuggerGUI::setupComboBox(SkTDArray<SkString*>* command) {
chudy@google.comc432f002012-07-10 13:19:25 +0000649 fFilter.clear();
650 fFilter.addItem("--Filter By Available Commands--");
chudy@google.com902ebe52012-06-29 14:21:22 +0000651
652 std::map<std::string, int> map;
chudy@google.com97cee972012-08-07 20:41:37 +0000653 for (int i = 0; i < command->count(); i++) {
654 map[(*command)[i]->c_str()]++;
chudy@google.com902ebe52012-06-29 14:21:22 +0000655 }
656
657 QString overview;
chudy@google.com607357f2012-08-07 16:12:23 +0000658 int counter = 0;
chudy@google.com7dcae672012-07-09 20:26:53 +0000659 for (std::map<std::string, int>::iterator it = map.begin(); it != map.end();
660 ++it) {
chudy@google.com902ebe52012-06-29 14:21:22 +0000661 overview.append((it->first).c_str());
662 overview.append(": ");
663 overview.append(QString::number(it->second));
664 overview.append("<br/>");
chudy@google.com7dcae672012-07-09 20:26:53 +0000665 counter += it->second;
chudy@google.comc432f002012-07-10 13:19:25 +0000666 fFilter.addItem((it->first).c_str());
chudy@google.com902ebe52012-06-29 14:21:22 +0000667 }
668 QString total;
669 total.append("Total Draw Commands: ");
670 total.append(QString::number(counter));
671 total.append("<br/>");
672 overview.insert(0, total);
673
674 overview.append("<br/>");
chudy@google.com607357f2012-08-07 16:12:23 +0000675 overview.append("SkPicture Width: ");
chudy@google.com902ebe52012-06-29 14:21:22 +0000676 // NOTE(chudy): This is where we can pull out the SkPictures width.
chudy@google.com607357f2012-08-07 16:12:23 +0000677 overview.append(QString::number(fDebugger.pictureWidth()));
chudy@google.com902ebe52012-06-29 14:21:22 +0000678 overview.append("px<br/>");
chudy@google.com607357f2012-08-07 16:12:23 +0000679 overview.append("SkPicture Height: ");
680 overview.append(QString::number(fDebugger.pictureHeight()));
chudy@google.com902ebe52012-06-29 14:21:22 +0000681 overview.append("px");
chudy@google.com6bd109a2012-08-14 19:34:13 +0000682 fInspectorWidget.setText(overview, SkInspectorWidget::kOverview_TabType);
chudy@google.com902ebe52012-06-29 14:21:22 +0000683
684 // NOTE(chudy): Makes first item unselectable.
chudy@google.com7dcae672012-07-09 20:26:53 +0000685 QStandardItemModel* model = qobject_cast<QStandardItemModel*>(
chudy@google.comc432f002012-07-10 13:19:25 +0000686 fFilter.model());
687 QModelIndex firstIndex = model->index(0, fFilter.modelColumn(),
688 fFilter.rootModelIndex());
chudy@google.com902ebe52012-06-29 14:21:22 +0000689 QStandardItem* firstItem = model->itemFromIndex(firstIndex);
690 firstItem->setSelectable(false);
691}