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

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

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

revision 1342 by jonathan, Tue Jul 1 16:10:54 2003 UTC revision 1464 by bh, Fri Jul 18 18:20:40 2003 UTC
# Line 35  from Thuban.Model.layer import Layer, Ra Line 35  from Thuban.Model.layer import Layer, Ra
35  from Thuban.UI.classgen import ClassGenDialog  from Thuban.UI.classgen import ClassGenDialog
36    
37  from dialogs import NonModalNonParentDialog  from dialogs import NonModalNonParentDialog
38    from messages import MAP_REPLACED
39    
40  ID_CLASS_TABLE = 40011  ID_CLASS_TABLE = 40011
41    
# Line 84  class ClassGrid(wxGrid): Line 85  class ClassGrid(wxGrid):
85          #print "GetCellAttr ", row, col          #print "GetCellAttr ", row, col
86          #wxGrid.GetCellAttr(self, row, col)          #wxGrid.GetCellAttr(self, row, col)
87    
88      def CreateTable(self, clazz, shapeType, group = None):      def CreateTable(self, clazz, fieldType, shapeType, group = None):
89    
90          assert isinstance(clazz, Classification)          assert isinstance(clazz, Classification)
91    
# Line 104  class ClassGrid(wxGrid): Line 105  class ClassGrid(wxGrid):
105          self.SetSelectionMode(wxGrid.wxGridSelectRows)          self.SetSelectionMode(wxGrid.wxGridSelectRows)
106          self.ClearSelection()          self.ClearSelection()
107    
108          table.Reset(clazz, shapeType, group)          table.Reset(clazz, fieldType, shapeType, group)
109    
110      def GetCurrentSelection(self):      def GetCurrentSelection(self):
111          """Return the currently highlighted rows as an increasing list          """Return the currently highlighted rows as an increasing list
# Line 258  class ClassTable(wxPyGridTableBase): Line 259  class ClassTable(wxPyGridTableBase):
259    
260    
261      def __init__(self, view = None):      def __init__(self, view = None):
     #def __init__(self, clazz, shapeType, view = None):  
