1 #include "argumentseditor.h"
4 #include <QItemEditorFactory>
6 #include "apitracecall.h"
8 ArgumentsEditor::ArgumentsEditor(QWidget *parent)
10 m_model(new QStandardItemModel()),
16 ArgumentsEditor::~ArgumentsEditor()
20 void ArgumentsEditor::setCall(ApiTraceCall *call)
28 ApiTraceCall * ArgumentsEditor::call() const
33 void ArgumentsEditor::init()
37 m_ui.argsTree->setModel(m_model);
39 const QItemEditorFactory *factory = QItemEditorFactory::defaultFactory();
41 QItemEditorCreatorBase *apiBitmaskCreator =
42 new QStandardItemEditorCreator<ApiBitmaskEditor>();
44 factory->registerEditor(QMetaType::type("ApiBitmask") ,
47 QItemEditorFactory::setDefaultFactory(factory);
51 void ArgumentsEditor::setupCall()
56 headers.append(tr("Argument"));
57 headers.append(tr("Value"));
58 m_model->setColumnCount(2);
59 m_model->setHorizontalHeaderLabels(headers);
60 m_ui.argsTabWidget->removeTab(
61 m_ui.argsTabWidget->indexOf(m_ui.shaderTab));
66 m_ui.callLabel->setText(m_call->name);
67 QStandardItem *rootItem = m_model->invisibleRootItem();
68 for (int i = 0; i < m_call->argNames.count(); ++i) {
69 QString argName = m_call->argNames[i];
70 QVariant val = m_call->argValues[i];
71 QStandardItem *nameItem = new QStandardItem(argName);
72 nameItem->setFlags(nameItem->flags() ^ Qt::ItemIsEditable);
73 QList<QStandardItem*> topRow;
74 topRow.append(nameItem);
75 qDebug()<<"arg "<<argName<<", val = "<<val;
77 if (val.canConvert<ApiArray>()) {
78 ApiArray array = val.value<ApiArray>();
79 QList<QVariant> vals = array.values();
80 QVariant firstVal = vals.value(0);
82 if (firstVal.userType() == QVariant::String) {
83 m_ui.argsTabWidget->addTab(
84 m_ui.shaderTab, argName);
85 setupShaderEditor(vals);
89 for (int i = 0; i < vals.count(); ++i) {
90 QList<QStandardItem*> row;
92 QStandardItem *idx = new QStandardItem();
93 idx->setFlags(idx->flags() ^ Qt::ItemIsEditable);
94 idx->setText(tr("%1)").arg(i));
96 QStandardItem *col = new QStandardItem();
97 col->setFlags(col->flags() | Qt::ItemIsEditable);
98 col->setData(vals[i], Qt::DisplayRole);
101 nameItem->appendRow(row);
104 qDebug()<<"\tarray first = "<<vals[0];
105 } else if (val.canConvert<ApiPointer>()) {
106 ApiPointer ptr = val.value<ApiPointer>();
107 QStandardItem *item = new QStandardItem();
108 item->setFlags(item->flags() ^ Qt::ItemIsEditable);
109 item->setText(ptr.toString());
110 QIcon icon(":/resources/emblem-locked.png");
112 item->setToolTip(tr("Argument is read-only"));
114 } else if (val.canConvert<ApiBitmask>()) {
115 ApiBitmask mask = val.value<ApiBitmask>();
116 QStandardItem *item = new QStandardItem();
117 item->setFlags(item->flags() ^ Qt::ItemIsEditable);
118 item->setText(mask.toString());
119 QIcon icon(":/resources/emblem-locked.png");
121 item->setToolTip(tr("Argument is read-only"));
123 } else if (val.canConvert<ApiStruct>()) {
124 ApiStruct str = val.value<ApiStruct>();
125 QStandardItem *item = new QStandardItem();
126 item->setFlags(item->flags() ^ Qt::ItemIsEditable);
127 item->setText(str.toString());
128 QIcon icon(":/resources/emblem-locked.png");
130 item->setToolTip(tr("Argument is read-only"));
132 } else if (val.userType() == QVariant::ByteArray) {
133 QByteArray ba = val.value<QByteArray>();
134 QStandardItem *item = new QStandardItem();
135 item->setFlags(item->flags() ^ Qt::ItemIsEditable);
137 tr("<binary data, size = %1 bytes>").arg(ba.size()));
138 QIcon icon(":/resources/emblem-locked.png");
140 item->setToolTip(tr("Argument is read-only"));
144 = new QStandardItem();
145 item->setFlags(item->flags() | Qt::ItemIsEditable);
146 item->setData(val, Qt::DisplayRole);
149 rootItem->appendRow(topRow);
153 void ArgumentsEditor::setupShaderEditor(const QList<QVariant> &sources)
158 #include "argumentseditor.moc"