13 |
|
|
14 |
from wxPython.wx import * |
from wxPython.wx import * |
15 |
|
|
16 |
from Thuban.Model.messages import MAPS_CHANGED, MAP_PROJECTION_CHANGED, \ |
from Thuban.Model.messages import CHANGED |
17 |
LAYERS_CHANGED, LAYER_LEGEND_CHANGED, LAYER_VISIBILITY_CHANGED, \ |
from Thuban.Model.layer import Layer |
|
EXTENSIONS_CHANGED, EXTENSION_OBJECTS_CHANGED |
|
|
from Thuban.Model.layer import Layer, shapetype_names |
|
18 |
from Thuban.Model.map import Map |
from Thuban.Model.map import Map |
19 |
|
|
20 |
from dialogs import NonModalDialog |
from dialogs import NonModalDialog |
43 |
value of TreeInfo. |
value of TreeInfo. |
44 |
""" |
""" |
45 |
|
|
|
# the session channels to subscribe to update the tree |
|
|
session_channels = (MAPS_CHANGED, MAP_PROJECTION_CHANGED, |
|
|
LAYERS_CHANGED, LAYER_LEGEND_CHANGED, |
|
|
LAYER_VISIBILITY_CHANGED, EXTENSIONS_CHANGED, |
|
|
EXTENSION_OBJECTS_CHANGED) |
|
|
|
|
46 |
def __init__(self, parent, ID, app): |
def __init__(self, parent, ID, app): |
47 |
# Use the WANTS_CHARS style so the panel doesn't eat the Return key. |
# Use the WANTS_CHARS style so the panel doesn't eat the Return key. |
48 |
wxTreeCtrl.__init__(self, parent, ID) |
wxTreeCtrl.__init__(self, parent, ID) |
68 |
|
|
69 |
def unsubscribe_all(self): |
def unsubscribe_all(self): |
70 |
if self.session is not None: |
if self.session is not None: |
71 |
for channel in self.session_channels: |
self.session.Unsubscribe(CHANGED, self.update_tree) |
|
self.session.Unsubscribe(channel, self.update_tree) |
|
72 |
self.session = None |
self.session = None |
73 |
self.app.Unsubscribe(SESSION_CHANGED, self.session_changed) |
self.app.Unsubscribe(SESSION_CHANGED, self.session_changed) |
74 |
self.app.interactor.Unsubscribe(SELECTED_LAYER, self.layer_selected) |
self.app.interactor.Unsubscribe(SELECTED_LAYER, self.layer_selected) |
86 |
# select the selected layer |
# select the selected layer |
87 |
selected_layer = self.app.interactor.selected_layer |
selected_layer = self.app.interactor.selected_layer |
88 |
if selected_layer is not None: |
if selected_layer is not None: |
89 |
self.SelectItem(self.layer_to_item[id(selected_layer)]) |
# One would expect that the selected_layer's id is in |
90 |
|
# layer_to_item at this point as we've just rebuilt that |
91 |
|
# mapping completely. However, when a new session is loaded |
92 |
|
# for instance, it can happen that the tree view is updated |
93 |
|
# before the interactor in which case selected_layer may be |
94 |
|
# a layer of the old session. |
95 |
|
item = self.layer_to_item.get(id(selected_layer)) |
96 |
|
if item is not None: |
97 |
|
self.SelectItem(item) |
98 |
|
|
99 |
def add_items(self, parent, items): |
def add_items(self, parent, items): |
100 |
for item in items: |
for item in items: |
122 |
# if the session has changed subscribe/unsubscribe |
# if the session has changed subscribe/unsubscribe |
123 |
if self.session is not new_session: |
if self.session is not new_session: |
124 |
if self.session is not None: |
if self.session is not None: |
125 |
for channel in self.session_channels: |
self.session.Unsubscribe(CHANGED, self.update_tree) |
|
self.session.Unsubscribe(channel, self.update_tree) |
|
126 |
if new_session is not None: |
if new_session is not None: |
127 |
for channel in self.session_channels: |
new_session.Subscribe(CHANGED, self.update_tree) |
|
new_session.Subscribe(channel, self.update_tree) |
|
128 |
self.session = new_session |
self.session = new_session |
129 |
self.update_tree() |
self.update_tree() |
130 |
|
|