13 |
|
|
14 |
__version__ = "$Revision$" |
__version__ = "$Revision$" |
15 |
|
|
16 |
__ThubanVersion__ = "0.2" #"$THUBAN_0_2$" |
__ThubanVersion__ = "0.8" #"$THUBAN_0_2$" |
17 |
#__BuildDate__ = "$Date$" |
#__BuildDate__ = "$Date$" |
18 |
|
|
19 |
import os |
import os |
22 |
from wxPython.wx import * |
from wxPython.wx import * |
23 |
from wxPython.wx import __version__ as wxPython_version |
from wxPython.wx import __version__ as wxPython_version |
24 |
|
|
|
from wxPython.lib.dialogs import wxMultipleChoiceDialog |
|
|
|
|
25 |
import Thuban |
import Thuban |
26 |
import Thuban.version |
import Thuban.version |
27 |
|
|
29 |
from Thuban.Model.session import create_empty_session |
from Thuban.Model.session import create_empty_session |
30 |
from Thuban.Model.layer import Layer, RasterLayer |
from Thuban.Model.layer import Layer, RasterLayer |
31 |
|
|
32 |
|
# XXX: replace this by |
33 |
|
# from wxPython.lib.dialogs import wxMultipleChoiceDialog |
34 |
|
# when Thuban does not support wxPython 2.4.0 any more. |
35 |
|
from Thuban.UI.multiplechoicedialog import wxMultipleChoiceDialog |
36 |
|
|
37 |
import view |
import view |
38 |
import tree |
import tree |
39 |
import tableview, identifyview |
import tableview, identifyview |
49 |
from Thuban.UI.join import JoinDialog |
from Thuban.UI.join import JoinDialog |
50 |
|
|
51 |
import resource |
import resource |
52 |
|
import Thuban.Model.resource |
53 |
|
|
54 |
import projdialog |
import projdialog |
55 |
|
|
|
|
|
|
|
|
56 |
class MainWindow(DockFrame): |
class MainWindow(DockFrame): |
57 |
|
|
58 |
# Some messages that can be subscribed/unsubscribed directly through |
# Some messages that can be subscribed/unsubscribed directly through |
107 |
|
|
108 |
self.init_dialogs() |
self.init_dialogs() |
109 |
|
|
110 |
|
self.ShowLegend() |
111 |
|
|
112 |
EVT_CLOSE(self, self.OnClose) |
EVT_CLOSE(self, self.OnClose) |
113 |
|
|
114 |
def Subscribe(self, channel, *args): |
def Subscribe(self, channel, *args): |
445 |
|
|
446 |
def About(self): |
def About(self): |
447 |
self.RunMessageBox(_("About"), |
self.RunMessageBox(_("About"), |
448 |
_("Thuban %s\n" |
_("Thuban %s\n\n" |
449 |
#"Build Date: %s\n" |
#"Build Date: %s\n" |
450 |
"using:\n" |
"Currently using:\n" |
451 |
" %s\n" |
" %s\n" |
452 |
" %s\n\n" |
" %s\n\n" |
453 |
"Thuban is a program for\n" |
"Thuban is a program for\n" |
579 |
def LayerShowTable(self): |
def LayerShowTable(self): |
580 |
layer = self.current_layer() |
layer = self.current_layer() |
581 |
if layer is not None: |
if layer is not None: |
582 |
table = layer.table |
table = layer.ShapeStore().Table() |
583 |
name = "table_view" + str(id(table)) |
name = "table_view" + str(id(table)) |
584 |
dialog = self.get_open_dialog(name) |
dialog = self.get_open_dialog(name) |
585 |
if dialog is None: |
if dialog is None: |
636 |
dialog = self.get_open_dialog(name) |
dialog = self.get_open_dialog(name) |
637 |
|
|
638 |
if dialog is None: |
if dialog is None: |
639 |
dialog = Classifier(self, name, layer, group) |
dialog = Classifier(self, name, self.Map(), layer, group) |
640 |
self.add_dialog(name, dialog) |
self.add_dialog(name, dialog) |
641 |
dialog.Show() |
dialog.Show() |
642 |
dialog.Raise() |
dialog.Raise() |
940 |
"""Return true if the legend window is shown""" |
"""Return true if the legend window is shown""" |
941 |
return context.mainwindow.LegendShown() |
return context.mainwindow.LegendShown() |
942 |
|
|
943 |
|
def _has_gdal_support(context): |
944 |
|
"""Return True if the GDAL is available""" |
945 |
|
return Thuban.Model.resource.has_gdal_support() |
946 |
|
|
947 |
# File menu |
# File menu |
948 |
_method_command("new_session", _("&New Session"), "NewSession") |
_method_command("new_session", _("&New Session"), "NewSession", |
949 |
_method_command("open_session", _("&Open Session..."), "OpenSession") |
helptext = _("Start a new session")) |
950 |
_method_command("save_session", _("&Save Session"), "SaveSession") |
_method_command("open_session", _("&Open Session..."), "OpenSession", |
951 |
_method_command("save_session_as", _("Save Session &As..."), "SaveSessionAs") |
helptext = _("Open a session file")) |
952 |
|
_method_command("save_session", _("&Save Session"), "SaveSession", |
953 |
|
helptext =_("Save this session to the file it was opened from")) |
954 |
|
_method_command("save_session_as", _("Save Session &As..."), "SaveSessionAs", |
955 |
|
helptext = _("Save this session to a new file")) |
956 |
_method_command("toggle_session_tree", _("Session &Tree"), "ToggleSessionTree", |
_method_command("toggle_session_tree", _("Session &Tree"), "ToggleSessionTree", |
957 |
checked = _has_tree_window_shown) |
checked = _has_tree_window_shown, |
958 |
|
helptext = _("Toggle on/off the session tree analysis window")) |
959 |
_method_command("toggle_legend", _("Legend"), "ToggleLegend", |
_method_command("toggle_legend", _("Legend"), "ToggleLegend", |
960 |
checked = _has_legend_shown) |
checked = _has_legend_shown, |
961 |
_method_command("exit", _("E&xit"), "Exit") |
helptext = _("Toggle Legend on/off")) |
962 |
|
_method_command("exit", _("E&xit"), "Exit", |
963 |
|
helptext = _("Finish working with Thuban")) |
964 |
|
|
965 |
# Help menu |
# Help menu |
966 |
_method_command("help_about", _("&About..."), "About") |
_method_command("help_about", _("&About..."), "About", |
967 |
|
helptext = _("Info about Thuban authors, version and modules")) |
968 |
|
|
969 |
|
|
970 |
# Map menu |
# Map menu |
971 |
_method_command("map_projection", _("Pro&jection..."), "MapProjection") |
_method_command("map_projection", _("Pro&jection..."), "MapProjection", |
972 |
|
helptext = _("Set or change the map projection")) |
973 |
|
|
974 |
_tool_command("map_zoom_in_tool", _("&Zoom in"), "ZoomInTool", "ZoomInTool", |
_tool_command("map_zoom_in_tool", _("&Zoom in"), "ZoomInTool", "ZoomInTool", |
975 |
helptext = _("Switch to map-mode 'zoom-in'"), icon = "zoom_in", |
helptext = _("Switch to map-mode 'zoom-in'"), icon = "zoom_in", |
988 |
helptext = _("Add/Remove labels"), icon = "label", |
helptext = _("Add/Remove labels"), icon = "label", |
989 |
sensitive = _has_visible_map) |
sensitive = _has_visible_map) |
990 |
_method_command("map_full_extent", _("&Full extent"), "FullExtent", |
_method_command("map_full_extent", _("&Full extent"), "FullExtent", |
991 |
helptext = _("Full Extent"), icon = "fullextent", |
helptext = _("Zoom to the full map extent"), icon = "fullextent", |
992 |
sensitive = _has_visible_map) |
sensitive = _has_visible_map) |
993 |
_method_command("layer_full_extent", _("&Full layer extent"), "FullLayerExtent", |
_method_command("layer_full_extent", _("&Full layer extent"), "FullLayerExtent", |
994 |
helptext = _("Full Layer Extent"), icon = "fulllayerextent", |
helptext = _("Zoom to the full layer extent"), |
995 |
sensitive = _has_selected_layer) |
icon = "fulllayerextent", sensitive = _has_selected_layer) |
996 |
_method_command("selected_full_extent", _("&Full selection extent"), "FullSelectionExtent", |
_method_command("selected_full_extent", _("&Full selection extent"), |
997 |
helptext = _("Full Selection Extent"), icon = "fullselextent", |
"FullSelectionExtent", |
998 |
sensitive = _has_selected_shapes) |
helptext = _("Zoom to the full selection extent"), |
999 |
|
icon = "fullselextent", sensitive = _has_selected_shapes) |
1000 |
_method_command("map_export", _("E&xport"), "ExportMap", |
_method_command("map_export", _("E&xport"), "ExportMap", |
1001 |
helptext = _("Export the map to file")) |
helptext = _("Export the map to file")) |
1002 |
_method_command("map_print", _("Prin&t"), "PrintMap", |
_method_command("map_print", _("Prin&t"), "PrintMap", |
1003 |
helptext = _("Print the map")) |
helptext = _("Print the map")) |
1004 |
_method_command("map_rename", _("&Rename..."), "RenameMap", |
_method_command("map_rename", _("&Rename..."), "RenameMap", |
1005 |
helptext = _("Rename the map")) |
helptext = _("Rename the map")) |
1006 |
_method_command("layer_add", _("&Add Layer..."), "AddLayer", |
_method_command("layer_add", _("&Add Layer..."), "AddLayer", |
1007 |
helptext = _("Add a new layer to active map")) |
helptext = _("Add a new layer to the map")) |
1008 |
_method_command("rasterlayer_add", _("&Add Image Layer..."), "AddRasterLayer", |
_method_command("rasterlayer_add", _("&Add Image Layer..."), "AddRasterLayer", |
1009 |
helptext = _("Add a new image layer to active map")) |
helptext = _("Add a new image layer to the map"), |
1010 |
|
sensitive = _has_gdal_support) |
1011 |
_method_command("layer_remove", _("&Remove Layer"), "RemoveLayer", |
_method_command("layer_remove", _("&Remove Layer"), "RemoveLayer", |
1012 |
helptext = _("Remove selected layer(s)"), |
helptext = _("Remove selected layer"), |
1013 |
sensitive = _can_remove_layer) |
sensitive = _can_remove_layer) |
1014 |
|
|
1015 |
# Layer menu |
# Layer menu |
1016 |
_method_command("layer_projection", _("Pro&jection..."), "LayerProjection", |
_method_command("layer_projection", _("Pro&jection..."), "LayerProjection", |
1017 |
sensitive = _has_selected_layer) |
sensitive = _has_selected_layer, |
1018 |
|
helptext = _("Specify projection for selected layer")) |
1019 |
_method_command("layer_duplicate", _("&Duplicate"), "DuplicateLayer", |
_method_command("layer_duplicate", _("&Duplicate"), "DuplicateLayer", |
1020 |
helptext = _("Duplicate selected layer(s)"), |
helptext = _("Duplicate selected layer"), |
1021 |
sensitive = lambda context: context.mainwindow.CanDuplicateLayer()) |
sensitive = lambda context: context.mainwindow.CanDuplicateLayer()) |
1022 |
_method_command("layer_rename", _("Re&name ..."), "RenameLayer", |
_method_command("layer_rename", _("Re&name ..."), "RenameLayer", |
1023 |
helptext = _("Rename selected layer"), |
helptext = _("Rename selected layer"), |
1024 |
sensitive = _has_selected_layer) |
sensitive = _has_selected_layer) |
1025 |
_method_command("layer_raise", _("&Raise"), "RaiseLayer", |
_method_command("layer_raise", _("&Raise"), "RaiseLayer", |
1026 |
helptext = _("Raise selected layer(s)"), |
helptext = _("Raise selected layer"), |
1027 |
sensitive = _has_selected_layer) |
sensitive = _has_selected_layer) |
1028 |
_method_command("layer_lower", _("&Lower"), "LowerLayer", |
_method_command("layer_lower", _("&Lower"), "LowerLayer", |
1029 |
helptext = _("Lower selected layer(s)"), |
helptext = _("Lower selected layer"), |
1030 |
sensitive = _has_selected_layer) |
sensitive = _has_selected_layer) |
1031 |
_method_command("layer_show", _("&Show"), "ShowLayer", |
_method_command("layer_show", _("&Show"), "ShowLayer", |
1032 |
helptext = _("Make selected layer(s) visible"), |
helptext = _("Make selected layer visible"), |
1033 |
sensitive = _has_selected_layer) |
sensitive = _has_selected_layer) |
1034 |
_method_command("layer_hide", _("&Hide"), "HideLayer", |
_method_command("layer_hide", _("&Hide"), "HideLayer", |
1035 |
helptext = _("Make selected layer(s) unvisible"), |
helptext = _("Make selected layer unvisible"), |
1036 |
sensitive = _has_selected_layer) |
sensitive = _has_selected_layer) |
1037 |
_method_command("layer_show_table", _("Show Ta&ble"), "LayerShowTable", |
_method_command("layer_show_table", _("Show Ta&ble"), "LayerShowTable", |
1038 |
helptext = _("Show the selected layer's table"), |
helptext = _("Show the selected layer's table"), |
1039 |
sensitive = _has_selected_layer) |
sensitive = _has_selected_layer) |
1040 |
_method_command("layer_properties", _("&Properties..."), "LayerEditProperties", |
_method_command("layer_properties", _("&Properties..."), "LayerEditProperties", |
1041 |
sensitive = _has_selected_layer) |
sensitive = _has_selected_layer, |
1042 |
|
helptext = _("Edit the properties of the selected layer")) |
1043 |
_method_command("layer_jointable", _("&Join Table..."), "LayerJoinTable", |
_method_command("layer_jointable", _("&Join Table..."), "LayerJoinTable", |
1044 |
sensitive = _has_selected_layer) |
sensitive = _has_selected_layer, |
1045 |
|
helptext = _("Join and attach a table to the selected layer")) |
1046 |
|
|
1047 |
def _can_unjoin(context): |
def _can_unjoin(context): |
1048 |
"""Return whether the Layer/Unjoin command can be executed. |
"""Return whether the Layer/Unjoin command can be executed. |
1059 |
else: |
else: |
1060 |
return 0 |
return 0 |
1061 |
_method_command("layer_unjointable", _("&Unjoin Table..."), "LayerUnjoinTable", |
_method_command("layer_unjointable", _("&Unjoin Table..."), "LayerUnjoinTable", |
1062 |
sensitive = _can_unjoin) |
sensitive = _can_unjoin, |
1063 |
|
helptext = _("Undo the last join operation")) |
1064 |
|
|
1065 |
|
|
1066 |
def _has_tables(context): |
def _has_tables(context): |
1067 |
return bool(context.session.Tables()) |
return bool(context.session.Tables()) |
1068 |
|
|
1069 |
# Table menu |
# Table menu |
1070 |
_method_command("table_open", _("&Open..."), "TableOpen") |
_method_command("table_open", _("&Open..."), "TableOpen", |
1071 |
_method_command("table_close", _("&Close"), "TableClose", |
helptext = _("Open a DBF-table from a file")) |
1072 |
sensitive = lambda context: bool(context.session.UnreferencedTables())) |
_method_command("table_close", _("&Close..."), "TableClose", |
1073 |
|
sensitive = lambda context: bool(context.session.UnreferencedTables()), |
1074 |
|
helptext = _("Close one or more tables from a list")) |
1075 |
_method_command("table_rename", _("&Rename..."), "TableRename", |
_method_command("table_rename", _("&Rename..."), "TableRename", |
1076 |
sensitive = _has_tables) |
sensitive = _has_tables, |
1077 |
_method_command("table_show", _("&Show"), "TableShow", |
helptext = _("Rename one or more tables")) |
1078 |
sensitive = _has_tables) |
_method_command("table_show", _("&Show..."), "TableShow", |
1079 |
|
sensitive = _has_tables, |
1080 |
|
helptext = _("Show one or more tables in a dialog")) |
1081 |
_method_command("table_join", _("&Join..."), "TableJoin", |
_method_command("table_join", _("&Join..."), "TableJoin", |
1082 |
sensitive = _has_tables) |
sensitive = _has_tables, |
1083 |
|
helptext = _("Join two tables creating a new one")) |
1084 |
|
|
1085 |
# Export only under Windows ... |
# Export only under Windows ... |
1086 |
map_menu = ["layer_add", "rasterlayer_add", "layer_remove", "map_rename", |
map_menu = ["layer_add", "rasterlayer_add", "layer_remove", |
1087 |
None, |
None, |
1088 |
|
"map_rename", |
1089 |
"map_projection", |
"map_projection", |
1090 |
None, |
None, |
1091 |
"map_zoom_in_tool", "map_zoom_out_tool", |
"map_zoom_in_tool", "map_zoom_out_tool", |