/[thuban]/trunk/thuban/Thuban/UI/classifier.py
ViewVC logotype

Diff of /trunk/thuban/Thuban/UI/classifier.py

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

revision 1302 by jonathan, Wed Jun 25 09:39:33 2003 UTC revision 1447 by jonathan, Thu Jul 17 14:59:29 2003 UTC
# Line 27  from Thuban.Model.classification import Line 27  from Thuban.Model.classification import
27      ClassGroupSingleton, ClassGroupRange, ClassGroupMap, \      ClassGroupSingleton, ClassGroupRange, ClassGroupMap, \
28      ClassGroupProperties      ClassGroupProperties
29    
30  from Thuban.Model.color import Color  from Thuban.Model.color import Transparent
31    
32  from Thuban.Model.layer import Layer, RasterLayer, \  from Thuban.Model.layer import Layer, RasterLayer, \
33      SHAPETYPE_ARC, SHAPETYPE_POLYGON, SHAPETYPE_POINT      SHAPETYPE_ARC, SHAPETYPE_POLYGON, SHAPETYPE_POINT
# Line 84  class ClassGrid(wxGrid): Line 84  class ClassGrid(wxGrid):
84          #print "GetCellAttr ", row, col          #print "GetCellAttr ", row, col
85          #wxGrid.GetCellAttr(self, row, col)          #wxGrid.GetCellAttr(self, row, col)
86    
87      def CreateTable(self, clazz, shapeType, group = None):      def CreateTable(self, clazz, fieldType, shapeType, group = None):
88    
89          assert isinstance(clazz, Classification)          assert isinstance(clazz, Classification)
90    
# Line 104  class ClassGrid(wxGrid): Line 104  class ClassGrid(wxGrid):
104          self.SetSelectionMode(wxGrid.wxGridSelectRows)          self.SetSelectionMode(wxGrid.wxGridSelectRows)
105          self.ClearSelection()          self.ClearSelection()
106    
107          table.Reset(clazz, shapeType, group)          table.Reset(clazz, fieldType, shapeType, group)
108    
109      def GetCurrentSelection(self):      def GetCurrentSelection(self):
110          """Return the currently highlighted rows as an increasing list          """Return the currently highlighted rows as an increasing list
# Line 258  class ClassTable(wxPyGridTableBase): Line 258  class ClassTable(wxPyGridTableBase):
258    
259    
260      def __init__(self, view = None):      def __init__(self, view = None):
     #def __init__(self, clazz, shapeType, view = None):  
