All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
LayerPropertiesInfo.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/layer/info/LayerPropertiesInfo.cpp
22 
23  \brief
24 */
25 
26 #include "../../../../dataaccess/dataset/DataSet.h"
27 #include "../../../../dataaccess/utils/Utils.h"
28 #include "../../../../datatype/Utils.h"
29 #include "../../../../maptools/AbstractLayer.h"
30 #include "../../../../raster/Band.h"
31 #include "../../../../raster/BandProperty.h"
32 #include "../../../../raster/Utils.h"
33 #include "../../propertybrowser/AbstractPropertyManager.h"
34 
35 #include "LayerPropertiesInfo.h"
36 
38  te::qt::widgets::AbstractPropertyItem(pb),
39  m_layer(layer)
40 {
41  QtProperty* layerInfo_prop = te::qt::widgets::AbstractPropertyManager::getInstance().m_groupManager->addProperty(tr("Layer properties"));
42 
43  // Attributes
44  QtProperty* id_prop = te::qt::widgets::AbstractPropertyManager::getInstance().m_stringManager->addProperty(tr("Id"));
45  layerInfo_prop->addSubProperty(id_prop);
46  id_prop->setEnabled(false);
47 
48  QtProperty* title_prop = te::qt::widgets::AbstractPropertyManager::getInstance().m_stringManager->addProperty(tr("Title"));
49  layerInfo_prop->addSubProperty(title_prop);
50  title_prop->setPropertyName("title");
51  title_prop->setEnabled(false);
52 
53  QtProperty* srid_prop = te::qt::widgets::AbstractPropertyManager::getInstance().m_intManager->addProperty(tr("SRID"));
54  layerInfo_prop->addSubProperty(srid_prop);
55  srid_prop->setPropertyName("srid");
56  srid_prop->setEnabled(false);
57 
58  /// Bounding Box
59  QtProperty* bbox_prop = te::qt::widgets::AbstractPropertyManager::getInstance().m_groupManager->addProperty(tr("Bounding box"));
60 
61  QtProperty* llx_prop = te::qt::widgets::AbstractPropertyManager::getInstance().m_stringManager->addProperty(tr("Lower left x"));
62  QtProperty* lly_prop = te::qt::widgets::AbstractPropertyManager::getInstance().m_stringManager->addProperty(tr("Lower left y"));
63  QtProperty* urx_prop = te::qt::widgets::AbstractPropertyManager::getInstance().m_stringManager->addProperty(tr("Upper right x"));
64  QtProperty* ury_prop = te::qt::widgets::AbstractPropertyManager::getInstance().m_stringManager->addProperty(tr("Upper right y"));
65 
66  llx_prop->setEnabled(false);
67  lly_prop->setEnabled(false);
68  urx_prop->setEnabled(false);
69  ury_prop->setEnabled(false);
70 
71  bbox_prop->addSubProperty(llx_prop);
72  bbox_prop->addSubProperty(lly_prop);
73  bbox_prop->addSubProperty(urx_prop);
74  bbox_prop->addSubProperty(ury_prop);
75 
76  layerInfo_prop->addSubProperty(bbox_prop);
77 
78  // Visibility
79  QtProperty* vis_prop = te::qt::widgets::AbstractPropertyManager::getInstance().m_enumManager->addProperty(tr("Visibility"));
80  QStringList visEnum;
81  visEnum << tr("Not visible") << tr("visible") << tr("Partially visible");
82  te::qt::widgets::AbstractPropertyManager::getInstance().m_enumManager->setEnumNames(vis_prop, visEnum);
83 
84  layerInfo_prop->addSubProperty(vis_prop);
85  vis_prop->setPropertyName("visibility");
86  vis_prop->setEnabled(false);
87 
88  //setting values
89  te::qt::widgets::AbstractPropertyManager::getInstance().m_stringManager->setValue(id_prop, m_layer->getId().c_str());
90  te::qt::widgets::AbstractPropertyManager::getInstance().m_stringManager->setValue(title_prop, m_layer->getTitle().c_str());
91  te::qt::widgets::AbstractPropertyManager::getInstance().m_intManager->setValue(srid_prop, m_layer->getSRID());
92  te::qt::widgets::AbstractPropertyManager::getInstance().m_stringManager->setValue(llx_prop, QString::number(m_layer->getExtent().getLowerLeftX(), 'f'));
93  te::qt::widgets::AbstractPropertyManager::getInstance().m_stringManager->setValue(lly_prop, QString::number(m_layer->getExtent().getLowerLeftY(), 'f'));
94  te::qt::widgets::AbstractPropertyManager::getInstance().m_stringManager->setValue(urx_prop, QString::number(m_layer->getExtent().getUpperRightX(), 'f'));
95  te::qt::widgets::AbstractPropertyManager::getInstance().m_stringManager->setValue(ury_prop, QString::number(m_layer->getExtent().getUpperRightY(), 'f'));
96  te::qt::widgets::AbstractPropertyManager::getInstance().m_enumManager->setValue(vis_prop, (int) m_layer->getVisibility());
97 
98  addProperty(layerInfo_prop, tr("Layer properties"), Qt::lightGray);
99 
100  //check if layer has raster
101  std::auto_ptr<te::da::DataSetType> dsType = layer->getSchema();
102 
103  if(dsType->hasRaster())
104  {
106  }
107 }
108 
110 {
111 }
112 
114 {
115  if(p->propertyName() == "srid")
116  m_layer->setSRID(value);
117  else if(p->propertyName() == "visibility")
118  m_layer->setVisibility((te::map::Visibility)value);
119 }
120 
121 void te::qt::widgets::LayerPropertiesInfo::valueChanged(QtProperty* p, const QString& value)
122 {
123  if(p->propertyName() == "title")
124  m_layer->setTitle(value.toStdString());
125 }
126 
128 {
129  //get raster from layer
130  std::auto_ptr<te::da::DataSet> dataSet = rasterLayer->getData();
131 
132  std::size_t rpos = te::da::GetFirstPropertyPos(dataSet.get(), te::dt::RASTER_TYPE);
133 
134  std::auto_ptr<te::rst::Raster> raster = dataSet->getRaster(rpos);
135 
136  if(!raster.get())
137  return;
138 
139  //create top property
140  QtProperty* rasterInfoProp = te::qt::widgets::AbstractPropertyManager::getInstance().m_groupManager->addProperty(tr("Raster properties"));
141 
142  //add properties
143  QtProperty* nLinesProp = te::qt::widgets::AbstractPropertyManager::getInstance().m_intManager->addProperty(tr("Number of Lines"));
144  QtProperty* nColumnsProp = te::qt::widgets::AbstractPropertyManager::getInstance().m_intManager->addProperty(tr("Number of Columns"));
145  QtProperty* nBandsProp = te::qt::widgets::AbstractPropertyManager::getInstance().m_intManager->addProperty(tr("Number of Bands"));
146  QtProperty* nResXProp = te::qt::widgets::AbstractPropertyManager::getInstance().m_doubleManager->addProperty(tr("Resolution X"));
147  QtProperty* nResYProp = te::qt::widgets::AbstractPropertyManager::getInstance().m_doubleManager->addProperty(tr("Resolution Y"));
148  QtProperty* nAccessProp = te::qt::widgets::AbstractPropertyManager::getInstance().m_stringManager->addProperty(tr("Access Policy"));
149  QtProperty* nMultiResProp = te::qt::widgets::AbstractPropertyManager::getInstance().m_intManager->addProperty(tr("Multi Resolution Levels"));
150 
151 
152  //add properties to parent property
153  rasterInfoProp->addSubProperty(nLinesProp);
154  rasterInfoProp->addSubProperty(nColumnsProp);
155  rasterInfoProp->addSubProperty(nBandsProp);
156  rasterInfoProp->addSubProperty(nResXProp);
157  rasterInfoProp->addSubProperty(nResYProp);
158  rasterInfoProp->addSubProperty(nAccessProp);
159  rasterInfoProp->addSubProperty(nMultiResProp);
160 
161  //set the property state
162  nLinesProp->setEnabled(false);
163  nColumnsProp->setEnabled(false);
164  nBandsProp->setEnabled(false);
165  nResXProp->setEnabled(false);
166  nResYProp->setEnabled(false);
167  nAccessProp->setEnabled(false);
168  nMultiResProp->setEnabled(false);
169 
170  //set properties values
171  te::qt::widgets::AbstractPropertyManager::getInstance().m_intManager->setValue(nLinesProp, (int)raster->getNumberOfRows());
172  te::qt::widgets::AbstractPropertyManager::getInstance().m_intManager->setValue(nColumnsProp, (int)raster->getNumberOfColumns());
173  te::qt::widgets::AbstractPropertyManager::getInstance().m_intManager->setValue(nBandsProp, (int)raster->getNumberOfBands());
174  te::qt::widgets::AbstractPropertyManager::getInstance().m_doubleManager->setValue(nResXProp, raster->getResolutionX());
175  te::qt::widgets::AbstractPropertyManager::getInstance().m_doubleManager->setValue(nResYProp, raster->getResolutionY());
176  te::qt::widgets::AbstractPropertyManager::getInstance().m_intManager->setValue(nMultiResProp, (int)raster->getMultiResLevelsCount());
177 
178 
179  if(raster->getAccessPolicy() == te::common::NoAccess)
180  te::qt::widgets::AbstractPropertyManager::getInstance().m_stringManager->setValue(nAccessProp, tr("No Access"));
181  else if(raster->getAccessPolicy() == te::common::RAccess)
182  te::qt::widgets::AbstractPropertyManager::getInstance().m_stringManager->setValue(nAccessProp, tr("Read Only Access"));
183  else if(raster->getAccessPolicy() == te::common::WAccess)
184  te::qt::widgets::AbstractPropertyManager::getInstance().m_stringManager->setValue(nAccessProp, tr("Write Only Access"));
185  else if(raster->getAccessPolicy() == te::common::RWAccess)
186  te::qt::widgets::AbstractPropertyManager::getInstance().m_stringManager->setValue(nAccessProp, tr("Read and Write Access"));
187 
188  //set information for each band
189  for(std::size_t t = 0; t < raster->getNumberOfBands(); ++t)
190  {
191  //get band property
192  te::rst::Band* band = raster->getBand(t);
193 
194  //create band top property
195  QtProperty* bandProp = te::qt::widgets::AbstractPropertyManager::getInstance().m_groupManager->addProperty(tr("Band ") + QString::number(t));
196 
197  //create band properties
198  QtProperty* descriptionProp = te::qt::widgets::AbstractPropertyManager::getInstance().m_stringManager->addProperty(tr("Description"));
199  QtProperty* dataTypeProp = te::qt::widgets::AbstractPropertyManager::getInstance().m_stringManager->addProperty(tr("Data Type"));
200  QtProperty* dummyValueProp = te::qt::widgets::AbstractPropertyManager::getInstance().m_doubleManager->addProperty(tr("Dummy Value"));
201  QtProperty* colorInterpProp = te::qt::widgets::AbstractPropertyManager::getInstance().m_stringManager->addProperty(tr("Color Interpretation"));
202  QtProperty* palleteInterpProp = te::qt::widgets::AbstractPropertyManager::getInstance().m_stringManager->addProperty(tr("Pallete Interpretation"));
203 
204  //add band properties to band top property
205  bandProp->addSubProperty(descriptionProp);
206  bandProp->addSubProperty(dataTypeProp);
207  bandProp->addSubProperty(dummyValueProp);
208  bandProp->addSubProperty(colorInterpProp);
209  bandProp->addSubProperty(palleteInterpProp);
210 
211  //set the band properties state
212  descriptionProp->setEnabled(false);
213  dataTypeProp->setEnabled(false);
214  dummyValueProp->setEnabled(false);
215  colorInterpProp->setEnabled(false);
216  palleteInterpProp->setEnabled(false);
217 
218  //set the band properties values
224 
225  //add block information
226  QtProperty* blockProp = te::qt::widgets::AbstractPropertyManager::getInstance().m_groupManager->addProperty(tr("Block properties"));
227 
228  QtProperty* nBlockXProp = te::qt::widgets::AbstractPropertyManager::getInstance().m_intManager->addProperty(tr("Number of blocks in X"));
229  QtProperty* nBlockYProp = te::qt::widgets::AbstractPropertyManager::getInstance().m_intManager->addProperty(tr("Number of blocks in Y"));
230  QtProperty* blockWProp = te::qt::widgets::AbstractPropertyManager::getInstance().m_intManager->addProperty(tr("Block Width (pixels)"));
231  QtProperty* blockHProp = te::qt::widgets::AbstractPropertyManager::getInstance().m_intManager->addProperty(tr("Block Height (pixels)"));
232 
233  blockProp->addSubProperty(nBlockXProp);
234  blockProp->addSubProperty(nBlockYProp);
235  blockProp->addSubProperty(blockWProp);
236  blockProp->addSubProperty(blockHProp);
237 
238  nBlockXProp->setEnabled(false);
239  nBlockYProp->setEnabled(false);
240  blockWProp->setEnabled(false);
241  blockHProp->setEnabled(false);
242 
247 
248  bandProp->addSubProperty(blockProp);
249 
250  //get category names
251  if(!band->getProperty()->m_categoryNames.empty())
252  {
253  QtProperty* categProp = te::qt::widgets::AbstractPropertyManager::getInstance().m_groupManager->addProperty(tr("Name of categories"));
254 
255  //create a property for each category name
256  for(std::size_t c = 0; c < band->getProperty()->m_categoryNames.size(); ++c)
257  {
258  QtProperty* cNameProp = te::qt::widgets::AbstractPropertyManager::getInstance().m_stringManager->addProperty(tr("Category ") + QString::number(c));
259 
260  categProp->addSubProperty(cNameProp);
261 
262  cNameProp->setEnabled(false);
263 
265  }
266 
267  bandProp->addSubProperty(categProp);
268  }
269 
270  //add band top property
271  rasterInfoProp->addSubProperty(bandProp);
272  }
273 
274  //add top property to tree
275  addProperty(rasterInfoProp, tr("Raster properties"), Qt::lightGray);
276 }
TEDATATYPEEXPORT std::string ConvertDataTypeToString(const int &dataType)
Function used to convert from a int (Data Type Enum) to a string.
Definition: Utils.cpp:112
virtual const std::string & getId() const
It returns the layer id.
A widget used to define the main property items that can be used to describe a se object...
This is the base class for layers.
Definition: AbstractLayer.h:76
virtual const te::gm::Envelope & getExtent() const
It returns the Layer extent (or minimum bounding box).
std::vector< std::string > m_categoryNames
Set of categoric names for the values contained in a dimension.
Definition: BandProperty.h:139
virtual const std::string & getTitle() const
It returns the layer title.
int m_nblocksx
The number of blocks in x.
Definition: BandProperty.h:145
int m_nblocksy
The number of blocks in y.
Definition: BandProperty.h:146
const double & getUpperRightX() const
It returns a constant refernce to the x coordinate of the upper right corner.
Definition: Envelope.h:410
const double & getLowerLeftY() const
It returns a constant refernce to the y coordinate of the lower left corner.
Definition: Envelope.h:400
LayerPropertiesInfo(QtTreePropertyBrowser *pb, te::map::AbstractLayer *layer)
Constructor.
virtual Visibility getVisibility() const
It returns the layer visibility.
double m_noDataValue
Value to indicate elements where there is no data, default is std::numeric_limits::max().
Definition: BandProperty.h:136
const double & getUpperRightY() const
It returns a constant refernce to the x coordinate of the upper right corner.
Definition: Envelope.h:420
TERASTEREXPORT std::string ConvertColorInterpTypeToString(const te::rst::ColorInterp &ci)
Function used to convert from a Color Interp Enum to a string.
Definition: Utils.cpp:504
virtual void valueChanged(QtProperty *p, int value)
static AbstractPropertyManager & getInstance()
It returns a reference to the singleton instance.
BandProperty * getProperty()
Returns the band property.
Definition: Band.cpp:428
int m_blkw
Block width (pixels).
Definition: BandProperty.h:143
virtual std::auto_ptr< te::da::DataSet > getData(te::common::TraverseType travType=te::common::FORWARDONLY, const te::common::AccessPolicy accessPolicy=te::common::RAccess) const =0
It gets the dataset identified by the layer name.
A raster band description.
Definition: Band.h:63
void addProperty(QtProperty *property, const QString &id, QColor c)
void setLayerRasterProperties(te::map::AbstractLayer *rasterLayer)
TERASTEREXPORT std::string ConvertPalleteInterpTypeToString(const te::rst::PaletteInterpretation &pi)
Function used to convert from a Pallete Interp Enum to a string.
Definition: Utils.cpp:544
const double & getLowerLeftX() const
It returns a constant reference to the x coordinate of the lower left corner.
Definition: Envelope.h:390
virtual int getSRID() const
It returns the Spatial Reference System ID associated to the Layer.
int getType() const
It returns the data type of the elements in the band.
Definition: BandProperty.h:113
std::string m_description
A description.
Definition: BandProperty.h:134
TEDATAACCESSEXPORT std::size_t GetFirstPropertyPos(const te::da::DataSet *dataset, int datatype)
Definition: Utils.cpp:481
int m_blkh
Block height (pixels).
Definition: BandProperty.h:144
Visibility
Each layer can have three states of visibility.
Definition: Enums.h:138
ColorInterp m_colorInterp
The color interpretation.
Definition: BandProperty.h:140
PaletteInterpretation m_paletteInterp
Pallete interpretation.
Definition: BandProperty.h:141
virtual std::auto_ptr< LayerSchema > getSchema() const =0
It returns the layer schema.