From: Zack Rusin Date: Fri, 15 Apr 2011 20:20:45 +0000 (-0400) Subject: Display shaders in the shader editor. X-Git-Url: https://git.cworth.org/git?a=commitdiff_plain;h=c46079911934f99172ab01addb6610a48d84b216;p=apitrace Display shaders in the shader editor. --- diff --git a/gui/argumentseditor.cpp b/gui/argumentseditor.cpp index bc5563c..f050ec3 100644 --- a/gui/argumentseditor.cpp +++ b/gui/argumentseditor.cpp @@ -1,5 +1,7 @@ #include "argumentseditor.h" +#include "apitracecall.h" + #include #include #include @@ -8,8 +10,6 @@ #include #include -#include "apitracecall.h" - static bool isVariantEditable(const QVariant &var) @@ -27,6 +27,98 @@ 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()), @@ -56,6 +148,11 @@ void ArgumentsEditor::init() { 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(); @@ -92,18 +189,15 @@ void ArgumentsEditor::setupCall() if (val.canConvert()) { ApiArray array = val.value(); QList vals = array.values(); - QVariant firstVal = vals.value(0); - QVariant x = val; - x.convert(QVariant::String); - qDebug()<<"aaaaa = "<addTab( m_ui.shaderTab, argName); setupShaderEditor(vals); delete nameItem; continue; - } else { + } else if (isVariantEditable(firstVal)) { for (int i = 0; i < vals.count(); ++i) { QList row; @@ -117,9 +211,12 @@ void ArgumentsEditor::setupCall() row.append(idx); row.append(col); nameItem->appendRow(row); - }; + } + } else { + qDebug()<<"\tUnsupported array = "<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" diff --git a/gui/argumentseditor.h b/gui/argumentseditor.h index fdec857..aa8452d 100644 --- a/gui/argumentseditor.h +++ b/gui/argumentseditor.h @@ -38,9 +38,9 @@ public: void setCall(ApiTraceCall *call); ApiTraceCall *call() const; -signals: - void argumentsEdited(ApiTraceCall *call); - +private slots: + void currentSourceChanged(int idx); + void sourceChanged(); private: void init(); void setupCall();