262          """Constructor.          """Constructor.
263    
264          shapeType -- the type of shape that the layer uses          shapeType -- the type of shape that the layer uses
# Line 275  class ClassTable(wxPyGridTableBase): Line 275  class ClassTable(wxPyGridTableBase):
275    
276          self.SetView(view)          self.SetView(view)
277    
278      def Reset(self, clazz, shapeType, group = None):      def Reset(self, clazz, fieldType, shapeType, group = None):
279          """Reset the table with the given data.          """Reset the table with the given data.
280    
281          This is necessary because wxWindows does not allow a grid's          This is necessary because wxWindows does not allow a grid's
# Line 293  class ClassTable(wxPyGridTableBase): Line 293  class ClassTable(wxPyGridTableBase):
293    
294          self.GetView().BeginBatch()          self.GetView().BeginBatch()
295    
296          self.fieldType = clazz.GetFieldType()          self.fieldType = fieldType
297          self.shapeType = shapeType          self.shapeType = shapeType
298    
299          self.SetClassification(clazz, group)          self.SetClassification(clazz, group)
# Line 683  class Classifier(NonModalNonParentDialog Line 683  class Classifier(NonModalNonParentDialog
683    
684          self.__SetTitle(layer.Title())          self.__SetTitle(layer.Title())
685    
686            self.parent.Subscribe(MAP_REPLACED, self.map_replaced)
687          self.layer = layer          self.layer = layer
688          self.map = map          self.map = map
689    
# Line 703  class Classifier(NonModalNonParentDialog Line 704  class Classifier(NonModalNonParentDialog
704    
705          if layer.HasClassification():          if layer.HasClassification():
706              self.originalClass = self.layer.GetClassification()              self.originalClass = self.layer.GetClassification()
707              field = self.originalClass.GetField()              self.originalClassField = self.layer.GetClassificationColumn()
708              fieldType = self.originalClass.GetFieldType()              field = self.originalClassField
709                fieldType = self.layer.GetFieldType(field)
710    
711              table = layer.ShapeStore().Table()              table = layer.ShapeStore().Table()
712              #              #
# Line 719  class Classifier(NonModalNonParentDialog Line 721  class Classifier(NonModalNonParentDialog
721    
722              self.fields.Append("<None>")              self.fields.Append("<None>")
723    
724              if self.originalClass.GetFieldType() is None:              if fieldType is None:
725                  self.fields.SetClientData(0, copy.deepcopy(self.originalClass))                  self.fields.SetClientData(0, copy.deepcopy(self.originalClass))
726              else:              else:
727                  self.fields.SetClientData(0, None)                  self.fields.SetClientData(0, None)
# Line 731  class Classifier(NonModalNonParentDialog Line 733  class Classifier(NonModalNonParentDialog
733                  if name == field:                  if name == field:
734                      self.__cur_field = i + 1                      self.__cur_field = i + 1
735                      self.fields.SetClientData(i + 1,                      self.fields.SetClientData(i + 1,
736                                              copy.deepcopy(self.originalClass))                                                copy.deepcopy(self.originalClass))
737                  else:                  else:
738                      self.fields.SetClientData(i + 1, None)                      self.fields.SetClientData(i + 1, None)
739    
# Line 860  class Classifier(NonModalNonParentDialog Line 862  class Classifier(NonModalNonParentDialog
862          self.haveApplied = False          self.haveApplied = False
863    
864      def unsubscribe_messages(self):      def unsubscribe_messages(self):
865            self.parent.Unsubscribe(MAP_REPLACED, self.map_replaced)
866          self.map.Unsubscribe(MAP_LAYERS_REMOVED, self.map_layers_removed)          self.map.Unsubscribe(MAP_LAYERS_REMOVED, self.map_layers_removed)
867          self.layer.Unsubscribe(LAYER_SHAPESTORE_REPLACED,          self.layer.Unsubscribe(LAYER_SHAPESTORE_REPLACED,
868                                 self.layer_shapestore_replaced)                                 self.layer_shapestore_replaced)
# Line 869  class Classifier(NonModalNonParentDialog Line 872  class Classifier(NonModalNonParentDialog
872              self.Close()              self.Close()
873    
874      def layer_shapestore_replaced(self, *args):      def layer_shapestore_replaced(self, *args):
875            """Subscribed to the map's LAYER_SHAPESTORE_REPLACED message.
876    
877            Close self.
878            """
879            self.Close()
880    
881        def map_replaced(self, *args):
882            """Subscribed to the mainwindow's MAP_REPLACED message. Close self."""
883          self.Close()          self.Close()
884    
885      def EditSymbol(self, row):      def EditSymbol(self, row):
# Line 891  class Classifier(NonModalNonParentDialog Line 902  class Classifier(NonModalNonParentDialog
902          self.fields.SetClientData(self.__cur_field, clazz)          self.fields.SetClientData(self.__cur_field, clazz)
903          self.classGrid.GetTable().SetClassification(clazz)          self.classGrid.GetTable().SetClassification(clazz)
904    
905      def __BuildClassification(self, fieldIndex, copyClass = False):      def __BuildClassification(self, fieldIndex, copyClass=False, force=False):
906    
907  #       numRows = self.classGrid.GetNumberRows()  #       numRows = self.classGrid.GetNumberRows()
908  #       assert numRows > 0  # there should always be a default row  #       assert numRows > 0  # there should always be a default row
909    
 #       clazz = Classification()  
