/[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 911 by frank, Fri May 16 16:24:17 2003 UTC revision 1031 by jan, Mon May 26 15:33:02 2003 UTC
# Line 19  __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    from wxPython.lib.dialogs import wxMultipleChoiceDialog
25    
26  import Thuban  import Thuban
27    import Thuban.version
28    
29  from Thuban import _  from Thuban import _
30  from Thuban.Model.session import create_empty_session  from Thuban.Model.session import create_empty_session
31  from Thuban.Model.layer import Layer  from Thuban.Model.layer import Layer, RasterLayer
32  from Thuban.Model.color import Color  from Thuban.Model.color import Color
33  from Thuban.Model.proj import Projection  from Thuban.Model.proj import Projection
34    
# Line 101  class MainWindow(DockFrame): Line 106  class MainWindow(DockFrame):
106    
107          self.init_dialogs()          self.init_dialogs()
108    
109          EVT_CLOSE(self, self._OnClose)          EVT_CLOSE(self, self.OnClose)
110    
111      def Subscribe(self, channel, *args):      def Subscribe(self, channel, *args):
112          """Subscribe a function to a message channel.          """Subscribe a function to a message channel.
# Line 360  class MainWindow(DockFrame): Line 365  class MainWindow(DockFrame):
365                  d.Close()                  d.Close()
366    
367      def NewSession(self):      def NewSession(self):
368          self.save_modified_session()          if self.save_modified_session() != wxID_CANCEL:
369          self.prepare_new_session()              self.prepare_new_session()
370          self.application.SetSession(create_empty_session())              self.application.SetSession(create_empty_session())
371    
372      def OpenSession(self):      def OpenSession(self):
373          self.save_modified_session()          if self.save_modified_session() != wxID_CANCEL:
374          dlg = wxFileDialog(self, _("Open Session"), ".", "",              dlg = wxFileDialog(self, _("Open Session"), ".", "",
375                             "Thuban Session File (*.thuban)|*.thuban", wxOPEN)                                 "Thuban Session File (*.thuban)|*.thuban",
376          if dlg.ShowModal() == wxID_OK:                                 wxOPEN)
377              self.prepare_new_session()              if dlg.ShowModal() == wxID_OK:
378              self.application.OpenSession(dlg.GetPath())                  self.prepare_new_session()
379          dlg.Destroy()                  self.application.OpenSession(dlg.GetPath())
380                dlg.Destroy()
381    
382      def SaveSession(self):      def SaveSession(self):
383          if self.application.session.filename == None:          if self.application.session.filename == None:
# Line 391  class MainWindow(DockFrame): Line 397  class MainWindow(DockFrame):
397      def Exit(self):      def Exit(self):
398          self.Close(False)          self.Close(False)
399    
400      def _OnClose(self, event):      def OnClose(self, event):
401          result = self.save_modified_session(can_veto = event.CanVeto())          result = self.save_modified_session(can_veto = event.CanVeto())
402          if result == wxID_CANCEL:          if result == wxID_CANCEL:
403              event.Veto()              event.Veto()
# Line 400  class MainWindow(DockFrame): Line 406  class MainWindow(DockFrame):
406              # wx's destroy event, but that isn't implemented for wxGTK              # wx's destroy event, but that isn't implemented for wxGTK
407              # yet.              # yet.
408              self.canvas.Unsubscribe(VIEW_POSITION, self.view_position_changed)              self.canvas.Unsubscribe(VIEW_POSITION, self.view_position_changed)
409              DockFrame._OnClose(self, event)              DockFrame.OnClose(self, event)
410              self.Destroy()              self.Destroy()
411    
412      def SetMap(self, map):      def SetMap(self, map):
# Line 433  class MainWindow(DockFrame): Line 439  class MainWindow(DockFrame):
439    
440      def About(self):      def About(self):
441          self.RunMessageBox(_("About"),          self.RunMessageBox(_("About"),
442                             _("Thuban v%s\n"                             _("Thuban %s\n"
443                              #"Build Date: %s\n"                              #"Build Date: %s\n"
444                              "\n"                              "using:\n"
445                                "  %s\n"
446                                "  %s\n\n"
447                              "Thuban is a program for\n"                              "Thuban is a program for\n"
448                              "exploring geographic data.\n"                              "exploring geographic data.\n"
449                              "Copyright (C) 2001-2003 Intevation GmbH.\n"                              "Copyright (C) 2001-2003 Intevation GmbH.\n"
450                              "Thuban is licensed under the GNU GPL"                              "Thuban is licensed under the GNU GPL"
451                             % __ThubanVersion__), #__BuildDate__)),                              % (Thuban.version.longversion,
452                                   "wxPython %s" % wxPython_version,
453                                   "Python %d.%d.%d" % sys.version_info[:3]
454                                  )),
455    #                           % __ThubanVersion__), #__BuildDate__)),
456                             wxOK | wxICON_INFORMATION)                             wxOK | wxICON_INFORMATION)
457    
458      def AddLayer(self):      def AddLayer(self):
# Line 449  class MainWindow(DockFrame): Line 461  class MainWindow(DockFrame):
461          if dlg.ShowModal() == wxID_OK:          if dlg.ShowModal() == wxID_OK:
462              filename = dlg.GetPath()              filename = dlg.GetPath()
463              title = os.path.splitext(os.path.basename(filename))[0]              title = os.path.splitext(os.path.basename(filename))[0]
             store = self.application.Session().OpenShapefile(filename)  
             layer = Layer(title, store)  
