/[thuban]/branches/WIP-pyshapelib-bramz/Extensions/ogr/ogrdialog.py
ViewVC logotype

Diff of /branches/WIP-pyshapelib-bramz/Extensions/ogr/ogrdialog.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2559 by nhueffme, Tue Feb 8 09:52:56 2005 UTC revision 2713 by bernhard, Thu Oct 26 16:37:42 2006 UTC
# Line 1  Line 1 
1  # Copyright (c) 2001, 2003, 2004 by Intevation GmbH  # Copyright (c) 2001, 2003, 2004 by Intevation GmbH     vim:encoding=latin-1:
2  # Authors:  # Authors:
3  # Martin Mueller <[email protected]>  # Martin M�ller <[email protected]>
4  # Bernhard Herzog <[email protected]>  # Bernhard Herzog <[email protected]>
5  #  #
6  # This program is free software under the GPL (>=v2)  # This program is free software under the GPL (>=v2)
# Line 16  from wxPython.wx import * Line 16  from wxPython.wx import *
16  try:  try:
17      import ogr      import ogr
18  except ImportError:  except ImportError:
19      psycopg = None      ogr = None
20    
21  from Thuban import _  from Thuban import _
 from Thuban.UI.dialogs import NonModalDialog  
22  from Thuban.Model.table import FIELDTYPE_INT  from Thuban.Model.table import FIELDTYPE_INT
23  from Extensions.ogr import ogrshapes  from Extensions.ogr import ogrshapes
 from Thuban.Model.messages import DBCONN_ADDED, DBCONN_REMOVED  
 from Thuban.UI.messages import SESSION_REPLACED  
24    
25    
 ID_DB_ADD    = 9101  
 ID_DB_REMOVE = 9102  
   