910          if fieldIndex == 0:          if fieldIndex == 0:
911              fieldName = None              fieldName = None
912              fieldType = None              fieldType = None
# Line 904  class Classifier(NonModalNonParentDialog Line 914  class Classifier(NonModalNonParentDialog
914              fieldName = self.fields.GetString(fieldIndex)              fieldName = self.fields.GetString(fieldIndex)
915              fieldType = self.layer.GetFieldType(fieldName)              fieldType = self.layer.GetFieldType(fieldName)
916    
917          clazz = self.classGrid.GetTable().GetClassification()          clazz = self.fields.GetClientData(fieldIndex)
918            if clazz is None or self.classGrid.GetTable().IsModified() or force:
919          if copyClass:              clazz = self.classGrid.GetTable().GetClassification()
920              clazz = copy.deepcopy(clazz)              if copyClass:
921                    clazz = copy.deepcopy(clazz)
         clazz.SetFieldInfo(fieldName, fieldType)  
   
   
 #       table = self.classGrid.GetTable()  
 #       clazz.SetDefaultGroup(table.GetClassGroup(0))  
   
 #       for i in range(1, numRows):  
 #           clazz.AppendGroup(table.GetClassGroup(i))  
922    
923          return clazz          return clazz, fieldName
924    
925      def __SetGridTable(self, fieldIndex, group = None):      def __SetGridTable(self, fieldIndex, group = None):
926    
# Line 931  class Classifier(NonModalNonParentDialog Line 933  class Classifier(NonModalNonParentDialog
933                      self.layer.GetClassification().                      self.layer.GetClassification().
934                                 GetDefaultGroup().GetProperties()))                                 GetDefaultGroup().GetProperties()))
935    
936              fieldName = self.fields.GetString(fieldIndex)          fieldName = self.fields.GetString(fieldIndex)
937              fieldType = self.layer.GetFieldType(fieldName)          fieldType = self.layer.GetFieldType(fieldName)
             clazz.SetFieldInfo(fieldName, fieldType)  
938                                    
939          self.classGrid.CreateTable(clazz, self.layer.ShapeType(), group)          self.classGrid.CreateTable(clazz, fieldType,
940                                       self.layer.ShapeType(), group)
941    
942      def __SetFieldTypeText(self, fieldIndex):      def __SetFieldTypeText(self, fieldIndex):
943          fieldName = self.fields.GetString(fieldIndex)          fieldName = self.fields.GetString(fieldIndex)
# Line 955  class Classifier(NonModalNonParentDialog Line 957  class Classifier(NonModalNonParentDialog
957          assert oldIndex >= -1          assert oldIndex >= -1
958    
959          if oldIndex != -1:          if oldIndex != -1:
960              clazz = self.__BuildClassification(oldIndex)              clazz, name = self.__BuildClassification(oldIndex, force = True)
961              self.fields.SetClientData(oldIndex, clazz)              self.fields.SetClientData(oldIndex, clazz)
962    
963          self.__SetGridTable(newIndex, group)          self.__SetGridTable(newIndex, group)
# Line 994  class Classifier(NonModalNonParentDialog Line 996  class Classifier(NonModalNonParentDialog
996              # to begin with or it has been modified              # to begin with or it has been modified
997              #              #
998              self.classGrid.SaveEditControlValue()              self.classGrid.SaveEditControlValue()
999              if clazz is None or self.classGrid.GetTable().IsModified():              clazz, name = self.__BuildClassification(self.__cur_field, True)
                 clazz = self.__BuildClassification(self.__cur_field, True)  
1000    
1001                self.layer.SetClassificationColumn(name)
1002              self.layer.SetClassification(clazz)              self.layer.SetClassification(clazz)
1003    
1004          self.haveApplied = True          self.haveApplied = True
# Line 1020  class Classifier(NonModalNonParentDialog Line 1022  class Classifier(NonModalNonParentDialog
1022      def _OnRevert(self, event):      def _OnRevert(self, event):
1023          """The layer's current classification stays the same."""          """The layer's current classification stays the same."""
1024          if self.haveApplied:          if self.haveApplied:
1025                self.layer.SetClassificationColumn(self.originalClassField)
1026              self.layer.SetClassification(self.originalClass)              self.layer.SetClassification(self.originalClass)
1027    
1028          #self.Close()          #self.Close()

Legend:
Removed from v.1342  
changed lines
  Added in v.1464

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26