#include "apicalldelegate.h"
#include "apitracemodel.h"
#include "apitracefilter.h"
+#include "imageviewer.h"
#include "retracer.h"
#include "settingsdialog.h"
+#include "shaderssourcewidget.h"
#include "ui_retracerdialog.h"
#include "vertexdatainterpreter.h"
#include <QProgressBar>
#include <QToolBar>
#include <QUrl>
+#include <QVBoxLayout>
#include <QWebPage>
#include <QWebView>
m_ui.setupUi(this);
m_ui.stateTreeWidget->sortByColumn(0, Qt::AscendingOrder);
+ m_sourcesWidget = new ShadersSourceWidget(m_ui.shadersTab);
+ QVBoxLayout *layout = new QVBoxLayout;
+ layout->addWidget(m_sourcesWidget);
+ m_ui.shadersTab->setLayout(layout);
+
m_trace = new ApiTrace();
connect(m_trace, SIGNAL(startedLoadingTrace()),
this, SLOT(startedLoadingTrace()));
m_vdataInterpreter->setTypeFromString(
m_ui.vertexTypeCB->currentText());
+ m_imageViewer = new ImageViewer(this);
+
connect(m_ui.vertexInterpretButton, SIGNAL(clicked()),
m_vdataInterpreter, SLOT(interpretData()));
connect(m_ui.vertexTypeCB, SIGNAL(currentIndexChanged(const QString&)),
connect(m_filterEdit, SIGNAL(returnPressed()),
this, SLOT(filterTrace()));
+ m_ui.surfacesTreeWidget->setContextMenuPolicy(Qt::CustomContextMenu);
+ connect(m_ui.surfacesTreeWidget,
+ SIGNAL(customContextMenuRequested(const QPoint &)),
+ SLOT(showSurfacesMenu(const QPoint &)));
+ connect(m_ui.surfacesTreeWidget,
+ SIGNAL(itemDoubleClicked(QTreeWidgetItem *, int)),
+ SLOT(showSelectedSurface()));
+
m_ui.detailsWebView->page()->setLinkDelegationPolicy(
QWebPage::DelegateExternalLinks);
connect(m_ui.detailsWebView, SIGNAL(linkClicked(const QUrl&)),
if (m_retracer->captureState()) {
bool ok = false;
QVariantMap parsedJson = m_jsonParser->parse(output, &ok).toMap();
- parseState(parsedJson[QLatin1String("parameters")].toMap());
+ parseState(parsedJson);
} else if (output.length() < 80) {
statusBar()->showMessage(output);
}
delete m_jsonParser;
}
-void MainWindow::parseState(const QVariantMap ¶ms)
+void MainWindow::parseState(const QVariantMap &parsedJson)
{
- QVariantMap::const_iterator itr;
-
- m_stateEvent->setState(params);
+ m_stateEvent->setState(ApiTraceState(parsedJson));
m_model->stateSetOnEvent(m_stateEvent);
if (m_selectedEvent == m_stateEvent) {
fillStateForFrame();
if (!m_selectedEvent || m_selectedEvent->state().isEmpty())
return;
+ const ApiTraceState &state = m_selectedEvent->state();
m_ui.stateTreeWidget->clear();
- params = m_selectedEvent->state();
+ params = state.parameters();
QList<QTreeWidgetItem *> items;
for (itr = params.constBegin(); itr != params.constEnd(); ++itr) {
QString key = itr.key();
items.append(new QTreeWidgetItem((QTreeWidget*)0, lst));
}
m_ui.stateTreeWidget->insertTopLevelItems(0, items);
+
+ QStringList shaderSources = state.shaderSources();
+ if (shaderSources.isEmpty()) {
+ m_sourcesWidget->setShaders(shaderSources);
+ } else {
+ m_sourcesWidget->setShaders(shaderSources);
+ }
+
+ const QList<ApiTexture> &textures =
+ state.textures();
+
+ m_ui.surfacesTreeWidget->clear();
+ if (textures.isEmpty()) {
+ m_ui.surfacesTab->setDisabled(false);
+ } else {
+ QTreeWidgetItem *textureItem =
+ new QTreeWidgetItem(m_ui.surfacesTreeWidget);
+ m_ui.surfacesTreeWidget->setIconSize(QSize(64, 64));
+ textureItem->setText(0, tr("Textures"));
+ for (int i = 0; i < textures.count(); ++i) {
+ const ApiTexture &texture =
+ textures[i];
+ QIcon icon(QPixmap::fromImage(texture.thumb()));
+ QTreeWidgetItem *item = new QTreeWidgetItem(textureItem);
+ item->setIcon(0, icon);
+ int width = texture.size().width();
+ int height = texture.size().height();
+ QString descr =
+ QString::fromLatin1("%1, %2 x %3")
+ .arg(texture.target())
+ .arg(width)
+ .arg(height);
+ item->setText(1, descr);
+
+ item->setData(0, Qt::UserRole,
+ texture.image());
+ }
+ m_ui.surfacesTab->setEnabled(true);
+ }
m_ui.stateDock->show();
}
QDesktopServices::openUrl(url);
}
+void MainWindow::showSurfacesMenu(const QPoint &pos)
+{
+ QTreeWidget *tree = m_ui.surfacesTreeWidget;
+ QTreeWidgetItem *item = tree->itemAt(pos);
+ if (!item)
+ 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()));
+
+ menu.exec(tree->viewport()->mapToGlobal(pos));
+}
+
+void MainWindow::showSelectedSurface()
+{
+ QTreeWidgetItem *item =
+ m_ui.surfacesTreeWidget->currentItem();
+
+ if (!item)
+ return;
+
+ QVariant var = item->data(0, Qt::UserRole);
+ m_imageViewer->setImage(var.value<QImage>());
+ m_imageViewer->show();
+ m_imageViewer->raise();
+ m_imageViewer->activateWindow();
+}
+
#include "mainwindow.moc"