Commit b8525572 authored by Sylvain Thery's avatar Sylvain Thery
Browse files

add easy color modification interface

parent 7f59e0ce
/*******************************************************************************
* CGoGN: Combinatorial and Geometric modeling with Generic N-dimensional Maps *
* version 0.1 *
* Copyright (C) 2009-2012, IGG Team, LSIIT, University of Strasbourg *
* *
* This library is free software; you can redistribute it and/or modify it *
* under the terms of the GNU Lesser General Public License as published by the *
* Free Software Foundation; either version 2.1 of the License, or (at your *
* option) any later version. *
* *
* This library is distributed in the hope that it will be useful, but WITHOUT *
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or *
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License *
* for more details. *
* *
* You should have received a copy of the GNU Lesser General Public License *
* along with this library; if not, write to the Free Software Foundation, *
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. *
* *
* Web site: http://cgogn.unistra.fr/ *
* Contact information: cgogn@unistra.fr *
* *
*******************************************************************************/
#ifndef __QT_COLORS_CHOOSER_
#define __QT_COLORS_CHOOSER_
#include "Utils/Qt/qtSimple.h"
#include <QColorDialog>
#include <QListWidget>
#include "Utils/Qt/qtpopup.h"
namespace CGoGN
{
namespace Utils
{
namespace QT
{
//forward definition
class SimpleQT;
/**
* Class that allow to interactively & easily modify application color:
* Example of use
* cc = new Utils::QT::ColorsChooser(&sqt)
* cc->addColor(backgroundColor);
* cc->addColor(lineColor);
* cc->show();
* Colors are automatically updated and
*
* Closing the window make a hide() (no destruction)
* To destroy: call delete in exit_cb
*/
class ColorsChooser: public QtPopUp
{
Q_OBJECT
protected:
std::vector<Geom::Vec3f*> m_colors;
std::vector<std::string> m_names;
int m_current;
QListWidget *m_list;
QColorDialog* m_diag;
SimpleQT *m_interf;
/**
* Update callback, on color has changed (optional)
* overload with what you want (glClearColor, setColor of shader ...)
* Called only if interface ptr has been given
* Do not forget to cast interf in the type of your interface !!
*/
virtual void updateCallBack(SimpleQT *interf) {}
public:
/**
* constructor
* @param interf a ptr to the SimpltQT interf (if given the updateCallback and updateGL() are called
*/
ColorsChooser(SimpleQT *interf=NULL);
/**
* add a color ptr the color chooser
* @param ptr the ptr to the color
* @param name display name in interface
*/
unsigned int addColor(Geom::Vec3f* ptr, const std::string& name);
protected slots:
void select_color(int x);
void change_color(const QColor& col);
};
}
}
}
#endif
/*******************************************************************************
* CGoGN: Combinatorial and Geometric modeling with Generic N-dimensional Maps *
* version 0.1 *
* Copyright (C) 2009-2012, IGG Team, LSIIT, University of Strasbourg *
* *
* This library is free software; you can redistribute it and/or modify it *
* under the terms of the GNU Lesser General Public License as published by the *
* Free Software Foundation; either version 2.1 of the License, or (at your *
* option) any later version. *
* *
* This library is distributed in the hope that it will be useful, but WITHOUT *
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or *
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License *
* for more details. *
* *
* You should have received a copy of the GNU Lesser General Public License *
* along with this library; if not, write to the Free Software Foundation, *
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. *
* *
* Web site: http://cgogn.unistra.fr/ *
* Contact information: cgogn@unistra.fr *
* *
*******************************************************************************/
#include "Utils/Qt/qtcolorschooser.h"
#include "Utils/Qt/qtSimple.h"
namespace CGoGN
{
namespace Utils
{
namespace QT
{
ColorsChooser::ColorsChooser(SimpleQT *interf):
m_interf(interf)
{
m_list = new QListWidget();
m_diag = new QColorDialog();
m_diag->setOption(QColorDialog::NoButtons);
addWidget(m_list,0,0);
addWidget(m_diag,0,1);
connect(m_list, SIGNAL(currentRowChanged(int)), this, SLOT(select_color(int)));
connect(m_diag, SIGNAL( currentColorChanged(const QColor&)), this, SLOT(change_color(const QColor&)));
}
unsigned int ColorsChooser::addColor(Geom::Vec3f* ptr, const std::string& name)
{
m_colors.push_back(ptr);
m_list->addItem(QString(name.c_str()));
return m_colors.size()-1;
}
void ColorsChooser::select_color(int x)
{
m_current = x;
const Geom::Vec3f& col = *m_colors[x];
m_diag->show();
m_diag->setCurrentColor(QColor(int(255.0f*col[0]), int(255.0f*col[1]), int(255.0f*col[2])) );
}
void ColorsChooser::change_color(const QColor& col)
{
Geom::Vec3f& out = *m_colors[m_current];
out[0] = float(col.redF());
out[1] = float(col.greenF());
out[2] = float(col.blueF());
if (m_interf)
{
updateCallBack(m_interf);
m_interf->updateGL();
}
}
}
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment