Package arcmap :: Module layers
[hide private]
[frames] | no frames]

Source Code for Module arcmap.layers

  1  ################################################################################ 
  2  # Authors: Brian Schott (Sir Alaran) 
  3  # Copyright: Brian Schott (Sir Alaran) 
  4  # Date: Sep 29 2009 
  5  # License: 
  6  # 
  7  # This program is free software: you can redistribute it and/or modify 
  8  # it under the terms of the GNU General Public License as published by 
  9  # the Free Software Foundation, either version 3 of the License, or 
 10  # (at your option) any later version. 
 11  # 
 12  # This program is distributed in the hope that it will be useful, 
 13  # but WITHOUT ANY WARRANTY; without even the implied warranty of 
 14  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
 15  # GNU General Public License for more details. 
 16  # 
 17  # You should have received a copy of the GNU General Public License 
 18  # along with this program.  If not, see <http://www.gnu.org/licenses/>. 
 19  ################################################################################ 
 20   
 21   
 22   
 23  """ 
 24  Module for managing the map's layers 
 25  """ 
 26   
 27  __docformat__ = "epytext" 
 28   
 29  import logging 
 30   
 31  import gtk 
 32   
 33  import mapcontroller 
 34   
 35  log = logging.getLogger("layers") 
 36   
 37   
38 -class LayerView(mapcontroller.MapListener):
39 - def __init__(self, controller):
40 """ 41 @type controller: MapController 42 @param controller: the map controller 43 """ 44 mapcontroller.MapListener.__init__(self, controller) 45 46 self.treeModel = gtk.ListStore(str, bool) 47 48 self.treeView = gtk.TreeView(self.treeModel) 49 self.treeView.set_headers_visible(True) 50 self.treeView.columns_autosize() 51 52 textRenderCell = gtk.CellRendererText() 53 textRenderCell.set_property("editable", True) 54 textRenderCell.connect("edited", self.layerNameCB, self.treeModel) 55 56 toggleRenderCell = gtk.CellRendererToggle() 57 toggleRenderCell.set_property("activatable", True) 58 toggleRenderCell.connect("toggled", self.toggleCB, self.treeModel) 59 60 selection = self.treeView.get_selection() 61 selection.connect("changed", self.layerSelectCB) 62 63 column0 = gtk.TreeViewColumn("Layer", textRenderCell, text=0) 64 column1 = gtk.TreeViewColumn("Visible", toggleRenderCell) 65 column1.add_attribute(toggleRenderCell, "active", True) 66 67 self.treeView.append_column(column1) 68 self.treeView.append_column(column0) 69 70 self.scrolledWindow = gtk.ScrolledWindow() 71 self.scrolledWindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) 72 self.scrolledWindow.add(self.treeView)
73
74 - def comIndex(self, index):
75 """ 76 Converts from a tree model index to a map index, and vice-versa 77 @type index: int 78 @param index: an index 79 @rtype: int 80 @return: an index in the form other than what was passed in 81 """ 82 return len(self.treeModel) - index - 1
83
84 - def getWidget(self):
85 return self.scrolledWindow
86
87 - def getCurrent(self):
88 """ 89 @rtype: gtk.TreeIter 90 @return: an iterator associated with the currently selected layer 91 """ 92 selection = self.treeView.get_selection() 93 if selection != None: 94 return selection.get_selected()[1] 95 else: 96 return None
97
98 - def addLayer(self, layerName = "New Layer"):
99 """ 100 Adds a new layer to the map 101 @type layerName: string 102 @param layerName: the name for the new layer 103 """ 104 self.treeModel.prepend((layerName, True)) 105 self.getController().addLayer(layerName, True) 106 layerName = "New Layer"
107 108 # Any appearance of magic in the get_path, get_iter and the random array 109 # indicies on them is purely coincidental. Honest. 110
111 - def removeLayer(self):
112 """ 113 Removes the currently selected layer 114 """ 115 iter = self.getCurrent() 116 if iter == None: 117 return 118 # Remove the current layer 119 index = self.treeModel.get_path(iter)[0] 120 self.getController().removeLayer(self.comIndex(index)) 121 self.treeModel.remove(iter)
122
123 - def raiseLayer(self):
124 """ 125 Raises the currently selected layer 126 """ 127 cIter = self.getCurrent() 128 if cIter == None or int(self.treeModel.get_path(cIter)[0]) == 0: 129 return 130 else: 131 current = self.treeModel.get_path(cIter)[0] 132 pIter = self.treeModel.get_iter(int(current) - 1) 133 previous = self.treeModel.get_path(pIter)[0] 134 self.treeModel.swap(cIter, pIter) 135 self.getController().swapLayers(self.comIndex(int(current)), 136 self.comIndex(int(previous)))
137
138 - def lowerLayer(self):
139 """ 140 Lowers the currently selected layer 141 """ 142 iter = self.getCurrent() 143 if iter == None: 144 return 145 else: 146 next = self.treeModel.iter_next(iter) 147 if next != None: 148 index = self.treeModel.get_path(iter)[0] 149 nextIndex = self.treeModel.get_path(next)[0] 150 self.treeModel.swap(iter, next) 151 self.getController().swapLayers(self.comIndex(index), 152 self.comIndex(int(nextIndex)))
153
154 - def layerNameCB(self, cell, path, newText, model):
155 """ 156 Callback for a change in the layer name text 157 """ 158 p = int(path) 159 model[p][0] = newText 160 self.getController().setLayerName(self.comIndex(p), newText)
161
162 - def toggleCB(self, cell, path, model):
163 """ 164 Callback for a change in a layer visibility 165 """ 166 p = int(path) 167 model[p][1] = not model[p][1] 168 self.getController().setMapLayerVisibility(self.comIndex(p), 169 model[p][1])
170
171 - def layerSelectCB(self, treeSelection):
172 iter = self.getCurrent() 173 if iter != None: 174 index = int(self.treeModel.get_path(iter)[0]) 175 self.getController().selectLayer(self.comIndex(index))
176 177 ############################################################################ 178 # MapListener code 179 ############################################################################ 180
181 - def listenFileOpened(self):
182 self.treeView.set_sensitive(True) 183 for i in self.getController().getLayerInfo(): 184 self.treeModel.prepend(i) 185 self.treeView.get_selection().select_path(0)
186
187 - def listenFileClosed(self):
188 self.treeView.set_sensitive(False) 189 self.treeModel.clear()
190 191 ############################################################################ 192 # End MapListener code 193 ############################################################################ 194