| Trees | Indices | Help |
|---|
|
|
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
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
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
86
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
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
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
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
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
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
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
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
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
190
191 ############################################################################
192 # End MapListener code
193 ############################################################################
194
| Trees | Indices | Help |
|---|
| Generated by Epydoc 3.0.1 on Tue Oct 6 15:18:47 2009 | http://epydoc.sourceforge.net |