diff options
author | Robert Phillips <robertphillips@google.com> | 2017-09-06 17:17:44 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-09-06 23:12:28 +0000 |
commit | 276066b517b116afdd23bdbd72902469de2ceb01 (patch) | |
tree | 17a2c8e2a8d8a6f927318518e11fbc45c75c5ef8 | |
parent | 3de0e496b5215bcf4b26db2d69dc84376dfd68d2 (diff) |
[MDBViz] Switch from a QListView to a QTreeView for the ops
This lets us open & close groups and automates the hierarchy.
Change-Id: Ib6f0850a49b793d824fc25aa16be78e6a1a93d9e
Reviewed-on: https://skia-review.googlesource.com/43280
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
-rw-r--r-- | BUILD.gn | 1 | ||||
-rw-r--r-- | tools/mdbviz/Model.cpp | 18 | ||||
-rw-r--r-- | tools/mdbviz/Model.h | 5 | ||||
-rw-r--r-- | tools/mdbviz/mainwindow.cpp | 46 | ||||
-rw-r--r-- | tools/mdbviz/mainwindow.h | 7 |
5 files changed, 65 insertions, 12 deletions
@@ -1736,6 +1736,7 @@ if (skia_enable_tools) { ] include_dirs = [ "$skia_qt_path/include", + "$skia_qt_path/include/QtCore", "$skia_qt_path/include/QtWidgets", "tools", "tools/debugger", diff --git a/tools/mdbviz/Model.cpp b/tools/mdbviz/Model.cpp index a3f8e1ae87..c2929568f4 100644 --- a/tools/mdbviz/Model.cpp +++ b/tools/mdbviz/Model.cpp @@ -61,10 +61,25 @@ const char* Model::ErrorString(ErrorCode err) { return kStrings[(int)err]; } -const char* Model::getOpName(int index) { +const char* Model::getOpName(int index) const { return SkDrawCommand::GetCommandString(fOps[index]->getType()); } +bool Model::isHierarchyPush(int index) const { + SkDrawCommand::OpType type = fOps[index]->getType(); + + return SkDrawCommand::kSave_OpType == type || + SkDrawCommand::kSaveLayer_OpType == type || + SkDrawCommand::kBeginDrawPicture_OpType == type; +} + +bool Model::isHierarchyPop(int index) const { + SkDrawCommand::OpType type = fOps[index]->getType(); + + return SkDrawCommand::kRestore_OpType == type || + SkDrawCommand::kEndDrawPicture_OpType == type; +} + void Model::setCurOp(int curOp) { SkASSERT(curOp < fOps.count()); @@ -96,5 +111,6 @@ void Model::resetOpList() { for (int i = 0; i < fOps.count(); ++i) { delete fOps[i]; } + fOps.reset(); fCurOp = 0; } diff --git a/tools/mdbviz/Model.h b/tools/mdbviz/Model.h index 773c148c3f..8448701d18 100644 --- a/tools/mdbviz/Model.h +++ b/tools/mdbviz/Model.h @@ -35,7 +35,10 @@ public: int curOp() const { return fCurOp; } int numOps() const { return fOps.count(); } - const char* getOpName(int index); + const char* getOpName(int index) const; + + bool isHierarchyPush(int index) const; + bool isHierarchyPop(int index) const; // Get the bits visually representing the current rendering state void* getPixels() const { return fBM.getPixels(); } diff --git a/tools/mdbviz/mainwindow.cpp b/tools/mdbviz/mainwindow.cpp index c09ad091fa..5f5746b632 100644 --- a/tools/mdbviz/mainwindow.cpp +++ b/tools/mdbviz/mainwindow.cpp @@ -30,15 +30,33 @@ void MainWindow::openFile() { void MainWindow::setupOpListWidget() { fOpListWidget->clear(); + QTreeWidgetItem* item = nullptr; + SkTDArray<QTreeWidgetItem*> parents; + for (int i = 0; i < fModel.numOps(); i++) { - QListWidgetItem *item = new QListWidgetItem(); + item = new QTreeWidgetItem(); + + item->setText(0, QString::number(i)); + item->setData(0, Qt::UserRole, i); + item->setText(1, fModel.getOpName(i)); + + if (fModel.isHierarchyPop(i)) { + parents.pop(); + } - item->setData(Qt::DisplayRole, fModel.getOpName(i)); + if (parents.isEmpty()) { + fOpListWidget->addTopLevelItem(item); + } else { + parents.top()->addChild(item); + } - fOpListWidget->addItem(item); + if (fModel.isHierarchyPush(i)) { + *parents.push() = item; + } } - fOpListWidget->setCurrentRow(fModel.numOps()-1); + fOpListWidget->setCurrentItem(item); + fOpListWidget->expandToDepth(100); } void MainWindow::presentCurrentRenderState() { @@ -115,7 +133,8 @@ void MainWindow::createActions() { aboutAct->setStatusTip(tr("Show the application's About box")); } -void MainWindow::onCurrentRowChanged(int currentRow) { +void MainWindow::onCurrentItemChanged(QTreeWidgetItem* cur, QTreeWidgetItem* /* prev */) { + int currentRow = cur->data(0, Qt::UserRole).toInt(); fModel.setCurOp(currentRow); this->presentCurrentRenderState(); } @@ -131,14 +150,23 @@ void MainWindow::createDockWindows() { QDockWidget* opListDock = new QDockWidget("Ops", this); opListDock->setAllowedAreas(Qt::LeftDockWidgetArea); - fOpListWidget = new QListWidget(opListDock); + fOpListWidget = new QTreeWidget(opListDock); + + QTreeWidgetItem* headerItem = new QTreeWidgetItem; + headerItem->setText(0, "Index"); + headerItem->setText(1, "Op Name"); + fOpListWidget->setHeaderItem(headerItem); + + fOpListWidget->header()->setSectionResizeMode(0, QHeaderView::ResizeToContents); + fOpListWidget->header()->setSectionResizeMode(1, QHeaderView::ResizeToContents); opListDock->setWidget(fOpListWidget); this->addDockWidget(Qt::LeftDockWidgetArea, opListDock); fViewMenu->addAction(opListDock->toggleViewAction()); - connect(fOpListWidget, SIGNAL(currentRowChanged(int)), this, SLOT(onCurrentRowChanged(int))); + connect(fOpListWidget, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), + this, SLOT(onCurrentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*))); } // Main canvas Window @@ -148,6 +176,10 @@ void MainWindow::createDockWindows() { fImageLabel = new QLabel(mainCanvasDock); + fImage = QImage(1024, 1024, QImage::Format_RGBA8888); + fImage.fill(0); + fImageLabel->setPixmap(QPixmap::fromImage(fImage)); + mainCanvasDock->setWidget(fImageLabel); this->addDockWidget(Qt::RightDockWidgetArea, mainCanvasDock); diff --git a/tools/mdbviz/mainwindow.h b/tools/mdbviz/mainwindow.h index 59e7b98c38..9a7e9dbf09 100644 --- a/tools/mdbviz/mainwindow.h +++ b/tools/mdbviz/mainwindow.h @@ -14,8 +14,9 @@ #include "Model.h" class QLabel; -class QListWidget; class QMenu; +class QTreeWidget; +class QTreeWidgetItem; class MainWindow : public QMainWindow { @@ -27,7 +28,7 @@ public: private slots: void openFile(); void about(); - void onCurrentRowChanged(int currentRow); + void onCurrentItemChanged(QTreeWidgetItem* cur, QTreeWidgetItem* prev); private: void loadFile(const QString &fileName); @@ -45,7 +46,7 @@ private: QImage fImage; QLabel* fImageLabel; - QListWidget* fOpListWidget; + QTreeWidget* fOpListWidget; QMenu* fViewMenu; |