26  ID_DBCHOOSE_RETRIEVE = 9201  ID_DBCHOOSE_RETRIEVE = 9201
27  ID_DBCHOOSE_OK       = 9202  ID_DBCHOOSE_OK       = 9202
28  ID_DBCHOOSE_CANCEL   = 9203  ID_DBCHOOSE_CANCEL   = 9203
# Line 36  ID_LB_DCLICK         = 9204 Line 30  ID_LB_DCLICK         = 9204
30    
31    
32  class ChooseFileFormat(wxDialog):  class ChooseFileFormat(wxDialog):
33        """This dialog lists all available drivers.
34        """
35      def __init__(self, parent, session):      def __init__(self, parent, session):
36            """Initialize the dialog.
37            """
38          wxDialog.__init__(self, parent, -1, _("Choose file format"),          wxDialog.__init__(self, parent, -1, _("Choose file format"),
39                            style = wxDIALOG_MODAL|wxCAPTION)                            style = wxDIALOG_MODAL|wxCAPTION)
40          self.session = session          self.session = session
# Line 50  class ChooseFileFormat(wxDialog): Line 47  class ChooseFileFormat(wxDialog):
47          # Sizer for the entire dialog          # Sizer for the entire dialog
48          top = wxFlexGridSizer(2, 1, 0, 0)          top = wxFlexGridSizer(2, 1, 0, 0)
49    
50          # Sizer for the main part with the list boxes          # Sizer for the main part with the list box
51          main_sizer = wxBoxSizer(wxHORIZONTAL)          main_sizer = wxBoxSizer(wxHORIZONTAL)
52          top.Add(main_sizer, 1, wxEXPAND, 0)          top.Add(main_sizer, 1, wxEXPAND, 0)
53    
54          # The list box with the drivers          # The list box with the drivers
55          static_box = wxStaticBoxSizer(wxStaticBox(self, -1, _("File formats")),          static_box = wxStaticBoxSizer(wxStaticBox(self, -1, "File formats"),
56                                     wxHORIZONTAL)                                     wxHORIZONTAL)
57          self.lb_drivers = wxListBox(self, -1)          self.lb_drivers = wxListBox(self, -1)
58          static_box.Add(self.lb_drivers, 0, wxEXPAND, 0)          static_box.Add(self.lb_drivers, 0, wxEXPAND, 0)
# Line 66  class ChooseFileFormat(wxDialog): Line 63  class ChooseFileFormat(wxDialog):
63          if self.lb_drivers.GetCount() > 0:          if self.lb_drivers.GetCount() > 0:
64              self.lb_drivers.SetSelection(0, True)              self.lb_drivers.SetSelection(0, True)
65    
         # The button box between the connections list box and the table  
         # list box  
         buttons = wxFlexGridSizer(3, 1, 0, 0)  
         buttons.Add(20, 80, 0, wxEXPAND, 0)  
         retrieve_button = wxButton(self, ID_DBCHOOSE_RETRIEVE, _("Retrieve"))  
         EVT_BUTTON(self, ID_DBCHOOSE_RETRIEVE, self.OnRetrieve)  
         buttons.Add(retrieve_button, 0, wxALL  
                     |wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 4)  
         buttons.Add(20, 80, 0, wxEXPAND, 0)  
         main_sizer.Add(buttons, 0, wxEXPAND, 0)  
   
         # The list box with the tables  
         static_box = wxStaticBoxSizer(wxStaticBox(self, -1, _("Tables")),  
                                    wxHORIZONTAL)  
         self.lb_tables = wxListBox(self, ID_LB_DCLICK)  
         EVT_LISTBOX(self, ID_LB_DCLICK, self.OnTableSelect)  
         EVT_LISTBOX_DCLICK(self, ID_LB_DCLICK, self.OnLBDClick)  
         static_box.Add(self.lb_tables, 0, wxEXPAND, 0)  
         main_sizer.Add(static_box, 1, wxEXPAND, 0)  
   
         # id column and geometry column selection  
         box = wxBoxSizer(wxVERTICAL)  
         box.Add(wxStaticText(self, -1, _("ID Column")), 0,  
                 wxALL|wxALIGN_CENTER_VERTICAL, 4)  
         self.text_id_column = wxComboBox(self, -1, "")  
         box.Add(self.text_id_column, 0,  
                 wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 4)  
   
         box.Add(wxStaticText(self, -1, _("Geometry Column")), 0,  
                 wxALL|wxALIGN_CENTER_VERTICAL, 4)  
         self.text_geo_column = wxComboBox(self, -1, "")  
         box.Add(self.text_geo_column, 0,  
                 wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 4)  
         main_sizer.Add(box, 1, wxEXPAND, 0)  
   
66          # The standard button box at the bottom of the dialog          # The standard button box at the bottom of the dialog
67          buttons = wxFlexGridSizer(1, 2, 0, 0)          buttons = wxFlexGridSizer(1, 2, 0, 0)
68          ok_button = wxButton(self, ID_DBCHOOSE_OK, _("OK"))          ok_button = wxButton(self, ID_DBCHOOSE_OK, _("OK"))
# Line 120  class ChooseFileFormat(wxDialog): Line 82  class ChooseFileFormat(wxDialog):
82    
83    
84      def GetTable(self):      def GetTable(self):
85          i = self.lb_tables.GetSelection()          """no functionality
86          if i >= 0:          """
             return (self.selected_conn, self.tables[i],  
                     self.text_id_column.GetValue(),  
                     self.text_geo_column.GetValue())  
87          return None          return None
88    
     def OnRetrieve(self, event):  
         i = self.lb_driver.GetSelection()  
         if i >= 0:  
             self.selected_conn = self.dbconns[i]  
             self.tables = self.selected_conn.GeometryTables()  
             self.lb_tables.Set(self.tables)  
   
     def OnTableSelect(self, event):  
         i = self.lb_tables.GetSelection()  
         self.text_id_column.Clear()  
         self.text_geo_column.Clear()  
         if i >= 0:  
             for name, typ in self.selected_conn.table_columns(self.tables[i]):  
                 if typ == "geometry":  
                     self.text_geo_column.Append(name)  
                 elif typ == FIELDTYPE_INT:  
                     self.text_id_column.Append(name)  
   
