From fd638e5ce5a8145b6aa2a6b9b14bfefcbdbc96ed Mon Sep 17 00:00:00 2001 From: Zack Rusin Date: Mon, 20 Jun 2011 19:46:17 -0400 Subject: [PATCH] Allow saving of surface snapshots to png's. idea from Terry Hendrix II --- gui/mainwindow.cpp | 60 +++++++++++++++++++++++++++++++++++++++++++++- gui/mainwindow.h | 1 + 2 files changed, 60 insertions(+), 1 deletion(-) diff --git a/gui/mainwindow.cpp b/gui/mainwindow.cpp index 183ba40..057168b 100644 --- a/gui/mainwindow.cpp +++ b/gui/mainwindow.cpp @@ -562,12 +562,17 @@ void MainWindow::showSurfacesMenu(const QPoint &pos) return; QMenu menu(tr("Surfaces"), this); - //add needed actions + QAction *act = menu.addAction(tr("View Image")); act->setStatusTip(tr("View the currently selected surface")); connect(act, SIGNAL(triggered()), SLOT(showSelectedSurface())); + act = menu.addAction(tr("Save Image")); + act->setStatusTip(tr("Save the currently selected surface")); + connect(act, SIGNAL(triggered()), + SLOT(saveSelectedSurface())); + menu.exec(tree->viewport()->mapToGlobal(pos)); } @@ -1097,4 +1102,57 @@ ApiTraceCall * MainWindow::currentCall() const return NULL; } +void MainWindow::saveSelectedSurface() +{ + QTreeWidgetItem *item = + m_ui.surfacesTreeWidget->currentItem(); + + if (!item || !m_trace) + return; + + QVariant var = item->data(0, Qt::UserRole); + QImage img = var.value(); + + QString imageIndex; + if (currentCall()) { + imageIndex = tr("_call_%1") + .arg(currentCall()->index()); + } else if (currentFrame()) { + ApiTraceCall *firstCall = currentFrame()->call(0); + if (firstCall) { + imageIndex = tr("_frame_%1") + .arg(firstCall->index()); + } else { + qDebug()<<"unknown frame number"; + imageIndex = tr("_frame_%1") + .arg(firstCall->index()); + } + } + + //which of the surfaces are we saving + QTreeWidgetItem *parent = item->parent(); + int parentIndex = + m_ui.surfacesTreeWidget->indexOfTopLevelItem(parent); + if (parentIndex < 0) { + parentIndex = 0; + } + int childIndex = 0; + if (parent) { + childIndex = parent->indexOfChild(item); + } else { + childIndex = m_ui.surfacesTreeWidget->indexOfTopLevelItem(item); + } + + + QString fileName = + tr("%1%2-%3_%4.png") + .arg(m_trace->fileName()) + .arg(imageIndex) + .arg(parentIndex) + .arg(childIndex); + //qDebug()<<"save "<showMessage( tr("Saved '%1'").arg(fileName), 5000); +} + #include "mainwindow.moc" diff --git a/gui/mainwindow.h b/gui/mainwindow.h index 97d6619..5cb2e76 100644 --- a/gui/mainwindow.h +++ b/gui/mainwindow.h @@ -52,6 +52,7 @@ private slots: void openHelp(const QUrl &url); void showSurfacesMenu(const QPoint &pos); void showSelectedSurface(); + void saveSelectedSurface(); void slotGoTo(); void slotJumpTo(int callNum); void createdTrace(const QString &path); -- 2.43.0