/[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 563 by jonathan, Wed Mar 26 11:07:02 2003 UTC revision 610 by jonathan, Fri Apr 4 13:56:59 2003 UTC
# Line 38  from context import Context Line 38  from context import Context
38  from command import registry, Command, ToolCommand  from command import registry, Command, ToolCommand
39  from messages import LAYER_SELECTED, SHAPES_SELECTED, VIEW_POSITION, DOCKABLE_DOCKED, DOCKABLE_UNDOCKED, DOCKABLE_CLOSED  from messages import LAYER_SELECTED, SHAPES_SELECTED, VIEW_POSITION, DOCKABLE_DOCKED, DOCKABLE_UNDOCKED, DOCKABLE_CLOSED
40    
41  from Thuban.UI.dock import DockableWindow  from Thuban.UI.dock import DockableWindow, DockFrame, DockPanel
42    
43    
44  # the directory where the toolbar icons are stored  # the directory where the toolbar icons are stored
# Line 49  ID_WINDOW_LEGEND = 4001 Line 49  ID_WINDOW_LEGEND = 4001
49  ID_WINDOW_CANVAS = 4002  ID_WINDOW_CANVAS = 4002
50    
51    
52  class MainWindow(wxFrame):  class MainWindow(DockFrame):
53    
54      # Some messages that can be subscribed/unsubscribed directly through      # Some messages that can be subscribed/unsubscribed directly through
55      # the MapCanvas come in fact from other objects. This is a map to      # the MapCanvas come in fact from other objects. This is a map to
# Line 67  class MainWindow(wxFrame): Line 67  class MainWindow(wxFrame):
67    
68      def __init__(self, parent, ID, title, application, interactor,      def __init__(self, parent, ID, title, application, interactor,
69                   initial_message = None, size = wxSize(-1, -1)):                   initial_message = None, size = wxSize(-1, -1)):
70          wxFrame.__init__(self, parent, ID, title, wxDefaultPosition, size)          DockFrame.__init__(self, parent, ID, title, wxDefaultPosition, size)
71            #wxFrame.__init__(self, parent, ID, title, wxDefaultPosition, size)
72    
73          self.application = application          self.application = application
74    
# Line 87  class MainWindow(wxFrame): Line 88  class MainWindow(wxFrame):
88          # call Realize to make sure that the tools appear.          # call Realize to make sure that the tools appear.
89          toolbar.Realize()          toolbar.Realize()
90    
         win = wxSashLayoutWindow(self, ID_WINDOW_LEGEND,  
                                  style=wxNO_BORDER|wxSW_3D)  
         win.SetOrientation(wxLAYOUT_VERTICAL)  
         win.SetAlignment(wxLAYOUT_LEFT)  
         win.SetSashVisible(wxSASH_RIGHT, True)  
         win.SetSashBorder(wxSASH_RIGHT, True)  
         win.Hide()  
         self.sash_legend = win  
   
91    
92          # Create the map canvas          # Create the map canvas
93          canvas = view.MapCanvas(self, -1)          canvas = view.MapCanvas(self, -1)
# Line 103  class MainWindow(wxFrame): Line 95  class MainWindow(wxFrame):
95          canvas.Subscribe(SHAPES_SELECTED, self.identify_view_on_demand)          canvas.Subscribe(SHAPES_SELECTED, self.identify_view_on_demand)
96          self.canvas = canvas          self.canvas = canvas
97    
98            self.SetMainWindow(self.canvas)
99    
100          self.SetAutoLayout(True)          self.SetAutoLayout(True)
101    
102          self.init_dialogs()          self.init_dialogs()
103    
104          self.legendPanel = None          EVT_CLOSE(self, self._OnClose)
         self.legendWindow = None  
   
   
   
         EVT_CLOSE(self, self.OnClose)  
         EVT_SASH_DRAGGED_RANGE(self,  
             ID_WINDOW_LEGEND, ID_WINDOW_CANVAS,  
             self._OnSashDrag)  
         EVT_SIZE(self, self._OnSize)  
105    
106      def Subscribe(self, channel, *args):      def Subscribe(self, channel, *args):
107          """Subscribe a function to a message channel.          """Subscribe a function to a message channel.
# Line 404  class MainWindow(wxFrame): Line 389  class MainWindow(wxFrame):
389      def Exit(self):      def Exit(self):
390          self.Close(false)          self.Close(false)
391    
392      def OnClose(self, event):      def _OnClose(self, event):
393          result = self.save_modified_session(can_veto = event.CanVeto())          result = self.save_modified_session(can_veto = event.CanVeto())
394          if result == wxID_CANCEL:          if result == wxID_CANCEL:
395              event.Veto()              event.Veto()
# Line 413  class MainWindow(wxFrame): Line 398  class MainWindow(wxFrame):
398              # wx's destroy event, but that isn't implemented for wxGTK              # wx's destroy event, but that isn't implemented for wxGTK
399              # yet.              # yet.
400              self.canvas.Unsubscribe(VIEW_POSITION, self.view_position_changed)              self.canvas.Unsubscribe(VIEW_POSITION, self.view_position_changed)
401                DockFrame._OnClose(self, event)
402              self.Destroy()              self.Destroy()
403    
404      def SetMap(self, map):      def SetMap(self, map):
# Line 538  class MainWindow(wxFrame): Line 524  class MainWindow(wxFrame):
524      def LayerTransparentFill(self):      def LayerTransparentFill(self):
525          layer = self.current_layer()          layer = self.current_layer()
526          if layer is not None:          if layer is not None:
527              layer.GetClassification().SetDefaultFill(Color.None)              layer.GetClassification().SetDefaultFill(Color.Transparent)
528    
529      def LayerOutlineColor(self):      def LayerOutlineColor(self):
530          layer = self.current_layer()          layer = self.current_layer()
# Line 550  class MainWindow(wxFrame): Line 536  class MainWindow(wxFrame):
536      def LayerNoOutline(self):      def LayerNoOutline(self):
537          layer = self.current_layer()          layer = self.current_layer()
538          if layer is not None:          if layer is not None:
539              layer.GetClassification().SetDefaultLineColor(Color.None)              layer.GetClassification().SetDefaultLineColor(Color.Transparent)
540    
541      def HideLayer(self):      def HideLayer(self):
542          layer = self.current_layer()          layer = self.current_layer()
# Line 606  class MainWindow(wxFrame): Line 592  class MainWindow(wxFrame):
592          layer = self.current_layer()          layer = self.current_layer()
593          self.OpenClassifier(layer)          self.OpenClassifier(layer)
594    
595      def OpenClassifier(self, layer):      def OpenClassifier(self, layer, group = None):
596          name = "classifier" + str(id(layer))          name = "classifier" + str(id(layer))
597          dialog = self.get_open_dialog(name)          dialog = self.get_open_dialog(name)
598    
599          if dialog is None:          if dialog is None:
600              dialog = classifier.Classifier(self, name, layer)              dialog = classifier.Classifier(self, name, layer, group)
601              self.add_dialog(name, dialog)              self.add_dialog(name, dialog)
602              dialog.Show()              dialog.Show()
603            dialog.Raise()
604    
605    
606      def ShowLegend(self, switch = False):      def ShowLegend(self, switch = False):
           
607          name = "legend"          name = "legend"
608          dialog = self.get_open_dialog(name)          dialog = self.FindRegisteredDock(name)
609    
610          if dialog is None:          if dialog is None:
611              self.legendPanel = \              title = "Legend: %s" % self.Map().Title()
612                  legend.LegendPanel(self.sash_legend, None, self)              dialog = self.CreateDock(name, -1, title, wxLAYOUT_LEFT)
613              dialog = DockableWindow(self, -1, name,              legend.LegendPanel(dialog, None, self)
614                                      "Legend: %s" % self.Map().Title(),              dialog.Dock()
                                     self.sash_legend, self.legendPanel)  
   
   
             self.add_dialog(name, dialog)  
   
             dialog.Subscribe(DOCKABLE_DOCKED, self._OnLegendDock)  
             dialog.Subscribe(DOCKABLE_UNDOCKED, self._OnLegendUnDock)  
             dialog.Subscribe(DOCKABLE_CLOSED, self._OnLegendClosed)  
   
             self.legendWindow = dialog  
             self.legendPanel.SetMap(self.Map())  
615    
616            dialog.GetPanel().SetMap(self.Map())
617          dialog.Show()          dialog.Show()
618    
619      def ZoomInTool(self):      def ZoomInTool(self):
# Line 673  class MainWindow(wxFrame): Line 649  class MainWindow(wxFrame):
649                  # FIXME: bring dialog to front?                  # FIXME: bring dialog to front?
650                  pass                  pass
651    
   
     def _OnSashDrag(self, event):  
   
         if event.GetDragStatus() == wxSASH_STATUS_OUT_OF_RANGE:  
             return  
   
         id = event.GetId()  
   
         rect = event.GetDragRect()  
   
         if id == ID_WINDOW_LEGEND:  
             #assert(self.legendPanel.IsDocked())  
             assert(self.legendWindow.IsDocked())  
             #assert(self.legendPanel.GetParent() is self.sash_legend)  
             self.__SetLegendDockSize(rect)  
   
         wxLayoutAlgorithm().LayoutWindow(self, self.canvas)  
   
     def _OnSize(self, event):  
         wxLayoutAlgorithm().LayoutWindow(self, self.canvas)  
   
     def _OnLegendDock(self, id, win):  
         if not self.sash_legend.IsShown():  
             self.sash_legend.Show()  
             self.__SetLegendDockSize(None)  
             wxLayoutAlgorithm().LayoutWindow(self, self.canvas)  
   
     def _OnLegendUnDock(self, id, win):  
         if self.sash_legend.IsShown():  
             self.sash_legend.Hide()  
             wxLayoutAlgorithm().LayoutWindow(self, self.canvas)  
   
     def _OnLegendClosed(self, id, win):  
         if self.sash_legend.IsShown():  
             self.sash_legend.Hide()  
             wxLayoutAlgorithm().LayoutWindow(self, self.canvas)  
   
     def __SetLegendDockSize(self, rect):  
       
         w, h = self.legendWindow.GetBestSize()  
         #w, h = self.legendPanel.GetBestSize()  
   
         if rect is not None:  
             rw = rect.width  
             rh = rect.height  
             if rw < w: rw = w  
         else:  
             rw = w  
             rh = h  
   
         rw += 2 # XXX: without this the sash isn't visible!?!?!?!  
   
         self.sash_legend.SetDefaultSize(wxSize(rw, 1000))  
   
652  #  #
653  # Define all the commands available in the main window  # Define all the commands available in the main window
654  #  #
# Line 787  def _has_visible_map(context): Line 709  def _has_visible_map(context):
709    
710  def _has_legend_shown(context):  def _has_legend_shown(context):
711      """Return true if the legend window is shown"""      """Return true if the legend window is shown"""
712      return context.mainwindow.get_open_dialog("legend") is None      return context.mainwindow.FindRegisteredDock("legend") is None
713    
714    
715  # File menu  # File menu
# Line 864  _method_command("layer_show_table", _("S Line 786  _method_command("layer_show_table", _("S
786                  sensitive = _has_selected_layer)                  sensitive = _has_selected_layer)
787  _method_command("layer_classifier", _("Classify"), "Classify",  _method_command("layer_classifier", _("Classify"), "Classify",
788                  sensitive = _has_selected_layer)                  sensitive = _has_selected_layer)
789  _method_command("show_legend", _("Legend"), "ShowLegend",  _method_command("show_legend", _("Show Legend"), "ShowLegend",
790                  sensitive = _has_legend_shown)                  sensitive = _has_legend_shown)
791    
792  # the menu structure  # the menu structure

Legend:
Removed from v.563  
changed lines
  Added in v.610

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26