89      def OnLBDClick(self, event):      def OnLBDClick(self, event):
90            """Close dialog.
91            """
92          if self.lb_tables.GetSelection() >= 0:          if self.lb_tables.GetSelection() >= 0:
93              self.EndModal(wxID_OK)              self.EndModal(wxID_OK)
94              self.Show(False)              self.Show(False)
95    
96      def OnOK(self, event):      def OnOK(self, event):
97            """Close dialog.
98            """
99          self.EndModal(wxID_OK)          self.EndModal(wxID_OK)
100          self.Show(False)          self.Show(False)
101    
102      def OnCancel(self, event):      def OnCancel(self, event):
103            """Close dialog.
104            """
105          self.EndModal(wxID_CANCEL)          self.EndModal(wxID_CANCEL)
106          self.Show(False)          self.Show(False)
107    
108    
109  class ChooseLayer(wxDialog):  class ChooseLayer(wxDialog):
110        """This dialog lists all the layers contained in the given datasource.
111    
112        One layer can be chosen, which is then opened.
113        """
114    
115      def __init__(self, parent, filename):      def __init__(self, parent, filename):
116            """Initialize the dialog.
117            """
118          wxDialog.__init__(self, parent, -1, _("Choose layer"),          wxDialog.__init__(self, parent, -1, _("Choose layer"),
119                            style = wxDIALOG_MODAL|wxCAPTION)                            style = wxDIALOG_MODAL|wxCAPTION)
120          self.tables = []          self.tables = []
# Line 210  class ChooseLayer(wxDialog): Line 163  class ChooseLayer(wxDialog):
163          self.Layout()          self.Layout()
164    
165      def end_dialog(self, result):      def end_dialog(self, result):
166            """If the dialog is closed with OK, set chosen layer as layer
167            to be opened.
168            """
169          self.result = result          self.result = result
170          if result is not None:          if result is not None:
171              self.EndModal(wxID_OK)              self.EndModal(wxID_OK)
# Line 218  class ChooseLayer(wxDialog): Line 174  class ChooseLayer(wxDialog):
174          self.Show(False)          self.Show(False)
175    
176      def OnOK(self, event):      def OnOK(self, event):
177            """Dialog closed with OK button.
178            """
179          self.end_dialog(self.lb_drivers.GetSelection())          self.end_dialog(self.lb_drivers.GetSelection())
180    
181      def OnCancel(self, event):      def OnCancel(self, event):
182            """Dialog closed with Cancel.
183            """
184          self.end_dialog(None)          self.end_dialog(None)
185    
186      def GetLayer(self):      def GetLayer(self):
187            """Return the selected layer."""
188          return self.layer[self.lb_drivers.GetSelection()].GetName()          return self.layer[self.lb_drivers.GetSelection()].GetName()
189    
190    
191  class ChooseOGRDBTableDialog(wxDialog):  class ChooseOGRDBTableDialog(wxDialog):
192        """This dialog opens a datasource from an existing database connection.
193    
194        A list of all available database connections is offered. If one connection
195        is selected and the button "Retrieve" is clicked, all layers are listed.
196        One of these layers can be chosen to be opened.
197        An ID column can be chosen, too."""
198    
199      def __init__(self, parent, session):      def __init__(self, parent, session):
200            """Initialize the dialog.
201            """
202          wxDialog.__init__(self, parent, -1, _("Choose layer from database"),          wxDialog.__init__(self, parent, -1, _("Choose layer from database"),
203                            style = wxDIALOG_MODAL|wxCAPTION)                            style = wxDIALOG_MODAL|wxCAPTION)
204          self.session = session          self.session = session
# Line 279  class ChooseOGRDBTableDialog(wxDialog): Line 248  class ChooseOGRDBTableDialog(wxDialog):
248          static_box.Add(self.lb_tables, 0, wxEXPAND, 0)          static_box.Add(self.lb_tables, 0, wxEXPAND, 0)
249          main_sizer.Add(static_box, 1, wxEXPAND, 0)          main_sizer.Add(static_box, 1, wxEXPAND, 0)
250    
251            # id column and geometry column selection
252            box = wxBoxSizer(wxVERTICAL)
253            box.Add(wxStaticText(self, -1, _("ID Column")), 0,
254                    wxALL|wxALIGN_CENTER_VERTICAL, 4)
255            self.text_id_column = wxComboBox(self, -1, "")
256            box.Add(self.text_id_column, 0,
257                    wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 4)
258            main_sizer.Add(box, 1, wxEXPAND, 0)
259    
260          # The standard button box at the bottom of the dialog          # The standard button box at the bottom of the dialog
261          buttons = wxFlexGridSizer(1, 2, 0, 0)          buttons = wxFlexGridSizer(1, 2, 0, 0)
262          ok_button = wxButton(self, ID_DBCHOOSE_OK, _("OK"))          ok_button = wxButton(self, ID_DBCHOOSE_OK, _("OK"))
# Line 298  class ChooseOGRDBTableDialog(wxDialog): Line 276  class ChooseOGRDBTableDialog(wxDialog):
276    
277    
278      def GetTable(self):      def GetTable(self):
279            """Return the chosen DB connection, the table to be opened,
280            the connection string for ogr and the ID column.
281            """
282          i = self.lb_tables.GetSelection()          i = self.lb_tables.GetSelection()
283          if i >= 0:          if i >= 0:
284              return (self.selected_conn, self.tables[i])              return (self.selected_conn, self.connString, self.tables[i],
285                        self.text_id_column.GetValue())
286          return None          return None
287    
288      def OnRetrieve(self, event):      def OnRetrieve(self, event):
289            """Provide a list of all available layers in the selected datasource.
290            """
291          i = self.lb_connections.GetSelection()          i = self.lb_connections.GetSelection()
292          if i >= 0:          if i >= 0:
293              self.selected_conn = self.dbconns[i]              self.selected_conn = self.dbconns[i]
294              connString = ("PG: host=%s dbname=%s user=%s port=%s"              self.connString = "PG: dbname=%s" %self.selected_conn.dbname
295                            %(self.selected_conn.host, self.selected_conn.dbname,              if self.selected_conn.host is not "":
296                              self.selected_conn.user, self.selected_conn.port))                  self.connString = (self.connString + " host=%s"
297              ds = ogr.Open(connString)                                      %self.selected_conn.host)
298                if self.selected_conn.user is not "":
299                    self.connString = (self.connString + " user=%s"
300                                        %self.selected_conn.user)
301                if self.selected_conn.password is not "":
302                    self.connString = (self.connString + " password=%s"
303                                        %self.selected_conn.password)
304                if self.selected_conn.port is not "":
305                    self.connString = (self.connString + " port= %s"
306                                        %self.selected_conn.port)
307                ds = ogr.Open(self.connString)
308              if ds:              if ds:
309                  for i in range(ds.GetLayerCount()):                  for i in range(ds.GetLayerCount()):
310                      self.tables.append(ds.GetLayer(i).GetName())                      self.tables.append(ds.GetLayer(i).GetName())
311                  self.lb_tables.Set(self.tables)                  self.lb_tables.Set(self.tables)
312    
313      def OnTableSelect(self, event):      def OnTableSelect(self, event):
314            """If a table is selected, list all possible ID columns.
315            """
316          i = self.lb_tables.GetSelection()          i = self.lb_tables.GetSelection()
317   #       self.text_id_column.Clear()          self.text_id_column.Clear()
318    #      self.text_geo_column.Clear()          if i >= 0:
319     #     if i >= 0:              for name, typ in self.selected_conn.table_columns(self.tables[i]):
320      #        for name, typ in self.selected_conn.table_columns(self.tables[i]):                  if typ == FIELDTYPE_INT:
321       #           if typ == "geometry":                      self.text_id_column.Append(name)
       #              self.text_geo_column.Append(name)  
        #         elif typ == FIELDTYPE_INT:  
         #            self.text_id_column.Append(name)  
