All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
StyleDockWidget.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/StyleDockWidget.cpp
22 
23  \brief A dock widget used control the geographic data style using SE elements and a property browser to show its properties.
24 */
25 
26 // TerraLib
27 #include "../../../dataaccess/utils/Utils.h"
28 #include "../../../maptools/AbstractLayer.h"
29 #include "../../../raster/RasterProperty.h"
30 #include "../../../raster/BandProperty.h"
32 #include "LineSymbolizerProperty.h"
34 #include "RasterSymbolizerWidget.h"
35 #include "StyleControllerWidget.h"
36 #include "StyleExplorer.h"
37 #include "StyleDockWidget.h"
38 
39 // Qt
40 #include <QLayout>
41 #include <QScrollArea>
42 
43 te::qt::widgets::StyleDockWidget::StyleDockWidget(const QString& title, QWidget* parent, Qt::WindowFlags flags)
44  : QDockWidget(title, parent, flags),
45  m_currentLayer(0)
46 {
47  // Build form
48  this->setWidget(buildUi());
49 }
50 
52 {
53 }
54 
56 {
57  m_currentLayer = layer;
58  m_styleController->setStyle(style);
59 }
60 
62 {
63  m_tabWidget->setTabEnabled(0, status); // Polygons
64  m_tabWidget->setTabEnabled(1, status); // Lines
65  m_tabWidget->setTabEnabled(2, status); // Points
66  m_tabWidget->setTabEnabled(3, status); // Raster
67 }
68 
70 {
71 }
72 
74 {
75  // The result widget
76  QWidget* w = new QWidget(this);
77 
78  QGridLayout* layout = new QGridLayout(w);
79 
80  // StyleExplorer
81  m_styleController = new te::qt::widgets::StyleControllerWidget(w);
82  layout->addWidget(m_styleController, 0, 0);
83  m_styleController->setMaximumHeight(300);
84 
85  connect(m_styleController, SIGNAL(mapRefresh()), this, SLOT(onMapRefresh()));
86  connect(m_styleController->getStyleExplorer(), SIGNAL(symbolizerClicked(te::se::Symbolizer*)), this, SLOT(onSymbolizerSelected(te::se::Symbolizer*)));
87  connect(this, SIGNAL(symbolizerChanged(te::se::Symbolizer*)), m_styleController->getStyleExplorer(), SLOT(onSymbolizerChanged(te::se::Symbolizer*)));
88 
89  // Tab widget
90  m_tabWidget = new QTabWidget(w);
91  m_tabWidget->setTabPosition(QTabWidget::South);
92  layout->addWidget(m_tabWidget, 1, 0);
93  m_tabWidget->setMinimumWidth(360);
94 
95  // PolygonSymbolizer Property
96  m_polyWidget = new te::qt::widgets::PolygonSymbolizerProperty(m_tabWidget);
97  m_tabWidget->addTab(m_polyWidget, tr("Polygons"));
98  connect(m_polyWidget, SIGNAL(symbolizerChanged()), this, SLOT(onPolygonSymbolizerChanged()));
99 
100  // LineSymbolizer Property
101  m_lineWidget = new te::qt::widgets::LineSymbolizerProperty(m_tabWidget);
102  m_tabWidget->addTab(m_lineWidget, tr("Lines"));
103  connect(m_lineWidget, SIGNAL(symbolizerChanged()), this, SLOT(onLineSymbolizerChanged()));
104 
105  // Point Symbolizer Widget
106  m_pointWidget = new te::qt::widgets::PointSymbolizerProperty(m_tabWidget);
107  m_tabWidget->addTab(m_pointWidget, tr("Points"));
108  connect(m_pointWidget, SIGNAL(symbolizerChanged()), this, SLOT(onPointSymbolizerChanged()));
109 
110  // RasterSymbolizer Property Widget
111  m_rasterWidget = new te::qt::widgets::RasterSymbolizerWidget(m_tabWidget);
112  m_tabWidget->addTab(m_rasterWidget, tr("Raster"));
113  connect(m_rasterWidget, SIGNAL(symbolizerChanged()), this, SLOT(onRasterSymbolizerChanged()));
114 
115  setTabStatus(false);
116 
117  return w;
118 }
119 
121 {
122  setTabStatus(false);
123 
124  if(s->getType() == "PolygonSymbolizer")
125  {
126  m_tabWidget->setCurrentWidget(m_polyWidget);
127  m_tabWidget->setTabEnabled(0, true);
128  m_polyWidget->setSymbolizer(dynamic_cast<te::se::PolygonSymbolizer*>(s));
129  }
130  else if(s->getType() == "LineSymbolizer")
131  {
132  m_tabWidget->setCurrentWidget(m_lineWidget);
133  m_tabWidget->setTabEnabled(1, true);
134  m_lineWidget->setSymbolizer(dynamic_cast<te::se::LineSymbolizer*>(s));
135  }
136  else if(s->getType() == "PointSymbolizer")
137  {
138  m_tabWidget->setCurrentWidget(m_pointWidget);
139  m_tabWidget->setTabEnabled(2, true);
140  m_pointWidget->setSymbolizer(dynamic_cast<te::se::PointSymbolizer*>(s));
141  }
142  else if(s->getType() == "RasterSymbolizer")
143  {
144  m_tabWidget->setCurrentIndex(3);
145  m_tabWidget->setTabEnabled(3, true);
146 
147  std::auto_ptr<te::map::LayerSchema> lschema = m_currentLayer->getSchema();
148 
150 
151  const std::vector<te::rst::BandProperty*>& bprops = prop->getBandProperties();
152 
153  m_rasterWidget->setBandProperty(bprops);
154 
155  m_rasterWidget->setRasterSymbolizer(dynamic_cast<te::se::RasterSymbolizer*>(s));
156 
157  }
158 }
159 
161 {
162  te::se::Symbolizer* s = m_polyWidget->getSymbolizer();
163  emit symbolizerChanged(s);
164 }
165 
167 {
168  te::se::Symbolizer* s = m_lineWidget->getSymbolizer();
169  emit symbolizerChanged(s);
170 }
171 
173 {
174  te::se::Symbolizer* s = m_pointWidget->getSymbolizer();
175  emit symbolizerChanged(s);
176 }
177 
179 {
180  te::se::Symbolizer* s = m_rasterWidget->getRasterSymbolizer();
181  emit symbolizerChanged(s);
182 }
183 
185 {
186  emit repaintMapDisplay();
187 }
TEDATAACCESSEXPORT te::rst::RasterProperty * GetFirstRasterProperty(const DataSetType *dt)
Definition: Utils.cpp:571
The Style defines the styling that is to be applied to a geographic dataset (vector geometries or cov...
Definition: Style.h:65
This is the base class for layers.
Definition: AbstractLayer.h:76
A Symbolizer describes how a feature is to appear on a map.
Definition: Symbolizer.h:80
A dock widget used control the geographic data style using SE elements and a property browser to show...
A widget used to configure a Raster Symbolizer SE element.
A widget used to define the point symbolizer properties, such as:
Raster property.
A widget used to define the line symbolizer properties, such as:
void onSymbolizerSelected(te::se::Symbolizer *s)
A widget used to explore a style.
A widget used to controll the style se element.
A widget used to controll the style se element.
A widget used to configure a Raster Symbolizer SE element.
A widget used to define the point symbolizer properties, such as:
A widget used to define the polygon symbolizer properties, such as:
A widget used to define the polygon symbolizer properties, such as:
StyleDockWidget(const QString &title, QWidget *parent=0, Qt::WindowFlags flags=0)
Constructs a StyleDockWidget.
virtual void setStyle(te::se::Style *style)
It sets the Style associated to the layer.
void setStyle(te::se::Style *style, te::map::AbstractLayer *layer)
Sets a style element to this widget.
std::vector< te::rst::BandProperty * > & getBandProperties()
Returns a reference to the list of bands definitions.
virtual const std::string & getType() const =0
It returns the symbolizer type.
A widget used to define the polygon symbolizer properties, such as: