/[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 84 by bh, Wed Apr 3 15:21:46 2002 UTC revision 188 by bh, Tue May 28 12:38:45 2002 UTC
# Line 1  Line 1 
1  # Copyright (C) 2001 by Intevation GmbH  # Copyright (C) 2001, 2002 by Intevation GmbH
2  # Authors:  # Authors:
3  # Jan-Oliver Wagner <[email protected]>  # Jan-Oliver Wagner <[email protected]>
4  # Bernhard Herzog <[email protected]>  # Bernhard Herzog <[email protected]>
# Line 12  The main window Line 12  The main window
12    
13  __version__ = "$Revision$"  __version__ = "$Revision$"
14    
15  import sys, os  import os
16    
17  from wxPython.wx import *  from wxPython.wx import *
18    
19  import Thuban  import Thuban
20  from Thuban.Model.session import Session, create_empty_session  from Thuban.Model.session import create_empty_session
 from Thuban.Model.map import Map  
21  from Thuban.Model.layer import Layer  from Thuban.Model.layer import Layer
22  from Thuban.Model.color import Color  from Thuban.Model.color import Color
23  from Thuban.Model.proj import Projection  from Thuban.Model.proj import Projection
# Line 27  import view Line 26  import view
26  import tree  import tree
27  import proj4dialog  import proj4dialog
28  import tableview, identifyview  import tableview, identifyview
29    from menu import Menu
30    
31  import main  import main
32  from command import registry, Command  from command import registry, Command
33  from messages import SELECTED_SHAPE  from messages import SELECTED_SHAPE, VIEW_POSITION
34    
35    
36  # the directory where the toolbar icons are stored  # the directory where the toolbar icons are stored
# Line 54  class MainWindow(wxFrame): Line 54  class MainWindow(wxFrame):
54    
55          self.init_ids()          self.init_ids()
56    
57          menuBar = wxMenuBar()          #main_menu.print_menu()
58            self.SetMenuBar(self.build_menu_bar(main_menu))
         menu = wxMenu()  
         menuBar.Append(menu, "&File");  
         for name in ["new_session", "open_session", None,  
                      "save_session", "save_session_as", None,  
                      "exit"]:  
             self.add_menu_command(menu, name)  
   
         menu = wxMenu()  
         menuBar.Append(menu, "&Map");  
         for name in ["layer_add", "layer_remove",  
                      None,  
                      "map_projection",  
                      None,  
                      "map_zoom_in_tool", "map_zoom_out_tool", "map_pan_tool",  
                      "map_identify_tool", "map_label_tool",  
                      None,  
                      "map_full_extent",  
                      None,  
                      "map_print"]:  
             self.add_menu_command(menu, name)  
   
         menu = wxMenu()  
         menuBar.Append(menu, "&Layer");  
         for name in ["layer_fill_color", "layer_transparent_fill",  
                      "layer_ourline_color", "layer_no_outline",  
                      None,  
                      "layer_raise", "layer_lower",  
                      None,  
                      "layer_show", "layer_hide",  
                      None,  
                      "layer_show_table"]:  
             self.add_menu_command(menu, name)  
   
         menu = wxMenu()  
         menuBar.Append(menu, "&Help");  
         self.add_menu_command(menu, "help_about")  
   
         self.SetMenuBar(menuBar)  
59    
60          # toolbar          # toolbar
61          toolbar = self.CreateToolBar(wxTB_3DBUTTONS)          toolbar = self.CreateToolBar(wxTB_3DBUTTONS)
# Line 104  class MainWindow(wxFrame): Line 66  class MainWindow(wxFrame):
66          toolbar.SetToolBitmapSize(wxSize(24, 24))          toolbar.SetToolBitmapSize(wxSize(24, 24))
67    
68          for name in ["map_zoom_in_tool", "map_zoom_out_tool", "map_pan_tool",          for name in ["map_zoom_in_tool", "map_zoom_out_tool", "map_pan_tool",
69                       "map_identify_tool", "map_label_tool"]:                       "map_identify_tool", "map_label_tool", "map_full_extent"]:
70              self.add_toolbar_command(toolbar, name)              self.add_toolbar_command(toolbar, name)
71          # call Realize to make sure that the tools appear.          # call Realize to make sure that the tools appear.
72          toolbar.Realize()          toolbar.Realize()
73    
74          # Create the map canvas          # Create the map canvas
75          canvas = view.MapCanvas(self, -1, interactor)          canvas = view.MapCanvas(self, -1, interactor)
76            canvas.Subscribe(VIEW_POSITION, self.view_position_changed)
77          self.canvas = canvas          self.canvas = canvas
78    
79          self.init_dialogs()          self.init_dialogs()
# Line 136  class MainWindow(wxFrame): Line 99  class MainWindow(wxFrame):
99              self.name_to_id[name] = ID              self.name_to_id[name] = ID
100              self.id_to_name[ID] = name              self.id_to_name[ID] = name
101          return ID          return ID
102            
103        def build_menu_bar(self, menudesc):
104            """Build and return the menu bar from the menu description"""
105            menu_bar = wxMenuBar()
106    
107            for item in menudesc.items:
108                # here the items must all be Menu instances themselves
109                menu_bar.Append(self.build_menu(item), item.title)
110    
111            return menu_bar
112    
113        def build_menu(self, menudesc):
114            """Build and return a wxMenu from a menudescription"""
115            wxmenu = wxMenu()
116            last = None
117            for item in menudesc.items:
118                # here the items must all be Menu instances themselves
119                if item is None:
120                    # a separator. Only add one if the last item was not a
121                    # separator
122                    if last is not None:
123                        wxmenu.AppendSeparator()
124                elif isinstance(item, Menu):
125                    # a submenu
126                    wxmenu.AppendMenu(wxNewId(), item.title, self.build_menu(item))
127                else:
128                    # must the name the name of a command
129                    self.add_menu_command(wxmenu, item)
130                last = item
131            return wxmenu
132    
133      def add_menu_command(self, menu, name):      def add_menu_command(self, menu, name):
134          """Add the command with name name to the menu menu.          """Add the command with name name to the menu menu.
135    
# Line 195  class MainWindow(wxFrame): Line 188  class MainWindow(wxFrame):
188                  event.Check(command.Checked(self))                  event.Check(command.Checked(self))
189    
190      def RunMessageBox(self, title, text, flags = wxOK | wxICON_INFORMATION):      def RunMessageBox(self, title, text, flags = wxOK | wxICON_INFORMATION):
191          """Run a modla message box with the given text, title and flags          """Run a modal message box with the given text, title and flags
192          and return the result"""          and return the result"""
193          dlg = wxMessageDialog(self, text, title, flags)          dlg = wxMessageDialog(self, text, title, flags)
194          result = dlg.ShowModal()          result = dlg.ShowModal()
# Line 223  class MainWindow(wxFrame): Line 216  class MainWindow(wxFrame):
216      def get_open_dialog(self, name):      def get_open_dialog(self, name):
217          return self.dialogs.get(name)          return self.dialogs.get(name)
218    
219        def view_position_changed(self):
220            pos = self.canvas.CurrentPosition()
221            if pos is not None:
222                text = "(%10.10g, %10.10g)" % pos
223            else:
224                text = ""
225            self.SetStatusText(text)
226    
227      def save_modified_session(self, can_veto = 1):      def save_modified_session(self, can_veto = 1):
228          """If the current session has been modified, ask the user          """If the current session has been modified, ask the user
229          whether to save it and do so if requested. Return the outcome of          whether to save it and do so if requested. Return the outcome of
# Line 253  class MainWindow(wxFrame): Line 254  class MainWindow(wxFrame):
254      def OpenSession(self):      def OpenSession(self):
255          self.save_modified_session()          self.save_modified_session()
256          dlg = wxFileDialog(self, "Select a session file", ".", "",          dlg = wxFileDialog(self, "Select a session file", ".", "",
257                             "*.session", wxOPEN)                             "*.thuban", wxOPEN)
258          if dlg.ShowModal() == wxID_OK:          if dlg.ShowModal() == wxID_OK:
259              main.app.OpenSession(dlg.GetPath())              main.app.OpenSession(dlg.GetPath())
260          dlg.Destroy()          dlg.Destroy()
261    
262      def SaveSession(self):      def SaveSession(self):
263            if main.app.session.filename == None:
264                self.SaveSessionAs()
265          main.app.SaveSession()          main.app.SaveSession()
266    
267      def SaveSessionAs(self):      def SaveSessionAs(self):
268          dlg = wxFileDialog(self, "Enter a filename for session", ".", "",          dlg = wxFileDialog(self, "Enter a filename for session", ".", "",
269                             "*.session", wxOPEN)                             "*.thuban", wxOPEN)
270          if dlg.ShowModal() == wxID_OK:          if dlg.ShowModal() == wxID_OK:
271              main.app.session.SetFilename(dlg.GetPath())              main.app.session.SetFilename(dlg.GetPath())
272              main.app.SaveSession()              main.app.SaveSession()
# Line 302  class MainWindow(wxFrame): Line 305  class MainWindow(wxFrame):
305                             wxOK | wxICON_INFORMATION)                             wxOK | wxICON_INFORMATION)
306    
307      def AddLayer(self):      def AddLayer(self):
308          dlg = wxFileDialog(self, "Select a session file", ".", "", "*.*",          dlg = wxFileDialog(self, "Select a data file", ".", "", "*.*",
309                             wxOPEN)                             wxOPEN)
310          if dlg.ShowModal() == wxID_OK:          if dlg.ShowModal() == wxID_OK:
311              filename = dlg.GetPath()              filename = dlg.GetPath()
# Line 419  class MainWindow(wxFrame): Line 422  class MainWindow(wxFrame):
422          map = self.canvas.Map()          map = self.canvas.Map()
423          proj = map.projection          proj = map.projection
424          if proj is None:          if proj is None:
425              proj4Dlg = proj4dialog.Proj4Dialog(NULL, None)              proj4Dlg = proj4dialog.Proj4Dialog(NULL, None, map.BoundingBox())
426          else:          else:
427              proj4Dlg = proj4dialog.Proj4Dialog(NULL, map.projection.params)              proj4Dlg = proj4dialog.Proj4Dialog(NULL, map.projection.params,
428                                                   map.BoundingBox())
429          if proj4Dlg.ShowModal() == wxID_OK:          if proj4Dlg.ShowModal() == wxID_OK:
430              params = proj4Dlg.GetParams()              params = proj4Dlg.GetParams()
431              if params is not None:              if params is not None:
# Line 474  def call_method(context, methodname, *ar Line 478  def call_method(context, methodname, *ar
478      """Call the context's method methodname with args *args"""      """Call the context's method methodname with args *args"""
479      apply(getattr(context, methodname), args)      apply(getattr(context, methodname), args)
480    
481  def _method_command(name, title, method, helptext = "", sensitive = None):  def _method_command(name, title, method, helptext = "",
482                        icon = "", sensitive = None):
483      """Add a command implemented by a method of the context object"""      """Add a command implemented by a method of the context object"""
484      registry.Add(Command(name, title, call_method, args=(method,),      registry.Add(Command(name, title, call_method, args=(method,),
485                           helptext = helptext, sensitive = sensitive))                           helptext = helptext, icon = icon,
486                             sensitive = sensitive))
487    
488  def _tool_command(name, title, method, toolname, helptext = "",  def _tool_command(name, title, method, toolname, helptext = "",
489                    icon = ""):                    icon = ""):
490      """Add a tool command"""      """Add a tool command"""
# Line 496  _method_command("new_session", "&New Ses Line 503  _method_command("new_session", "&New Ses
503  _method_command("open_session", "&Open Session", "OpenSession")  _method_command("open_session", "&Open Session", "OpenSession")
504  _method_command("save_session", "&Save Session", "SaveSession")  _method_command("save_session", "&Save Session", "SaveSession")
505  _method_command("save_session_as", "Save Session &As", "SaveSessionAs")  _method_command("save_session_as", "Save Session &As", "SaveSessionAs")
506    _method_command("show_session_tree", "Show Session &Tree", "ShowSessionTree")
507  _method_command("exit", "&Exit", "Exit")  _method_command("exit", "&Exit", "Exit")
508    
509  # Help menu  # Help menu
# Line 515  _tool_command("map_identify_tool", "&Ide Line 523  _tool_command("map_identify_tool", "&Ide
523                helptext = "Switch to map-mode 'identify'", icon = "identify")                helptext = "Switch to map-mode 'identify'", icon = "identify")
524  _tool_command("map_label_tool", "&Label", "LabelTool", "LabelTool",  _tool_command("map_label_tool", "&Label", "LabelTool", "LabelTool",
525                helptext = "Add/Remove labels", icon = "label")                helptext = "Add/Remove labels", icon = "label")
526  _method_command("map_full_extent", "&Full extent", "FullExtent")  _method_command("map_full_extent", "&Full extent", "FullExtent",
527                   helptext = "Full Extent", icon = "fullextent")
528  _method_command("map_print", "Prin&t", "PrintMap", helptext = "Print the map")  _method_command("map_print", "Prin&t", "PrintMap", helptext = "Print the map")
529    
530  # Layer menu  # Layer menu
# Line 531  _method_command("layer_transparent_fill" Line 540  _method_command("layer_transparent_fill"
540                  "LayerTransparentFill",                  "LayerTransparentFill",
541                  helptext = "Do not fill the selected layer(s)",                  helptext = "Do not fill the selected layer(s)",
542                  sensitive = _has_selected_layer)                  sensitive = _has_selected_layer)
543  _method_command("layer_ourline_color", "&Outline Color", "LayerOutlineColor",  _method_command("layer_outline_color", "&Outline Color", "LayerOutlineColor",
544                  helptext = "Set the outline color of selected layer(s)",                  helptext = "Set the outline color of selected layer(s)",
545                  sensitive = _has_selected_layer)                  sensitive = _has_selected_layer)
546  _method_command("layer_no_outline", "&No Outline", "LayerNoOutline",  _method_command("layer_no_outline", "&No Outline", "LayerNoOutline",
# Line 552  _method_command("layer_hide", "&Hide", " Line 561  _method_command("layer_hide", "&Hide", "
561  _method_command("layer_show_table", "Show Ta&ble", "LayerShowTable",  _method_command("layer_show_table", "Show Ta&ble", "LayerShowTable",
562                  helptext = "Show the selected layer's table",                  helptext = "Show the selected layer's table",
563                  sensitive = _has_selected_layer)                  sensitive = _has_selected_layer)
564    
565    
566    # the menu structure
567    main_menu = Menu("<main>", "<main>",
568                     [Menu("file", "&File",
569                           ["new_session", "open_session", None,
570                            "save_session", "save_session_as", None,
571                            "show_session_tree", None,
572                            "exit"]),
573                      Menu("map", "&Map",
574                           ["layer_add", "layer_remove",
575                            None,
576                            "map_projection",
577                            None,
578                            "map_zoom_in_tool", "map_zoom_out_tool",
579                            "map_pan_tool", "map_identify_tool", "map_label_tool",
580                            None,
581                            "map_full_extent",
582                            None,
583                            "map_print"]),
584                      Menu("layer", "&Layer",
585                           ["layer_fill_color", "layer_transparent_fill",
586                            "layer_outline_color", "layer_no_outline",
587                            None,
588                            "layer_raise", "layer_lower",
589                            None,
590                            "layer_show", "layer_hide",
591                            None,
592                            "layer_show_table"]),
593                      Menu("help", "&Help",
594                           ["help_about"])])

Legend:
Removed from v.84  
changed lines
  Added in v.188

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26