| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- """Undocumented Module"""
- __all__ = ['DirectScrollBar']
- from panda3d.core import *
- import DirectGuiGlobals as DGG
- from DirectFrame import *
- from DirectButton import *
- """
- import DirectScrollBar
- d = DirectScrollBar(borderWidth=(0, 0))
- """
- class DirectScrollBar(DirectFrame):
- """
- DirectScrollBar -- a widget which represents a scroll bar the user can
- use for paging through a large document or panel.
- """
- def __init__(self, parent = None, **kw):
- optiondefs = (
- # Define type of DirectGuiWidget
- ('pgFunc', PGSliderBar, None),
- ('state', DGG.NORMAL, None),
- ('frameColor', (0.6, 0.6, 0.6, 1), None),
- ('range', (0, 1), self.setRange),
- ('value', 0, self.__setValue),
- ('scrollSize', 0.01, self.setScrollSize),
- ('pageSize', 0.1, self.setPageSize),
- ('orientation', DGG.HORIZONTAL, self.setOrientation),
- ('manageButtons', 1, self.setManageButtons),
- ('resizeThumb', 1, self.setResizeThumb),
- # Function to be called repeatedly as the bar is scrolled
- ('command', None, None),
- ('extraArgs', [], None),
- )
- if kw.get('orientation') in (DGG.VERTICAL, DGG.VERTICAL_INVERTED):
- # These are the default options for a vertical layout.
- optiondefs += (
- ('frameSize', (-0.04, 0.04, -0.5, 0.5), None),
- )
- else:
- # These are the default options for a horizontal layout.
- optiondefs += (
- ('frameSize', (-0.5, 0.5, -0.04, 0.04), None),
- )
- # Merge keyword options with default options
- self.defineoptions(kw, optiondefs)
- # Initialize superclasses
- DirectFrame.__init__(self, parent)
- self.thumb = self.createcomponent(
- "thumb", (), None,
- DirectButton, (self,),
- borderWidth = self['borderWidth'])
- self.incButton = self.createcomponent(
- "incButton", (), None,
- DirectButton, (self,),
- borderWidth = self['borderWidth'])
- self.decButton = self.createcomponent(
- "decButton", (), None,
- DirectButton, (self,),
- borderWidth = self['borderWidth'])
- if self.decButton['frameSize'] == None and \
- self.decButton.bounds == [0.0, 0.0, 0.0, 0.0]:
- f = self['frameSize']
- if self['orientation'] == DGG.HORIZONTAL:
- self.decButton['frameSize'] = (f[0]*0.05, f[1]*0.05, f[2], f[3])
- else:
- self.decButton['frameSize'] = (f[0], f[1], f[2]*0.05, f[3]*0.05)
- if self.incButton['frameSize'] == None and \
- self.incButton.bounds == [0.0, 0.0, 0.0, 0.0]:
- f = self['frameSize']
- if self['orientation'] == DGG.HORIZONTAL:
- self.incButton['frameSize'] = (f[0]*0.05, f[1]*0.05, f[2], f[3])
- else:
- self.incButton['frameSize'] = (f[0], f[1], f[2]*0.05, f[3]*0.05)
- self.guiItem.setThumbButton(self.thumb.guiItem)
- self.guiItem.setLeftButton(self.decButton.guiItem)
- self.guiItem.setRightButton(self.incButton.guiItem)
- # Bind command function
- self.bind(DGG.ADJUST, self.commandFunc)
- # Call option initialization functions
- self.initialiseoptions(DirectScrollBar)
- def setRange(self):
- # Try to preserve the value across a setRange call.
- v = self['value']
- r = self['range']
- self.guiItem.setRange(r[0], r[1])
- self['value'] = v
- def __setValue(self):
- # This is the internal function that is called when
- # self['value'] is directly assigned.
- self.guiItem.setValue(self['value'])
- def setValue(self, value):
- # This is the public function that is meant to be called by a
- # user that doesn't like to use (or doesn't understand) the
- # preferred interface of self['value'].
- self['value'] = value
- def getValue(self):
- return self.guiItem.getValue()
- def getRatio(self):
- return self.guiItem.getRatio()
- def setScrollSize(self):
- self.guiItem.setScrollSize(self['scrollSize'])
- def setPageSize(self):
- self.guiItem.setPageSize(self['pageSize'])
- def scrollStep(self, stepCount):
- """Scrolls the indicated number of steps forward. If
- stepCount is negative, scrolls backward."""
- self['value'] = self.guiItem.getValue() + self.guiItem.getScrollSize() * stepCount
- def scrollPage(self, pageCount):
- """Scrolls the indicated number of pages forward. If
- pageCount is negative, scrolls backward."""
- self['value'] = self.guiItem.getValue() + self.guiItem.getPageSize() * pageCount
- def setOrientation(self):
- if self['orientation'] == DGG.HORIZONTAL:
- self.guiItem.setAxis(Vec3(1, 0, 0))
- elif self['orientation'] == DGG.VERTICAL:
- self.guiItem.setAxis(Vec3(0, 0, -1))
- elif self['orientation'] == DGG.VERTICAL_INVERTED:
- self.guiItem.setAxis(Vec3(0, 0, 1))
- else:
- raise ValueError('Invalid value for orientation: %s' % (self['orientation']))
- def setManageButtons(self):
- self.guiItem.setManagePieces(self['manageButtons'])
- def setResizeThumb(self):
- self.guiItem.setResizeThumb(self['resizeThumb'])
- def destroy(self):
- self.thumb.destroy()
- del self.thumb
- self.incButton.destroy()
- del self.incButton
- self.decButton.destroy()
- del self.decButton
- DirectFrame.destroy(self)
- def commandFunc(self):
- # Store the updated value in self['value']
- self._optionInfo['value'][DGG._OPT_VALUE] = self.guiItem.getValue()
- if self['command']:
- apply(self['command'], self['extraArgs'])
|