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