/[thuban]/branches/WIP-pyshapelib-bramz/Thuban/Model/classification.py
ViewVC logotype

Diff of /branches/WIP-pyshapelib-bramz/Thuban/Model/classification.py

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

revision 627 by jonathan, Wed Apr 9 10:08:47 2003 UTC revision 678 by jonathan, Tue Apr 15 19:21:26 2003 UTC
# Line 428  class ClassGroupProperties: Line 428  class ClassGroupProperties:
428                   and fill color = Color.Transparent                   and fill color = Color.Transparent
429          """          """
430    
431          self.stroke = None          #self.stroke = None
432          self.strokeWidth = 0          #self.strokeWidth = 0
433          self.fill = None          #self.fill = None
434    
435          if props is not None:          if props is not None:
436              self.SetProperties(props)              self.SetProperties(props)
# Line 449  class ClassGroupProperties: Line 449  class ClassGroupProperties:
449                    
450      def GetLineColor(self):      def GetLineColor(self):
451          """Return the line color as a Color object."""          """Return the line color as a Color object."""
452          return self.stroke          return self.__stroke
453    
454      def SetLineColor(self, color):      def SetLineColor(self, color):
455          """Set the line color.          """Set the line color.
# Line 458  class ClassGroupProperties: Line 458  class ClassGroupProperties:
458          """          """
459    
460          assert isinstance(color, Color)          assert isinstance(color, Color)
461          self.stroke = color          self.__stroke = color
462    
463      def GetLineWidth(self):      def GetLineWidth(self):
464          """Return the line width."""          """Return the line width."""
465          return self.strokeWidth          return self.__strokeWidth
466    
467      def SetLineWidth(self, lineWidth):      def SetLineWidth(self, lineWidth):
468          """Set the line width.          """Set the line width.
# Line 473  class ClassGroupProperties: Line 473  class ClassGroupProperties:
473          if (lineWidth < 1):          if (lineWidth < 1):
474              raise ValueError(_("lineWidth < 1"))              raise ValueError(_("lineWidth < 1"))
475    
476          self.strokeWidth = lineWidth          self.__strokeWidth = lineWidth
477    
478      def GetFill(self):      def GetFill(self):
479          """Return the fill color as a Color object."""          """Return the fill color as a Color object."""
480          return self.fill          return self.__fill
481    
482      def SetFill(self, fill):      def SetFill(self, fill):
483          """Set the fill color.          """Set the fill color.
# Line 486  class ClassGroupProperties: Line 486  class ClassGroupProperties:
486          """          """
487    
488          assert isinstance(fill, Color)          assert isinstance(fill, Color)
489          self.fill = fill          self.__fill = fill
490    
491      def __eq__(self, other):      def __eq__(self, other):
492          """Return true if 'props' has the same attributes as this class"""          """Return true if 'props' has the same attributes as this class"""
493    
494            #
495            # using 'is' over '==' results in a huge performance gain
496            # in the renderer
497            #
498          return isinstance(other, ClassGroupProperties)   \          return isinstance(other, ClassGroupProperties)   \
499              and self.stroke      == other.GetLineColor() \              and (self.__stroke is other.__stroke or      \
500              and self.strokeWidth == other.GetLineWidth() \                   self.__stroke == other.__stroke)        \
501              and self.fill        == other.GetFill()              and (self.__fill is other.__fill or          \
502                     self.__fill == other.__fill)            \
503                and self.__strokeWidth == other.__strokeWidth
504    
505      def __ne__(self, other):      def __ne__(self, other):
506          return not self.__eq__(other)          return not self.__eq__(other)
# Line 508  class ClassGroupProperties: Line 514  class ClassGroupProperties:
514  class ClassGroup:  class ClassGroup:
515      """A base class for all Groups within a Classification"""      """A base class for all Groups within a Classification"""
516    
517      def __init__(self, label = ""):      def __init__(self, label = "", props = None, group = None):
518          """Constructor.          """Constructor.
519    
520          label -- A string representing the Group's label          label -- A string representing the Group's label
521          """          """
522    
523          self.label = None          if group is not None:
524                self.SetLabel(copy.copy(group.GetLabel()))
525          self.SetLabel(label)              self.SetProperties(copy.copy(group.GetProperties()))
526                self.SetVisible(group.IsVisible())
527            else:
528                self.SetLabel(label)
529                self.SetProperties(props)
530                self.SetVisible(True)
531    
532      def GetLabel(self):      def GetLabel(self):
533          """Return the Group's label."""          """Return the Group's label."""
# Line 544  class ClassGroup: Line 555  class ClassGroup:
555          return False          return False
556    
557      def GetProperties(self):      def GetProperties(self):
558          """Return the properties associated with the given value.          """Return the properties associated with the given value."""
559    
560          Returns None. This needs to be overridden by all subclasses.          return self.prop
         """  
         assert False, "GetProperties must be overridden by subclass!"  
         return None  