322    
323      def OnLBDClick(self, event):      def OnLBDClick(self, event):
324            """Close dialog.
325            """
326          if self.lb_tables.GetSelection() >= 0:          if self.lb_tables.GetSelection() >= 0:
327              self.EndModal(wxID_OK)              self.EndModal(wxID_OK)
328              self.Show(False)              self.Show(False)
329    
330      def OnOK(self, event):      def OnOK(self, event):
331            """Dialog closed with OK button.
332            """
333          self.EndModal(wxID_OK)          self.EndModal(wxID_OK)
334          self.Show(False)          self.Show(False)
335    
336      def OnCancel(self, event):      def OnCancel(self, event):
337            """Dialog closed with Cancel.
338            """
339          self.EndModal(wxID_CANCEL)          self.EndModal(wxID_CANCEL)
340          self.Show(False)          self.Show(False)
341    
342    
343    class OGRConnectionDialog(wxDialog):
344        """A string can be enteres, which is directly passed to ogr to open a
345        datasource.
346        """
347        def __init__(self, parent, session):
348            """Initialize the dialog.
349            """
350            wxDialog.__init__(self, parent, -1, "Enter string for OGRConnection",
351                              style = wxDIALOG_MODAL|wxCAPTION)
352            self.session = session
353    
354            # Sizer for the entire dialog
355            top = wxBoxSizer(wxVERTICAL)
356    
357            # The list box with the drivers
358            box = wxBoxSizer(wxHORIZONTAL)#wxBox(self, -1, _("OGRConnection")),
359                                #       wxHORIZONTAL)
360            box.Add(wxStaticText(self, -1, _("URL:")), 0,
361                    wxALL|wxALIGN_CENTER_VERTICAL, 4)
362            self.text_string = wxTextCtrl(self, -1, "")
363            box.Add(self.text_string, 0, wxEXPAND, 0)
364            top.Add(box, 0, wxEXPAND)
365    
366            # The standard button box at the bottom of the dialog
367            buttons = wxFlexGridSizer(1, 2, 0, 0)
368            ok_button = wxButton(self, ID_DBCHOOSE_OK, _("OK"))
369            EVT_BUTTON(self, ID_DBCHOOSE_OK, self.OnOK)
370            buttons.Add(ok_button, 0, wxALL|wxALIGN_RIGHT, 4)
371            cancel_button = wxButton(self, ID_DBCHOOSE_CANCEL, _("Cancel"))
372            EVT_BUTTON(self, ID_DBCHOOSE_CANCEL, self.OnCancel)
373            buttons.Add(cancel_button, 0, wxALL, 4)
374            top.Add(buttons, 1, wxALL|wxALIGN_CENTER_HORIZONTAL, 4)
375    
376            # Autosizing
377            self.SetAutoLayout(1)
378            self.SetSizer(top)
379            top.Fit(self)
380            top.SetSizeHints(self)
381            self.Layout()
382    
383        def RunDialog(self):
384            """Run dialog
385            """
386            self.ShowModal()
387            self.Destroy()
388            return self.result
389    
390        def end_dialog(self, result):
391            """Close dialog
392            """
393            self.result = result
394            if result is not None:
395                self.EndModal(wxID_OK)
396            else:
397                self.EndModal(wxID_CANCEL)
398            self.Show(False)
399    
400        def OnOK(self, event):
401            """Dialog closed with OK
402            """
403            result = {}
404            result["string"] = getattr(self, "text_string").GetValue()
405            self.end_dialog(result)
406    
407        def OnCancel(self, event):
408            """Dialog closed with Cancel.
409            """
410            self.end_dialog(None)
411    
412        def GetDatasourceName(self):
413            """Return the string to be used for opening the database
414            """
415            return self.result["string"]
416    

Legend:
Removed from v.2559  
changed lines
  Added in v.2713

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26