/[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 704 by bh, Tue Apr 22 16:55:50 2003 UTC revision 923 by frank, Mon May 19 09:12:25 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
# 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    
50    import projdialog
51    
52    
53    
54  class MainWindow(DockFrame):  class MainWindow(DockFrame):
# Line 58  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 361  class MainWindow(DockFrame): Line 369  class MainWindow(DockFrame):
369    
370      def OpenSession(self):      def OpenSession(self):
371          self.save_modified_session()          self.save_modified_session()
372          dlg = wxFileDialog(self, _("Open Session"), ".", "", "*.thuban", wxOPEN)          dlg = wxFileDialog(self, _("Open Session"), ".", "",
373                               "Thuban Session File (*.thuban)|*.thuban", wxOPEN)
374          if dlg.ShowModal() == wxID_OK:          if dlg.ShowModal() == wxID_OK:
375              self.prepare_new_session()              self.prepare_new_session()
376              self.application.OpenSession(dlg.GetPath())              self.application.OpenSession(dlg.GetPath())
# Line 375  class MainWindow(DockFrame): Line 384  class MainWindow(DockFrame):
384    
385      def SaveSessionAs(self):      def SaveSessionAs(self):
386          dlg = wxFileDialog(self, _("Save Session As"), ".", "",          dlg = wxFileDialog(self, _("Save Session As"), ".", "",
387                             "*.thuban", wxOPEN)                             "Thuban Session File (*.thuban)|*.thuban",
388                               wxSAVE|wxOVERWRITE_PROMPT)
389          if dlg.ShowModal() == wxID_OK:          if dlg.ShowModal() == wxID_OK:
390              self.application.session.SetFilename(dlg.GetPath())              self.application.session.SetFilename(dlg.GetPath())
391              self.application.SaveSession()              self.application.SaveSession()
# Line 399  class MainWindow(DockFrame): Line 409  class MainWindow(DockFrame):
409      def SetMap(self, map):      def SetMap(self, map):
410          self.canvas.SetMap(map)          self.canvas.SetMap(map)
411          self.__SetTitle(map.Title())          self.__SetTitle(map.Title())
412          #self.legendPanel.SetMap(map)  
413            dialog = self.FindRegisteredDock("legend")
414            if dialog is not None:
415                dialog.GetPanel().SetMap(self.Map())
416    
417      def Map(self):      def Map(self):
418          """Return the map displayed by this mainwindow"""          """Return the map displayed by this mainwindow"""
419    
         # sanity check  
         #assert(self.canvas.Map() is self.legendPanel.GetMap())  
   
420          return self.canvas.Map()          return self.canvas.Map()
421    
422      def ToggleSessionTree(self):      def ToggleSessionTree(self):
# Line 426  class MainWindow(DockFrame): Line 436  class MainWindow(DockFrame):
436    
437      def About(self):      def About(self):
438          self.RunMessageBox(_("About"),          self.RunMessageBox(_("About"),
439                             _("Thuban v%s\n"                             _("Thuban %s\n"
440                              #"Build Date: %s\n"                              #"Build Date: %s\n"
441                              "\n"                              "using:\n"
442                                "  %s\n"
443                                "  %s\n\n"
444                              "Thuban is a program for\n"                              "Thuban is a program for\n"
445                              "exploring geographic data.\n"                              "exploring geographic data.\n"
446                              "Copyright (C) 2001-2003 Intevation GmbH.\n"                              "Copyright (C) 2001-2003 Intevation GmbH.\n"
447                              "Thuban is licensed under the GNU GPL"                              "Thuban is licensed under the GNU GPL"
448                             % __ThubanVersion__), #__BuildDate__)),                              % (Thuban.version.longversion,
449                                   "wxPython %s" % wxPython_version,
450                                   "Python %d.%d.%d" % sys.version_info[:3]
451                                  )),
452    #                           % __ThubanVersion__), #__BuildDate__)),
453                             wxOK | wxICON_INFORMATION)                             wxOK | wxICON_INFORMATION)
454    
455      def AddLayer(self):      def AddLayer(self):
# Line 442  class MainWindow(DockFrame): Line 458  class MainWindow(DockFrame):
458          if dlg.ShowModal() == wxID_OK:          if dlg.ShowModal() == wxID_OK:
459              filename = dlg.GetPath()              filename = dlg.GetPath()
460              title = os.path.splitext(os.path.basename(filename))[0]              title = os.path.splitext(os.path.basename(filename))[0]
461              layer = Layer(title, filename)              store = self.application.Session().OpenShapefile(filename)
462                layer = Layer(title, store)
463              map = self.canvas.Map()              map = self.canvas.Map()
464              has_layers = map.HasLayers()              has_layers = map.HasLayers()
465              try:              try:
# Line 497  class MainWindow(DockFrame): Line 514  class MainWindow(DockFrame):
514          """Return true if a layer is currently selected"""          """Return true if a layer is currently selected"""
515          return self.canvas.HasSelectedLayer()          return self.canvas.HasSelectedLayer()
516    
517      def choose_color(self):      def has_selected_shapes(self):
518          """Run the color selection dialog and return the selected color.          """Return true if a shape is currently selected"""
519            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  
520    
521      def HideLayer(self):      def HideLayer(self):
522          layer = self.current_layer()          layer = self.current_layer()
# Line 539  class MainWindow(DockFrame): Line 544  class MainWindow(DockFrame):
544                  # FIXME: bring dialog to front here                  # FIXME: bring dialog to front here
545                  pass                  pass
546    
547      def Projection(self):      def MapProjection(self):
548          map = self.canvas.Map()  
549          proj = map.projection          name = "map_projection"
550          if proj is None:          dialog = self.get_open_dialog(name)
551              proj4Dlg = proj4dialog.Proj4Dialog(NULL, None, map.BoundingBox())  
552          else:          if dialog is None:
553              proj4Dlg = proj4dialog.Proj4Dialog(NULL, map.projection.params,              map = self.canvas.Map()
554                                                 map.BoundingBox())              dialog = projdialog.ProjFrame(self, name,
555          if proj4Dlg.ShowModal() == wxID_OK:                       _("Map Projection: %s") % map.Title(), map)
556              params = proj4Dlg.GetParams()              self.add_dialog(name, dialog)
557              if params is not None:              dialog.Show()
558                  proj = Projection(params)          dialog.Raise()
559              else:  
560                  proj = None      def LayerProjection(self):
561              map.SetProjection(proj)  
562          proj4Dlg.Destroy()          layer = self.current_layer()
563    
564            name = "layer_projection" + str(id(layer))
565            dialog = self.get_open_dialog(name)
566    
567            if dialog is None:
568                map = self.canvas.Map()
569                dialog = projdialog.ProjFrame(self, name,
570                         _("Layer Projection: %s") % layer.Title(), layer)
571                self.add_dialog(name, dialog)
572                dialog.Show()
573            dialog.Raise()
574    
575      def LayerEditProperties(self):      def LayerEditProperties(self):
576    
# Line 577  class MainWindow(DockFrame): Line 593  class MainWindow(DockFrame):
593              dialog.Show()              dialog.Show()
594          dialog.Raise()          dialog.Raise()
595    
596        def LayerJoinTable(self):
597            print "LayerJoinTable"
598    
599        def LayerUnjoinTable(self):
600            print "LayerUnjoinTable"
601    
602      def ShowLegend(self):      def ShowLegend(self):
603          if not self.LegendShown():          if not self.LegendShown():
# Line 601  class MainWindow(DockFrame): Line 622  class MainWindow(DockFrame):
622          dialog = self.FindRegisteredDock("legend")          dialog = self.FindRegisteredDock("legend")
623          return dialog is not None and dialog.IsShown()          return dialog is not None and dialog.IsShown()
624    
625        def TableOpen(self):
626            print "TableOpen"
627            dlg = wxFileDialog(self, _("Open Table"), ".", "",
628                               "DBF Files (*.dbf)|*.dbf|" +
629                               "CSV Files (*.csv)|*.csv|" +
630                               "All Files (*.*)|*.*",
631                               wxOPEN)
632            if dlg.ShowModal() == wxID_OK:
633                #self.application.session.OpenTable(dlg.GetPath())
634                pass
635    
636            dlg.Destroy()
637    
638        def TableClose(self):
639            print "TableClose"
640    
641        def TableShow(self):
642            print "TableShow"
643    
644        def TableHide(self):
645            print "TableHide"
646    
647        def TableJoin(self):
648            print "TableJoin"
649            dlg = JoinDialog(self, _("Join Tables"), self.application.session)
650            if dlg.ShowModal() == wxID_OK:
651                print "OK"
652    
653      def ZoomInTool(self):      def ZoomInTool(self):
654          self.canvas.ZoomInTool()          self.canvas.ZoomInTool()
655    
# Line 620  class MainWindow(DockFrame): Line 669  class MainWindow(DockFrame):
669      def FullExtent(self):      def FullExtent(self):
670          self.canvas.FitMapToWindow()          self.canvas.FitMapToWindow()
671    
672        def FullLayerExtent(self):
673            self.canvas.FitLayerToWindow(self.current_layer())
674    
675        def FullSelectionExtent(self):
676            self.canvas.FitSelectedToWindow()
677    
678        def ExportMap(self):
679            self.canvas.Export()
680    
681      def PrintMap(self):      def PrintMap(self):
682          self.canvas.Print()          self.canvas.Print()
683    
# Line 635  class MainWindow(DockFrame): Line 693  class MainWindow(DockFrame):
693          dlg.Destroy()          dlg.Destroy()
694    
695      def identify_view_on_demand(self, layer, shapes):      def identify_view_on_demand(self, layer, shapes):
696            """Subscribed to the canvas' SHAPES_SELECTED message
697    
698            If the current tool is the identify tool, at least one shape is
699            selected and the identify dialog is not shown, show the dialog.
700            """
701            # If the selection has become empty we don't need to do
702            # anything. Otherwise it could happen that the dialog was popped
703            # up when the selection became empty, e.g. when a new selection
704            # is opened while the identify tool is active and dialog had
705            # been closed
706            if not shapes:
707                return
708    
709          name = "identify_view"          name = "identify_view"
710          if self.canvas.CurrentTool() == "IdentifyTool":          if self.canvas.CurrentTool() == "IdentifyTool":
711              if not self.dialog_open(name):              if not self.dialog_open(name):
# Line 688  def _has_selected_layer(context): Line 759  def _has_selected_layer(context):
759      """Return true if a layer is selected in the context"""      """Return true if a layer is selected in the context"""
760      return context.mainwindow.has_selected_layer()      return context.mainwindow.has_selected_layer()
761    
762    def _has_selected_shapes(context):
763        """Return true if a layer is selected in the context"""
764        return context.mainwindow.has_selected_shapes()
765    
766  def _can_remove_layer(context):  def _can_remove_layer(context):
767      return context.mainwindow.CanRemoveLayer()      return context.mainwindow.CanRemoveLayer()
768    
# Line 713  def _has_legend_shown(context): Line 788  def _has_legend_shown(context):
788    
789  # File menu  # File menu
790  _method_command("new_session", _("&New Session"), "NewSession")  _method_command("new_session", _("&New Session"), "NewSession")
791  _method_command("open_session", _("&Open Session"), "OpenSession")  _method_command("open_session", _("&Open Session..."), "OpenSession")
792  _method_command("save_session", _("&Save Session"), "SaveSession")  _method_command("save_session", _("&Save Session"), "SaveSession")
793  _method_command("save_session_as", _("Save Session &As"), "SaveSessionAs")  _method_command("save_session_as", _("Save Session &As..."), "SaveSessionAs")
794  _method_command("toggle_session_tree", _("Session &Tree"), "ToggleSessionTree",  _method_command("toggle_session_tree", _("Session &Tree"), "ToggleSessionTree",
795                  checked = _has_tree_window_shown)                  checked = _has_tree_window_shown)
796  _method_command("toggle_legend", _("Legend"), "ToggleLegend",  _method_command("toggle_legend", _("Legend"), "ToggleLegend",
# Line 723  _method_command("toggle_legend", _("Lege Line 798  _method_command("toggle_legend", _("Lege
798  _method_command("exit", _("E&xit"), "Exit")  _method_command("exit", _("E&xit"), "Exit")
799    
800  # Help menu  # Help menu
801  _method_command("help_about", _("&About"), "About")  _method_command("help_about", _("&About..."), "About")
802    
803    
804  # Map menu  # Map menu
805  _method_command("map_projection", _("Pro&jection"), "Projection")  _method_command("map_projection", _("Pro&jection..."), "MapProjection")
806    
807  _tool_command("map_zoom_in_tool", _("&Zoom in"), "ZoomInTool", "ZoomInTool",  _tool_command("map_zoom_in_tool", _("&Zoom in"), "ZoomInTool", "ZoomInTool",
808                helptext = _("Switch to map-mode 'zoom-in'"), icon = "zoom_in",                helptext = _("Switch to map-mode 'zoom-in'"), icon = "zoom_in",
# Line 748  _tool_command("map_label_tool", _("&Labe Line 823  _tool_command("map_label_tool", _("&Labe
823  _method_command("map_full_extent", _("&Full extent"), "FullExtent",  _method_command("map_full_extent", _("&Full extent"), "FullExtent",
824                 helptext = _("Full Extent"), icon = "fullextent",                 helptext = _("Full Extent"), icon = "fullextent",
825                sensitive = _has_visible_map)                sensitive = _has_visible_map)
826    _method_command("layer_full_extent", _("&Full layer extent"), "FullLayerExtent",
827                   helptext = _("Full Layer Extent"), icon = "fulllayerextent",
828                  sensitive = _has_selected_layer)
829    _method_command("selected_full_extent", _("&Full selection extent"), "FullSelectionExtent",
830                   helptext = _("Full Selection Extent"), icon = "fullselextent",
831                  sensitive = _has_selected_shapes)
832    _method_command("map_export", _("E&xport"), "ExportMap",
833                        helptext = _("Export the map to file"))
834  _method_command("map_print", _("Prin&t"), "PrintMap",  _method_command("map_print", _("Prin&t"), "PrintMap",
835                  helptext = _("Print the map"))                  helptext = _("Print the map"))
836  _method_command("map_rename", _("&Rename"), "RenameMap",  _method_command("map_rename", _("&Rename..."), "RenameMap",
837                  helptext = _("Rename the map"))                  helptext = _("Rename the map"))
838    _method_command("layer_add", _("&Add Layer..."), "AddLayer",
 # Layer menu  
 _method_command("layer_add", _("&Add Layer"), "AddLayer",  
839                  helptext = _("Add a new layer to active map"))                  helptext = _("Add a new layer to active map"))
840  _method_command("layer_remove", _("&Remove Layer"), "RemoveLayer",  _method_command("layer_remove", _("&Remove Layer"), "RemoveLayer",
841                  helptext = _("Remove selected layer(s)"),                  helptext = _("Remove selected layer(s)"),
842                  sensitive = _can_remove_layer)                  sensitive = _can_remove_layer)
843    
844    # Layer menu
845    _method_command("layer_projection", _("Pro&jection..."), "LayerProjection",
846                    sensitive = _has_selected_layer)
847  _method_command("layer_raise", _("&Raise"), "RaiseLayer",  _method_command("layer_raise", _("&Raise"), "RaiseLayer",
848                  helptext = _("Raise selected layer(s)"),                  helptext = _("Raise selected layer(s)"),
849                  sensitive = _has_selected_layer)                  sensitive = _has_selected_layer)
# Line 774  _method_command("layer_hide", _("&Hide") Line 859  _method_command("layer_hide", _("&Hide")
859  _method_command("layer_show_table", _("Show Ta&ble"), "LayerShowTable",  _method_command("layer_show_table", _("Show Ta&ble"), "LayerShowTable",
860                  helptext = _("Show the selected layer's table"),                  helptext = _("Show the selected layer's table"),
861                  sensitive = _has_selected_layer)                  sensitive = _has_selected_layer)
862  _method_command("layer_properties", _("Properties"), "LayerEditProperties",  _method_command("layer_properties", _("&Properties..."), "LayerEditProperties",
863                    sensitive = _has_selected_layer)
864    _method_command("layer_jointable", _("&Join Table..."), "LayerJoinTable",
865                    sensitive = _has_selected_layer)
866    _method_command("layer_unjointable", _("&Unjoin Table..."), "LayerUnjoinTable",
867                  sensitive = _has_selected_layer)                  sensitive = _has_selected_layer)
868    
869  # the menu structure  # Table menu
870  main_menu = Menu("<main>", "<main>",  _method_command("table_open", _("&Open..."), "TableOpen")
871                   [Menu("file", _("&File"),  _method_command("table_close", _("&Close"), "TableClose")
872                         ["new_session", "open_session", None,  _method_command("table_show", _("&Show"), "TableShow")
873                          "save_session", "save_session_as", None,  _method_command("table_hide", _("&Hide"), "TableHide")
874                          "toggle_session_tree", None,  _method_command("table_join", _("&Join..."), "TableJoin")
875                          "exit"]),  
876                    Menu("map", _("&Map"),  #  Export only under Windows ...
877                         ["layer_add", "layer_remove",  map_menu = ["layer_add", "layer_remove", "map_rename",
878                          None,                          None,
879                          "map_projection",                          "map_projection",
880                          None,                          None,
881                          "map_zoom_in_tool", "map_zoom_out_tool",                          "map_zoom_in_tool", "map_zoom_out_tool",
882                          "map_pan_tool", "map_identify_tool", "map_label_tool",                          "map_pan_tool",
883                            "map_full_extent",
884                            "layer_full_extent",
885                            "selected_full_extent",
886                          None,                          None,
887                          "map_full_extent",                          "map_identify_tool", "map_label_tool",
888                          None,                          None,
889                          "toggle_legend",                          "toggle_legend",
890                          None,                          None]
891                          "map_print",  if wxPlatform == '__WXMSW__':
892                          None,      map_menu.append("map_export")
893                          "map_rename"]),  map_menu.append("map_print")
894    
895    # the menu structure
896    main_menu = Menu("<main>", "<main>",
897                     [Menu("file", _("&File"),
898                           ["new_session", "open_session", None,
899                            "save_session", "save_session_as", None,
900                            "toggle_session_tree", None,
901                            "exit"]),
902                      Menu("map", _("&Map"), map_menu),
903                    Menu("layer", _("&Layer"),                    Menu("layer", _("&Layer"),
904                          ["layer_raise", "layer_lower",                          ["layer_raise", "layer_lower",
905                          None,                          None,
906                          "layer_show", "layer_hide",                          "layer_show", "layer_hide",
907                          None,                          None,
908                            "layer_projection",
909                            None,
910                          "layer_show_table",                          "layer_show_table",
911                            "layer_jointable",
912                            "layer_unjointable",
913                          None,                          None,
914                          "layer_properties"]),                          "layer_properties"]),
915                      Menu("table", _("&Table"),
916                           ["table_open", "table_close",
917                           None,
918                           "table_show", "table_hide",
919                           None,
920                           "table_join"]),
921                    Menu("help", _("&Help"),                    Menu("help", _("&Help"),
922                         ["help_about"])])                         ["help_about"])])
923    
# Line 814  main_menu = Menu("<main>", "<main>", Line 925  main_menu = Menu("<main>", "<main>",
925    
926  main_toolbar = Menu("<toolbar>", "<toolbar>",  main_toolbar = Menu("<toolbar>", "<toolbar>",
927                      ["map_zoom_in_tool", "map_zoom_out_tool", "map_pan_tool",                      ["map_zoom_in_tool", "map_zoom_out_tool", "map_pan_tool",
928                       "map_full_extent", None,                       "map_full_extent",
929                         "layer_full_extent",
930                         "selected_full_extent",
931                         None,
932                       "map_identify_tool", "map_label_tool"])                       "map_identify_tool", "map_label_tool"])

Legend:
Removed from v.704  
changed lines
  Added in v.923

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26