From 963102f78ba207fe9a8ca30f9f76e44832e7e569 Mon Sep 17 00:00:00 2001 From: Zack Rusin Date: Fri, 15 Apr 2011 01:45:05 -0400 Subject: [PATCH] Start working on trace editing start with a widget to edit call arguments. right now in a dock to make it easier to test, but eventually will be in a dialog --- gui/CMakeLists.txt | 4 +- gui/apitracecall.cpp | 5 + gui/apitracecall.h | 1 + gui/argumentseditor.cpp | 158 ++++++++++++++++++++++++++++ gui/argumentseditor.h | 35 ++++++ gui/mainwindow.cpp | 8 ++ gui/mainwindow.h | 3 + gui/qapitrace.qrc | 2 + gui/resources/edit-undo.png | Bin 0 -> 2020 bytes gui/resources/emblem-locked.png | Bin 0 -> 877 bytes gui/ui/argumentseditor.ui | 181 ++++++++++++++++++++++++++++++++ gui/ui/mainwindow.ui | 16 +++ 12 files changed, 412 insertions(+), 1 deletion(-) create mode 100644 gui/argumentseditor.cpp create mode 100644 gui/argumentseditor.h create mode 100644 gui/resources/edit-undo.png create mode 100644 gui/resources/emblem-locked.png create mode 100644 gui/ui/argumentseditor.ui diff --git a/gui/CMakeLists.txt b/gui/CMakeLists.txt index 6787043..fdc6c13 100644 --- a/gui/CMakeLists.txt +++ b/gui/CMakeLists.txt @@ -8,6 +8,7 @@ set(qapitrace_SRCS apitracecall.cpp apitracefilter.cpp apitracemodel.cpp + argumentseditor.cpp glsledit.cpp imageviewer.cpp jumpwidget.cpp @@ -28,6 +29,7 @@ qt4_automoc(${qapitrace_SRCS}) qt4_add_resources(qapitrace_SRCS qapitrace.qrc) set(qapitrace_UIS + ui/argumentseditor.ui ui/imageviewer.ui ui/jumpwidget.ui ui/mainwindow.ui @@ -42,7 +44,7 @@ QT4_WRAP_UI(qapitrace_UIS_H ${qapitrace_UIS}) #add_app_icon(qapitrace_SRCS ../icons/hi*-qapitrace.png) link_directories(${LINK_DIRECTORIES} ${QJSON_LIBRARY_DIRS}) -include_directories(${QT_INCLUDES} ${QJSON_INCLUDE_DIRS} ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/..) +include_directories(${QT_INCLUDES} ${QJSON_INCLUDE_DIRS} ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/..) add_definitions(-DBUILD_DIR="${CMAKE_CURRENT_BINARY_DIR}/..") diff --git a/gui/apitracecall.cpp b/gui/apitracecall.cpp index 2d28e16..a975728 100644 --- a/gui/apitracecall.cpp +++ b/gui/apitracecall.cpp @@ -532,4 +532,9 @@ QList ApiTraceState::framebuffers() const return m_framebuffers; } +QList ApiArray::values() const +{ + return m_array; +} + diff --git a/gui/apitracecall.h b/gui/apitracecall.h index db5d38d..355b8c8 100644 --- a/gui/apitracecall.h +++ b/gui/apitracecall.h @@ -91,6 +91,7 @@ public: QString toString() const; + QList values() const; private: void init(const Trace::Array *arr); private: diff --git a/gui/argumentseditor.cpp b/gui/argumentseditor.cpp new file mode 100644 index 0000000..8f2b85c --- /dev/null +++ b/gui/argumentseditor.cpp @@ -0,0 +1,158 @@ +#include "argumentseditor.h" + +#include +#include + +#include "apitracecall.h" + +ArgumentsEditor::ArgumentsEditor(QWidget *parent) + : QWidget(parent), + m_model(new QStandardItemModel()), + m_call(0) +{ + init(); +} + +ArgumentsEditor::~ArgumentsEditor() +{ +} + +void ArgumentsEditor::setCall(ApiTraceCall *call) +{ + if (m_call != call) { + m_call = call; + setupCall(); + } +} + +ApiTraceCall * ArgumentsEditor::call() const +{ + return m_call; +} + +void ArgumentsEditor::init() +{ + m_ui.setupUi(this); + + m_ui.argsTree->setModel(m_model); +#if 0 + const QItemEditorFactory *factory = QItemEditorFactory::defaultFactory(); + + QItemEditorCreatorBase *apiBitmaskCreator = + new QStandardItemEditorCreator(); + + factory->registerEditor(QMetaType::type("ApiBitmask") , + apiBitmaskCreator); + + QItemEditorFactory::setDefaultFactory(factory); +#endif +} + +void ArgumentsEditor::setupCall() +{ + m_model->clear(); + + QStringList headers; + headers.append(tr("Argument")); + headers.append(tr("Value")); + m_model->setColumnCount(2); + m_model->setHorizontalHeaderLabels(headers); + m_ui.argsTabWidget->removeTab( + m_ui.argsTabWidget->indexOf(m_ui.shaderTab)); + + if (!m_call) + return; + + m_ui.callLabel->setText(m_call->name); + QStandardItem *rootItem = m_model->invisibleRootItem(); + for (int i = 0; i < m_call->argNames.count(); ++i) { + QString argName = m_call->argNames[i]; + QVariant val = m_call->argValues[i]; + QStandardItem *nameItem = new QStandardItem(argName); + nameItem->setFlags(nameItem->flags() ^ Qt::ItemIsEditable); + QList topRow; + topRow.append(nameItem); + qDebug()<<"arg "<setFlags(col->flags() | Qt::ItemIsEditable); + col->setData(vals[i], Qt::DisplayRole); + row.append(idx); + row.append(col); + nameItem->appendRow(row); + }; + } + qDebug()<<"\tarray first = "<()) { + ApiPointer ptr = val.value(); + QStandardItem *item = new QStandardItem(); + item->setFlags(item->flags() ^ Qt::ItemIsEditable); + item->setText(ptr.toString()); + QIcon icon(":/resources/emblem-locked.png"); + item->setIcon(icon); + item->setToolTip(tr("Argument is read-only")); + topRow.append(item); + } else if (val.canConvert()) { + ApiBitmask mask = val.value(); + QStandardItem *item = new QStandardItem(); + item->setFlags(item->flags() ^ Qt::ItemIsEditable); + item->setText(mask.toString()); + QIcon icon(":/resources/emblem-locked.png"); + item->setIcon(icon); + item->setToolTip(tr("Argument is read-only")); + topRow.append(item); + } else if (val.canConvert()) { + ApiStruct str = val.value(); + QStandardItem *item = new QStandardItem(); + item->setFlags(item->flags() ^ Qt::ItemIsEditable); + item->setText(str.toString()); + QIcon icon(":/resources/emblem-locked.png"); + item->setIcon(icon); + item->setToolTip(tr("Argument is read-only")); + topRow.append(item); + } else if (val.userType() == QVariant::ByteArray) { + QByteArray ba = val.value(); + QStandardItem *item = new QStandardItem(); + item->setFlags(item->flags() ^ Qt::ItemIsEditable); + item->setText( + tr("").arg(ba.size())); + QIcon icon(":/resources/emblem-locked.png"); + item->setIcon(icon); + item->setToolTip(tr("Argument is read-only")); + topRow.append(item); + } else { + QStandardItem *item + = new QStandardItem(); + item->setFlags(item->flags() | Qt::ItemIsEditable); + item->setData(val, Qt::DisplayRole); + topRow.append(item); + } + rootItem->appendRow(topRow); + } +} + +void ArgumentsEditor::setupShaderEditor(const QList &sources) +{ + +} + +#include "argumentseditor.moc" diff --git a/gui/argumentseditor.h b/gui/argumentseditor.h new file mode 100644 index 0000000..bcaefcc --- /dev/null +++ b/gui/argumentseditor.h @@ -0,0 +1,35 @@ +#ifndef ARGUMENTSEDITOR_H +#define ARGUMENTSEDITOR_H + +#include "ui_argumentseditor.h" +#include +#include + +class ApiTraceCall; + +class ArgumentsEditor : public QWidget +{ + Q_OBJECT +public: + ArgumentsEditor(QWidget *parent=0); + ~ArgumentsEditor(); + + + void setCall(ApiTraceCall *call); + ApiTraceCall *call() const; + +signals: + void argumentsEdited(ApiTraceCall *call); + +private: + void init(); + void setupCall(); + void setupShaderEditor(const QList &sources); +private: + Ui_ArgumentsEditor m_ui; + QStandardItemModel *m_model; + + ApiTraceCall *m_call; +}; + +#endif diff --git a/gui/mainwindow.cpp b/gui/mainwindow.cpp index f63b87e..081f0bf 100644 --- a/gui/mainwindow.cpp +++ b/gui/mainwindow.cpp @@ -5,6 +5,7 @@ #include "apicalldelegate.h" #include "apitracemodel.h" #include "apitracefilter.h" +#include "argumentseditor.h" #include "imageviewer.h" #include "jumpwidget.h" #include "retracer.h" @@ -99,6 +100,7 @@ void MainWindow::callItemSelected(const QModelIndex &index) ApiTraceCall *call = static_cast(event); m_ui.detailsWebView->setHtml(call->toHtml()); m_ui.detailsDock->show(); + m_argsEditor->setCall(call); if (call->hasBinaryData()) { QByteArray data = call->argValues[call->binaryDataIndex()].toByteArray(); @@ -120,6 +122,7 @@ void MainWindow::callItemSelected(const QModelIndex &index) } } } + m_ui.argsEditorDock->show(); m_ui.vertexDataDock->setVisible(call->hasBinaryData()); m_selectedEvent = call; } else { @@ -585,12 +588,17 @@ void MainWindow::initObjects() statusBar()->addPermanentWidget(m_progressBar); m_progressBar->hide(); + m_argsEditor = new ArgumentsEditor(this); + m_ui.argsEditorLayout->addWidget(m_argsEditor); + m_ui.detailsDock->hide(); m_ui.vertexDataDock->hide(); m_ui.stateDock->hide(); + m_ui.argsEditorDock->hide(); setDockOptions(dockOptions() | QMainWindow::ForceTabbedDocks); tabifyDockWidget(m_ui.stateDock, m_ui.vertexDataDock); + tabifyDockWidget(m_ui.vertexDataDock, m_ui.argsEditorDock); m_ui.surfacesTreeWidget->setContextMenuPolicy(Qt::CustomContextMenu); diff --git a/gui/mainwindow.h b/gui/mainwindow.h index de413c0..99f722d 100644 --- a/gui/mainwindow.h +++ b/gui/mainwindow.h @@ -12,6 +12,7 @@ class ApiTraceFilter; class ApiTraceFrame; class ApiTraceModel; class ApiTraceState; +class ArgumentsEditor; class ImageViewer; class JumpWidget; class QModelIndex; @@ -91,6 +92,8 @@ private: SearchWidget *m_searchWidget; TraceProcess *m_traceProcess; + + ArgumentsEditor *m_argsEditor; }; diff --git a/gui/qapitrace.qrc b/gui/qapitrace.qrc index a989c42..610eebe 100644 --- a/gui/qapitrace.qrc +++ b/gui/qapitrace.qrc @@ -5,6 +5,8 @@ resources/dialog-information.png resources/document-new.png resources/document-open.png + resources/edit-undo.png + resources/emblem-locked.png resources/go-down-search.png resources/go-up-search.png resources/media-playback-start.png diff --git a/gui/resources/edit-undo.png b/gui/resources/edit-undo.png new file mode 100644 index 0000000000000000000000000000000000000000..c893a1a65e2d8bac79d3ed7313780605ff0b6d74 GIT binary patch literal 2020 zcmVK~#9!#g}Vr6xS8U|L4xk?(D7~>&Id+COl+kAtcZM0fj0O zQY2L6Th)Rh)HYOVo3<#e2z?}KB}CPvACk~2X()=4K9aUbMNQj$NTpU$n}mcmJOZYK zhXXcXn>D*@_BFdZGxy%p8+T=4gpC_Mxi`p%l9C!YD*X`+!#20kfb{hr$m15{!%1H0hdwzLvU&d{DW5b4j$XN#%9sR{! ze)UXwaqrKDa2-dEtcg2S^=&ZiNV+{8iMWGUG73AEf)#HEAqwS((1AiwuE86>f_&z{ zRfOuN%B${P@x_dH(*WlOwhuP!aHHP3Sb{I zLJNIyFE8rPSmNmH<>p08MSK!vM9>iwMUvkohcR zISaBZMA~~`x6XmvwFr@pHsHERGpguYeg_5z#~ym&(Uucm+g*BQ>I(j~wz#NyRSQFb zM5C)I+{nPjV0;9HbMHadt3aqhMh+RQ88%CxL9Ayvn$l}Q_6=rHl6c{le=g6BiQB%h zr%x6h!~p5Q~*R10hlE!Bk!Z0KMz=dZ`(LAV&Qy-kSU;At1D0##=8>=pGk-4 z8a@d>JA{_y8{xDz<606fA>Eg5K63QrUH}imAkYY)m4q^~3Zb=;L$I+tb`*YX2ox8% zToicqkXs)dkM1VNP4C&4PyFgng+$NX#HUIk_T26_UH_lwY^b`2QvY8eJs;W+rg-1l zUR=!bXLo&>+{p<^A)`=L!&mT zyVLEu>htF(S5U4f@<#g+6o#RLIVVUOX9~R+YnkIfH8MB+8?2p_(;& zFJFN2$Dx7(*d|1p7a`Wxh3+*Kw6^FUeE9bLeVB%MNxW;jP6oi3sueTJuaD~gIcChp zEL|yi%#-hcU)NiXcwMjh<7#2(D@e)EDhEQAEn;>o6Tkt*91?D%l{@F8im6tf2Vej< zpl?g2Jo;Scm}E-Yq-)B%Duv?)06e3cusK@tw7+W?2^)sbZ9RPqz!FTu%RlMCmmV9& z>>;pfFB2w+$x22F%MF-SjkR>8RDslp?%c`R#ti&$TNg>mLJ(-rt{(Z#owEz^!EaOM zkg{eGYXEiSSiS(Vy?? z#?3gfZ@!}~(c5h65<7MkLKFZLjaQAsFm)hj7do2h!$yD`)Av1Qwk^Q6s5P#|y-O@> zc#PebpX|bP9NOO_0>@ewL9|Y~UNQHU%rmO6L>{WrIf>xhV(h@~8_0uj_bb6?1SLqK3E z6T^Yl&Q;%a@}9I-FAPu3_)&WH`8cs{8!f>4D1^nZ1gadT6T?*~r(G!2MN^zaXEJ6b zP_o;jF&EWBE0l_pQVvPwKq_Twgrtl@N_y?=96NI*pLyyp^8FbnU>YL*a7my3btf&| zn&Zhg{ErK9&+RTC>YA*msTMf!04A`ihOjN4h`=BR3`Go^nM1G$^Yu3S{AG_;&R6|2 zewH79X%V^lD$-vqGN$1_uis7}5?~OR1!*mybcB?OL8&N7sUej`p|s4kqofsiy+3M& z5+vnECl?dK7Grta9ym3kT61B3(;pbO8enROcUBX$ zhG|YPUelZ+PK>;4Rg9d!A|H6duLC^Iuh}hf{NNg*aN^U$>7zj5QnPayF5%a<>2-@XMZi;9Y>tf~N-z{JGF#>UFd&d$NX!NtYJ&CM+! zARs6RM1sP?!XhFfqGG~gVxr<=V&dXr5)u-Ul9EzV64KIA(lXLAGE#D~vhwnB@(OZ_ ziV8}~N-8SKDyqtAYN{F<>KdAA8k*{wT0o?srLCo-tF5D_t*fh}udk!BXJDvj zXk=h)VrXn)WMX1uYG!O^Zfb5}W?^Y=X=Pz$ZE0;|X=7()YiDg|Z)5Ld>)>eT;AHOz zM9%h3&JNBljxMf1E_|-=H>0-?c?d=>*?d?~Aivm?KCV9KNR4%-80(wC}`s22Yt|cgqz%8b6d@DeW*XrDocuCHanJx&`+|IP$cPpONL* z@KCGI*+)}o-PTomUOIO+Ue-MIG|*3T*#l9-NsSw0?zkr~ne;A;na{(hwt7KYR?d6J ztwK-JnFRVSy_EkH|7y`B!^4?%R7 + + ArgumentsEditor + + + + 0 + 0 + 290 + 472 + + + + Form + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 16 + 50 + false + + + + TextLabel + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Qt::Horizontal + + + + 128 + 20 + + + + + + + + false + + + Revert + + + + :/resources/edit-undo.png:/resources/edit-undo.png + + + + + + + + + 1 + + + + Arguments + + + + + + false + + + + + + + + Shader + + + + + + + + + + + Editable + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Length: + + + + + + + 100 + + + + + + + + + + + + + + + + + + + GLSLEdit + QPlainTextEdit +
glsledit.h
+
+
+ + + + +
diff --git a/gui/ui/mainwindow.ui b/gui/ui/mainwindow.ui index c0c6237..c5f0526 100644 --- a/gui/ui/mainwindow.ui +++ b/gui/ui/mainwindow.ui @@ -364,6 +364,21 @@ + + + Arguments Editor + + + 2 + + + + + + + + + Exit @@ -456,6 +471,7 @@ stateDock vertexDataDock + argsEditorDock -- 2.43.0