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

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

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

revision 635 by jonathan, Wed Apr 9 15:42:25 2003 UTC revision 728 by jonathan, Thu Apr 24 16:06:28 2003 UTC
# Line 5  Line 5 
5  # This program is free software under the GPL (>=v2)  # This program is free software under the GPL (>=v2)
6  # Read the file COPYING coming with Thuban for details.  # Read the file COPYING coming with Thuban for details.
7    
8    import sys
9    
10  from Thuban import _  from Thuban import _
11    
12  from wxPython.wx import *  from wxPython.wx import *
# Line 19  from Thuban.Model.color import Color Line 21  from Thuban.Model.color import Color
21    
22  import classifier  import classifier
23    
24    import resource
25    
26  from Thuban.common import Str2Num  from Thuban.common import Str2Num
27    
28  ID_CLASSGEN_GEN = 4001  ID_CLASSGEN_GEN = 4001
# Line 26  ID_CLASSGEN_CLOSE = 4002 Line 30  ID_CLASSGEN_CLOSE = 4002
30  ID_CLASSGEN_GENCOMBO = 4007  ID_CLASSGEN_GENCOMBO = 4007
31  ID_CLASSGEN_PROPCOMBO = 4008  ID_CLASSGEN_PROPCOMBO = 4008
32    
33    USEALL_BMP  = "group_use_all"
34    USE_BMP     = "group_use"
35    USENOT_BMP  = "group_use_not"
36    USENONE_BMP = "group_use_none"
37    
38  GENCOMBOSTR_UNIFORM = _("Uniform Distribution")  GENCOMBOSTR_UNIFORM = _("Uniform Distribution")
39  GENCOMBOSTR_UNIQUE = _("Unique Values")  GENCOMBOSTR_UNIQUE = _("Unique Values")
40    
41  PROPCOMBOSTR_CUSTOM = _("Custom Ramp")  PROPCOMBOSTR_CUSTOM     = _("Custom Ramp")
42  PROPCOMBOSTR_RED    = _("Red Ramp")  PROPCOMBOSTR_GREY       = _("Grey Ramp")
43  PROPCOMBOSTR_GREEN  = _("Green Ramp")  PROPCOMBOSTR_RED        = _("Red Ramp")
44  PROPCOMBOSTR_BLUE   = _("Blue Ramp")  PROPCOMBOSTR_GREEN      = _("Green Ramp")
45    PROPCOMBOSTR_BLUE       = _("Blue Ramp")
46    PROPCOMBOSTR_HOT2COLD   = _("Hot-to-Cold Ramp")
47    
48  class ClassGenDialog(wxDialog):  class ClassGenDialog(wxDialog):
49                                                                                                                                                                    
# Line 70  class ClassGenDialog(wxDialog): Line 81  class ClassGenDialog(wxDialog):
81                    0, wxALL, 4)                    0, wxALL, 4)
82          sizer.Add(wxStaticText(          sizer.Add(wxStaticText(
83              self, -1,              self, -1,
84              _("Field Type: %s") % classifier.Classifier.type2string[self.type]),              _("Data Type: %s") % classifier.Classifier.type2string[self.type]),
85              0, wxALL, 4)              0, wxALL, 4)
86    
87          psizer = wxBoxSizer(wxHORIZONTAL)          psizer = wxBoxSizer(wxHORIZONTAL)
88          psizer.Add(wxStaticText(self, -1, _("Generate:")),          psizer.Add(wxStaticText(self, -1, _("Generate:")),
89              0, wxALIGN_CENTER_VERTICAL, 0)              0, wxALIGN_CENTER_VERTICAL, 0)
90    
91          self.genCombo = wxComboBox(self,          self.genChoice = wxChoice(self, ID_CLASSGEN_GENCOMBO)
92                                     ID_CLASSGEN_GENCOMBO,          psizer.Add(self.genChoice, 1, wxALL | wxGROW, 4)
93                                     "", style = wxCB_READONLY)          EVT_CHOICE(self, ID_CLASSGEN_GENCOMBO, self._OnGenTypeSelect)
         psizer.Add(self.genCombo, 1, wxALL | wxGROW, 4)  
         EVT_COMBOBOX(self, ID_CLASSGEN_GENCOMBO, self._OnGenTypeSelect)  