464              map = self.canvas.Map()              map = self.canvas.Map()
465              has_layers = map.HasLayers()              has_layers = map.HasLayers()
466              try:              try:
467                  map.AddLayer(layer)                  store = self.application.Session().OpenShapefile(filename)
468              except IOError:              except IOError:
469                  # the layer couldn't be opened                  # the layer couldn't be opened
470                  self.RunMessageBox(_("Add Layer"),                  self.RunMessageBox(_("Add Layer"),
471                                     _("Can't open the file '%s'.") % filename)                                     _("Can't open the file '%s'.") % filename)
472              else:              else:
473                    layer = Layer(title, store)
474                    map.AddLayer(layer)
475                    if not has_layers:
476                        # if we're adding a layer to an empty map, fit the
477                        # new map to the window
478                        self.canvas.FitMapToWindow()
479            dlg.Destroy()
480    
481        def AddRasterLayer(self):
482            dlg = wxFileDialog(self, _("Select an image file"), ".", "", "*.*",
483                               wxOPEN)
484            if dlg.ShowModal() == wxID_OK:
485                filename = dlg.GetPath()
486                title = os.path.splitext(os.path.basename(filename))[0]
487                map = self.canvas.Map()
488                has_layers = map.HasLayers()
489                try:
490                    layer = RasterLayer(title, filename)
491                except IOError:
492                    # the layer couldn't be opened
493                    self.RunMessageBox(_("Add Image Layer"),
494                                       _("Can't open the file '%s'.") % filename)
495                else:
496                    map.AddLayer(layer)
497                  if not has_layers:                  if not has_layers:
498                      # if we're adding a layer to an empty map, fit the                      # if we're adding a layer to an empty map, fit the
499                      # new map to the window                      # new map to the window
# Line 527  class MainWindow(DockFrame): Line 561  class MainWindow(DockFrame):
561              dialog = self.get_open_dialog(name)              dialog = self.get_open_dialog(name)
562              if dialog is None:              if dialog is None:
563                  dialog = tableview.LayerTableFrame(self, name,                  dialog = tableview.LayerTableFrame(self, name,
564                                                 _("Table: %s") % layer.Title(),                                           _("Layer Table: %s") % layer.Title(),
565                                                     layer, table)                                           layer, table)
566                  self.add_dialog(name, dialog)                  self.add_dialog(name, dialog)
567                  dialog.Show(true)                  dialog.Show(true)
568              else:              else:
# Line 585  class MainWindow(DockFrame): Line 619  class MainWindow(DockFrame):
619          dialog.Raise()          dialog.Raise()
620    
621      def LayerJoinTable(self):      def LayerJoinTable(self):
622          print "LayerJoinTable"          print "LayerJoinTable: Not implemented."
623    
624      def LayerUnjoinTable(self):      def LayerUnjoinTable(self):
625          print "LayerUnjoinTable"          print "LayerUnjoinTable: Not implemented."
626    
627      def ShowLegend(self):      def ShowLegend(self):
628          if not self.LegendShown():          if not self.LegendShown():
# Line 614  class MainWindow(DockFrame): Line 648  class MainWindow(DockFrame):
648          return dialog is not None and dialog.IsShown()          return dialog is not None and dialog.IsShown()
649    
650      def TableOpen(self):      def TableOpen(self):
651          print "TableOpen"          print "TableOpen: not implemented"
652          dlg = wxFileDialog(self, _("Open Table"), ".", "",          dlg = wxFileDialog(self, _("Open Table"), ".", "",
653                             "DBF Files (*.dbf)|*.dbf|" +                             "DBF Files (*.dbf)|*.dbf|" +
654                             "CSV Files (*.csv)|*.csv|" +                             "CSV Files (*.csv)|*.csv|" +
# Line 627  class MainWindow(DockFrame): Line 661  class MainWindow(DockFrame):
661          dlg.Destroy()          dlg.Destroy()
662    
663      def TableClose(self):      def TableClose(self):
664          print "TableClose"          print "TableClose: not implemented"
665    
666      def TableShow(self):      def TableShow(self):
667          print "TableShow"          """Offer a multi-selection dialog for tables to be displayed
668            
669            The windows for the selected tables are opened or brought to
670            the front.
671            """
672            tables = self.application.session.Tables()
673            table_list = []
674            for table in tables:
675                table_list.append(table.Title())
676    
677            dlg = wxMultipleChoiceDialog(self, _("Pick the table to show:"),
678                                         _("Show Table"), table_list,
679                                         size = (400,300), style = wxRESIZE_BORDER)
680            if (dlg.ShowModal() == wxID_OK):
681                for i in dlg.GetValue():
682                    # XXX: First check whether the dialog is already open
683                    # and if so, bring it to the front.
684                    # XXX: if the table belongs to a layer, open a
685                    # LayerTableFrame instead of QueryTableFrame
686                    print "tables[i]:", tables[i]
687                    dialog = tableview.QueryTableFrame(self, table_list[i],
688                                                  _("Table: %s") % table_list[i],
689                                                  tables[i])
690                    self.add_dialog(table_list[i], dialog)
691                    dialog.Show(true)
692    
693            # XXX: just some analyis code, remove it when the above XXX is
694            # resolved.
695            for d in self.dialogs.values():
696                if isinstance(d, tableview.LayerTableFrame):
697                    print "LayerTable:", d.GetTitle()
698                elif isinstance(d, tableview.QueryTableFrame):
699                    print "QueryTable:", d.GetTitle()
700                else:
701                    print "Other:", d.GetTitle()
702    
703      def TableHide(self):      def TableHide(self):
704          print "TableHide"          print "TableHide: not implemented"
705    
706      def TableJoin(self):      def TableJoin(self):
         print "TableJoin"  
707          dlg = JoinDialog(self, _("Join Tables"), self.application.session)          dlg = JoinDialog(self, _("Join Tables"), self.application.session)
708          if dlg.ShowModal() == wxID_OK:          dlg.ShowModal()
             print "OK"  
709    
710      def ZoomInTool(self):      def ZoomInTool(self):
711          self.canvas.ZoomInTool()          self.canvas.ZoomInTool()
# Line 828  _method_command("map_rename", _("&Rename Line 894  _method_command("map_rename", _("&Rename
894                  helptext = _("Rename the map"))                  helptext = _("Rename the map"))
895  _method_command("layer_add", _("&Add Layer..."), "AddLayer",  _method_command("layer_add", _("&Add Layer..."), "AddLayer",
896                  helptext = _("Add a new layer to active map"))                  helptext = _("Add a new layer to active map"))
897    _method_command("rasterlayer_add", _("&Add Image Layer..."), "AddRasterLayer",
898                    helptext = _("Add a new image layer to active map"))
899  _method_command("layer_remove", _("&Remove Layer"), "RemoveLayer",  _method_command("layer_remove", _("&Remove Layer"), "RemoveLayer",
900                  helptext = _("Remove selected layer(s)"),                  helptext = _("Remove selected layer(s)"),
901                  sensitive = _can_remove_layer)                  sensitive = _can_remove_layer)
# Line 865  _method_command("table_hide", _("&Hide") Line 933  _method_command("table_hide", _("&Hide")
933  _method_command("table_join", _("&Join..."), "TableJoin")  _method_command("table_join", _("&Join..."), "TableJoin")
934    
935  #  Export only under Windows ...  #  Export only under Windows ...
936  map_menu = ["layer_add", "layer_remove", "map_rename",  map_menu = ["layer_add", "rasterlayer_add", "layer_remove", "map_rename",
937                          None,                          None,
938                          "map_projection",                          "map_projection",
939                          None,                          None,

Legend:
Removed from v.911  
changed lines
  Added in v.1031

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26