/[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 113 by jan, Sun Apr 21 17:38:50 2002 UTC revision 191 by bh, Tue May 28 16:04:49 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()          # creat the menubar from the main_menu description
58            self.SetMenuBar(self.build_menu_bar(main_menu))
59    
60          menu = wxMenu()          # Similarly, create the toolbar from main_toolbar
61          menuBar.Append(menu, "&File");          toolbar = self.build_toolbar(main_toolbar)
         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)  
   
         # toolbar  
         toolbar = self.CreateToolBar(wxTB_3DBUTTONS)  
   
         # set the size of the tools' bitmaps. Not needed on wxGTK, but  
         # on Windows. We probably shouldn't hardwire the bitmap size  
         # here  
         toolbar.SetToolBitmapSize(wxSize(24, 24))  
   
         for name in ["map_zoom_in_tool", "map_zoom_out_tool", "map_pan_tool",  
                      "map_identify_tool", "map_label_tool", "map_full_extent"]:  
             self.add_toolbar_command(toolbar, name)  
62          # call Realize to make sure that the tools appear.          # call Realize to make sure that the tools appear.
63          toolbar.Realize()          toolbar.Realize()
64    
65          # Create the map canvas          # Create the map canvas
66          canvas = view.MapCanvas(self, -1, interactor)          canvas = view.MapCanvas(self, -1, interactor)
67            canvas.Subscribe(VIEW_POSITION, self.view_position_changed)
68          self.canvas = canvas          self.canvas = canvas
69    
70          self.init_dialogs()          self.init_dialogs()
# Line 136  class MainWindow(wxFrame): Line 90  class MainWindow(wxFrame):
90              self.name_to_id[name] = ID              self.name_to_id[name] = ID
91              self.id_to_name[ID] = name              self.id_to_name[ID] = name
92          return ID          return ID
93            
94        def build_menu_bar(self, menudesc):
95            """Build and return the menu bar from the menu description"""
96            menu_bar = wxMenuBar()
97    
98            for item in menudesc.items:
99                # here the items must all be Menu instances themselves
100                menu_bar.Append(self.build_menu(item), item.title)
101    
102            return menu_bar
103    
104        def build_menu(self, menudesc):
105            """Build and return a wxMenu from a menudescription"""
106            wxmenu = wxMenu()
107            last = None
108            for item in menudesc.items:
109                # here the items must all be Menu instances themselves
110                if item is None:
111                    # a separator. Only add one if the last item was not a
112                    # separator
113                    if last is not None:
114                        wxmenu.AppendSeparator()
115                elif isinstance(item, Menu):
116                    # a submenu
117                    wxmenu.AppendMenu(wxNewId(), item.title, self.build_menu(item))
118                else:
119                    # must the name the name of a command
120                    self.add_menu_command(wxmenu, item)
121                last = item
122            return wxmenu
123    
124        def build_toolbar(self, toolbardesc):
125            """Build and return the main toolbar window from a toolbar description
126    
127            The parameter should be an instance of the Menu class but it
128            should not contain submenus.
129            """
130            toolbar = self.CreateToolBar(wxTB_3DBUTTONS)
131    
132            # set the size of the tools' bitmaps. Not needed on wxGTK, but
133            # on Windows, although it doesn't work very well there. It seems
134            # that only 16x16 icons are really supported on windows.
135            # We probably shouldn't hardwire the bitmap size here.
136            toolbar.SetToolBitmapSize(wxSize(24, 24))
137    
138            for item in toolbardesc.items:
139                if item is None:
140                    toolbar.AddSeparator()
141                else:
142                    # assume it's a string.
143                    self.add_toolbar_command(toolbar, item)
144    
145            return toolbar
146    
147      def add_menu_command(self, menu, name):      def add_menu_command(self, menu, name):
148          """Add the command with name name to the menu menu.          """Add the command with name name to the menu menu.
149    
# Line 195  class MainWindow(wxFrame): Line 202  class MainWindow(wxFrame):
202                  event.Check(command.Checked(self))                  event.Check(command.Checked(self))
203    
204      def RunMessageBox(self, title, text, flags = wxOK | wxICON_INFORMATION):      def RunMessageBox(self, title, text, flags = wxOK | wxICON_INFORMATION):
205          """Run a modla message box with the given text, title and flags          """Run a modal message box with the given text, title and flags
206          and return the result"""          and return the result"""
207          dlg = wxMessageDialog(self, text, title, flags)          dlg = wxMessageDialog(self, text, title, flags)
208          result = dlg.ShowModal()          result = dlg.ShowModal()
# Line 223  class MainWindow(wxFrame): Line 230  class MainWindow(wxFrame):
230      def get_open_dialog(self, name):      def get_open_dialog(self, name):
231          return self.dialogs.get(name)          return self.dialogs.get(name)
232    
233        def view_position_changed(self):
234            pos = self.canvas.CurrentPosition()
235            if pos is not None:
236                text = "(%10.10g, %10.10g)" % pos
237            else:
238                text = ""
239            self.SetStatusText(text)
240    
241      def save_modified_session(self, can_veto = 1):      def save_modified_session(self, can_veto = 1):
242          """If the current session has been modified, ask the user          """If the current session has been modified, ask the user
243          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 268  class MainWindow(wxFrame):
268      def OpenSession(self):      def OpenSession(self):
269          self.save_modified_session()          self.save_modified_session()
270          dlg = wxFileDialog(self, "Select a session file", ".", "",          dlg = wxFileDialog(self, "Select a session file", ".", "",
271                             "*.session", wxOPEN)                             "*.thuban", wxOPEN)
272          if dlg.ShowModal() == wxID_OK:          if dlg.ShowModal() == wxID_OK:
273              main.app.OpenSession(dlg.GetPath())              main.app.OpenSession(dlg.GetPath())
274          dlg.Destroy()          dlg.Destroy()
# Line 265  class MainWindow(wxFrame): Line 280  class MainWindow(wxFrame):
280    
281      def SaveSessionAs(self):      def SaveSessionAs(self):
282          dlg = wxFileDialog(self, "Enter a filename for session", ".", "",          dlg = wxFileDialog(self, "Enter a filename for session", ".", "",
283                             "*.session", wxOPEN)                             "*.thuban", wxOPEN)
284          if dlg.ShowModal() == wxID_OK:          if dlg.ShowModal() == wxID_OK:
285              main.app.session.SetFilename(dlg.GetPath())              main.app.session.SetFilename(dlg.GetPath())
286              main.app.SaveSession()              main.app.SaveSession()
# Line 304  class MainWindow(wxFrame): Line 319  class MainWindow(wxFrame):
319                             wxOK | wxICON_INFORMATION)                             wxOK | wxICON_INFORMATION)
320    
321      def AddLayer(self):      def AddLayer(self):
322          dlg = wxFileDialog(self, "Select a session file", ".", "", "*.*",          dlg = wxFileDialog(self, "Select a data file", ".", "", "*.*",
323                             wxOPEN)                             wxOPEN)
324          if dlg.ShowModal() == wxID_OK:          if dlg.ShowModal() == wxID_OK:
325              filename = dlg.GetPath()              filename = dlg.GetPath()
# Line 502  _method_command("new_session", "&New Ses Line 517  _method_command("new_session", "&New Ses
517  _method_command("open_session", "&Open Session", "OpenSession")  _method_command("open_session", "&Open Session", "OpenSession")
518  _method_command("save_session", "&Save Session", "SaveSession")  _method_command("save_session", "&Save Session", "SaveSession")
519  _method_command("save_session_as", "Save Session &As", "SaveSessionAs")  _method_command("save_session_as", "Save Session &As", "SaveSessionAs")
520    _method_command("show_session_tree", "Show Session &Tree", "ShowSessionTree")
521  _method_command("exit", "&Exit", "Exit")  _method_command("exit", "&Exit", "Exit")
522    
523  # Help menu  # Help menu
# Line 538  _method_command("layer_transparent_fill" Line 554  _method_command("layer_transparent_fill"
554                  "LayerTransparentFill",                  "LayerTransparentFill",
555                  helptext = "Do not fill the selected layer(s)",                  helptext = "Do not fill the selected layer(s)",
556                  sensitive = _has_selected_layer)                  sensitive = _has_selected_layer)
557  _method_command("layer_ourline_color", "&Outline Color", "LayerOutlineColor",  _method_command("layer_outline_color", "&Outline Color", "LayerOutlineColor",
558                  helptext = "Set the outline color of selected layer(s)",                  helptext = "Set the outline color of selected layer(s)",
559                  sensitive = _has_selected_layer)                  sensitive = _has_selected_layer)
560  _method_command("layer_no_outline", "&No Outline", "LayerNoOutline",  _method_command("layer_no_outline", "&No Outline", "LayerNoOutline",
# Line 559  _method_command("layer_hide", "&Hide", " Line 575  _method_command("layer_hide", "&Hide", "
575  _method_command("layer_show_table", "Show Ta&ble", "LayerShowTable",  _method_command("layer_show_table", "Show Ta&ble", "LayerShowTable",
576                  helptext = "Show the selected layer's table",                  helptext = "Show the selected layer's table",
577                  sensitive = _has_selected_layer)                  sensitive = _has_selected_layer)
578    
579    
580    # the menu structure
581    main_menu = Menu("<main>", "<main>",
582                     [Menu("file", "&File",
583                           ["new_session", "open_session", None,
584                            "save_session", "save_session_as", None,
585                            "show_session_tree", None,
586                            "exit"]),
587                      Menu("map", "&Map",
588                           ["layer_add", "layer_remove",
589                            None,
590                            "map_projection",
591                            None,
592                            "map_zoom_in_tool", "map_zoom_out_tool",
593                            "map_pan_tool", "map_identify_tool", "map_label_tool",
594                            None,
595                            "map_full_extent",
596                            None,
597                            "map_print"]),
598                      Menu("layer", "&Layer",
599                           ["layer_fill_color", "layer_transparent_fill",
600                            "layer_outline_color", "layer_no_outline",
601                            None,
602                            "layer_raise", "layer_lower",
603                            None,
604                            "layer_show", "layer_hide",
605                            None,
606                            "layer_show_table"]),
607                      Menu("help", "&Help",
608                           ["help_about"])])
609    
610    # the main toolbar
611    
612    main_toolbar = Menu("<toolbar>", "<toolbar>",
613                        ["map_zoom_in_tool", "map_zoom_out_tool", "map_pan_tool",
614                         "map_identify_tool", "map_label_tool", "map_full_extent"])

Legend:
Removed from v.113  
changed lines
  Added in v.191

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26