94    
95          sizer.Add(psizer, 0, wxALL | wxGROW, 4)          sizer.Add(psizer, 0, wxALL | wxGROW, 4)
96    
# Line 90  class ClassGenDialog(wxDialog): Line 99  class ClassGenDialog(wxDialog):
99          self.genPanel = None          self.genPanel = None
100    
101          panel = GenUniquePanel(self, layer, fieldName, self.type)          panel = GenUniquePanel(self, layer, fieldName, self.type)
102          self.genCombo.Append(GENCOMBOSTR_UNIQUE, panel)          self.genChoice.Append(GENCOMBOSTR_UNIQUE, panel)
103          sizer.Add(panel, 1, wxGROW | wxALL, 4)          sizer.Add(panel, 1, wxGROW | wxALL, 4)
104    
105          self.genPanel = panel          self.genPanel = panel
106    
107          if self.type in (FIELDTYPE_INT, FIELDTYPE_DOUBLE):          if self.type in (FIELDTYPE_INT, FIELDTYPE_DOUBLE):
108              panel = GenUniformPanel(self, layer, fieldName, self.type)              panel = GenUniformPanel(self, layer, fieldName, self.type)
109              self.genCombo.Append(GENCOMBOSTR_UNIFORM, panel)              self.genChoice.Append(GENCOMBOSTR_UNIFORM, panel)
110              sizer.Add(panel, 0, wxGROW | wxALL, 4)              sizer.Add(panel, 1, wxGROW | wxALL, 4)
111              sizer.Show(panel, False)              sizer.Show(panel, False)
112    
113            self.genChoice.SetSelection(0)
114    
115          #############          #############
116    
117          psizer = wxBoxSizer(wxHORIZONTAL)          psizer = wxBoxSizer(wxHORIZONTAL)
118          psizer.Add(wxStaticText(self, -1, _("Color Schemes:")),          psizer.Add(wxStaticText(self, -1, _("Color Scheme:")),
119              0, wxALIGN_CENTER_VERTICAL, 0)              0, wxALIGN_CENTER_VERTICAL, 0)
120    
121          self.propCombo = wxComboBox(self,          self.propCombo = wxChoice(self, ID_CLASSGEN_PROPCOMBO)
                                    ID_CLASSGEN_PROPCOMBO,  
                                    "", style = wxCB_READONLY)  
122          psizer.Add(self.propCombo, 1, wxALL | wxGROW, 4)          psizer.Add(self.propCombo, 1, wxALL | wxGROW, 4)
123          EVT_COMBOBOX(self, ID_CLASSGEN_PROPCOMBO, self._OnPropTypeSelect)          EVT_CHOICE(self, ID_CLASSGEN_PROPCOMBO, self._OnPropTypeSelect)
124          sizer.Add(psizer, 0, wxALL | wxGROW, 4)          sizer.Add(psizer, 0, wxALL | wxGROW, 4)
125    
126          #############          #############
# Line 121  class ClassGenDialog(wxDialog): Line 130  class ClassGenDialog(wxDialog):
130          sizer.Add(panel, 1, wxALL | wxGROW, 4)          sizer.Add(panel, 1, wxALL | wxGROW, 4)
131          sizer.Show(panel, False)          sizer.Show(panel, False)
132    
133            self.propCombo.Append(PROPCOMBOSTR_GREY,  GreyRamp())
134          self.propCombo.Append(PROPCOMBOSTR_RED,   RedRamp())          self.propCombo.Append(PROPCOMBOSTR_RED,   RedRamp())
135          self.propCombo.Append(PROPCOMBOSTR_GREEN, GreenRamp())          self.propCombo.Append(PROPCOMBOSTR_GREEN, GreenRamp())
136          self.propCombo.Append(PROPCOMBOSTR_BLUE,  BlueRamp())          self.propCombo.Append(PROPCOMBOSTR_BLUE,  BlueRamp())
137            self.propCombo.Append(PROPCOMBOSTR_HOT2COLD,  HotToColdRamp())
138          self.propCombo.Append(PROPCOMBOSTR_CUSTOM, panel)          self.propCombo.Append(PROPCOMBOSTR_CUSTOM, panel)
139    
140            self.propCombo.SetSelection(0)
141    
142    
143          #############          #############
# Line 151  class ClassGenDialog(wxDialog): Line 163  class ClassGenDialog(wxDialog):
163    
164      def _OnGenerate(self, event):      def _OnGenerate(self, event):
165    
166          index = self.genCombo.GetSelection()          index = self.genChoice.GetSelection()
167    
168          genSel = self.genCombo.GetString(index)          genSel = self.genChoice.GetString(index)
169          genPanel = self.genCombo.GetClientData(index)          genPanel = self.genChoice.GetClientData(index)
170    
171          propPanel = self.propPanel          propPanel = self.propPanel
172    
# Line 276  class GenUniformPanel(wxPanel): Line 288  class GenUniformPanel(wxPanel):
288          sizer = wxBoxSizer(wxHORIZONTAL)          sizer = wxBoxSizer(wxHORIZONTAL)
289    
290          sizer.Add(wxStaticText(self, -1, _("Number of Groups:")), 0, wxALL, 4)          sizer.Add(wxStaticText(self, -1, _("Number of Groups:")), 0, wxALL, 4)
291          self.numGroupsCtrl = wxSpinCtrl(self, ID_UNIFORM_NGROUPS, style=wxTE_RIGHT)          self.numGroupsCtrl = wxSpinCtrl(self, ID_UNIFORM_NGROUPS,
292                                            style=wxTE_RIGHT)
293          EVT_TEXT(self, ID_UNIFORM_NGROUPS, self._OnNumGroupsChanged)          EVT_TEXT(self, ID_UNIFORM_NGROUPS, self._OnNumGroupsChanged)
294          EVT_SPINCTRL(self, ID_UNIFORM_NGROUPS, self._OnNumGroupsChanged)          EVT_SPINCTRL(self, ID_UNIFORM_NGROUPS, self._OnNumGroupsChanged)
295          sizer.Add(self.numGroupsCtrl, 1, wxALL, 4)          sizer.Add(self.numGroupsCtrl, 1, wxALL, 4)
# Line 297  class GenUniformPanel(wxPanel): Line 310  class GenUniformPanel(wxPanel):
310          self.numGroupsChanging = False          self.numGroupsChanging = False
311          self.steppingChanging = False          self.steppingChanging = False
312    
313          self.numGroupsCtrl.SetRange(1, 100)          self.numGroupsCtrl.SetRange(1, sys.maxint)
314    
315          self.numGroupsCtrl.SetValue(1)          self.numGroupsCtrl.SetValue(1)
316          self.stepCtrl.SetValue("1")          self.stepCtrl.SetValue("1")
# Line 347  class GenUniformPanel(wxPanel): Line 360  class GenUniformPanel(wxPanel):
360          self.numGroupsCtrl.Enable(on)          self.numGroupsCtrl.Enable(on)
361          self.stepCtrl.Enable(on)          self.stepCtrl.Enable(on)
362    
         if on:  
             self.numGroupsCtrl.SetRange(1, abs(max - min) / 0.001)  
   
363          ngroups = self.GetNumGroups()          ngroups = self.GetNumGroups()
364    
365          if ngroups is not None  \          if ngroups is not None  \
# Line 380  class GenUniformPanel(wxPanel): Line 390  class GenUniformPanel(wxPanel):
390          min = self.GetMin()          min = self.GetMin()
391          max = self.GetMax()          max = self.GetMax()
392    
         if ngroups >= self.numGroupsCtrl.GetMax():  
             self.numGroupsCtrl.SetRange(1, ngroups + 1)  
   
393          if ngroups is not None  \          if ngroups is not None  \
394              and min is not None \              and min is not None \
395              and max is not None \              and max is not None \
# Line 499  ID_UNIQUE_DONTUSE = 4004 Line 506  ID_UNIQUE_DONTUSE = 4004
506  ID_UNIQUE_USENONE = 4005  ID_UNIQUE_USENONE = 4005
507  ID_UNIQUE_SORTAVAIL = 4006  ID_UNIQUE_SORTAVAIL = 4006
508  ID_UNIQUE_SORTUSE = 4007  ID_UNIQUE_SORTUSE = 4007
509    ID_UNIQUE_REVAVAIL = 4008
510    ID_UNIQUE_REVUSE = 4009
511    
512  class GenUniquePanel(wxPanel):  class GenUniquePanel(wxPanel):
513    
# Line 514  class GenUniquePanel(wxPanel): Line 523  class GenUniquePanel(wxPanel):
523                                      wxVERTICAL)                                      wxVERTICAL)
524    
525    
526            #bsizer = wxBoxSizer(wxVERTICAL)
527            topSizer.Add(wxButton(self, ID_UNIQUE_RETRIEVE,
528                                _("Retrieve From Table")),
529                       0, wxALL | wxALIGN_RIGHT, 4)
530    
531            EVT_BUTTON(self, ID_UNIQUE_RETRIEVE, self._OnRetrieve)
532    
533            #topSizer.Add(bsizer, 0, wxALL, 4)
534    
535          sizer = wxBoxSizer(wxHORIZONTAL)          sizer = wxBoxSizer(wxHORIZONTAL)
536    
537          self.dataList = []          self.dataList = []
# Line 525  class GenUniquePanel(wxPanel): Line 543  class GenUniquePanel(wxPanel):
543          self.list_avail_data = []          self.list_avail_data = []
544          psizer.Add(self.list_avail, 1, wxGROW, 0)          psizer.Add(self.list_avail, 1, wxGROW, 0)
545    
546          psizer.Add(wxButton(self, ID_UNIQUE_SORTAVAIL, _("Sort")))          bsizer = wxBoxSizer(wxHORIZONTAL)
547            bsizer.Add(wxButton(self, ID_UNIQUE_SORTAVAIL, _("Sort")))
548            EVT_BUTTON(self, ID_UNIQUE_SORTAVAIL, self._OnSortList)
549    
550          EVT_BUTTON(self, ID_UNIQUE_SORTAVAIL, self._OnSortAvailList)          bsizer.Add(wxButton(self, ID_UNIQUE_REVAVAIL, _("Reverse")))
551            EVT_BUTTON(self, ID_UNIQUE_REVAVAIL, self._OnReverseList)
552    
553            psizer.Add(bsizer, 0, wxGROW, 0)
554          sizer.Add(psizer, 1, wxGROW, 0)          sizer.Add(psizer, 1, wxGROW, 0)
555    
556                    
557          bsizer = wxBoxSizer(wxVERTICAL)          bsizer = wxBoxSizer(wxVERTICAL)
558          bsizer.Add(wxButton(self, ID_UNIQUE_USEALL, _("Use All")),  
559            bmp = resource.GetBitmapResource(USEALL_BMP, wxBITMAP_TYPE_XPM)
560            bsizer.Add(wxBitmapButton(self, ID_UNIQUE_USEALL, bmp),
561                     0, wxGROW | wxALL, 4)                     0, wxGROW | wxALL, 4)
562          bsizer.Add(wxButton(self, ID_UNIQUE_USE, _("Use >>")),          bmp = resource.GetBitmapResource(USE_BMP, wxBITMAP_TYPE_XPM)
563            bsizer.Add(wxBitmapButton(self, ID_UNIQUE_USE, bmp),
564                     0, wxGROW | wxALL, 4)                     0, wxGROW | wxALL, 4)
565          bsizer.Add(wxButton(self, ID_UNIQUE_DONTUSE, _("<< Don't Use")),          bmp = resource.GetBitmapResource(USENOT_BMP, wxBITMAP_TYPE_XPM)
566            bsizer.Add(wxBitmapButton(self, ID_UNIQUE_DONTUSE, bmp),
567                     0, wxGROW | wxALL, 4)                     0, wxGROW | wxALL, 4)
568          bsizer.Add(wxButton(self, ID_UNIQUE_USENONE, _("Use None")),          bmp = resource.GetBitmapResource(USENONE_BMP, wxBITMAP_TYPE_XPM)
569            bsizer.Add(wxBitmapButton(self, ID_UNIQUE_USENONE, bmp),
570                     0, wxGROW | wxALL, 4)                     0, wxGROW | wxALL, 4)
571    
572          EVT_BUTTON(self, ID_UNIQUE_USEALL, self._OnUseAll)          EVT_BUTTON(self, ID_UNIQUE_USEALL, self._OnUseAll)
# Line 556  class GenUniquePanel(wxPanel): Line 583  class GenUniquePanel(wxPanel):
583          self.list_use_data = []          self.list_use_data = []
584          psizer.Add(self.list_use, 1, wxGROW, 0)          psizer.Add(self.list_use, 1, wxGROW, 0)
585    
586          psizer.Add(wxButton(self, ID_UNIQUE_SORTUSE, _("Sort")))          bsizer = wxBoxSizer(wxHORIZONTAL)
587            bsizer.Add(wxButton(self, ID_UNIQUE_SORTUSE, _("Sort")))
588          EVT_BUTTON(self, ID_UNIQUE_SORTUSE, self._OnSortUseList)          EVT_BUTTON(self, ID_UNIQUE_SORTUSE, self._OnSortList)
589    
590          sizer.Add(psizer, 1, wxGROW, 0)          bsizer.Add(wxButton(self, ID_UNIQUE_REVUSE, _("Reverse")))
591            EVT_BUTTON(self, ID_UNIQUE_REVUSE, self._OnReverseList)
592    
593          bsizer = wxBoxSizer(wxVERTICAL)          psizer.Add(bsizer, 0, wxGROW, 0)
         bsizer.Add(wxButton(self, ID_UNIQUE_RETRIEVE,  
                             _("Retrieve From Table")),  
                    0, wxGROW | wxALL, 4)  
594    
595          EVT_BUTTON(self, ID_UNIQUE_RETRIEVE, self._OnRetrieve)          sizer.Add(psizer, 1, wxGROW, 0)
596    
         sizer.Add(bsizer, 0, wxALL, 4)  
597    
598          topSizer.Add(sizer, 1, wxGROW, 0)          topSizer.Add(sizer, 1, wxGROW, 0)
599    
# Line 590  class GenUniquePanel(wxPanel): Line 614  class GenUniquePanel(wxPanel):
614              list.append(self.dataList[self.list_use.GetItemData(i)])              list.append(self.dataList[self.list_use.GetItemData(i)])
615          return list          return list
616    
617      def _OnSortAvailList(self, event):      def _OnSortList(self, event):
618          self.list_avail.SortItems(lambda i1, i2:          id = event.GetId()
619                                      cmp(self.dataList[i1],  
620                                          self.dataList[i2]))          if id == ID_UNIQUE_SORTUSE:
621                list = self.list_use
622      def _OnSortUseList(self, event):          else:
623          self.list_use.SortItems(lambda i1, i2:              list = self.list_avail
624                                      cmp(self.dataList[i1],  
625                                          self.dataList[i2]))          list.SortItems(lambda i1, i2: cmp(self.dataList[i1],
626                                              self.dataList[i2]))
627    
628        def _OnReverseList(self, event):
629            id = event.GetId()
630    
631            if id == ID_UNIQUE_REVUSE:
632                list = self.list_use
633            else:
634                list = self.list_avail
635    
636            #
637            # always returning 1 reverses the list
638            #
639            list.SortItems(lambda i1, i2: 1)
640    
641      def _OnRetrieve(self, event):      def _OnRetrieve(self, event):
642          self.list_use.DeleteAllItems()          self.list_use.DeleteAllItems()
# Line 621  class GenUniquePanel(wxPanel): Line 659  class GenUniquePanel(wxPanel):
659              self.__MoveListItem(0, self.list_avail, self.list_use)              self.__MoveListItem(0, self.list_avail, self.list_use)
660    
661      def _OnUse(self, event):      def _OnUse(self, event):
         print "_OnUse"  
662          self.__MoveSelectedItems(self.list_avail, self.list_use)          self.__MoveSelectedItems(self.list_avail, self.list_use)
663    
664      def _OnDontUse(self, event):      def _OnDontUse(self, event):
         print "_OnDontUse"  
665          self.__MoveSelectedItems(self.list_use, self.list_avail)          self.__MoveSelectedItems(self.list_use, self.list_avail)
666    
667      def _OnUseNone(self, event):      def _OnUseNone(self, event):
         print "_OnUseNone"  
668    
669          for i in range(self.list_use.GetItemCount()):          for i in range(self.list_use.GetItemCount()):
670              self.__MoveListItem(0, self.list_use, self.list_avail)              self.__MoveListItem(0, self.list_use, self.list_avail)
# Line 695  class CustomRampPanel(wxPanel): Line 730  class CustomRampPanel(wxPanel):
730                        | wxALIGN_CENTER_VERTICAL, \                        | wxALIGN_CENTER_VERTICAL, \
731                     4)                     4)
732    
733            bmp = resource.GetBitmapResource(USE_BMP, wxBITMAP_TYPE_XPM)
734          bsizer = wxBoxSizer(wxVERTICAL)          bsizer = wxBoxSizer(wxVERTICAL)
735          bsizer.Add(wxButton(self, ID_CUSTOMRAMP_COPYSTART, _("Copy >>")),          bsizer.Add(wxBitmapButton(self, ID_CUSTOMRAMP_COPYSTART, bmp),
736                     0, wxGROW | wxALL, 4)                     0, wxGROW | wxALL, 4)
737          bsizer.Add(wxButton(self, ID_CUSTOMRAMP_COPYEND, _("<< Copy")),          bmp = resource.GetBitmapResource(USENOT_BMP, wxBITMAP_TYPE_XPM)
738            bsizer.Add(wxBitmapButton(self, ID_CUSTOMRAMP_COPYEND, bmp),
739                     0, wxGROW | wxALL, 4)                     0, wxGROW | wxALL, 4)
740    
741          topSizer.Add(bsizer,          topSizer.Add(bsizer,
# Line 969  class MonochromaticRamp(CustomRamp): Line 1006  class MonochromaticRamp(CustomRamp):
1006    
1007          CustomRamp.__init__(self, sp, ep)          CustomRamp.__init__(self, sp, ep)
1008    
1009    class GreyRamp(MonochromaticRamp):
1010        def __init__(self):
1011            MonochromaticRamp.__init__(self, Color(1, 1, 1), Color(0, 0, 0))
1012    
1013  class RedRamp(MonochromaticRamp):  class RedRamp(MonochromaticRamp):
1014      def __init__(self):      def __init__(self):
1015          MonochromaticRamp.__init__(self, Color(.2, 0, 0), Color(1, 0, 0))          MonochromaticRamp.__init__(self, Color(1, 1, 1), Color(.8, 0, 0))
1016    
1017  class GreenRamp(MonochromaticRamp):  class GreenRamp(MonochromaticRamp):
1018      def __init__(self):      def __init__(self):
1019          MonochromaticRamp.__init__(self, Color(0, .2, 0), Color(0, 1, 0))          MonochromaticRamp.__init__(self, Color(1, 1, 1), Color(0, .8, 0))
1020    
1021  class BlueRamp(MonochromaticRamp):  class BlueRamp(MonochromaticRamp):
1022      def __init__(self):      def __init__(self):
1023          MonochromaticRamp.__init__(self, Color(0, 0, .2), Color(0, 0, 1))          MonochromaticRamp.__init__(self, Color(1, 1, 1), Color(0, 0, .8))
1024    
1025    class HotToColdRamp:
1026    
1027        def __iter__(self):
1028            return self
1029            
1030        def GetRamp(self):
1031            return self
1032    
1033        def SetNumGroups(self, num):
1034            if num < 0:
1035                return False
1036    
1037            self.num = float(num)
1038            self.index = 0
1039    
1040            return True
1041    
1042        def next(self):
1043            if self.index == self.num:
1044                raise StopIteration
1045    
1046            clr = [1.0, 1.0, 1.0]
1047    
1048            if self.index < (.25 * self.num):
1049                clr[0] = 0
1050                clr[1] = 4 * self.index / self.num
1051            elif self.index < (.5 * self.num):
1052                clr[0] = 0
1053                clr[2] = 1 + 4 * (.25 * self.num - self.index) / self.num
1054            elif self.index < (.75 * self.num):
1055                clr[0] = 4 * (self.index - .5 * self.num) / self.num
1056                clr[2] = 0
1057            else:
1058                clr[1] = 1 + 4 * (.75 * self.num - self.index) / self.num
1059                clr[2] = 0
1060    
1061            self.index += 1
1062    
1063            prop = ClassGroupProperties()
1064            prop.SetLineColor(Color(clr[0], clr[1], clr[2]))
1065            prop.SetFill(Color(clr[0], clr[1], clr[2]))
1066    
1067            return prop
1068    
1069    #class Colors16Ramp:
1070    #
1071        #def __iter__(self):
1072            #return self
1073    #
1074        #def GetRamp(self):
1075            #return self
1076    #
1077        #def SetNumGroups(self, num):
1078            #if num < 0:
1079                #return False
1080    #
1081            #self.index = 0
1082    #
1083            #return True
1084    
1085        

Legend:
Removed from v.635  
changed lines
  Added in v.728

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26