Browse Source

Fix for autoscroll bug:

Greg Wiatroski 19 years ago
parent
commit
ab72021e6e
1 changed files with 15 additions and 10 deletions
  1. 15 10
      direct/src/gui/DirectScrolledList.py

+ 15 - 10
direct/src/gui/DirectScrolledList.py

@@ -109,10 +109,11 @@ class DirectScrolledList(DirectFrame):
 
 
         self.initialiseoptions(DirectScrolledList)
         self.initialiseoptions(DirectScrolledList)
         self.recordMaxHeight()
         self.recordMaxHeight()
-        #if len(self["items"]) > 0:
-        #    self.scrollTo(0)
         self.scrollTo(0)
         self.scrollTo(0)
 
 
+        # test
+        base.sl = self
+
     def setForceHeight(self):
     def setForceHeight(self):
         assert self.notify.debugStateCall(self)
         assert self.notify.debugStateCall(self)
         self.forceHeight = self["forceHeight"]
         self.forceHeight = self["forceHeight"]
@@ -157,7 +158,7 @@ class DirectScrolledList(DirectFrame):
 
 
     def scrollBy(self, delta):
     def scrollBy(self, delta):
         assert self.notify.debugStateCall(self)
         assert self.notify.debugStateCall(self)
-        # print "scrollBy[", delta,"]"
+        #print "scrollBy[", delta,"]"
         return self.scrollTo(self.index + delta)
         return self.scrollTo(self.index + delta)
 
 
     def getItemIndexForItemID(self, itemID):
     def getItemIndexForItemID(self, itemID):
@@ -169,13 +170,13 @@ class DirectScrolledList(DirectFrame):
             return 0
             return 0
 
 
         if(type(self["items"][0])!=types.InstanceType):
         if(type(self["items"][0])!=types.InstanceType):
-            print "warning: getItemIndexForItemID: cant find itemID for non-class list items!"
+            self.notify.warning("getItemIndexForItemID: cant find itemID for non-class list items!")
             return 0
             return 0
 
 
         for i in range(len(self["items"])):
         for i in range(len(self["items"])):
             if(self["items"][i].itemID == itemID):
             if(self["items"][i].itemID == itemID):
                 return i
                 return i
-        print "warning: getItemIndexForItemID: item not found!"
+        self.notify.warning("getItemIndexForItemID: item not found!")
         return 0
         return 0
 
 
     def scrollToItemID(self, itemID, centered=0):
     def scrollToItemID(self, itemID, centered=0):
@@ -185,7 +186,7 @@ class DirectScrolledList(DirectFrame):
     def scrollTo(self, index, centered=0):
     def scrollTo(self, index, centered=0):
         """ scrolls list so selected index is at top, or centered in box"""
         """ scrolls list so selected index is at top, or centered in box"""
         assert self.notify.debugStateCall(self)
         assert self.notify.debugStateCall(self)
-        # print "scrollTo[", index,"] called, len(self[items])=", len(self["items"])," self[numItemsVisible]=", self["numItemsVisible"]
+        #print "scrollTo[", index,"] called, len(self[items])=", len(self["items"])," self[numItemsVisible]=", self["numItemsVisible"]
         try:
         try:
             self["numItemsVisible"]
             self["numItemsVisible"]
         except:
         except:
@@ -211,16 +212,21 @@ class DirectScrolledList(DirectFrame):
         else:
         else:
             if (self.index <= 0):
             if (self.index <= 0):
                 self.index = 0
                 self.index = 0
+                self.__buttonUp(0)
                 self.decButton['state'] = DGG.DISABLED
                 self.decButton['state'] = DGG.DISABLED
                 self.incButton['state'] = DGG.NORMAL
                 self.incButton['state'] = DGG.NORMAL
                 ret = 0
                 ret = 0
             elif (self.index >= (numItemsTotal - numItemsVisible)):
             elif (self.index >= (numItemsTotal - numItemsVisible)):
                 self.index = numItemsTotal - numItemsVisible
                 self.index = numItemsTotal - numItemsVisible
                 # print "at list end, ", len(self["items"]),"  ", self["numItemsVisible"]
                 # print "at list end, ", len(self["items"]),"  ", self["numItemsVisible"]
+                self.__buttonUp(0)
                 self.incButton['state'] = DGG.DISABLED
                 self.incButton['state'] = DGG.DISABLED
                 self.decButton['state'] = DGG.NORMAL
                 self.decButton['state'] = DGG.NORMAL
                 ret = 0
                 ret = 0
             else:
             else:
+                # deal with an edge condition - make sure any tasks are removed from the disabled arrows.
+                if (self.incButton['state'] == DGG.DISABLED) or (self.decButton['state'] == DGG.DISABLED):
+                    self.__buttonUp(0)
                 self.incButton['state'] = DGG.NORMAL
                 self.incButton['state'] = DGG.NORMAL
                 self.decButton['state'] = DGG.NORMAL
                 self.decButton['state'] = DGG.NORMAL
                 ret = 1
                 ret = 1
@@ -270,7 +276,7 @@ class DirectScrolledList(DirectFrame):
             # If the item is a 'str', then it has not been created
             # If the item is a 'str', then it has not been created
             # Therefore, use the the function given to make it or
             # Therefore, use the the function given to make it or
             # just make it a frame
             # just make it a frame
-            print "Making " + str(item)
+            #print "Making " + str(item)
             if item.__class__.__name__ == 'str':
             if item.__class__.__name__ == 'str':
                 if self['itemMakeFunction']:
                 if self['itemMakeFunction']:
                     # If there is a function to create the item
                     # If there is a function to create the item
@@ -307,7 +313,6 @@ class DirectScrolledList(DirectFrame):
         self.scrollBy(task.delta)
         self.scrollBy(task.delta)
         taskMgr.add(task, self.taskName("scroll"))
         taskMgr.add(task, self.taskName("scroll"))
 
 
-
     def __decButtonDown(self, event):
     def __decButtonDown(self, event):
         assert self.notify.debugStateCall(self)
         assert self.notify.debugStateCall(self)
         task = Task(self.__scrollByTask)
         task = Task(self.__scrollByTask)
@@ -316,11 +321,11 @@ class DirectScrolledList(DirectFrame):
         task.delta = -1
         task.delta = -1
         self.scrollBy(task.delta)
         self.scrollBy(task.delta)
         taskMgr.add(task, self.taskName("scroll"))
         taskMgr.add(task, self.taskName("scroll"))
-
+        
     def __buttonUp(self, event):
     def __buttonUp(self, event):
         assert self.notify.debugStateCall(self)
         assert self.notify.debugStateCall(self)
         taskMgr.remove(self.taskName("scroll"))
         taskMgr.remove(self.taskName("scroll"))
-
+        
     def addItem(self, item, refresh=1):
     def addItem(self, item, refresh=1):
         """
         """
         Add this string and extraArg to the list
         Add this string and extraArg to the list