From f6a930ef704cc4b5ba6db512a9e5f0ae20aa0c04 Mon Sep 17 00:00:00 2001 From: Paolo Cignoni cignoni Date: Tue, 21 Feb 2006 16:10:37 +0000 Subject: [PATCH] changed widgets layout, removed labels --- .../meshrender/shaderDialog.cpp | 218 +++++++----------- src/meshlabplugins/meshrender/shaderDialog.h | 2 +- 2 files changed, 90 insertions(+), 130 deletions(-) diff --git a/src/meshlabplugins/meshrender/shaderDialog.cpp b/src/meshlabplugins/meshrender/shaderDialog.cpp index 5976d5fa8..ef8b53c2c 100644 --- a/src/meshlabplugins/meshrender/shaderDialog.cpp +++ b/src/meshlabplugins/meshrender/shaderDialog.cpp @@ -1,7 +1,11 @@ #include "shaderDialog.h" +#define DECFACTOR 100000.0f + + + ShaderDialog::ShaderDialog(ShaderInfo *sInfo, GLArea* gla, QWidget *parent) - : QDialog(parent) +: QDialog(parent) { ui.setupUi(this); shaderInfo = sInfo; @@ -9,86 +13,55 @@ ShaderDialog::ShaderDialog(ShaderInfo *sInfo, GLArea* gla, QWidget *parent) colorSignalMapper = new QSignalMapper(this); valueSignalMapper = new QSignalMapper(this); - QVBoxLayout *verticalLayout = new QVBoxLayout(ui.uvTab); - verticalLayout->setSpacing(6); - verticalLayout->setMargin(0); - verticalLayout->setObjectName("verticalLayout"); - verticalLayout->setGeometry(QRect(20, 40, 400, 280)); + QGridLayout * qgrid = new QGridLayout(ui.uvTab); + qgrid->setColumnMinimumWidth(0, 45); + qgrid->setColumnMinimumWidth(1, 40); + qgrid->setColumnMinimumWidth(2, 40); + qgrid->setColumnMinimumWidth(3, 40); - std::map::iterator i; + int row=0; + std::map::iterator i; for (i = shaderInfo->uniformVars.begin(); i != shaderInfo->uniformVars.end(); ++i) { - QHBoxLayout *horLayout = new QHBoxLayout(); - horLayout->setSpacing(2); - horLayout->setMargin(0); - horLayout->setObjectName(i->first+"_horLayout"); - + QLabel *varNameLabel = new QLabel(this); varNameLabel->setObjectName(i->first+"_name"); varNameLabel->setText(i->first); - - horLayout->addWidget(varNameLabel); - QLabel *varValueLabel = new QLabel(this); - varValueLabel->setObjectName(i->first+"_value"); - - labels[i->first] = varValueLabel; + qgrid->addWidget(varNameLabel, row, 0); int varNum = getVarsNumber(i->second.type); - bool varIsInt = 0; - - switch (i->second.type) { - case SINGLE_INT: { - - varIsInt = 1; - varValueLabel->setText(tr("%1").arg(i->second.ival[0])); - } break; - case SINGLE_FLOAT: { - - varValueLabel->setText(tr("%1").arg(i->second.fval[0])); - } break; - case ARRAY_2_FLOAT : { - - varValueLabel->setText(tr("%1, %2").arg(i->second.fval[0]).arg(i->second.fval[1])); - } break; - case ARRAY_3_FLOAT : { - - varValueLabel->setText(tr("%1, %2, %3").arg(i->second.fval[0]).arg(i->second.fval[1]).arg(i->second.fval[2])); - } break; - case ARRAY_4_FLOAT : { - - varValueLabel->setText(tr("%1, %2, %3, %4").arg(i->second.fval[0]).arg(i->second.fval[1]).arg(i->second.fval[2]).arg(i->second.fval[3])); - } break; - } - horLayout->addWidget(varValueLabel); switch (i->second.widget) { - + case WIDGET_NONE: { for (int j=0;jsetObjectName(tr("%1%2").arg(i->first).arg(j)); - if (varIsInt) { - qline->setText(tr("%1").arg(i->second.ival[j])); - + if (i->second.type == SINGLE_INT) { + qline->setText(tr("%1").arg(i->second.ival[j])); + } else { - qline->setText(tr("%1").arg(i->second.fval[j])); - + qline->setText(tr("%1").arg(i->second.fval[j])); + } - + connect(qline, SIGNAL(textChanged(QString)), valueSignalMapper, SLOT(map())); valueSignalMapper->setMapping(qline,tr("%1%2").arg(i->first).arg(j)); - horLayout->addWidget(qline); lineEdits[tr("%1%2").arg(i->first).arg(j)]=qline; + + qgrid->addWidget(qline, row, j+1); } } break; case WIDGET_COLOR : { - - QPushButton * colorButton = new QPushButton(this); - colorButton->setText("Change"); - connect(colorButton, SIGNAL(clicked()), colorSignalMapper, SLOT(map())); - colorSignalMapper->setMapping(colorButton,i->first); - horLayout->addWidget(colorButton); - + + QPushButton * colorButton = new QPushButton(this); + colorButton->setText("Change"); + connect(colorButton, SIGNAL(clicked()), colorSignalMapper, SLOT(map())); + colorSignalMapper->setMapping(colorButton,i->first); + + qgrid->addWidget(colorButton, row, 1); + + } break; case WIDGET_SLIDER : { for (int j=0;jsetTickPosition(QSlider::NoTicks); qslider->setOrientation(Qt::Horizontal); qslider->setObjectName(tr("%1%2").arg(i->first).arg(j)); - if (varIsInt) { - qslider->setTickInterval(i->second.step); + if (i->second.type == SINGLE_INT) { + qslider->setTickInterval(i->second.step); qslider->setRange(i->second.min, i->second.max); qslider->setValue(i->second.ival[j]); } else { - qslider->setTickInterval(i->second.step*100000); - qslider->setRange(i->second.min*100000, i->second.max*100000); - qslider->setValue(i->second.fval[j]*100000); + qslider->setTickInterval(i->second.step*DECFACTOR); + qslider->setRange(i->second.min*DECFACTOR, i->second.max*DECFACTOR); + qslider->setValue(i->second.fval[j]*DECFACTOR); } connect(qslider, SIGNAL(valueChanged(int)), valueSignalMapper, SLOT(map())); valueSignalMapper->setMapping(qslider,tr("%1%2").arg(i->first).arg(j)); - horLayout->addWidget(qslider); + sliders[tr("%1%2").arg(i->first).arg(j)]=qslider; + qgrid->addWidget(qslider, row, j+1); + } } break; - } - - verticalLayout->addLayout(horLayout); - - + } + ++row; } - - + + connect(colorSignalMapper, SIGNAL(mapped(const QString &)), this, SLOT(setColorValue(const QString &))); connect(valueSignalMapper, SIGNAL(mapped(const QString &)), this, SLOT(valuesChanged(const QString &))); - + //Vertex and Fragment Program Tabs Section QDir shadersDir = QDir(qApp->applicationDirPath()); #if defined(Q_OS_WIN) - if (shadersDir.dirName() == "debug" || shadersDir.dirName() == "release") - shadersDir.cdUp(); + if (shadersDir.dirName() == "debug" || shadersDir.dirName() == "release") + shadersDir.cdUp(); #elif defined(Q_OS_MAC) - if (shadersDir.dirName() == "MacOS") { - shadersDir.cdUp(); - shadersDir.cdUp(); - shadersDir.cdUp(); - } + if (shadersDir.dirName() == "MacOS") { + shadersDir.cdUp(); + shadersDir.cdUp(); + shadersDir.cdUp(); + } #endif shadersDir.cd("shaders"); ui.fpTextBrowser->setSearchPaths(QStringList(shadersDir.absolutePath())); ui.fpTextBrowser->setSource(QUrl(shaderInfo->fpFile)); + ui.fpTextBrowser->setAutoFormatting(QTextBrowser::AutoNone); + ui.fpTextBrowser->setLineWrapMode(QTextBrowser::WidgetWidth); + + ui.vpTextBrowser->setSearchPaths(QStringList(shadersDir.absolutePath())); ui.vpTextBrowser->setSource(QUrl(shaderInfo->vpFile)); + ui.vpTextBrowser->setAutoFormatting(QTextBrowser::AutoNone); //End of Vertex and Fragment Program Tabs Section this->setWindowFlags(Qt::WindowStaysOnTopHint); connect(ui.okButton, SIGNAL(clicked()), this, SLOT(accept())); - - - + + + } ShaderDialog::~ShaderDialog() @@ -162,51 +139,39 @@ ShaderDialog::~ShaderDialog() void ShaderDialog::setColorValue(const QString &varName) { - QColor old; - if ( shaderInfo->uniformVars[varName].type == ARRAY_3_FLOAT) { - old.setRgbF(shaderInfo->uniformVars[varName].fval[0], shaderInfo->uniformVars[varName].fval[1], shaderInfo->uniformVars[varName].fval[2]); - } else if (shaderInfo->uniformVars[varName].type == ARRAY_4_FLOAT) { - old.setRgbF(shaderInfo->uniformVars[varName].fval[0], shaderInfo->uniformVars[varName].fval[1], shaderInfo->uniformVars[varName].fval[2], shaderInfo->uniformVars[varName].fval[3]); + QColor old; + if ( shaderInfo->uniformVars[varName].type == ARRAY_3_FLOAT) { + old.setRgbF(shaderInfo->uniformVars[varName].fval[0], shaderInfo->uniformVars[varName].fval[1], shaderInfo->uniformVars[varName].fval[2]); + } else if (shaderInfo->uniformVars[varName].type == ARRAY_4_FLOAT) { + old.setRgbF(shaderInfo->uniformVars[varName].fval[0], shaderInfo->uniformVars[varName].fval[1], shaderInfo->uniformVars[varName].fval[2], shaderInfo->uniformVars[varName].fval[3]); + } + + QColor newColor = QColorDialog::getColor(old, this); + if (newColor.isValid()) { + + QLabel *label = labels[varName]; + + shaderInfo->uniformVars[varName].fval[0] = newColor.redF(); + shaderInfo->uniformVars[varName].fval[1] = newColor.greenF(); + shaderInfo->uniformVars[varName].fval[2] = newColor.blueF(); + + if (shaderInfo->uniformVars[varName].type == ARRAY_4_FLOAT) { + + shaderInfo->uniformVars[varName].fval[3] = newColor.alphaF(); + } - - QColor newColor = QColorDialog::getColor(old, this); - if (newColor.isValid()) { - - QLabel *label = labels[varName]; - - shaderInfo->uniformVars[varName].fval[0] = newColor.redF(); - shaderInfo->uniformVars[varName].fval[1] = newColor.greenF(); - shaderInfo->uniformVars[varName].fval[2] = newColor.blueF(); - - - if (shaderInfo->uniformVars[varName].type == ARRAY_3_FLOAT) { - - - label->setText(tr("%1, %2, %3").arg(shaderInfo->uniformVars[varName].fval[0]).arg( - shaderInfo->uniformVars[varName].fval[1]).arg( - shaderInfo->uniformVars[varName].fval[2])); - - } else if (shaderInfo->uniformVars[varName].type == ARRAY_4_FLOAT) { - - shaderInfo->uniformVars[varName].fval[3] = newColor.alphaF(); - - label->setText(tr("%1, %2, %3, %4").arg(shaderInfo->uniformVars[varName].fval[0]).arg( - shaderInfo->uniformVars[varName].fval[1]).arg( - shaderInfo->uniformVars[varName].fval[2]).arg( - shaderInfo->uniformVars[varName].fval[3])); - } - } - glarea->updateGL(); + } + glarea->updateGL(); } void ShaderDialog::valuesChanged(const QString &varNameAndIndex) { - - + + int varIndex = varNameAndIndex[varNameAndIndex.length()-1].digitValue(); QString varName = varNameAndIndex; - varName.chop(1); - + varName.chop(1); + int varWidget = shaderInfo->uniformVars[varName].widget; int varType = shaderInfo->uniformVars[varName].type; switch (varWidget) { @@ -223,16 +188,11 @@ void ShaderDialog::valuesChanged(const QString &varNameAndIndex) { if (varType == SINGLE_INT) { shaderInfo->uniformVars[varName].ival[varIndex] = qslider->value(); } else { - float c = shaderInfo->uniformVars[varName].fval[varIndex]; - float d = qslider->value(); - float g = d/100000.0f; - shaderInfo->uniformVars[varName].fval[varIndex] = qslider->value()/100000.0f; - c = shaderInfo->uniformVars[varName].fval[varIndex]; - c++; + shaderInfo->uniformVars[varName].fval[varIndex] = qslider->value()/DECFACTOR; } - } break; + } break; } glarea->updateGL(); - + } diff --git a/src/meshlabplugins/meshrender/shaderDialog.h b/src/meshlabplugins/meshrender/shaderDialog.h index 5c54ba9d8..fd26362eb 100644 --- a/src/meshlabplugins/meshrender/shaderDialog.h +++ b/src/meshlabplugins/meshrender/shaderDialog.h @@ -8,7 +8,7 @@ #include #include #include -#include +#include #include #include "shaderStructs.h" #include "ui_shaderDialog.h"