#include "argumentseditor.h"
+#include "apitracecall.h"
+
#include <QDebug>
#include <QDoubleSpinBox>
#include <QItemEditorFactory>
#include <limits.h>
#include <float.h>
-#include "apitracecall.h"
-
static bool
isVariantEditable(const QVariant &var)
}
}
+
+ArgumentsItemEditorFactory::ArgumentsItemEditorFactory()
+ : QItemEditorFactory()
+{
+}
+
+QWidget * ArgumentsItemEditorFactory::createEditor(QVariant::Type type,
+ QWidget *parent) const
+{
+ switch (type) {
+ case QVariant::Bool: {
+ BooleanComboBox *cb = new BooleanComboBox(parent);
+ cb->setFrame(false);
+ return cb;
+ }
+ case QVariant::UInt: {
+ QSpinBox *sb = new QSpinBox(parent);
+ sb->setFrame(false);
+ sb->setMaximum(INT_MAX);
+ return sb; }
+ case QVariant::Int: {
+ QSpinBox *sb = new QSpinBox(parent);
+ sb->setFrame(false);
+ sb->setMinimum(INT_MIN);
+ sb->setMaximum(INT_MAX);
+ return sb;
+ }
+ case QVariant::ULongLong: {
+ QSpinBox *sb = new QSpinBox(parent);
+ sb->setFrame(false);
+ sb->setMaximum(INT_MAX);
+ return sb; }
+ case QVariant::LongLong: {
+ QSpinBox *sb = new QSpinBox(parent);
+ sb->setFrame(false);
+ sb->setMinimum(INT_MIN);
+ sb->setMaximum(INT_MAX);
+ return sb;
+ }
+ case QVariant::Pixmap:
+ return new QLabel(parent);
+ case QVariant::Double: {
+ QDoubleSpinBox *sb = new QDoubleSpinBox(parent);
+ sb->setFrame(false);
+ sb->setMinimum(-DBL_MAX);
+ sb->setMaximum(DBL_MAX);
+ sb->setDecimals(8);
+ return sb;
+ }
+ default:
+ break;
+ }
+ return 0;
+}
+
+QByteArray
+ArgumentsItemEditorFactory::valuePropertyName(QVariant::Type type) const
+{
+ switch (type) {
+ case QVariant::Bool:
+ return "currentIndex";
+ case QVariant::UInt:
+ case QVariant::Int:
+ case QVariant::LongLong:
+ case QVariant::ULongLong:
+ case QVariant::Double:
+ return "value";
+#if 0
+ case QVariant::String:
+#endif
+ default:
+ return "text";
+ }
+}
+
+BooleanComboBox::BooleanComboBox(QWidget *parent)
+ : QComboBox(parent)
+{
+ addItem(tr("False"));
+ addItem(tr("True"));
+}
+
+void BooleanComboBox::setValue(bool value)
+{
+ setCurrentIndex(value ? 1 : 0);
+}
+
+bool BooleanComboBox::value() const
+{
+ return (currentIndex() == 1);
+}
+
ArgumentsEditor::ArgumentsEditor(QWidget *parent)
: QWidget(parent),
m_model(new QStandardItemModel()),
{
m_ui.setupUi(this);
+ connect(m_ui.selectStringCB, SIGNAL(currentIndexChanged(int)),
+ SLOT(currentSourceChanged(int)));
+ connect(m_ui.glslEdit, SIGNAL(textChanged()),
+ SLOT(sourceChanged()));
+
m_ui.argsTree->setModel(m_model);
QItemEditorFactory *factory =
new ArgumentsItemEditorFactory();
if (val.canConvert<ApiArray>()) {
ApiArray array = val.value<ApiArray>();
QList<QVariant> vals = array.values();
- QVariant firstVal = vals.value(0);
- QVariant x = val;
- x.convert(QVariant::String);
- qDebug()<<"aaaaa = "<<x;
+ QVariant firstVal = vals.value(0);
if (firstVal.userType() == QVariant::String) {
m_ui.argsTabWidget->addTab(
m_ui.shaderTab, argName);
setupShaderEditor(vals);
delete nameItem;
continue;
- } else {
+ } else if (isVariantEditable(firstVal)) {
for (int i = 0; i < vals.count(); ++i) {
QList<QStandardItem*> row;
row.append(idx);
row.append(col);
nameItem->appendRow(row);
- };
+ }
+ } else {
+ qDebug()<<"\tUnsupported array = "<<firstVal;
+ delete nameItem;
+ continue;
}
- qDebug()<<"\tarray first = "<<vals[0];
} else if (val.canConvert<ApiPointer>()) {
ApiPointer ptr = val.value<ApiPointer>();
QStandardItem *item = new QStandardItem();
void ArgumentsEditor::setupShaderEditor(const QList<QVariant> &sources)
{
-}
-
-ArgumentsItemEditorFactory::ArgumentsItemEditorFactory()
- : QItemEditorFactory()
-{
-}
-
-QWidget * ArgumentsItemEditorFactory::createEditor(QVariant::Type type,
- QWidget *parent) const
-{
- switch (type) {
- case QVariant::Bool: {
- BooleanComboBox *cb = new BooleanComboBox(parent);
- cb->setFrame(false);
- return cb;
- }
- case QVariant::UInt: {
- QSpinBox *sb = new QSpinBox(parent);
- sb->setFrame(false);
- sb->setMaximum(INT_MAX);
- return sb; }
- case QVariant::Int: {
- QSpinBox *sb = new QSpinBox(parent);
- sb->setFrame(false);
- sb->setMinimum(INT_MIN);
- sb->setMaximum(INT_MAX);
- return sb;
- }
- case QVariant::ULongLong: {
- QSpinBox *sb = new QSpinBox(parent);
- sb->setFrame(false);
- sb->setMaximum(INT_MAX);
- return sb; }
- case QVariant::LongLong: {
- QSpinBox *sb = new QSpinBox(parent);
- sb->setFrame(false);
- sb->setMinimum(INT_MIN);
- sb->setMaximum(INT_MAX);
- return sb;
- }
- case QVariant::Pixmap:
- return new QLabel(parent);
- case QVariant::Double: {
- QDoubleSpinBox *sb = new QDoubleSpinBox(parent);
- sb->setFrame(false);
- sb->setMinimum(-DBL_MAX);
- sb->setMaximum(DBL_MAX);
- sb->setDecimals(8);
- return sb;
- }
- default:
- break;
- }
- return 0;
-}
-
-QByteArray
-ArgumentsItemEditorFactory::valuePropertyName(QVariant::Type type) const
-{
- switch (type) {
- case QVariant::Bool:
- return "currentIndex";
- case QVariant::UInt:
- case QVariant::Int:
- case QVariant::LongLong:
- case QVariant::ULongLong:
- case QVariant::Double:
- return "value";
-#if 0
- case QVariant::String:
-#endif
- default:
- return "text";
+ m_ui.selectStringCB->clear();
+ m_ui.glslEdit->clear();
+ for (int i = 0; i < sources.count(); ++i) {
+ m_ui.selectStringCB->addItem(
+ tr("Shader string: %1").arg(i),
+ sources[i]);
}
+ m_ui.selectStringCB->setCurrentIndex(0);
}
-BooleanComboBox::BooleanComboBox(QWidget *parent)
- : QComboBox(parent)
+void ArgumentsEditor::currentSourceChanged(int idx)
{
- addItem(tr("False"));
- addItem(tr("True"));
+ QVariant source = m_ui.selectStringCB->itemData(idx);
+ QString str = source.toString();
+ m_ui.glslEdit->setPlainText(source.toString());
+ m_ui.lengthLabel->setText(
+ tr("%1").arg(str.length()));
}
-void BooleanComboBox::setValue(bool value)
+void ArgumentsEditor::sourceChanged()
{
- setCurrentIndex(value ? 1 : 0);
-}
-
-bool BooleanComboBox::value() const
-{
- return (currentIndex() == 1);
+ QString str = m_ui.glslEdit->toPlainText();
+ m_ui.lengthLabel->setText(
+ tr("%1").arg(str.length()));
}
#include "argumentseditor.moc"