261          """Constructor.          """Constructor.
262    
263          shapeType -- the type of shape that the layer uses          shapeType -- the type of shape that the layer uses
# Line 275  class ClassTable(wxPyGridTableBase): Line 274  class ClassTable(wxPyGridTableBase):
274    
275          self.SetView(view)          self.SetView(view)
276    
277      def Reset(self, clazz, shapeType, group = None):      def Reset(self, clazz, fieldType, shapeType, group = None):
278          """Reset the table with the given data.          """Reset the table with the given data.
279    
280          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 292  class ClassTable(wxPyGridTableBase):
292    
293          self.GetView().BeginBatch()          self.GetView().BeginBatch()
294    
295          self.fieldType = clazz.GetFieldType()          self.fieldType = fieldType
296          self.shapeType = shapeType          self.shapeType = shapeType
297    
298          self.SetClassification(clazz, group)          self.SetClassification(clazz, group)
# Line 703  class Classifier(NonModalNonParentDialog Line 702  class Classifier(NonModalNonParentDialog
702    
703          if layer.HasClassification():          if layer.HasClassification():
704              self.originalClass = self.layer.GetClassification()              self.originalClass = self.layer.GetClassification()
705              field = self.originalClass.GetField()              self.originalClassField = self.layer.GetClassificationField()
706              fieldType = self.originalClass.GetFieldType()              field = self.originalClassField
707                fieldType = self.layer.GetFieldType(field)
708    
709              table = layer.ShapeStore().Table()              table = layer.ShapeStore().Table()
710              #              #
# Line 719  class Classifier(NonModalNonParentDialog Line 719  class Classifier(NonModalNonParentDialog
719    
720              self.fields.Append("<None>")              self.fields.Append("<None>")
721    
722              if self.originalClass.GetFieldType() is None:              if fieldType is None:
723                  self.fields.SetClientData(0, copy.deepcopy(self.originalClass))                  self.fields.SetClientData(0, copy.deepcopy(self.originalClass))
724              else:              else:
725                  self.fields.SetClientData(0, None)                  self.fields.SetClientData(0, None)
# Line 731  class Classifier(NonModalNonParentDialog Line 731  class Classifier(NonModalNonParentDialog
731                  if name == field:                  if name == field:
732                      self.__cur_field = i + 1                      self.__cur_field = i + 1
733                      self.fields.SetClientData(i + 1,                      self.fields.SetClientData(i + 1,
734                                              copy.deepcopy(self.originalClass))                                                copy.deepcopy(self.originalClass))
735                  else:                  else:
736                      self.fields.SetClientData(i + 1, None)                      self.fields.SetClientData(i + 1, None)
737    
# Line 758  class Classifier(NonModalNonParentDialog Line 758  class Classifier(NonModalNonParentDialog
758          button_try = wxButton(self, ID_PROPERTY_TRY, _("Try"))          button_try = wxButton(self, ID_PROPERTY_TRY, _("Try"))
759          button_revert = wxButton(self, ID_PROPERTY_REVERT, _("Revert"))          button_revert = wxButton(self, ID_PROPERTY_REVERT, _("Revert"))
760          button_ok = wxButton(self, wxID_OK, _("OK"))          button_ok = wxButton(self, wxID_OK, _("OK"))
         button_ok.SetDefault()  
761          button_close = wxButton(self, wxID_CANCEL, _("Close"))          button_close = wxButton(self, wxID_CANCEL, _("Close"))
762            button_ok.SetDefault()
763    
764          ############################          ############################
765          # Layout the controls          # Layout the controls
# Line 891  class Classifier(NonModalNonParentDialog Line 891  class Classifier(NonModalNonParentDialog
891          self.fields.SetClientData(self.__cur_field, clazz)          self.fields.SetClientData(self.__cur_field, clazz)
892          self.classGrid.GetTable().SetClassification(clazz)          self.classGrid.GetTable().SetClassification(clazz)
893    
894      def __BuildClassification(self, fieldIndex, copyClass = False):      def __BuildClassification(self, fieldIndex, copyClass=False, force=False):
895    
896  #       numRows = self.classGrid.GetNumberRows()  #       numRows = self.classGrid.GetNumberRows()
897  #       assert numRows > 0  # there should always be a default row  #       assert numRows > 0  # there should always be a default row
898    
 #       clazz = Classification()  
899          if fieldIndex == 0:          if fieldIndex == 0:
900              fieldName = None              fieldName = None
901              fieldType = None              fieldType = None
# Line 904  class Classifier(NonModalNonParentDialog Line 903  class Classifier(NonModalNonParentDialog
903              fieldName = self.fields.GetString(fieldIndex)              fieldName = self.fields.GetString(fieldIndex)
904              fieldType = self.layer.GetFieldType(fieldName)              fieldType = self.layer.GetFieldType(fieldName)
905    
906          clazz = self.classGrid.GetTable().GetClassification()          clazz = self.fields.GetClientData(fieldIndex)
907            if clazz is None or self.classGrid.GetTable().IsModified() or force:
908          if copyClass:              clazz = self.classGrid.GetTable().GetClassification()
909              clazz = copy.deepcopy(clazz)              if copyClass:
910                    clazz = copy.deepcopy(clazz)
         clazz.SetField(fieldName)  
         clazz.SetFieldType(fieldType)  
   
   
 #       table = self.classGrid.GetTable()  
 #       clazz.SetDefaultGroup(table.GetClassGroup(0))  
   
 #       for i in range(1, numRows):  
 #           clazz.AppendGroup(table.GetClassGroup(i))  
