All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
LayerExplorer.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/explorer/LayerExplorer.cpp
22 
23  \brief A widget designed to explore the layers of an application.
24 */
25 
26 // TerraLib
27 #include "../../../../maptools/AbstractLayer.h"
28 #include "AbstractTreeItem.h"
29 #include "LayerExplorer.h"
30 #include "LayerTreeModel.h"
31 
32 // Qt
33 #include <QScrollArea>
34 #include <QVBoxLayout>
35 
36 te::qt::widgets::LayerExplorer::LayerExplorer(QWidget* parent, Qt::WindowFlags flags)
37  : QDockWidget(tr("Layer Explorer"), parent, flags),
38  m_treeView(0),
39  m_treeModel(0)
40 {
41  //setAcceptDrops(true);
42  //setAutoFillBackground(true);
43 
44  m_treeView = new LayerTreeView(this);
45 
46  m_treeModel = new LayerTreeModel(this);
47 
49 
50  setWidget(m_treeView);
51 
52  m_treeView->setModel(m_treeModel);
53 
54  m_treeView->setHeaderHidden(true);
56 
57  // Signals and slots
58  connect(m_treeView->selectionModel(), SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)), m_treeView, SLOT(onSelectedLayersChanged(const QItemSelection&, const QItemSelection&)));
59  connect(m_treeView, SIGNAL(selectedLayersChanged(const std::list<te::map::AbstractLayerPtr>&)), SLOT(onSelectedLayersChanged(const std::list<te::map::AbstractLayerPtr>&)));
63  //connect(m_treeModel, SIGNAL(expandItem(te::qt::widgets::AbstractTreeItem*)), SLOT(expand(te::qt::widgets::AbstractTreeItem*)));
64  connect(m_treeModel, SIGNAL(layerOrderChanged()), SLOT(onLayerOrderChanged()));
65 }
66 
68 {
69 }
70 
72 {
73  return m_treeView;
74 }
75 
77 {
78  return m_treeModel;
79 }
80 
81 void te::qt::widgets::LayerExplorer::set(const std::list<te::map::AbstractLayerPtr>& layers)
82 {
83  m_treeModel->set(layers);
84 }
85 
86 std::list<te::map::AbstractLayerPtr> te::qt::widgets::LayerExplorer::getTopLayers() const
87 {
88  std::list<te::map::AbstractLayerPtr> topLayers;
89 
90  std::vector<te::map::AbstractLayerPtr> modelTopLayers = m_treeModel->getTopLayers();
91 
92  for(std::size_t i = 0; i < modelTopLayers.size(); ++i)
93  topLayers.push_back(modelTopLayers[i]);
94 
95  return topLayers;
96 }
97 
98 std::list<te::qt::widgets::AbstractTreeItem*> te::qt::widgets::LayerExplorer::getSelectedItems() const
99 {
100  return m_treeView->getSelectedItems();
101 }
102 
103 std::list<te::qt::widgets::AbstractTreeItem*> te::qt::widgets::LayerExplorer::getSelectedLayerItems() const
104 {
105  return m_treeView->getSelectedLayerItems();
106 }
107 
108 std::list<te::qt::widgets::AbstractTreeItem*> te::qt::widgets::LayerExplorer::getSelectedSingleLayerItems() const
109 {
110  return m_treeView->getSelectedSingleLayerItems();
111 }
112 
113 std::list<te::map::AbstractLayerPtr> te::qt::widgets::LayerExplorer::getSelectedSingleLayers() const
114 {
115  return m_treeView->getSelectedSingleLayers();
116 }
117 
118 std::list<te::map::AbstractLayerPtr> te::qt::widgets::LayerExplorer::getSelectedAndVisibleSingleLayers() const
119 {
120  return m_treeView->getSelectedAndVisibleSingleLayers();
121 }
122 
124 {
125  return m_treeModel->getLayerItem(layer);
126 }
127 
129 {
130  m_treeModel->add(layer, parentItem);
131 }
132 
134 {
135  return m_treeModel->remove(item);
136 }
137 
139 {
140  return static_cast<te::qt::widgets::LayerTreeView::ContextMenuSelectionType>(menuSelectionType);
141 }
142 
144  const std::string& menu,
145  const std::string& itemType,
147 {
148  m_treeView->add(action, menu, itemType, menuType);
149 }
150 
151 void te::qt::widgets::LayerExplorer::onSelectedLayersChanged(const std::list<te::map::AbstractLayerPtr>& selectedLayers)
152 {
153  emit selectedLayersChanged(selectedLayers);
154 }
155 
157 {
158  emit visibilityChanged(layer);
159 }
160 
162 {
163  emit layerOrderChanged();
164 }
165 
167 {
168  emit doubleClicked(item);
169 }
170 
172 {
173  QModelIndex index = m_treeModel->getIndex(item);
174 
175  m_treeView->expand(index);
176 }
177 
179 {
180  QModelIndex index = m_treeModel->getIndex(item);
181 
182  m_treeView->collapse(index);
183 }
LayerExplorer(QWidget *parent=0, Qt::WindowFlags flags=0)
A tree view for the layers of an application.
Definition: LayerTreeView.h:63
te::qt::widgets::LayerTreeView::ContextMenuSelectionType getMenuSelectionType(int menuSelectionType) const
It gets the context menu selection type associated to the menu selection type.
std::list< te::map::AbstractLayerPtr > getTopLayers() const
It gets the top level layers in the tree model associated to the layer explorer.
void add(const te::map::AbstractLayerPtr &layer, AbstractTreeItem *parentItem=0)
It adds a item layer to the list of item layers of the parent layer item. If the parent layer is not ...
std::list< AbstractTreeItem * > getSelectedLayerItems() const
It gets all the selected layers(single and folders) in the layer explorer.
std::list< te::map::AbstractLayerPtr > getSelectedSingleLayers() const
It gets the single layers that are selected.
LayerTreeView * getTreeView() const
void setCheckable(const bool checkable)
It sets the model items as checkable or not.
te::qt::widgets::AbstractTreeItem * getLayerItem(const te::map::AbstractLayerPtr &layer)
It gets the layer item that is associated to the given layer.
void expand(te::qt::widgets::AbstractTreeItem *item)
It expands the specified model item.
The class that represents an item in a LayerTreeModel.
LayerTreeModel * getTreeModel() const
void visibilityChanged(const te::map::AbstractLayerPtr &layer)
LayerTreeView * m_treeView
The tree view for the layers.
void onVisibilityChanged(const te::map::AbstractLayerPtr &layer)
It sends out a signal indicating that the visibility of the given single layer was changed in the tre...
std::list< AbstractTreeItem * > getSelectedItems() const
It gets all the selected items in the layer explorer.
std::list< AbstractTreeItem * > getSelectedSingleLayerItems() const
It gets the single layer items that are selected in the tree view.
void selectedLayersChanged(const std::list< te::map::AbstractLayerPtr > &selectedLayers)
This class defines the model used in the Qt Model/View architecture for the tree of layers...
void collapse(te::qt::widgets::AbstractTreeItem *item)
It collapses the specified model item.
LayerTreeModel * m_treeModel
the tree model for the layers
bool remove(AbstractTreeItem *item)
It removes the given item from the layer explorer.
void onLayerOrderChanged()
It sends out a signal indicating that there was a drag and operation on the tree view.
The class that represents an item in a LayerTreeModel.
std::list< te::map::AbstractLayerPtr > getSelectedAndVisibleSingleLayers() const
It gets the single layers that are selected and visible.
void doubleClicked(te::qt::widgets::AbstractTreeItem *item)
A widget designed to explore the layers of an application.
void onItemDoubleClicked(te::qt::widgets::AbstractTreeItem *item)
It sends out a signal indicating that the given item was double clicked.
void set(const std::list< te::map::AbstractLayerPtr > &layers)
#define TE_QTWIDGETS_DEFAULT_TREEVIEW_IDENTATION
Definition: Config.h:34
boost::intrusive_ptr< AbstractLayer > AbstractLayerPtr
void onSelectedLayersChanged(const std::list< te::map::AbstractLayerPtr > &selectedLayers)
It sends out a signal indicating that there were changes in the selection of layers in the tree view...