static bool
isVariantEditable(const QVariant &var)
{
+ if (var.canConvert<ApiArray>()) {
+ ApiArray array = var.value<ApiArray>();
+ QVector<QVariant> vals = array.values();
+ if (vals.isEmpty())
+ return false;
+ else
+ return isVariantEditable(vals.first());
+ }
switch (var.userType()) {
case QVariant::Bool:
case QVariant::Int:
case QVariant::UInt:
case QVariant::LongLong:
case QVariant::ULongLong:
+ case QMetaType::Float:
case QVariant::Double:
return true;
default:
return false;
ApiArray array = var.value<ApiArray>();
- QList<QVariant> origValues = array.values();
+ QVector<QVariant> origValues = array.values();
if (origValues.isEmpty() ||
origValues.first().userType() != QVariant::String)
return false;
{
}
-QWidget * ArgumentsItemEditorFactory::createEditor(QVariant::Type type,
+QWidget * ArgumentsItemEditorFactory::createEditor(QMetaType::Type type,
QWidget *parent) const
{
switch (type) {
}
case QVariant::Pixmap:
return new QLabel(parent);
+ case QMetaType::Float: {
+ QDoubleSpinBox *sb = new QDoubleSpinBox(parent);
+ sb->setFrame(false);
+ sb->setMinimum(-FLT_MAX);
+ sb->setMaximum(FLT_MAX);
+ sb->setDecimals(8);
+ return sb;
+ }
case QVariant::Double: {
QDoubleSpinBox *sb = new QDoubleSpinBox(parent);
sb->setFrame(false);
}
QByteArray
-ArgumentsItemEditorFactory::valuePropertyName(QVariant::Type type) const
+ArgumentsItemEditorFactory::valuePropertyName(QMetaType::Type type) const
{
switch (type) {
case QVariant::Bool:
case QVariant::Int:
case QVariant::LongLong:
case QVariant::ULongLong:
+ case QMetaType::Float:
case QVariant::Double:
return "value";
#if 0
ArgumentsEditor::~ArgumentsEditor()
{
+ delete m_model;
}
void ArgumentsEditor::setCall(ApiTraceCall *call)
if (val.canConvert<ApiArray>()) {
ApiArray array = val.value<ApiArray>();
- QList<QVariant> vals = array.values();
+ QVector<QVariant> vals = array.values();
QVariant firstVal = vals.value(0);
if (firstVal.userType() == QVariant::String) {
item->setIcon(icon);
item->setToolTip(tr("Argument is read-only"));
topRow.append(item);
+ } else if (val.canConvert<ApiEnum>()) {
+ ApiEnum en = val.value<ApiEnum>();
+ QStandardItem *item = new QStandardItem();
+ item->setFlags(item->flags() ^ Qt::ItemIsEditable);
+ item->setText(en.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>()) {
ApiBitmask mask = val.value<ApiBitmask>();
QStandardItem *item = new QStandardItem();
}
}
-void ArgumentsEditor::setupShaderEditor(const QList<QVariant> &sources)
+void ArgumentsEditor::setupShaderEditor(const QVector<QVariant> &sources)
{
m_ui.selectStringCB->clear();
m_ui.glslEdit->clear();
void ArgumentsEditor::accept()
{
QStringList argNames = m_call->argNames();
- QList<QVariant> originalValues = m_call->arguments();
+ QVector<QVariant> originalValues = m_call->arguments();
+ QVector<QVariant> newValues;
+ bool changed = false;
for (int i = 0; i < argNames.count(); ++i) {
- bool changed = false;
+ bool valChanged = false;
QString argName = argNames[i];
QVariant argValue = originalValues[i];
- QVariant editorValue = valueForName(argName, argValue, &changed);
+ QVariant editorValue = valueForName(argName, argValue, &valChanged);
+
+ newValues.append(editorValue);
+#if 0
qDebug()<<"Arg = "<<argName;
qDebug()<<"\toriginal = "<<argValue;
qDebug()<<"\teditor = "<<editorValue;
- qDebug()<<"\tchanged = "<<changed;
+ qDebug()<<"\tchanged = "<<valChanged;
+#endif
+ if (valChanged)
+ changed = true;
}
-
+ if (changed)
+ m_call->setEditedValues(newValues);
QDialog::accept();
}
return arrayFromEditor(array, changed);
}
+ if (!isVariantEditable(originalValue)) {
+ return originalValue;
+ }
+
for (int topRow = 0; topRow < m_model->rowCount(); ++topRow) {
QModelIndex nameIdx = m_model->index(topRow, 0, QModelIndex());
QString argName = nameIdx.data().toString();
const ApiArray &origArray,
bool *changed) const
{
- QList<QVariant> origValues = origArray.values();
+ QVector<QVariant> origValues = origArray.values();
*changed = false;
if (origValues.isEmpty())
return QVariant::fromValue(ApiArray());
- QList<QVariant> lst;
+ QVector<QVariant> lst;
for (int i = 0; i < origValues.count(); ++i) {
QModelIndex valIdx = m_model->index(i, 1, parentIndex);
QVariant var = valIdx.data();
QVariant ArgumentsEditor::arrayFromEditor(const ApiArray &origArray,
bool *changed) const
{
- QList<QVariant> vals;
- QList<QVariant> origValues = origArray.values();
+ QVector<QVariant> vals;
+ QVector<QVariant> origValues = origArray.values();
Q_ASSERT(isVariantStringArray(QVariant::fromValue(origArray)));
*changed = false;