changed widgets layout, removed labels

This commit is contained in:
Paolo Cignoni cignoni 2006-02-21 16:10:37 +00:00
parent 31fa05b7af
commit f6a930ef70
2 changed files with 90 additions and 130 deletions

View File

@ -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<QString, UniformVariable>::iterator i;
int row=0;
std::map<QString, UniformVariable>::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;j<varNum;++j) {
QLineEdit *qline = new QLineEdit(this);
qline->setObjectName(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;j<varNum;++j) {
@ -96,63 +69,67 @@ ShaderDialog::ShaderDialog(ShaderInfo *sInfo, GLArea* gla, QWidget *parent)
qslider->setTickPosition(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();
}

View File

@ -8,7 +8,7 @@
#include <QSignalMapper>
#include <QLineEdit>
#include <QSlider>
#include <QPalette>
#include <QGridLayout>
#include <map>
#include "shaderStructs.h"
#include "ui_shaderDialog.h"