561    
562        def SetProperties(self, prop):
563            """Set the properties associated with this Group.
564    
565            prop -- a ClassGroupProperties object. if prop is None,
566                    a default set of properties is created.
567            """
568    
569            if prop is None: prop = ClassGroupProperties()
570            assert isinstance(prop, ClassGroupProperties)
571            self.prop = prop
572    
573        def IsVisible(self):
574            return self.visible
575    
576        def SetVisible(self, visible):
577            self.visible = visible
578    
579        def __eq__(self, other):
580            return isinstance(other, ClassGroup) \
581                and self.GetProperties() == other.GetProperties()
582    
583        def __ne__(self, other):
584            return not self.__eq__(other)
585    
586            
587  class ClassGroupSingleton(ClassGroup):  class ClassGroupSingleton(ClassGroup):
588      """A Group that is associated with a single value."""      """A Group that is associated with a single value."""
589    
590      def __init__(self, value = 0, prop = None, label = ""):      def __init__(self, value = 0, props = None, label = "", group = None):
591          """Constructor.          """Constructor.
592    
593          value -- the associated value.          value -- the associated value.
# Line 565  class ClassGroupSingleton(ClassGroup): Line 597  class ClassGroupSingleton(ClassGroup):
597    
598          label -- a label for this group.          label -- a label for this group.
599          """          """
600          ClassGroup.__init__(self, label)          ClassGroup.__init__(self, label, props, group)
   
         self.prop = None  
         self.value = None  
601    
602          self.SetValue(value)          self.SetValue(value)
         self.SetProperties(prop)  
603    
604      def __copy__(self):      def __copy__(self):
605          return ClassGroupSingleton(self.GetValue(),          return ClassGroupSingleton(self.GetValue(),
# Line 579  class ClassGroupSingleton(ClassGroup): Line 607  class ClassGroupSingleton(ClassGroup):
607                                     self.GetLabel())                                     self.GetLabel())
608    
609      def __deepcopy__(self, memo):      def __deepcopy__(self, memo):
610          return ClassGroupSingleton(copy.copy(self.GetValue()),          return ClassGroupSingleton(self.GetValue(), group = self)
                                    copy.copy(self.GetProperties()),  
                                    copy.copy(self.GetLabel()))  
611    
612      def GetValue(self):      def GetValue(self):
613          """Return the associated value."""          """Return the associated value."""
614          return self.value          return self.__value
615    
616      def SetValue(self, value):      def SetValue(self, value):
617          """Associate this Group with the given value."""          """Associate this Group with the given value."""
618          self.value = value          self.__value = value
619    
620      def Matches(self, value):      def Matches(self, value):
621          """Determine if the given value matches the associated Group value."""          """Determine if the given value matches the associated Group value."""
622    
623          """Returns True if the value matches, False otherwise."""          """Returns True if the value matches, False otherwise."""
624    
625          return self.value == value          return self.__value == value
   
     def GetProperties(self):  
         """Return the Properties associated with this Group."""  
   
         return self.prop  
   
     def SetProperties(self, prop):  
         """Set the properties associated with this Group.  
   
         prop -- a ClassGroupProperties object. if prop is None,  
                 a default set of properties is created.  
         """  
   
         if prop is None: prop = ClassGroupProperties()  
         assert isinstance(prop, ClassGroupProperties)  
         self.prop = prop  
626    
627      def GetDisplayText(self):      def GetDisplayText(self):
628          label = self.GetLabel()          label = self.GetLabel()
# Line 622  class ClassGroupSingleton(ClassGroup): Line 632  class ClassGroupSingleton(ClassGroup):
632          return str(self.GetValue())          return str(self.GetValue())
633    
634      def __eq__(self, other):      def __eq__(self, other):
635          return isinstance(other, ClassGroupSingleton) \          return ClassGroup.__eq__(self, other) \
636              and self.GetProperties() == other.GetProperties() \              and isinstance(other, ClassGroupSingleton) \
637              and self.GetValue() == other.GetValue()              and self.__value == other.__value
   
     def __ne__(self, other):  
         return not self.__eq__(other)  
