TransferFunctionEditor::TransferFunctionEditor()
{
	renderer = NULL;

  //! Load color maps.
  loadColorMaps();

  //! Setup UI elments.
  QVBoxLayout * layout = new QVBoxLayout();
  layout->setSizeConstraint(QLayout::SetMinimumSize);
  setLayout(layout);

  //! Form layout.
  QWidget *formWidget = new QWidget();
  QGridLayout *gridLayout = new QGridLayout();
  formWidget->setLayout(gridLayout);
  layout->addWidget(formWidget);

  //! Color map choice.
  for(unsigned int i=0; i<colorMaps.size(); i++)
	{
		std::string name = cmap_name(colorMaps[i].getName());
    colorMapComboBox.addItem(name.c_str());
	}

	gridLayout->addWidget(new QLabel("Colormap"), 0, 0, 1, 1);
	gridLayout->addWidget(&colorMapComboBox, 0, 1, 1, 3);

	gridLayout->addWidget(new QLabel("Min"), 1, 0, 1, 1);
	rangeMin.setValidator(new QDoubleValidator());
	connect(&rangeMin, SIGNAL(returnPressed()), this, SLOT(rangeMinChanged()));
	gridLayout->addWidget(&rangeMin, 1, 1, 1, 1);
	

	gridLayout->addWidget(new QLabel("Max"), 1, 2, 1, 1);
	rangeMax.setValidator(new QDoubleValidator());
	connect(&rangeMax, SIGNAL(returnPressed()), this, SLOT(rangeMaxChanged()));
	gridLayout->addWidget(&rangeMax, 1, 3, 1, 1);

  //! Widget containing opacity transfer function widget and scaling slider.
  QWidget * transferFunctionAlphaGroup = new QWidget();
  QHBoxLayout * hboxLayout = new QHBoxLayout();
  transferFunctionAlphaGroup->setLayout(hboxLayout);

  //! Opacity transfer function widget.
  hboxLayout->addWidget(&transferFunctionAlphaWidget);

  //! Opacity scaling slider, defaults to median value in range.
  transferFunctionAlphaScalingSlider.setValue(int(transferFunction.GetScale() * (transferFunctionAlphaScalingSlider.minimum() + transferFunctionAlphaScalingSlider.maximum())));
  transferFunctionAlphaScalingSlider.setOrientation(Qt::Vertical);
  hboxLayout->addWidget(&transferFunctionAlphaScalingSlider);

  gridLayout->addWidget(transferFunctionAlphaGroup, 2, 0, 1, 4);
  connect(&colorMapComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(setColorMapIndex(int)));
  connect(&transferFunctionAlphaWidget, SIGNAL(transferFunctionChanged()), this, SLOT(alphaWidgetChanged()));
  connect(&transferFunctionAlphaScalingSlider, SIGNAL(valueChanged(int)), this, SLOT(alphaWidgetChanged()));

	setColorMapIndex(0);
}
void Colormap_continuous_controller::init_colormap_selector(){

	SmartPtr<Named_interface> ni =
	Root::instance()->interface( colorscale_manager );
	Manager* cmap_manager = dynamic_cast<Manager*>( ni.raw_ptr() );
	appli_assert( cmap_manager );

	for( Manager::interface_iterator cmap_it = cmap_manager->begin_interfaces();
	   cmap_it != cmap_manager->end_interfaces(); ++cmap_it ) {
	QString cmap_name( cmap_manager->name( cmap_it->raw_ptr() ).c_str() );
	colormap_selector_->addItem( cmap_name );
	}
  int id = colormap_selector_->findText("rainbow");
  if(id >= 0 ) {
    colormap_selector_->setCurrentIndex(id);
  }
}
void TransferFunctionEditor::addColorMap(VColorMap cmap)
{
	colorMaps.push_back(cmap);
  colorMapComboBox.addItem(cmap_name(colorMaps[colorMaps.size()-1].getName()).c_str());
  colorMapComboBox.setCurrentIndex(colorMaps.size()-1);
}