/[thuban]/branches/WIP-pyshapelib-bramz/Thuban/UI/mainwindow.py
ViewVC logotype

Diff of /branches/WIP-pyshapelib-bramz/Thuban/UI/mainwindow.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 787 by bh, Wed Apr 30 10:57:24 2003 UTC revision 951 by frank, Wed May 21 14:20:32 2003 UTC
# Line 2  Line 2 
2  # Authors:  # Authors:
3  # Jan-Oliver Wagner <[email protected]>  # Jan-Oliver Wagner <[email protected]>
4  # Bernhard Herzog <[email protected]>  # Bernhard Herzog <[email protected]>
5    # Frank Koormann <[email protected]>
6  #  #
7  # This program is free software under the GPL (>=v2)  # This program is free software under the GPL (>=v2)
8  # Read the file COPYING coming with Thuban for details.  # Read the file COPYING coming with Thuban for details.
# Line 18  __ThubanVersion__ = "0.2" #"$THUBAN_0_2$ Line 19  __ThubanVersion__ = "0.2" #"$THUBAN_0_2$
19  import os  import os
20    
21  from wxPython.wx import *  from wxPython.wx import *
22    from wxPython.wx import __version__ as wxPython_version
23    
24  import Thuban  import Thuban
25    import Thuban.version
26    
27  from Thuban import _  from Thuban import _
28  from Thuban.Model.session import create_empty_session  from Thuban.Model.session import create_empty_session
29  from Thuban.Model.layer import Layer  from Thuban.Model.layer import Layer, RasterLayer
30  from Thuban.Model.color import Color  from Thuban.Model.color import Color
31  from Thuban.Model.proj import Projection  from Thuban.Model.proj import Projection
32    
# Line 39  from command import registry, Command, T Line 43  from command import registry, Command, T
43  from messages import LAYER_SELECTED, SHAPES_SELECTED, VIEW_POSITION  from messages import LAYER_SELECTED, SHAPES_SELECTED, VIEW_POSITION
44    
45  from Thuban.UI.dock import DockFrame  from Thuban.UI.dock import DockFrame
46    from Thuban.UI.join import JoinDialog
47    
48  import resource  import resource
49    
# Line 60  class MainWindow(DockFrame): Line 65  class MainWindow(DockFrame):
65      # implemented in the __getattr__ method.      # implemented in the __getattr__ method.
66      delegated_methods = {"SelectLayer": "canvas",      delegated_methods = {"SelectLayer": "canvas",
67                           "SelectShapes": "canvas",                           "SelectShapes": "canvas",
68                             "SelectedShapes": "canvas",
69                           }                           }
70    
71      def __init__(self, parent, ID, title, application, interactor,      def __init__(self, parent, ID, title, application, interactor,
# Line 98  class MainWindow(DockFrame): Line 104  class MainWindow(DockFrame):
104    
105          self.init_dialogs()          self.init_dialogs()
106    
107          EVT_CLOSE(self, self._OnClose)          EVT_CLOSE(self, self.OnClose)
108    
109      def Subscribe(self, channel, *args):      def Subscribe(self, channel, *args):
110          """Subscribe a function to a message channel.          """Subscribe a function to a message channel.
# Line 357  class MainWindow(DockFrame): Line 363  class MainWindow(DockFrame):
363                  d.Close()                  d.Close()
364    
365      def NewSession(self):      def NewSession(self):
366          self.save_modified_session()          if self.save_modified_session() != wxID_CANCEL:
367          self.prepare_new_session()              self.prepare_new_session()
368          self.application.SetSession(create_empty_session())              self.application.SetSession(create_empty_session())
369    
370      def OpenSession(self):      def OpenSession(self):
371          self.save_modified_session()          if self.save_modified_session() != wxID_CANCEL:
372          dlg = wxFileDialog(self, _("Open Session"), ".", "", "*.thuban", wxOPEN)              dlg = wxFileDialog(self, _("Open Session"), ".", "",
373          if dlg.ShowModal() == wxID_OK:                                 "Thuban Session File (*.thuban)|*.thuban",
374              self.prepare_new_session()                                 wxOPEN)
375              self.application.OpenSession(dlg.GetPath())              if dlg.ShowModal() == wxID_OK:
376          dlg.Destroy()                  self.prepare_new_session()
377                    self.application.OpenSession(dlg.GetPath())
378                dlg.Destroy()
379    
380      def SaveSession(self):      def SaveSession(self):
381          if self.application.session.filename == None:          if self.application.session.filename == None:
# Line 377  class MainWindow(DockFrame): Line 385  class MainWindow(DockFrame):
385    
386      def SaveSessionAs(self):      def SaveSessionAs(self):
387          dlg = wxFileDialog(self, _("Save Session As"), ".", "",          dlg = wxFileDialog(self, _("Save Session As"), ".", "",
388                             "*.thuban", wxSAVE|wxOVERWRITE_PROMPT)                             "Thuban Session File (*.thuban)|*.thuban",
389                               wxSAVE|wxOVERWRITE_PROMPT)
390          if dlg.ShowModal() == wxID_OK:          if dlg.ShowModal() == wxID_OK:
391              self.application.session.SetFilename(dlg.GetPath())              self.application.session.SetFilename(dlg.GetPath())
392              self.application.SaveSession()              self.application.SaveSession()
# Line 386  class MainWindow(DockFrame): Line 395  class MainWindow(DockFrame):
395      def Exit(self):      def Exit(self):
396          self.Close(False)          self.Close(False)
397    
398      def _OnClose(self, event):      def OnClose(self, event):
399          result = self.save_modified_session(can_veto = event.CanVeto())          result = self.save_modified_session(can_veto = event.CanVeto())
400          if result == wxID_CANCEL:          if result == wxID_CANCEL:
401              event.Veto()              event.Veto()
# Line 428  class MainWindow(DockFrame): Line 437  class MainWindow(DockFrame):
437    
438      def About(self):      def About(self):
439          self.RunMessageBox(_("About"),          self.RunMessageBox(_("About"),
440                             _("Thuban v%s\n"                             _("Thuban %s\n"
441                              #"Build Date: %s\n"                              #"Build Date: %s\n"
442                              "\n"                              "using:\n"
443                                "  %s\n"
444                                "  %s\n\n"
445                              "Thuban is a program for\n"                              "Thuban is a program for\n"
446                              "exploring geographic data.\n"                              "exploring geographic data.\n"
447                              "Copyright (C) 2001-2003 Intevation GmbH.\n"                              "Copyright (C) 2001-2003 Intevation GmbH.\n"
448                              "Thuban is licensed under the GNU GPL"                              "Thuban is licensed under the GNU GPL"
449                             % __ThubanVersion__), #__BuildDate__)),                              % (Thuban.version.longversion,
450                                   "wxPython %s" % wxPython_version,
451                                   "Python %d.%d.%d" % sys.version_info[:3]
452                                  )),
453    #                           % __ThubanVersion__), #__BuildDate__)),
454                             wxOK | wxICON_INFORMATION)                             wxOK | wxICON_INFORMATION)
455    
456      def AddLayer(self):      def AddLayer(self):
# Line 461  class MainWindow(DockFrame): Line 476  class MainWindow(DockFrame):
476                      self.canvas.FitMapToWindow()                      self.canvas.FitMapToWindow()
477          dlg.Destroy()          dlg.Destroy()
478    
479        def AddRasterLayer(self):
480            dlg = wxFileDialog(self, _("Select an image file"), ".", "", "*.*",
481                               wxOPEN)
482            if dlg.ShowModal() == wxID_OK:
483                filename = dlg.GetPath()
484                title = os.path.splitext(os.path.basename(filename))[0]
485                layer = RasterLayer(title, filename)
486                map = self.canvas.Map()
487                has_layers = map.HasLayers()
488                try:
489                    map.AddLayer(layer)
490                except IOError:
491                    # the layer couldn't be opened
492                    self.RunMessageBox(_("Add Image Layer"),
493                                       _("Can't open the file '%s'.") % filename)
494                else:
495                    if not has_layers:
496                        # if we're adding a layer to an empty map, fit the
497                        # new map to the window
498                        self.canvas.FitMapToWindow()
499            dlg.Destroy()
500    
501      def RemoveLayer(self):      def RemoveLayer(self):
502          layer = self.current_layer()          layer = self.current_layer()
503          if layer is not None:          if layer is not None:
# Line 500  class MainWindow(DockFrame): Line 537  class MainWindow(DockFrame):
537          """Return true if a layer is currently selected"""          """Return true if a layer is currently selected"""
538          return self.canvas.HasSelectedLayer()          return self.canvas.HasSelectedLayer()
539    
540      def choose_color(self):      def has_selected_shapes(self):
541          """Run the color selection dialog and return the selected color.          """Return true if a shape is currently selected"""
542            return self.canvas.HasSelectedShapes()
         If the user cancels, return None.  
         """  
         dlg = wxColourDialog(self)  
         color = None  
         if dlg.ShowModal() == wxID_OK:  
             data = dlg.GetColourData()  
             wxc = data.GetColour()  
             color = Color(wxc.Red() / 255.0,  
                           wxc.Green() / 255.0,  
                           wxc.Blue() / 255.0)  
         dlg.Destroy()  
         return color  
543    
544      def HideLayer(self):      def HideLayer(self):
545          layer = self.current_layer()          layer = self.current_layer()
# Line 591  class MainWindow(DockFrame): Line 616  class MainWindow(DockFrame):
616              dialog.Show()              dialog.Show()
617          dialog.Raise()          dialog.Raise()
618    
619        def LayerJoinTable(self):
620            print "LayerJoinTable"
621    
622        def LayerUnjoinTable(self):
623            print "LayerUnjoinTable"
624    
625      def ShowLegend(self):      def ShowLegend(self):
626          if not self.LegendShown():          if not self.LegendShown():
# Line 615  class MainWindow(DockFrame): Line 645  class MainWindow(DockFrame):
645          dialog = self.FindRegisteredDock("legend")          dialog = self.FindRegisteredDock("legend")
646          return dialog is not None and dialog.IsShown()          return dialog is not None and dialog.IsShown()
647    
648        def TableOpen(self):
649            print "TableOpen"
650            dlg = wxFileDialog(self, _("Open Table"), ".", "",
651                               "DBF Files (*.dbf)|*.dbf|" +
652                               "CSV Files (*.csv)|*.csv|" +
653                               "All Files (*.*)|*.*",
654                               wxOPEN)
655            if dlg.ShowModal() == wxID_OK:
656                #self.application.session.OpenTable(dlg.GetPath())
657                pass
658    
659            dlg.Destroy()
660    
661        def TableClose(self):
662            print "TableClose"
663    
664        def TableShow(self):
665            print "TableShow"
666    
667        def TableHide(self):
668            print "TableHide"
669    
670        def TableJoin(self):
671            print "TableJoin"
672            dlg = JoinDialog(self, _("Join Tables"), self.application.session)
673            if dlg.ShowModal() == wxID_OK:
674                print "OK"
675    
676      def ZoomInTool(self):      def ZoomInTool(self):
677          self.canvas.ZoomInTool()          self.canvas.ZoomInTool()
678    
# Line 634  class MainWindow(DockFrame): Line 692  class MainWindow(DockFrame):
692      def FullExtent(self):      def FullExtent(self):
693          self.canvas.FitMapToWindow()          self.canvas.FitMapToWindow()
694    
695        def FullLayerExtent(self):
696            self.canvas.FitLayerToWindow(self.current_layer())
697    
698        def FullSelectionExtent(self):
699            self.canvas.FitSelectedToWindow()
700    
701        def ExportMap(self):
702            self.canvas.Export()
703    
704      def PrintMap(self):      def PrintMap(self):
705          self.canvas.Print()          self.canvas.Print()
706    
# Line 715  def _has_selected_layer(context): Line 782  def _has_selected_layer(context):
782      """Return true if a layer is selected in the context"""      """Return true if a layer is selected in the context"""
783      return context.mainwindow.has_selected_layer()      return context.mainwindow.has_selected_layer()
784    
785    def _has_selected_shapes(context):
786        """Return true if a layer is selected in the context"""
787        return context.mainwindow.has_selected_shapes()
788    
789  def _can_remove_layer(context):  def _can_remove_layer(context):
790      return context.mainwindow.CanRemoveLayer()      return context.mainwindow.CanRemoveLayer()
791    
# Line 740  def _has_legend_shown(context): Line 811  def _has_legend_shown(context):
811    
812  # File menu  # File menu
813  _method_command("new_session", _("&New Session"), "NewSession")  _method_command("new_session", _("&New Session"), "NewSession")
814  _method_command("open_session", _("&Open Session"), "OpenSession")  _method_command("open_session", _("&Open Session..."), "OpenSession")
815  _method_command("save_session", _("&Save Session"), "SaveSession")  _method_command("save_session", _("&Save Session"), "SaveSession")
816  _method_command("save_session_as", _("Save Session &As"), "SaveSessionAs")  _method_command("save_session_as", _("Save Session &As..."), "SaveSessionAs")
817  _method_command("toggle_session_tree", _("Session &Tree"), "ToggleSessionTree",  _method_command("toggle_session_tree", _("Session &Tree"), "ToggleSessionTree",
818                  checked = _has_tree_window_shown)                  checked = _has_tree_window_shown)
819  _method_command("toggle_legend", _("Legend"), "ToggleLegend",  _method_command("toggle_legend", _("Legend"), "ToggleLegend",
# Line 750  _method_command("toggle_legend", _("Lege Line 821  _method_command("toggle_legend", _("Lege
821  _method_command("exit", _("E&xit"), "Exit")  _method_command("exit", _("E&xit"), "Exit")
822    
823  # Help menu  # Help menu
824  _method_command("help_about", _("&About"), "About")  _method_command("help_about", _("&About..."), "About")
825    
826    
827  # Map menu  # Map menu
828  _method_command("map_projection", _("Pro&jection"), "MapProjection")  _method_command("map_projection", _("Pro&jection..."), "MapProjection")
829    
830  _tool_command("map_zoom_in_tool", _("&Zoom in"), "ZoomInTool", "ZoomInTool",  _tool_command("map_zoom_in_tool", _("&Zoom in"), "ZoomInTool", "ZoomInTool",
831                helptext = _("Switch to map-mode 'zoom-in'"), icon = "zoom_in",                helptext = _("Switch to map-mode 'zoom-in'"), icon = "zoom_in",
# Line 775  _tool_command("map_label_tool", _("&Labe Line 846  _tool_command("map_label_tool", _("&Labe
846  _method_command("map_full_extent", _("&Full extent"), "FullExtent",  _method_command("map_full_extent", _("&Full extent"), "FullExtent",
847                 helptext = _("Full Extent"), icon = "fullextent",                 helptext = _("Full Extent"), icon = "fullextent",
848                sensitive = _has_visible_map)                sensitive = _has_visible_map)
849    _method_command("layer_full_extent", _("&Full layer extent"), "FullLayerExtent",
850                   helptext = _("Full Layer Extent"), icon = "fulllayerextent",
851                  sensitive = _has_selected_layer)
852    _method_command("selected_full_extent", _("&Full selection extent"), "FullSelectionExtent",
853                   helptext = _("Full Selection Extent"), icon = "fullselextent",
854                  sensitive = _has_selected_shapes)
855    _method_command("map_export", _("E&xport"), "ExportMap",
856                        helptext = _("Export the map to file"))
857  _method_command("map_print", _("Prin&t"), "PrintMap",  _method_command("map_print", _("Prin&t"), "PrintMap",
858                  helptext = _("Print the map"))                  helptext = _("Print the map"))
859  _method_command("map_rename", _("&Rename"), "RenameMap",  _method_command("map_rename", _("&Rename..."), "RenameMap",
860                  helptext = _("Rename the map"))                  helptext = _("Rename the map"))
861  _method_command("layer_add", _("&Add Layer"), "AddLayer",  _method_command("layer_add", _("&Add Layer..."), "AddLayer",
862                  helptext = _("Add a new layer to active map"))                  helptext = _("Add a new layer to active map"))
863    _method_command("rasterlayer_add", _("&Add Image Layer..."), "AddRasterLayer",
864                    helptext = _("Add a new image layer to active map"))
865  _method_command("layer_remove", _("&Remove Layer"), "RemoveLayer",  _method_command("layer_remove", _("&Remove Layer"), "RemoveLayer",
866                  helptext = _("Remove selected layer(s)"),                  helptext = _("Remove selected layer(s)"),
867                  sensitive = _can_remove_layer)                  sensitive = _can_remove_layer)
868    
869  # Layer menu  # Layer menu
870  _method_command("layer_projection", _("Pro&jection"), "LayerProjection",  _method_command("layer_projection", _("Pro&jection..."), "LayerProjection",
871                  sensitive = _has_selected_layer)                  sensitive = _has_selected_layer)
872  _method_command("layer_raise", _("&Raise"), "RaiseLayer",  _method_command("layer_raise", _("&Raise"), "RaiseLayer",
873                  helptext = _("Raise selected layer(s)"),                  helptext = _("Raise selected layer(s)"),
# Line 803  _method_command("layer_hide", _("&Hide") Line 884  _method_command("layer_hide", _("&Hide")
884  _method_command("layer_show_table", _("Show Ta&ble"), "LayerShowTable",  _method_command("layer_show_table", _("Show Ta&ble"), "LayerShowTable",
885                  helptext = _("Show the selected layer's table"),                  helptext = _("Show the selected layer's table"),
886                  sensitive = _has_selected_layer)                  sensitive = _has_selected_layer)
887  _method_command("layer_properties", _("Properties"), "LayerEditProperties",  _method_command("layer_properties", _("&Properties..."), "LayerEditProperties",
888                    sensitive = _has_selected_layer)
889    _method_command("layer_jointable", _("&Join Table..."), "LayerJoinTable",
890                    sensitive = _has_selected_layer)
891    _method_command("layer_unjointable", _("&Unjoin Table..."), "LayerUnjoinTable",
892                  sensitive = _has_selected_layer)                  sensitive = _has_selected_layer)
893    
894  # the menu structure  # Table menu
895  main_menu = Menu("<main>", "<main>",  _method_command("table_open", _("&Open..."), "TableOpen")
896                   [Menu("file", _("&File"),  _method_command("table_close", _("&Close"), "TableClose")
897                         ["new_session", "open_session", None,  _method_command("table_show", _("&Show"), "TableShow")
898                          "save_session", "save_session_as", None,  _method_command("table_hide", _("&Hide"), "TableHide")
899                          "toggle_session_tree", None,  _method_command("table_join", _("&Join..."), "TableJoin")
900                          "exit"]),  
901                    Menu("map", _("&Map"),  #  Export only under Windows ...
902                         ["layer_add", "layer_remove",  map_menu = ["layer_add", "rasterlayer_add", "layer_remove", "map_rename",
903                          None,                          None,
904                          "map_projection",                          "map_projection",
905                          None,                          None,
906                          "map_zoom_in_tool", "map_zoom_out_tool",                          "map_zoom_in_tool", "map_zoom_out_tool",
907                          "map_pan_tool", "map_identify_tool", "map_label_tool",                          "map_pan_tool",
908                            "map_full_extent",
909                            "layer_full_extent",
910                            "selected_full_extent",
911                          None,                          None,
912                          "map_full_extent",                          "map_identify_tool", "map_label_tool",
913                          None,                          None,
914                          "toggle_legend",                          "toggle_legend",
915                          None,                          None]
916                          "map_print",  if wxPlatform == '__WXMSW__':
917                          None,      map_menu.append("map_export")
918                          "map_rename"]),  map_menu.append("map_print")
919    
920    # the menu structure
921    main_menu = Menu("<main>", "<main>",
922                     [Menu("file", _("&File"),
923                           ["new_session", "open_session", None,
924                            "save_session", "save_session_as", None,
925                            "toggle_session_tree", None,
926                            "exit"]),
927                      Menu("map", _("&Map"), map_menu),
928                    Menu("layer", _("&Layer"),                    Menu("layer", _("&Layer"),
929                          ["layer_raise", "layer_lower",                          ["layer_raise", "layer_lower",
930                          None,                          None,
931                          "layer_show", "layer_hide",                          "layer_show", "layer_hide",
932                          None,                          None,
933                          "layer_show_table",                          "layer_projection",
934                          None,                          None,
935                          "layer_properties",                          "layer_show_table",
936                            "layer_jointable",
937                            "layer_unjointable",
938                          None,                          None,
939                          "layer_projection"]),                          "layer_properties"]),
940                      Menu("table", _("&Table"),
941                           ["table_open", "table_close",
942                           None,
943                           "table_show", "table_hide",
944                           None,
945                           "table_join"]),
946                    Menu("help", _("&Help"),                    Menu("help", _("&Help"),
947                         ["help_about"])])                         ["help_about"])])
948    
# Line 845  main_menu = Menu("<main>", "<main>", Line 950  main_menu = Menu("<main>", "<main>",
950    
951  main_toolbar = Menu("<toolbar>", "<toolbar>",  main_toolbar = Menu("<toolbar>", "<toolbar>",
952                      ["map_zoom_in_tool", "map_zoom_out_tool", "map_pan_tool",                      ["map_zoom_in_tool", "map_zoom_out_tool", "map_pan_tool",
953                       "map_full_extent", None,                       "map_full_extent",
954                         "layer_full_extent",
955                         "selected_full_extent",
956                         None,
957                       "map_identify_tool", "map_label_tool"])                       "map_identify_tool", "map_label_tool"])

Legend:
Removed from v.787  
changed lines
  Added in v.951

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26