638    
639  class ClassGroupDefault(ClassGroup):  class ClassGroupDefault(ClassGroup):
640      """The default Group. When values do not match any other      """The default Group. When values do not match any other
641         Group within a Classification, the properties from this         Group within a Classification, the properties from this
642         class are used."""         class are used."""
643    
644      def __init__(self, prop = None, label = ""):      def __init__(self, props = None, label = "", group = None):
645          """Constructor.          """Constructor.
646    
647          prop -- a ClassGroupProperites object. If prop is None a default          prop -- a ClassGroupProperites object. If prop is None a default
# Line 643  class ClassGroupDefault(ClassGroup): Line 650  class ClassGroupDefault(ClassGroup):
650          label -- a label for this group.          label -- a label for this group.
651          """          """
652    
653          ClassGroup.__init__(self, label)          ClassGroup.__init__(self, label, props, group)
         self.SetProperties(prop)  
654    
655      def __copy__(self):      def __copy__(self):
656          return ClassGroupDefault(self.GetProperties(), self.GetLabel())          return ClassGroupDefault(self.GetProperties(), self.GetLabel())
657    
658      def __deepcopy__(self, memo):      def __deepcopy__(self, memo):
659          return ClassGroupDefault(copy.copy(self.GetProperties()),          return ClassGroupDefault(label = self.GetLabel(), group = self)
                                  copy.copy(self.GetLabel()))  
660    
661      def Matches(self, value):      def Matches(self, value):
662          return True          return True
663    
     def GetProperties(self):  
         """Return the Properties associated with this Group."""  
         return self.prop  
   
     def SetProperties(self, prop):  
         """Set the properties associated with this Group.  
   
         prop -- a ClassGroupProperties object. if prop is None,  
                 a default set of properties is created.  
         """  
   
         if prop is None: prop = ClassGroupProperties()  
         assert isinstance(prop, ClassGroupProperties)  
         self.prop = prop  
   
664      def GetDisplayText(self):      def GetDisplayText(self):
665          label = self.GetLabel()          label = self.GetLabel()
666    
# Line 679  class ClassGroupDefault(ClassGroup): Line 669  class ClassGroupDefault(ClassGroup):
669          return _("DEFAULT")          return _("DEFAULT")
670    
671      def __eq__(self, other):      def __eq__(self, other):
672          return isinstance(other, ClassGroupDefault) \          return ClassGroup.__eq__(self, other) \
673                and isinstance(other, ClassGroupDefault) \
674              and self.GetProperties() == other.GetProperties()              and self.GetProperties() == other.GetProperties()
675    
     def __ne__(self, other):  
         return not self.__eq__(other)  
   
676  class ClassGroupRange(ClassGroup):  class ClassGroupRange(ClassGroup):
677      """A Group that represents a range of values that map to the same      """A Group that represents a range of values that map to the same
678         set of properties."""         set of properties."""
679    
680      def __init__(self, min = 0, max = 1, prop = None, label = ""):      def __init__(self, min = 0, max = 1, props = None, label = "", group=None):
681          """Constructor.          """Constructor.
682    
683          The minumum value must be strictly less than the maximum.          The minumum value must be strictly less than the maximum.
# Line 704  class ClassGroupRange(ClassGroup): Line 692  class ClassGroupRange(ClassGroup):
692          label -- a label for this group.          label -- a label for this group.
693          """          """
694    
695          ClassGroup.__init__(self, label)          ClassGroup.__init__(self, label, props, group)
696    
697          self.min = self.max = 0          self.__min = self.__max = 0
         self.prop = None  
698    
699          self.SetRange(min, max)          self.SetRange(min, max)
         self.SetProperties(prop)  
