All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
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(0),
45  m_colorMapWidget(0),
46  m_overlapBehaviorWidget(0),
47  m_contrastWidget(0),
48  m_shadedReliefWidget(0),
49  m_imageOutlineWidget(0),
50  m_sliderWidget(0),
51  m_rasterWidget(0),
52  m_symbolizer(new te::se::RasterSymbolizer),
53  m_colorMap(0),
54  m_property(0),
55  m_raster(0)
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.toStdString()));
111  }
112 
113  if(m_channelSelectionWidget)
114  {
115  m_symbolizer->setChannelSelection(m_channelSelectionWidget->getChannelSelection());
116  }
117 
118  if(m_contrastWidget)
119  {
120  m_symbolizer->setContrastEnhancement(m_contrastWidget->getContrastEnhancement());
121  }
122 
123  if(m_imageOutlineWidget)
124  {
125  m_symbolizer->setImageOutline(m_imageOutlineWidget->getImageOutline());
126  }
127 
128  if(m_overlapBehaviorWidget)
129  {
130  m_symbolizer->setOverlapBehavior(m_overlapBehaviorWidget->getOverlapBehavior());
131  }
132 
133  if(m_shadedReliefWidget)
134  {
135  m_symbolizer->setShadedRelief(m_shadedReliefWidget->getShadedRelief());
136  }
137 
138  if(m_colorMapWidget)
139  {
140  m_symbolizer->setColorMap(m_colorMap);
141  }
142 
143  if(m_rasterWidget)
144  {
145  te::se::RasterSymbolizer* rs = m_rasterWidget->getRasterSymbolizer();
146 
147  if(rs)
148  {
149  m_symbolizer->setGain(rs->getGain()->clone());
150  m_symbolizer->setOffset(rs->getOffset()->clone());
151  m_symbolizer->setOpacity(rs->getOpacity()->clone());
152  m_symbolizer->setChannelSelection(rs->getChannelSelection()->clone());
153 
154  delete rs;
155  }
156  }
157 
158  return m_symbolizer->clone();
159 }
160 
162 {
163  if(m_property)
164  {
165  if(m_channelSelectionWidget)
166  {
167  m_channelSelectionWidget->setProperty(m_property->getBandProperties());
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"));
181  m_sliderWidget->setMinMaxValues(0, 100);
182  m_sliderWidget->setDefaultValue(100);
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 
195  if(!m_channelSelectionWidget)
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  {
206  m_channelSelectionWidget->setProperty(m_property->getBandProperties());
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 
224  m_colorMap = new te::se::ColorMap();
225  m_colorMapWidget->setColorMap(m_colorMap);
226 
227  if(m_raster)
228  {
229  m_colorMapWidget->setRaster(m_raster);
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 
253  if(!m_imageOutlineWidget)
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 
262  if(m_symbolizer->getImageOutline())
263  {
264  m_imageOutlineWidget->setImageOutline(m_symbolizer->getImageOutline());
265  }
266  }
267 }
268 
270 {
271  m_ui->m_stackedWidget->setCurrentIndex(6);
272 
273  if(!m_overlapBehaviorWidget)
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 
288  if(!m_shadedReliefWidget)
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  {
314  m_rasterWidget->setBandProperty(m_property->getBandProperties());
315  }
316 
317  m_rasterWidget->setRasterSymbolizer(m_symbolizer);
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.
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
void setRasterSymbolizer(const te::se::RasterSymbolizer *rs)
void setGain(ParameterValue *p)
A dialog used to build a ImageOutlineWidget element.
te::se::ChannelSelection * getChannelSelection() const
A widget used to configure a Raster Symbolizer SE element.
A widget used to build OverlapBehavior element.
void setImageOutline(const te::se::ImageOutline *io)
The "ParameterValueType" uses WFS-Filter expressions to give values for SE graphic parameters...
Raster property.
A widget used to build.
ParameterValue * getGain() const
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.
An abstract class for raster data strucutures.
Definition: Raster.h:71
ParameterValue * getOpacity() const
A widget used to configure a Raster Symbolizer SE element.
A dialog used to build a ContrastEnhancementWidget element.
The RasterSymbolizer describes how to render raster/matrix-coverage data (e.g., satellite photos...
te::se::Symbolizer * getRasterSymbolizer() const
ParameterValue * clone() const
It creates a new copy of this object.
std::auto_ptr< Ui::RasterSymbolizerDialogForm > m_ui
Dialog form.
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.
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.
A dialog used to build a ChannelSelection element.
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:60