28 #include "../../../color/ColorBar.h"
29 #include "../../../common/STLUtils.h"
30 #include "../../../datatype.h"
31 #include "../../../maptools/GroupingAlgorithms.h"
32 #include "../../../maptools/Utils.h"
33 #include "../../../raster.h"
34 #include "../../../raster/RasterSummary.h"
35 #include "../../../raster/RasterSummaryManager.h"
36 #include "../../../se/ColorMap.h"
37 #include "../../../se/Categorize.h"
38 #include "../../../se/Enums.h"
39 #include "../../../se/Interpolate.h"
40 #include "../../../se/InterpolationPoint.h"
41 #include "../../../se/ParameterValue.h"
42 #include "../../widgets/colorbar/ColorBar.h"
44 #include "ui_ColorMapWidgetForm.h"
47 #include <QtGui/QPainter>
48 #include <QtGui/QValidator>
56 m_ui(new Ui::ColorMapWidgetForm),
62 QGridLayout* l =
new QGridLayout(
m_ui->m_colorBarWidget);
63 l->setContentsMargins(0,0,0,0);
67 m_ui->m_minValueLineEdit->setValidator(
new QDoubleValidator(
this));
68 m_ui->m_maxValueLineEdit->setValidator(
new QDoubleValidator(
this));
74 connect(
m_ui->m_bandComboBox, SIGNAL(activated(QString)),
this, SLOT(
onBandSelected(QString)));
93 m_ui->m_bandComboBox->clear();
95 for(
int i = 0; i < nBands; ++i)
100 m_ui->m_bandComboBox->addItem(strBand);
104 onBandSelected(m_ui->m_bandComboBox->itemText(0));
118 return m_cm->
clone();
123 if(m_ui->m_bandComboBox->count() != 0)
125 return m_ui->m_bandComboBox->currentText().toStdString();
135 m_cbWidget->setHeight(20);
136 m_cbWidget->setColorBar(m_cb);
137 m_cbWidget->setScaleVisible(
false);
139 m_ui->m_transformComboBox->clear();
148 m_ui->m_tableWidget->setRowCount(0);
155 if(m_cm->getCategorize())
157 for(
int i = 0; i < m_ui->m_transformComboBox->count(); ++i)
160 m_ui->m_transformComboBox->setCurrentIndex(i);
163 std::vector<te::se::ParameterValue*> t = m_cm->getCategorize()->getThresholds();
164 std::vector<te::se::ParameterValue*> tV = m_cm->getCategorize()->getThresholdValues();
166 m_ui->m_slicesSpinBox->setValue(tV.size() - 2);
168 m_ui->m_tableWidget->setRowCount(tV.size() - 2);
170 for(
size_t i = 1; i < tV.size() - 1; ++i)
173 std::string lowerLimit =
"";
174 std::string upperLimit =
"";
182 else if(i == tV.size() - 1)
196 QTableWidgetItem* item =
new QTableWidgetItem();
197 item->setBackgroundColor(color);
198 item->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
199 m_ui->m_tableWidget->setItem(i - 1, 1, item);
202 std::string range = lowerLimit +
" - " + upperLimit;
203 QTableWidgetItem* itemRange =
new QTableWidgetItem();
204 itemRange->setText(range.c_str());
205 itemRange->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
206 m_ui->m_tableWidget->setItem(i - 1, 0, itemRange);
209 std::string rangeStr = lowerLimit +
" to " + upperLimit;
210 QTableWidgetItem* itemRangeStr =
new QTableWidgetItem();
211 itemRangeStr->setText(rangeStr.c_str());
212 itemRangeStr->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
213 m_ui->m_tableWidget->setItem(i - 1, 2, itemRangeStr);
216 else if(m_cm->getInterpolate())
218 for(
int i = 0; i < m_ui->m_transformComboBox->count(); ++i)
221 m_ui->m_transformComboBox->setCurrentIndex(i);
224 std::vector<te::se::InterpolationPoint*> ip = m_cm->getInterpolate()->getInterpolationPoints();
226 m_ui->m_slicesSpinBox->setValue(ip.size() - 1);
228 m_ui->m_tableWidget->setRowCount(ip.size() - 1);
230 for(
size_t i = 0; i < ip.size() - 1; ++i)
240 valStrBegin.setNum(ipItem->
getData());
241 valStrEnd.setNum(ip[i+1]->getData());
244 valStr.append(valStrBegin);
245 valStr.append(
" - ");
246 valStr.append(valStrEnd);
249 QTableWidgetItem* item =
new QTableWidgetItem();
250 item->setBackgroundColor(color);
251 item->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
252 m_ui->m_tableWidget->setItem(i, 1, item);
255 QTableWidgetItem* itemRange =
new QTableWidgetItem();
256 itemRange->setText(valStr);
257 itemRange->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
258 m_ui->m_tableWidget->setItem(i, 0, itemRange);
261 QTableWidgetItem* itemRangeStr =
new QTableWidgetItem();
262 itemRangeStr->setText(valStr);
263 itemRangeStr->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
264 m_ui->m_tableWidget->setItem(i, 2, itemRangeStr);
268 m_ui->m_tableWidget->resizeColumnToContents(0);
269 m_ui->m_tableWidget->resizeColumnToContents(1);
274 int sliceValue = m_ui->m_slicesSpinBox->value();
276 std::vector<te::color::RGBAColor> colorVec = m_cb->getSlices(sliceValue);
278 std::vector<te::map::GroupingItem*> legVec;
280 std::vector<double> vec;
281 vec.push_back(m_ui->m_minValueLineEdit->text().toDouble());
282 vec.push_back(m_ui->m_maxValueLineEdit->text().toDouble());
288 c->setFallbackValue(
"#000000");
291 QColor cWhite(Qt::white);
292 std::string colorWhiteStr = cWhite.name().toLatin1().data();
297 for(
size_t i = 0; i < colorVec.size(); ++i)
299 QColor color(colorVec[i].getRed(), colorVec[i].getGreen(), colorVec[i].getBlue(), colorVec[i].getAlpha());
301 std::string rangeStr = legVec[i]->getLowerLimit();
302 std::string colorStr = color.name().toStdString();
307 if(i == colorVec.size() - 1)
309 rangeStr = legVec[i]->getUpperLimit();
321 m_cm->setCategorize(c);
322 m_cm->setInterpolate(0);
328 int sliceValue = m_ui->m_slicesSpinBox->value();
330 std::vector<te::color::RGBAColor> colorVec = m_cb->getSlices(sliceValue + 1);
332 std::vector<te::map::GroupingItem*> legVec;
334 std::vector<double> vec;
335 vec.push_back(m_ui->m_minValueLineEdit->text().toDouble());
336 vec.push_back(m_ui->m_maxValueLineEdit->text().toDouble());
343 interpolate->setFallbackValue(
"#000000");
348 for(
size_t i = 0; i < colorVec.size(); ++i)
350 QColor color(colorVec[i].getRed(), colorVec[i].getGreen(), colorVec[i].getBlue(), colorVec[i].getAlpha());
352 if(i == colorVec.size() - 1)
354 QString rangeStr = legVec[i - 1]->getUpperLimit().c_str();
355 std::string colorStr = color.name().toLatin1().data();
359 ip->
setData(rangeStr.toDouble());
362 interpolate->add(ip);
366 QString rangeStr = legVec[i]->getLowerLimit().c_str();
367 std::string colorStr = color.name().toLatin1().data();
371 ip->
setData(rangeStr.toDouble());
374 interpolate->add(ip);
380 m_cm->setInterpolate(interpolate);
381 m_cm->setCategorize(0);
393 int index = m_ui->m_transformComboBox->currentIndex();
395 int type = m_ui->m_transformComboBox->itemData(index).toInt();
399 buildCategorizationMap();
403 buildInterpolationMap();
410 emit applyPushButtonClicked();
424 const std::complex<double>* cmin = rsMin->at(0).m_minVal;
425 const std::complex<double>* cmax = rsMax->at(0).m_maxVal;
426 double min = cmin->real();
427 double max = cmax->real();
431 m_ui->m_minValueLineEdit->setText(strMin);
435 m_ui->m_maxValueLineEdit->setText(strMax);
boost::ptr_vector< BandSummary > RasterSummary
RasterSummary is just a typedef of a boost::ptr_vector.
void buildCategorizationMap()
It models the concept of color bar.
void setData(const double &d)
te::se::ColorMap * getColorMap()
They are used to define a graph of points.
void setColorMap(te::se::ColorMap *cm)
ColorMapWidget(QWidget *parent=0, Qt::WindowFlags f=0)
Constructs a ShadedReliefWidget dialog which is a child of parent, with widget flags set to f...
The transformation of continuous values to distinct values (Categorize function). ...
It QWidget implementation of color bar.
virtual std::size_t getNumberOfBands() const =0
Returns the number of bands (dimension of cells attribute values) in the raster.
void setRaster(te::rst::Raster *r)
The transformation of continuous values to a number of values (Interpolate function).
void setValue(ParameterValue *v)
te::qt::widgets::colorbar::ColorBar * m_cbWidget
QWT widget for color bar.
A ColorMap defines either the colors of a pallette-type raster source or the mapping of numeric pixel...
std::auto_ptr< Ui::ColorMapWidgetForm > m_ui
Dialog form.
void GroupingByEqualSteps(iterator begin, iterator end, int nSteps, std::vector< te::map::GroupingItem * > &legend, int precision=0, bool countElements=true)
It groups the values defined by a range of iterators using the equal steps algorithm.
void onBandSelected(QString value)
void updateUi()
Updates the widget form based on internal fill element.
A helper class for 32-bit RGBA (Red-Green-Blue-Alpha channel) color.
std::string getCurrentBand()
void onApplyPushButtonClicked()
TEMAPEXPORT std::string GetString(const te::se::ParameterValue *param)
Gets the parameter value as string.
ParameterValue * getValue() const
#define TE_OPAQUE
For an RGBA color this is the value of the alpha-channel for totally opaque.
void buildInterpolationMap()
An abstract class for raster data strucutures.
void initialize()
Internal method to initialize the widget (e.g.: color, combos, icons, etc.)
static RasterSummaryManager & getInstance()
It returns a reference to the singleton instance.
The "ParameterValueType" uses WFS-Filter expressions to give values for SE graphic parameters...
~ColorMapWidget()
Destructor.