X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=gui%2Fmainwindow.cpp;h=50f7d9124a9f4dac6184c4cf42ea14f38e89d35a;hb=a4c698dfae954d04b459a9b9543d0404a4c80660;hp=7be98e21ac427819cfe550fd505698ecc3b7f41c;hpb=2fa1bdedd9b609a72ef70c557b04e928bc000ad7;p=apitrace diff --git a/gui/mainwindow.cpp b/gui/mainwindow.cpp index 7be98e2..50f7d91 100644 --- a/gui/mainwindow.cpp +++ b/gui/mainwindow.cpp @@ -14,6 +14,8 @@ #include "shaderssourcewidget.h" #include "tracedialog.h" #include "traceprocess.h" +#include "trimprocess.h" +#include "thumbnail.h" #include "ui_retracerdialog.h" #include "vertexdatainterpreter.h" @@ -148,6 +150,10 @@ void MainWindow::callItemSelected(const QModelIndex &index) } } +void MainWindow::callItemActivated(const QModelIndex &index) { + lookupState(); +} + void MainWindow::replayStart() { if (m_trace->isSaving()) { @@ -182,6 +188,7 @@ void MainWindow::replayStop() m_ui.actionStop->setEnabled(false); m_ui.actionReplay->setEnabled(true); m_ui.actionLookupState->setEnabled(true); + m_ui.actionShowThumbnails->setEnabled(true); } void MainWindow::newTraceFile(const QString &fileName) @@ -194,38 +201,34 @@ void MainWindow::newTraceFile(const QString &fileName) if (fileName.isEmpty()) { m_ui.actionReplay->setEnabled(false); m_ui.actionLookupState->setEnabled(false); + m_ui.actionShowThumbnails->setEnabled(false); setWindowTitle(tr("QApiTrace")); } else { QFileInfo info(fileName); m_ui.actionReplay->setEnabled(true); m_ui.actionLookupState->setEnabled(true); + m_ui.actionShowThumbnails->setEnabled(true); + m_ui.actionTrim->setEnabled(true); setWindowTitle( tr("QApiTrace - %1").arg(info.fileName())); } - - // force initial capture of thumbnails - replayTrace(false, true); } -void MainWindow::replayFinished(const QString &output) +void MainWindow::replayFinished(const QString &message) { m_ui.actionStop->setEnabled(false); m_ui.actionReplay->setEnabled(true); m_ui.actionLookupState->setEnabled(true); + m_ui.actionShowThumbnails->setEnabled(true); m_progressBar->hide(); - if (output.length() < 80) { - statusBar()->showMessage(output); - } + statusBar()->showMessage(message, 2000); m_stateEvent = 0; m_ui.actionShowErrorsDock->setEnabled(m_trace->hasErrors()); m_ui.errorsDock->setVisible(m_trace->hasErrors()); if (!m_trace->hasErrors()) { m_ui.errorsTreeWidget->clear(); } - - statusBar()->showMessage( - tr("Replaying finished!"), 2000); } void MainWindow::replayError(const QString &message) @@ -233,6 +236,7 @@ void MainWindow::replayError(const QString &message) m_ui.actionStop->setEnabled(false); m_ui.actionReplay->setEnabled(true); m_ui.actionLookupState->setEnabled(true); + m_ui.actionShowThumbnails->setEnabled(true); m_stateEvent = 0; m_nonDefaultsLookupEvent = 0; @@ -258,6 +262,7 @@ void MainWindow::finishedLoadingTrace() if (!m_trace) { return; } + m_api = m_trace->api(); QFileInfo info(m_trace->fileName()); statusBar()->showMessage( tr("Loaded %1").arg(info.fileName()), 3000); @@ -317,6 +322,25 @@ void MainWindow::replayTrace(bool dumpState, bool dumpThumbnails) } } +void MainWindow::trimEvent() +{ + + int trimIndex; + if (m_trimEvent->type() == ApiTraceEvent::Call) { + ApiTraceCall *call = static_cast(m_trimEvent); + trimIndex = call->index(); + } else if (m_trimEvent->type() == ApiTraceEvent::Frame) { + ApiTraceFrame *frame = static_cast(m_trimEvent); + const QList frames = m_trace->frames(); + trimIndex = frame->lastCallIndex(); + } + + m_trimProcess->setTracePath(m_trace->fileName()); + m_trimProcess->setTrimIndex(trimIndex); + + m_trimProcess->start(); +} + void MainWindow::lookupState() { if (!m_selectedEvent) { @@ -337,6 +361,23 @@ void MainWindow::lookupState() replayTrace(true, false); } +void MainWindow::showThumbnails() +{ + replayTrace(false, true); +} + +void MainWindow::trim() +{ + if (!m_selectedEvent) { + QMessageBox::warning( + this, tr("Unknown Event"), + tr("To trim select a frame or an event in the event list.")); + return; + } + m_trimEvent = m_selectedEvent; + trimEvent(); +} + MainWindow::~MainWindow() { delete m_trace; @@ -543,7 +584,7 @@ void MainWindow::fillStateForFrame() if (textures.isEmpty() && fbos.isEmpty()) { m_ui.surfacesTab->setDisabled(false); } else { - m_ui.surfacesTreeWidget->setIconSize(QSize(64, 64)); + m_ui.surfacesTreeWidget->setIconSize(QSize(THUMBNAIL_SIZE, THUMBNAIL_SIZE)); if (!textures.isEmpty()) { QTreeWidgetItem *textureItem = new QTreeWidgetItem(m_ui.surfacesTreeWidget); @@ -584,12 +625,9 @@ void MainWindow::fillStateForFrame() void MainWindow::showSettings() { SettingsDialog dialog; - dialog.setAPI(m_api); dialog.setFilterModel(m_proxyModel); dialog.exec(); - - m_api = dialog.getAPI(); } void MainWindow::openHelp(const QUrl &url) @@ -718,6 +756,7 @@ void MainWindow::initObjects() m_searchWidget->hide(); m_traceProcess = new TraceProcess(this); + m_trimProcess = new TrimProcess(this); } void MainWindow::initConnections() @@ -788,11 +827,17 @@ void MainWindow::initConnections() this, SLOT(replayStop())); connect(m_ui.actionLookupState, SIGNAL(triggered()), this, SLOT(lookupState())); + connect(m_ui.actionTrim, SIGNAL(triggered()), + this, SLOT(trim())); + connect(m_ui.actionShowThumbnails, SIGNAL(triggered()), + this, SLOT(showThumbnails())); connect(m_ui.actionOptions, SIGNAL(triggered()), this, SLOT(showSettings())); connect(m_ui.callView->selectionModel(), SIGNAL(currentChanged(const QModelIndex &, const QModelIndex &)), this, SLOT(callItemSelected(const QModelIndex &))); + connect(m_ui.callView, SIGNAL(doubleClicked(const QModelIndex &)), + this, SLOT(callItemActivated(const QModelIndex &))); connect(m_ui.callView, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(customContextMenuRequested(QPoint))); @@ -824,6 +869,11 @@ void MainWindow::initConnections() connect(m_traceProcess, SIGNAL(error(const QString&)), SLOT(traceError(const QString&))); + connect(m_trimProcess, SIGNAL(trimmedFile(const QString&)), + SLOT(createdTrim(const QString&))); + connect(m_trimProcess, SIGNAL(error(const QString&)), + SLOT(trimError(const QString&))); + connect(m_ui.errorsDock, SIGNAL(visibilityChanged(bool)), m_ui.actionShowErrorsDock, SLOT(setChecked(bool))); connect(m_ui.actionShowErrorsDock, SIGNAL(triggered(bool)), @@ -848,6 +898,7 @@ void MainWindow::replayStateFound(ApiTraceState *state) void MainWindow::replayThumbnailsFound(const QList &thumbnails) { + m_ui.callView->setUniformRowHeights(false); m_trace->bindThumbnailsToFrames(thumbnails); } @@ -876,6 +927,21 @@ void MainWindow::traceError(const QString &msg) msg); } +void MainWindow::createdTrim(const QString &path) +{ + qDebug()<<"Done trimming "<hide();