RasterSymbolizerDialog.cpp
Go to the documentation of this file.
1 /* Copyright (C) 2008 National Institute For Space Research (INPE) - Brazil.
2 
3  This file is part of the TerraLib - a Framework for building GIS enabled applications.
4 
5  TerraLib is free software: you can redistribute it and/or modify
6  it under the terms of the GNU Lesser General Public License as published by
7  the Free Software Foundation, either version 3 of the License,
8  or (at your option) any later version.
9 
10  TerraLib is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU Lesser General Public License for more details.
14 
15  You should have received a copy of the GNU Lesser General Public License
16  along with TerraLib. See COPYING. If not, write to
17  TerraLib Team at <terralib-team@terralib.org>.
18  */
19 
20 /*!
21  \file terralib/qt/widgets/se/RasterSymbolizerDialog.cpp
22 
23  \brief A dialog used to build a RasterSymbolizer element.
24 */
25 
26 // TerraLib
27 #include "../../../common.h"
28 #include "../../../raster.h"
29 #include "../../../se.h"
30 #include "../utils/HorizontalSliderWidget.h"
31 #include "ChannelSelectionWidget.h"
32 #include "ColorMapWidget.h"
34 #include "ImageOutlineWidget.h"
35 #include "OverlapBehaviorWidget.h"
36 #include "RasterSymbolizerDialog.h"
37 #include "RasterSymbolizerWidget.h"
38 #include "ShadedReliefWidget.h"
39 #include "ui_RasterSymbolizerDialogForm.h"
40 
42  : QDialog(parent, f),
43  m_ui(new Ui::RasterSymbolizerDialogForm),
44  m_channelSelectionWidget(nullptr),
45  m_colorMapWidget(nullptr),
46  m_overlapBehaviorWidget(nullptr),
47  m_contrastWidget(nullptr),
48  m_shadedReliefWidget(nullptr),
49  m_imageOutlineWidget(nullptr),
50  m_sliderWidget(nullptr),
51  m_rasterWidget(nullptr),
52  m_symbolizer(new te::se::RasterSymbolizer),
53  m_colorMap(nullptr),
54  m_property(nullptr),
55  m_raster(nullptr)
56 
57 {
58  m_ui->setupUi(this);
59 
60  //connect tool buttons with slot functions
61 
62  //connect(m_ui->m_opacityToolButton, SIGNAL(clicked()), this, SLOT(onOpacityClicked()));
63  //connect(m_ui->m_channelSelectionToolButton, SIGNAL(clicked()), this, SLOT(onChannelSelectionClicked()));
64  connect(m_ui->m_colorMapToolButton, SIGNAL(clicked()), this, SLOT(onColorMapClicked()));
65  //connect(m_ui->m_contrastToolButton, SIGNAL(clicked()), this, SLOT(onContrastEnhancementClicked()));
66  connect(m_ui->m_imageOutlinetoolButton, SIGNAL(clicked()), this, SLOT(onImageOutlineClicked()));
67  connect(m_ui->m_overlapBehaviorToolButton, SIGNAL(clicked()), this, SLOT(onOverlapBehaviorClicked()));
68  connect(m_ui->m_shadedReliefToolButton, SIGNAL(clicked()), this, SLOT(onShadedReliefClicked()));
69  connect(m_ui->m_visualToolButton, SIGNAL(clicked()), this, SLOT(onVisualClicked()));
70 
71  m_ui->m_stackedWidget->setCurrentIndex(0);
72 }
73 
75 {
76  delete m_symbolizer;
77 }
78 
80 {
81  assert(r);
82  m_raster = r;
83 
84  assert(p);
85  m_property = p;
86 
87  updateUi();
88 }
89 
91 {
92  assert(rs);
93 
94  delete m_symbolizer;
95 
96  m_symbolizer = static_cast<te::se::RasterSymbolizer*>(rs->clone());
97 }
98 
100 {
101  if(m_sliderWidget)
102  {
103  // if opacity value is betwen 0 and 1. The value used from slider must be
104  // changed to this range.
105  int opacity = m_sliderWidget->getValue();
106  double seOpacity = opacity / 100.;
107  QString qStrOpacity;
108  qStrOpacity.setNum(seOpacity);
109 
110  m_symbolizer->setOpacity(new te::se::ParameterValue(qStrOpacity.toUtf8().data()));
111  }
112 
114  {
116  }
117 
118  if(m_contrastWidget)
119  {
121  }
122 
124  {
126  }
127 
129  {
131  }
132 
134  {
136  }
137 
138  if(m_colorMapWidget)
139  {
141  }
142 
143  if(m_rasterWidget)
144  {
146 
147  if(rs)
148  {
149  m_symbolizer->setGain(rs->getGain()->clone());
153 
154  delete rs;
155  }
156  }
157 
158  return m_symbolizer->clone();
159 }
160 
162 {
163  if(m_property)
164  {
166  {
168  }
169  }
170 }
171 
173 {
174  m_ui->m_stackedWidget->setCurrentIndex(1);
175 
176  if(!m_sliderWidget)
177  {
178  m_sliderWidget = new te::qt::widgets::HorizontalSliderWidget(m_ui->m_stackedWidget->currentWidget());
179 
180  m_sliderWidget->setTitle(tr("Opacity"));
183 
184  QGridLayout* layout = new QGridLayout(m_ui->m_stackedWidget->currentWidget());
185 
186  layout->setAlignment(Qt::AlignTop);
187  layout->addWidget(m_sliderWidget);
188  }
189 }
190 
192 {
193  m_ui->m_stackedWidget->setCurrentIndex(2);
194 
196  {
197  m_channelSelectionWidget = new te::qt::widgets::ChannelSelectionWidget(m_ui->m_stackedWidget->currentWidget());
198 
199  QGridLayout* layout = new QGridLayout(m_ui->m_stackedWidget->currentWidget());
200 
201  layout->setAlignment(Qt::AlignTop);
202  layout->addWidget(m_channelSelectionWidget);
203 
204  if(m_property)
205  {
207  }
208  }
209 }
210 
212 {
213  m_ui->m_stackedWidget->setCurrentIndex(3);
214 
215  if(!m_colorMapWidget)
216  {
217  m_colorMapWidget = new te::qt::widgets::ColorMapWidget(m_ui->m_stackedWidget->currentWidget());
218 
219  QGridLayout* layout = new QGridLayout(m_ui->m_stackedWidget->currentWidget());
220 
221  layout->setAlignment(Qt::AlignTop);
222  layout->addWidget(m_colorMapWidget);
223 
226 
227  if(m_raster)
228  {
230  }
231  }
232 }
233 
235 {
236  m_ui->m_stackedWidget->setCurrentIndex(4);
237 
238  if(!m_contrastWidget)
239  {
240  m_contrastWidget = new te::qt::widgets::ContrastEnhancementWidget(m_ui->m_stackedWidget->currentWidget());
241 
242  QGridLayout* layout = new QGridLayout(m_ui->m_stackedWidget->currentWidget());
243 
244  layout->setAlignment(Qt::AlignTop);
245  layout->addWidget(m_contrastWidget);
246  }
247 }
248 
250 {
251  m_ui->m_stackedWidget->setCurrentIndex(5);
252 
254  {
255  m_imageOutlineWidget = new te::qt::widgets::ImageOutlineWidget(m_ui->m_stackedWidget->currentWidget());
256 
257  QGridLayout* layout = new QGridLayout(m_ui->m_stackedWidget->currentWidget());
258 
259  layout->setAlignment(Qt::AlignTop);
260  layout->addWidget(m_imageOutlineWidget);
261 
263  {
265  }
266  }
267 }
268 
270 {
271  m_ui->m_stackedWidget->setCurrentIndex(6);
272 
274  {
275  m_overlapBehaviorWidget = new te::qt::widgets::OverlapBehaviorWidget(m_ui->m_stackedWidget->currentWidget());
276 
277  QGridLayout* layout = new QGridLayout(m_ui->m_stackedWidget->currentWidget());
278 
279  layout->setAlignment(Qt::AlignTop);
280  layout->addWidget(m_overlapBehaviorWidget);
281  }
282 }
283 
285 {
286  m_ui->m_stackedWidget->setCurrentIndex(7);
287 
289  {
290  m_shadedReliefWidget = new te::qt::widgets::ShadedReliefWidget(m_ui->m_stackedWidget->currentWidget());
291 
292  QGridLayout* layout = new QGridLayout(m_ui->m_stackedWidget->currentWidget());
293 
294  layout->setAlignment(Qt::AlignTop);
295  layout->addWidget(m_shadedReliefWidget);
296  }
297 }
298 
300 {
301  m_ui->m_stackedWidget->setCurrentIndex(1);
302 
303  if(!m_rasterWidget)
304  {
305  m_rasterWidget = new te::qt::widgets::RasterSymbolizerWidget(m_ui->m_stackedWidget->currentWidget());
306 
307  QGridLayout* layout = new QGridLayout(m_ui->m_stackedWidget->currentWidget());
308 
309  layout->setAlignment(Qt::AlignTop);
310  layout->addWidget(m_rasterWidget);
311 
312  if(m_property)
313  {
315  }
316 
318  }
319 }
A widget used to build Symbolizer element.
A dialog used to build a ShadedRelief element.
A dialog used to build a ColorMap element.
te::qt::widgets::ChannelSelectionWidget * m_channelSelectionWidget
Channel Selection Widget form.
ChannelSelection * clone() const
It creates a new copy of this object.
A Symbolizer describes how a feature is to appear on a map.
Definition: Symbolizer.h:80
ParameterValue * getOffset() const
te::se::ImageOutline * getImageOutline() const
void setRasterSymbolizer(const te::se::RasterSymbolizer *rs)
void setGain(ParameterValue *p)
void setShadedRelief(ShadedRelief *s)
te::se::ContrastEnhancement * getContrastEnhancement() const
A dialog used to build a ImageOutlineWidget element.
te::se::ChannelSelection * getChannelSelection() const
A widget used to configure a Raster Symbolizer SE element.
std::unique_ptr< Ui::RasterSymbolizerDialogForm > m_ui
Dialog form.
te::se::RasterSymbolizer * getRasterSymbolizer()
te::se::ColorMap * m_colorMap
SE Color Map element.
A widget used to build OverlapBehavior element.
void setImageOutline(const te::se::ImageOutline *io)
te::rst::Raster * m_raster
Raster Object.
void setContrastEnhancement(ContrastEnhancement *c)
The "ParameterValueType" uses WFS-Filter expressions to give values for SE graphic parameters...
Raster property.
A widget used to build.
ParameterValue * getGain() const
te::qt::widgets::ShadedReliefWidget * m_shadedReliefWidget
Shaded Relief Widget form.
te::qt::widgets::RasterSymbolizerWidget * m_rasterWidget
Raster Symbolizer widget.
A dialog used to build a OverlapBehaviorWidget element.
A widget used to build ContrastEnhancement element.
void setProperty(std::vector< te::rst::BandProperty * > &p)
Sets the band information.
void setColorMap(te::se::ColorMap *cm)
An abstract class for raster data strucutures.
te::qt::widgets::ContrastEnhancementWidget * m_contrastWidget
Constrast Widget form.
ParameterValue * getOpacity() const
URI C++ Library.
Definition: Attributes.h:37
A widget used to configure a Raster Symbolizer SE element.
void setChannelSelection(ChannelSelection *c)
A dialog used to build a ContrastEnhancementWidget element.
te::qt::widgets::HorizontalSliderWidget * m_sliderWidget
Slider widget used for opacity information.
void setRaster(te::rst::Raster *r)
te::se::RasterSymbolizer::OverlapBehavior getOverlapBehavior() const
te::gm::Polygon * p
te::rst::RasterProperty * m_property
Raster Property object.
The RasterSymbolizer describes how to render raster/matrix-coverage data (e.g., satellite photos...
void setOpacity(ParameterValue *p)
te::se::Symbolizer * getRasterSymbolizer() const
te::se::ShadedRelief * getShadedRelief() const
ParameterValue * clone() const
It creates a new copy of this object.
void setOverlapBehavior(OverlapBehavior b)
void setRasterSymbolizer(te::se::RasterSymbolizer *rs)
te::se::ChannelSelection * getChannelSelection() const
void setOffset(ParameterValue *p)
A widget used to build.
RasterSymbolizerDialog(QWidget *parent=0, Qt::WindowFlags f=0)
Constructs a RasterSymbolizerDialog dialog which is a child of parent, with widget flags set to f...
void setRasterProperty(te::rst::Raster *r, te::rst::RasterProperty *p)
Sets the raster information.
void setColorMap(ColorMap *c)
Symbolizer * clone() const
It creates a new copy of this object.
void updateUi()
Updates the widget form based on internal mark element.
A widget used to build.
void setImageOutline(ImageOutline *i)
A dialog used to build a ChannelSelection element.
std::vector< te::rst::BandProperty * > & getBandProperties()
Returns a reference to the list of bands definitions.
te::qt::widgets::ImageOutlineWidget * m_imageOutlineWidget
Image Outline Widget form.
void setBandProperty(std::vector< te::rst::BandProperty * > bp)
A ColorMap defines either the colors of a pallette-type raster source or the mapping of numeric pixel...
Definition: ColorMap.h:61
te::qt::widgets::OverlapBehaviorWidget * m_overlapBehaviorWidget
Overlap Behavior Widget form.
te::qt::widgets::ColorMapWidget * m_colorMapWidget
Color Map Widget form.
te::se::ImageOutline * getImageOutline() const
te::se::RasterSymbolizer * m_symbolizer
SE Raster Symbolizer element.