1 #include "mainwindow.h"
4 #include "apitracecall.h"
5 #include "apicalldelegate.h"
6 #include "apitracemodel.h"
7 #include "apitracefilter.h"
12 #include <QFileDialog>
14 #include <QMessageBox>
20 MainWindow::MainWindow()
26 m_trace = new ApiTrace();
28 m_model = new ApiTraceModel();
29 m_model->setApiTrace(m_trace);
30 m_proxyModel = new ApiTraceFilter();
31 m_proxyModel->setSourceModel(m_model);
32 m_ui.callView->setModel(m_proxyModel);
33 m_ui.callView->setItemDelegate(new ApiCallDelegate);
34 for (int column = 0; column < m_model->columnCount(); ++column)
35 m_ui.callView->resizeColumnToContents(column);
37 QToolBar *toolBar = addToolBar(tr("Navigation"));
38 m_filterEdit = new QLineEdit(toolBar);
39 toolBar->addWidget(m_filterEdit);
41 m_ui.detailsDock->hide();
43 connect(m_ui.actionOpen, SIGNAL(triggered()),
44 this, SLOT(openTrace()));
45 connect(m_ui.actionQuit, SIGNAL(triggered()),
48 connect(m_ui.actionReplay, SIGNAL(triggered()),
49 this, SLOT(replayStart()));
50 connect(m_ui.actionStop, SIGNAL(triggered()),
51 this, SLOT(replayStop()));
53 connect(m_ui.callView, SIGNAL(activated(const QModelIndex &)),
54 this, SLOT(callItemSelected(const QModelIndex &)));
55 connect(m_filterEdit, SIGNAL(returnPressed()),
56 this, SLOT(filterTrace()));
59 void MainWindow::openTrace()
62 QFileDialog::getOpenFileName(
66 tr("Trace Files (*.trace)"));
68 qDebug()<< "File name : " <<fileName;
70 newTraceFile(fileName);
73 void MainWindow::loadTrace(const QString &fileName)
75 if (!QFile::exists(fileName)) {
76 QMessageBox::warning(this, tr("File Missing"),
77 tr("File '%1' doesn't exist.").arg(fileName));
80 qDebug()<< "Loading : " <<fileName;
82 newTraceFile(fileName);
85 void MainWindow::callItemSelected(const QModelIndex &index)
87 ApiTraceCall *call = index.data().value<ApiTraceCall*>();
89 m_ui.detailsWebView->setHtml(call->toHtml());
90 m_ui.detailsDock->show();
92 m_ui.detailsDock->hide();
96 void MainWindow::filterTrace()
98 m_proxyModel->setFilterString(m_filterEdit->text());
101 void MainWindow::replayStart()
103 if (!m_replayProcess) {
105 QString format = QLatin1String("%1;");
107 QString format = QLatin1String("%1:");
109 QString buildPath = format.arg(BUILD_DIR);
110 QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
111 env.insert("PATH", buildPath + env.value("PATH"));
113 qputenv("PATH", env.value("PATH").toLatin1());
115 m_replayProcess = new QProcess(this);
116 m_replayProcess->setProcessEnvironment(env);
118 connect(m_replayProcess, SIGNAL(finished(int, QProcess::ExitStatus)),
119 this, SLOT(replayFinished()));
120 connect(m_replayProcess, SIGNAL(error(QProcess::ProcessError)),
121 this, SLOT(replayError(QProcess::ProcessError)));
124 if (m_traceFileName.isEmpty())
127 QStringList arguments;
128 arguments << m_traceFileName;
130 m_replayProcess->start(QLatin1String("glretrace"),
133 m_ui.actionStop->setEnabled(true);
134 m_ui.actionReplay->setEnabled(false);
137 void MainWindow::replayStop()
139 if (m_replayProcess) {
140 m_replayProcess->kill();
142 m_ui.actionStop->setEnabled(false);
143 m_ui.actionReplay->setEnabled(true);
147 void MainWindow::newTraceFile(const QString &fileName)
149 m_traceFileName = fileName;
150 m_trace->setFileName(fileName);
152 if (m_traceFileName.isEmpty()) {
153 m_ui.actionReplay->setEnabled(false);
155 m_ui.actionReplay->setEnabled(true);
159 void MainWindow::replayFinished()
161 m_ui.actionStop->setEnabled(false);
162 m_ui.actionReplay->setEnabled(true);
164 QString output = m_replayProcess->readAllStandardOutput();
167 qDebug()<<"Process finished = ";
168 qDebug()<<"\terr = "<<m_replayProcess->readAllStandardError();
169 qDebug()<<"\tout = "<<output;
172 if (output.length() < 80) {
173 statusBar()->showMessage(output);
177 void MainWindow::replayError(QProcess::ProcessError err)
179 m_ui.actionStop->setEnabled(false);
180 m_ui.actionReplay->setEnabled(true);
182 qDebug()<<"Process error = "<<err;
183 qDebug()<<"\terr = "<<m_replayProcess->readAllStandardError();
184 qDebug()<<"\tout = "<<m_replayProcess->readAllStandardOutput();
185 QMessageBox::warning(
186 this, tr("Replay Failed"),
187 tr("Couldn't execute the replay file '%1'").arg(m_traceFileName));
190 #include "mainwindow.moc"