/[thuban]/branches/WIP-pyshapelib-bramz/Thuban/UI/identifyview.py
ViewVC logotype

Diff of /branches/WIP-pyshapelib-bramz/Thuban/UI/identifyview.py

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

revision 6 by bh, Tue Aug 28 15:41:52 2001 UTC revision 1138 by frank, Thu Jun 5 15:59:57 2003 UTC
# Line 1  Line 1 
1  # Copyright (c) 2001 by Intevation GmbH  # Copyright (c) 2001, 2002, 2003 by Intevation GmbH
2  # Authors:  # Authors:
3  # Bernhard Herzog <[email protected]>  # Bernhard Herzog <[email protected]>
4    # Frank Koormann <[email protected]>
5  #  #
6  # This program is free software under the GPL (>=v2)  # This program is free software under the GPL (>=v2)
7  # Read the file COPYING coming with Thuban for details.  # Read the file COPYING coming with Thuban for details.
# Line 10  __version__ = "$Revision$" Line 11  __version__ = "$Revision$"
11  from wxPython.wx import *  from wxPython.wx import *
12  from wxPython.grid import *  from wxPython.grid import *
13    
14  import view  from Thuban import _
 from messages import SELECTED_SHAPE  
15    
16  class IdentifyListCtrl(wxListCtrl):  from dialogs import NonModalDialog
17    from controls import RecordListCtrl, RecordGridCtrl
18    from messages import SHAPES_SELECTED
19    
20      def __init__(self, parent, id, interactor):  class IdentifyListCtrl(RecordListCtrl):
         wxListCtrl.__init__(self, parent, id, style = wxLC_REPORT)  
         self.interactor = interactor  
         self.interactor.Subscribe(SELECTED_SHAPE, self.selected_shape)  
   
         self.InsertColumn(0, "Field")  
         self.SetColumnWidth(0, wxLIST_AUTOSIZE_USEHEADER)  
         self.InsertColumn(1, "Value")  
         self.SetColumnWidth(1, wxLIST_AUTOSIZE_USEHEADER)  
   
     def fill_list(self, layer, shape):  
         self.DeleteAllItems()  
   
         if shape is not None:  
             table = layer.shapetable  
             num_cols = table.field_count()  
             num_rows = table.record_count()  
               
             names = []  
             for i in range(num_cols):  
                 type, name, length, decc = table.field_info(i)  
                 names.append(name)  
             record = table.read_record(shape)  
             i = 0  
             for name in names:  
                 value = record[name]  
                 i = self.InsertStringItem(i, name)  
                 self.SetStringItem(i, 1, str(value))  
21    
22      def selected_shape(self, layer, shape):      def selected_shape(self, layer, shape):
23          self.fill_list(layer, shape)          if layer is not None:
24                            table = layer.table
25            else:
26                table = None
27            self.fill_list(table, shape)
28    
29    class IdentifyGridCtrl(RecordGridCtrl):
30    
31  class IdentifyView(wxFrame):      def selected_shape(self, layer, shape):
32            if layer is not None:
33      def __init__(self, parent, app):              table = layer.table
34          # assume parent is Thuban's main window python object          else:
35          wxFrame.__init__(self, parent, -1, "Identify Shape")              table = None
36          panel = wxPanel(self, -1, style = wxWANTS_CHARS)          self.SetTableRecord(table, shape)
37          self.list = IdentifyListCtrl(panel, -1, app.interactor)  
38    class IdentifyView(NonModalDialog):
39          sizer = wxBoxSizer(wxVERTICAL)  
40          sizer.Add(self.list, 1, wx.wxEXPAND| wx.wxALL, 0)      def __init__(self, parent, name):
41            NonModalDialog.__init__(self, parent, name, _("Identify Shape"))
42          panel.SetAutoLayout(true)          parent.Subscribe(SHAPES_SELECTED, self.selected_shape)
43          panel.SetSizer(sizer)  
44          sizer.Fit(panel)          top_box = wxBoxSizer(wxVERTICAL)
45            #self.list = IdentifyGridCtrl(panel)
46            self.list = IdentifyListCtrl(self, -1)
47            self.list.SetSize(wxSize(305,200))
48            top_box.Add(self.list, 1, wxEXPAND|wxALL, 4)
49    
50            box = wxBoxSizer(wxHORIZONTAL)
51            box.Add(wxButton(self, wxID_CLOSE, _("Close")), 0, wxALL, 4)
52            top_box.Add(box, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 4)
53    
54            EVT_BUTTON(self, wxID_CLOSE, self.OnClose)
55    
56            self.SetAutoLayout(True)
57            self.SetSizer(top_box)
58            top_box.Fit(self)
59            top_box.SetSizeHints(self)
60    
61        def OnClose(self, event):
62            self.parent.Unsubscribe(SHAPES_SELECTED, self.selected_shape)
63            NonModalDialog.OnClose(self, event)
64    
65        def selected_shape(self, layer, shapes):
66            """Subscribed to the SHAPES_SELECTED messages.
67    
68            If exatly one shape is selected, pass that shape id to the
69            list's selected_shape method. Otherwise pass None as the shape
70            id.
71            """
72            if len(shapes) == 1:
73                shape = shapes[0]
74            else:
75                shape = None
76            self.list.selected_shape(layer, shape)

Legend:
Removed from v.6  
changed lines
  Added in v.1138

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26