911    
912          return clazz          return clazz, fieldName
913    
914      def __SetGridTable(self, fieldIndex, group = None):      def __SetGridTable(self, fieldIndex, group = None):
915    
# Line 932  class Classifier(NonModalNonParentDialog Line 922  class Classifier(NonModalNonParentDialog
922                      self.layer.GetClassification().                      self.layer.GetClassification().
923                                 GetDefaultGroup().GetProperties()))                                 GetDefaultGroup().GetProperties()))
924    
925              fieldName = self.fields.GetString(fieldIndex)          fieldName = self.fields.GetString(fieldIndex)
926              fieldType = self.layer.GetFieldType(fieldName)          fieldType = self.layer.GetFieldType(fieldName)
             clazz.SetFieldType(fieldType)  
927                                    
928          self.classGrid.CreateTable(clazz, self.layer.ShapeType(), group)          self.classGrid.CreateTable(clazz, fieldType,
929                                       self.layer.ShapeType(), group)
930    
931      def __SetFieldTypeText(self, fieldIndex):      def __SetFieldTypeText(self, fieldIndex):
932          fieldName = self.fields.GetString(fieldIndex)          fieldName = self.fields.GetString(fieldIndex)
# Line 956  class Classifier(NonModalNonParentDialog Line 946  class Classifier(NonModalNonParentDialog
946          assert oldIndex >= -1          assert oldIndex >= -1
947    
948          if oldIndex != -1:          if oldIndex != -1:
949              clazz = self.__BuildClassification(oldIndex)              clazz, name = self.__BuildClassification(oldIndex, force = True)
950              self.fields.SetClientData(oldIndex, clazz)              self.fields.SetClientData(oldIndex, clazz)
951    
952          self.__SetGridTable(newIndex, group)          self.__SetGridTable(newIndex, group)
953    
954          self.__EnableButtons(EB_SELECT_FIELD, newIndex != 0)          self.__EnableButtons(EB_SELECT_FIELD)
955    
956          self.__SetFieldTypeText(newIndex)          self.__SetFieldTypeText(newIndex)
957    
# Line 995  class Classifier(NonModalNonParentDialog Line 985  class Classifier(NonModalNonParentDialog
985              # to begin with or it has been modified              # to begin with or it has been modified
986              #              #
987              self.classGrid.SaveEditControlValue()              self.classGrid.SaveEditControlValue()
988              if clazz is None or self.classGrid.GetTable().IsModified():              clazz, name = self.__BuildClassification(self.__cur_field, True)
                 clazz = self.__BuildClassification(self.__cur_field, True)  
