Exemple #1
0
ShaderDialog::ShaderDialog(QWidget* parent) : QDialog(parent)
{
   m_dialog.setupUi(this);
   m_labels[0]  = m_dialog.label0;
   m_labels[1]  = m_dialog.label1;
   m_labels[2]  = m_dialog.label2;
   m_labels[3]  = m_dialog.label3;
   m_sliders[0] = m_dialog.slider0;
   m_sliders[1] = m_dialog.slider1;
   m_sliders[2] = m_dialog.slider2;
   m_sliders[3] = m_dialog.slider3;
   m_checkBoxes[0] = m_dialog.checkBox0;
   m_checkBoxes[1] = m_dialog.checkBox1;

   for (int i = 0; i < s_maxSliders; ++i) {
       connect(m_sliders[i], SIGNAL(valueChanged(int)), 
          this, SLOT(installShaderParameters(int)));
   }
   for (int i = 0; i < s_maxCheckBoxes; ++i) {
       connect(m_checkBoxes[i], SIGNAL(stateChanged(int)), 
          this, SLOT(installShaderParameters(int)));
   }

   ShaderLibrary& library(ShaderLibrary::instance());
   QStringList shaderNames(library.availableShaders());
   m_dialog.shaderCombo->addItems(shaderNames);

   hideOptionControls();
   int index(m_dialog.shaderCombo->findText(Preferences::DefaultShader()));
   if (index >= 0) {
      m_dialog.shaderCombo->setCurrentIndex(index);
      on_shaderCombo_currentIndexChanged(index);
   }
}
Exemple #2
0
void ShaderDialog::copyParametersToDialog(QVariantMap const& map)
{
   QString name;
   double val;
   bool ok;

   hideOptionControls();
   int sliderCount(0);
   int checkBoxCount(0);
   int lightBoxCount(0);

   for (QVariantMap::const_iterator iter = map.begin(); iter != map.end(); ++iter) {
       name = iter.key();

       if (name.startsWith("user_light_")) {
          // lights are either on or off, no dimmers here
          name.replace("user_light_","");
          name.replace("_"," ");
          m_dialog.lightBox->show();
          if (lightBoxCount < s_maxLightBoxes) {
             m_lightBoxes[lightBoxCount]->show();
             m_lightBoxes[lightBoxCount]->setText(name);
             m_lightBoxes[lightBoxCount]->setChecked(iter.value().toBool());
             ++lightBoxCount;
          }

       } else if (name.startsWith("user_")) {
          name.replace("user_","");
          name.replace("_"," ");

          switch (iter.value().type()) {
             case QVariant::Bool:
                if (checkBoxCount < s_maxCheckBoxes) {
                   m_dialog.optionBox->show();
                   m_checkBoxes[checkBoxCount]->show();
                   m_checkBoxes[checkBoxCount]->setText(name);
                   m_checkBoxes[checkBoxCount]->setChecked(iter.value().toBool());
                   ++checkBoxCount;
                }
             break;
             case QVariant::Double:
             case QMetaType::Float:
                val = iter.value().toDouble(&ok);  
                if (ok && val <= 1.0 && sliderCount < s_maxSliders) {  
                   m_labels[sliderCount]->show();
                   m_labels[sliderCount]->setText(name);
                   m_sliders[sliderCount]->show();
                   m_sliders[sliderCount]->setValue(100*val);
                   ++sliderCount;
                }
             break;
             default:
                qDebug() << "Unsupported QVariant type in ShaderDialog" << iter.value().type();
             break;
          }
      }
   }  
}
Exemple #3
0
void ShaderDialog::on_shaderCombo_currentIndexChanged(int)
{
   QString name(m_dialog.shaderCombo->currentText());

   if (!m_shaderLibrary.bindShader(name)) {
      QString msg("Shader not found: ");
      msg += name;
      QMsgBox::warning(this, "IQmol", msg);
      return;
   }

   hideOptionControls();
   copyParametersToDialog(m_shaderLibrary.uniformUserVariableList(name));
   updated();
}
Exemple #4
0
void ShaderDialog::setParameters(QVariantMap const& map)
{
   QString name;
   double val;
   bool ok;

   hideOptionControls();
   int sliderCount(0);
   int checkBoxCount(0);

   for (QVariantMap::const_iterator iter = map.begin(); iter != map.end(); ++iter) {
       name = iter.key();
       name.replace("_"," ");
   
       switch (iter.value().type()) {
          case QVariant::Bool:
             if (checkBoxCount < s_maxCheckBoxes) {
                m_checkBoxes[checkBoxCount]->show();
                m_checkBoxes[checkBoxCount]->setText(name);
                m_checkBoxes[checkBoxCount]->setChecked(iter.value().toBool());
                ++checkBoxCount;
             }
             break;

          case QVariant::Double:
             val = iter.value().toDouble(&ok);  
             if (ok && val <= 1.0 && sliderCount < s_maxSliders) {  
                m_labels[sliderCount]->show();
                m_labels[sliderCount]->setText(name);
                m_sliders[sliderCount]->show();
                m_sliders[sliderCount]->setValue(100*val);
                ++sliderCount;
             }
             break;

          default:
             qDebug() << "Unsupported QVariant type in ShaderDialog" << iter.value().type();
             break;

       }

   }  
}