700    
701      def __copy__(self):      def __copy__(self):
702          return ClassGroupRange(self.GetMin(),          return ClassGroupRange(self.GetMin(),
# Line 721  class ClassGroupRange(ClassGroup): Line 707  class ClassGroupRange(ClassGroup):
707      def __deepcopy__(self, memo):      def __deepcopy__(self, memo):
708          return ClassGroupRange(copy.copy(self.GetMin()),          return ClassGroupRange(copy.copy(self.GetMin()),
709                                 copy.copy(self.GetMax()),                                 copy.copy(self.GetMax()),
710                                 copy.copy(self.GetProperties()),                                 group = self)
                                copy.copy(self.GetLabel()))  
711    
712      def GetMin(self):      def GetMin(self):
713          """Return the range's minimum value."""          """Return the range's minimum value."""
714          return self.min          return self.__min
715    
716      def SetMin(self, min):      def SetMin(self, min):
717          """Set the range's minimum value.          """Set the range's minimum value.
# Line 735  class ClassGroupRange(ClassGroup): Line 720  class ClassGroupRange(ClassGroup):
720                 maximum value. Use SetRange() to change both min and max values.                 maximum value. Use SetRange() to change both min and max values.
721          """          """
722            
723          self.SetRange(min, self.max)          self.SetRange(min, self.__max)
724    
725      def GetMax(self):      def GetMax(self):
726          """Return the range's maximum value."""          """Return the range's maximum value."""
# Line 747  class ClassGroupRange(ClassGroup): Line 732  class ClassGroupRange(ClassGroup):
732          max -- the new maximum. Note that this must be greater than the current          max -- the new maximum. Note that this must be greater than the current
733                 minimum value. Use SetRange() to change both min and max values.                 minimum value. Use SetRange() to change both min and max values.
734          """          """
735          self.SetRange(self.min, max)          self.SetRange(self.__min, max)
736    
737      def SetRange(self, min, max):      def SetRange(self, min, max):
738          """Set a new range.          """Set a new range.
# Line 761  class ClassGroupRange(ClassGroup): Line 746  class ClassGroupRange(ClassGroup):
746          if min >= max:          if min >= max:
747              raise ValueError(_("ClassGroupRange: %i(min) >= %i(max)!") %              raise ValueError(_("ClassGroupRange: %i(min) >= %i(max)!") %
748                               (min, max))                               (min, max))
749          self.min = min          self.__min = min
750          self.max = max          self.__max = max
751    
752      def GetRange(self):      def GetRange(self):
753          """Return the range as a tuple (min, max)"""          """Return the range as a tuple (min, max)"""
754          return (self.min, self.max)          return (self.__min, self.__max)
755    
756      def Matches(self, value):      def Matches(self, value):
757          """Determine if the given value lies with the current range.          """Determine if the given value lies with the current range.
# Line 774  class ClassGroupRange(ClassGroup): Line 759  class ClassGroupRange(ClassGroup):
759          The following check is used: min <= value < max.          The following check is used: min <= value < max.
760          """          """
761    
762          return self.min <= value < self.max          return self.__min <= value < self.__max
   
     def GetProperties(self):  
         """Return the Properties associated with this Group."""  
         return self.prop  
   
     def SetProperties(self, prop):  
         """Set the properties associated with this Group.  
   
         prop -- a ClassGroupProperties object. if prop is None,  
                 a default set of properties is created.  
         """  
         if prop is None: prop = ClassGroupProperties()  
         assert isinstance(prop, ClassGroupProperties)  
         self.prop = prop  
763    
764      def GetDisplayText(self):      def GetDisplayText(self):
765          label = self.GetLabel()          label = self.GetLabel()
# Line 798  class ClassGroupRange(ClassGroup): Line 769  class ClassGroupRange(ClassGroup):
769          return _("%s - %s") % (self.GetMin(), self.GetMax())          return _("%s - %s") % (self.GetMin(), self.GetMax())
770    
771      def __eq__(self, other):      def __eq__(self, other):
772          return isinstance(other, ClassGroupRange) \          return ClassGroup.__eq__(self, other) \
773              and self.GetProperties() == other.GetProperties() \              and isinstance(other, ClassGroupRange) \
774              and self.GetRange() == other.GetRange()              and self.__min == other.__min \
775                and self.__max == other.__max
     def __ne__(self, other):  
         return not self.__eq__(other)  
776    
777  class ClassGroupMap(ClassGroup):  class ClassGroupMap(ClassGroup):
778      """Currently, this class is not used."""      """Currently, this class is not used."""

Legend:
Removed from v.627  
changed lines
  Added in v.678

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26