989    
990                self.layer.SetClassificationField(name)
991              self.layer.SetClassification(clazz)              self.layer.SetClassification(clazz)
992    
993          self.haveApplied = True          self.haveApplied = True
# Line 1021  class Classifier(NonModalNonParentDialog Line 1011  class Classifier(NonModalNonParentDialog
1011      def _OnRevert(self, event):      def _OnRevert(self, event):
1012          """The layer's current classification stays the same."""          """The layer's current classification stays the same."""
1013          if self.haveApplied:          if self.haveApplied:
1014                self.layer.SetClassificationField(self.originalClassField)
1015              self.layer.SetClassification(self.originalClass)              self.layer.SetClassification(self.originalClass)
1016    
1017          #self.Close()          #self.Close()
# Line 1038  class Classifier(NonModalNonParentDialog Line 1029  class Classifier(NonModalNonParentDialog
1029    
1030          EVT_CLOSE(self.genDlg, self._OnGenDialogClose)          EVT_CLOSE(self.genDlg, self._OnGenDialogClose)
1031    
1032          self.__EnableButtons(EB_GEN_CLASS, False)          self.__EnableButtons(EB_GEN_CLASS)
1033    
1034          self.genDlg.Show()          self.genDlg.Show()
1035    
1036      def _OnGenDialogClose(self, event):      def _OnGenDialogClose(self, event):
1037          self.genDlg.Destroy()          self.genDlg.Destroy()
1038          self.__EnableButtons(EB_GEN_CLASS, True)          self.genDlg = None
1039            self.__EnableButtons(EB_GEN_CLASS)
1040    
1041      def _OnMoveUp(self, event):      def _OnMoveUp(self, event):
1042          sel = self.classGrid.GetCurrentSelection()          sel = self.classGrid.GetCurrentSelection()
# Line 1082  class Classifier(NonModalNonParentDialog Line 1074  class Classifier(NonModalNonParentDialog
1074          self.layer.SetTitle(obj.GetValue())          self.layer.SetTitle(obj.GetValue())
1075          self.__SetTitle(self.layer.Title())          self.__SetTitle(self.layer.Title())
1076    
1077          self.__EnableButtons(EB_LAYER_TITLE, self.layer.Title() != "")          self.__EnableButtons(EB_LAYER_TITLE)
1078    
1079        def __EnableButtons(self, case):
1080    
1081      def __EnableButtons(self, case, enable):          list = {wxID_OK                 : True,
1082                    wxID_CANCEL             : True,
1083                    ID_PROPERTY_ADD         : True,
1084                    ID_PROPERTY_MOVEUP      : True,
1085                    ID_PROPERTY_MOVEDOWN    : True,
1086                    ID_PROPERTY_REMOVE      : True,
1087                    ID_PROPERTY_SELECT      : True,
1088                    ID_PROPERTY_FIELDTEXT   : True,
1089                    ID_PROPERTY_GENCLASS    : True,
1090                    ID_PROPERTY_EDITSYM     : True}
1091    
1092          if case == EB_LAYER_TITLE:            if case == EB_LAYER_TITLE:  
1093              list = (wxID_OK,              if self.layer.Title() == "":
1094                      wxID_CANCEL)                  list[wxID_OK] = False
1095                    list[wxID_CANCEL] = False
1096    
1097          elif case == EB_SELECT_FIELD:          elif case == EB_SELECT_FIELD:
1098              list = (ID_PROPERTY_GENCLASS,              if self.fields.GetSelection() == 0:
1099                      ID_PROPERTY_ADD,                  list[ID_PROPERTY_GENCLASS] = False
1100                      ID_PROPERTY_MOVEUP,                  list[ID_PROPERTY_ADD] = False
1101                      ID_PROPERTY_MOVEDOWN,                  list[ID_PROPERTY_MOVEUP] = False
1102                      ID_PROPERTY_EDITSYM,                  list[ID_PROPERTY_MOVEDOWN] = False
1103                      ID_PROPERTY_REMOVE)                  list[ID_PROPERTY_REMOVE] = False
1104    
1105          elif case == EB_GEN_CLASS:          elif case == EB_GEN_CLASS:
1106              list = (ID_PROPERTY_SELECT,              if self.genDlg is not None:
1107                      ID_PROPERTY_FIELDTEXT,                  list[ID_PROPERTY_SELECT] = False
1108                      ID_PROPERTY_GENCLASS,                  list[ID_PROPERTY_FIELDTEXT] = False
1109                      ID_PROPERTY_EDITSYM)                  list[ID_PROPERTY_GENCLASS] = False
1110    
1111          for id in list:          for id, enable in list.items():
1112              self.FindWindowById(id).Enable(enable)              win = self.FindWindowById(id)
1113                if win:
1114                    win.Enable(enable)
1115    
1116  ID_SELPROP_SPINCTRL = 4002  ID_SELPROP_SPINCTRL = 4002
1117  ID_SELPROP_PREVIEW = 4003  ID_SELPROP_PREVIEW = 4003
# Line 1194  class SelectPropertiesDialog(wxDialog): Line 1200  class SelectPropertiesDialog(wxDialog):
1200          #          #
1201          buttonBox = wxBoxSizer(wxHORIZONTAL)          buttonBox = wxBoxSizer(wxHORIZONTAL)
1202          button_ok = wxButton(self, wxID_OK, _("OK"))          button_ok = wxButton(self, wxID_OK, _("OK"))
         button_ok.SetDefault()  
1203          buttonBox.Add(button_ok, 0, wxRIGHT|wxEXPAND, 10)          buttonBox.Add(button_ok, 0, wxRIGHT|wxEXPAND, 10)
1204          buttonBox.Add(wxButton(self, wxID_CANCEL, _("Cancel")),          buttonBox.Add(wxButton(self, wxID_CANCEL, _("Cancel")),
1205                        0, wxRIGHT|wxEXPAND, 10)                        0, wxRIGHT|wxEXPAND, 10)
1206          topBox.Add(buttonBox, 0, wxALIGN_RIGHT|wxBOTTOM|wxTOP, 10)          topBox.Add(buttonBox, 0, wxALIGN_RIGHT|wxBOTTOM|wxTOP, 10)
1207    
1208            button_ok.SetDefault()
1209                                                                                                                                                                    
1210          #EVT_BUTTON(self, wxID_OK, self._OnOK)          #EVT_BUTTON(self, wxID_OK, self._OnOK)
1211          #EVT_BUTTON(self, ID_SELPROP_CANCEL, self._OnCancel)          #EVT_BUTTON(self, ID_SELPROP_CANCEL, self._OnCancel)
# Line 1220  class SelectPropertiesDialog(wxDialog): Line 1227  class SelectPropertiesDialog(wxDialog):
1227    
1228      def __GetColor(self, cur):      def __GetColor(self, cur):
1229          dialog = wxColourDialog(self)          dialog = wxColourDialog(self)
1230          if cur is not Color.Transparent:          if cur is not Transparent:
1231              dialog.GetColourData().SetColour(Color2wxColour(cur))              dialog.GetColourData().SetColour(Color2wxColour(cur))
1232    
1233          ret = None          ret = None
# Line 1238  class SelectPropertiesDialog(wxDialog): Line 1245  class SelectPropertiesDialog(wxDialog):
1245          self.previewWin.Refresh() # XXX: work around, see ClassDataPreviewer          self.previewWin.Refresh() # XXX: work around, see ClassDataPreviewer
1246    
1247      def _OnChangeLineColorTrans(self, event):      def _OnChangeLineColorTrans(self, event):
1248          self.prop.SetLineColor(Color.Transparent)          self.prop.SetLineColor(Transparent)
1249          self.previewWin.Refresh() # XXX: work around, see ClassDataPreviewer          self.previewWin.Refresh() # XXX: work around, see ClassDataPreviewer
1250                    
1251      def _OnChangeFillColor(self, event):      def _OnChangeFillColor(self, event):
# Line 1248  class SelectPropertiesDialog(wxDialog): Line 1255  class SelectPropertiesDialog(wxDialog):
1255          self.previewWin.Refresh() # XXX: work around, see ClassDataPreviewer          self.previewWin.Refresh() # XXX: work around, see ClassDataPreviewer
1256    
1257      def _OnChangeFillColorTrans(self, event):      def _OnChangeFillColorTrans(self, event):
1258          self.prop.SetFill(Color.Transparent)          self.prop.SetFill(Transparent)
1259          self.previewWin.Refresh() # XXX: work around, see ClassDataPreviewer          self.previewWin.Refresh() # XXX: work around, see ClassDataPreviewer
1260    
1261      def GetClassGroupProperties(self):      def GetClassGroupProperties(self):
# Line 1304  class ClassDataPreviewer: Line 1311  class ClassDataPreviewer:
1311              h = rect.GetHeight()              h = rect.GetHeight()
1312    
1313          stroke = prop.GetLineColor()          stroke = prop.GetLineColor()
1314          if stroke is Color.Transparent:          if stroke is Transparent:
1315              pen = wxTRANSPARENT_PEN              pen = wxTRANSPARENT_PEN
1316          else:          else:
1317              pen = wxPen(Color2wxColour(stroke),              pen = wxPen(Color2wxColour(stroke),
# Line 1312  class ClassDataPreviewer: Line 1319  class ClassDataPreviewer:
1319                          wxSOLID)                          wxSOLID)
1320    
1321          stroke = prop.GetFill()          stroke = prop.GetFill()
1322          if stroke is Color.Transparent:          if stroke is Transparent:
1323              brush = wxTRANSPARENT_BRUSH              brush = wxTRANSPARENT_BRUSH
1324          else:          else:
1325              brush = wxBrush(Color2wxColour(stroke), wxSOLID)              brush = wxBrush(Color2wxColour(stroke), wxSOLID)

Legend:
Removed from v.1302  
changed lines
  Added in v.1447

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26