mirror of
https://github.com/Sneed-Group/Poodletooth-iLand
synced 2024-12-26 05:02:31 -06:00
123 lines
4.1 KiB
Python
123 lines
4.1 KiB
Python
|
from extension_native_helpers import *
|
||
|
Dtool_PreloadDLL("panda3d.direct")
|
||
|
from panda3d.direct import *
|
||
|
|
||
|
from direct.directnotify.DirectNotifyGlobal import directNotify
|
||
|
notify = directNotify.newCategory("Interval")
|
||
|
Dtool_ObjectToDict(CInterval,"notify", notify)
|
||
|
del notify
|
||
|
#####################################################################
|
||
|
def setT(self, t):
|
||
|
# Overridden from the C++ function to call privPostEvent
|
||
|
# afterward. We do this by renaming the C++ function in
|
||
|
# FFIRename.
|
||
|
self.setT_Old(t)
|
||
|
self.privPostEvent()
|
||
|
|
||
|
Dtool_ObjectToDict(CInterval, "setT_Old", CInterval.setT)
|
||
|
Dtool_funcToMethod(setT, CInterval)
|
||
|
del setT
|
||
|
#####################################################################
|
||
|
|
||
|
def play(self, t0 = 0.0, duration = None, scale = 1.0):
|
||
|
self.notify.error("CInterval.play() is deprecated, use start() instead")
|
||
|
if duration: # None or 0 implies full length
|
||
|
self.start(t0, t0 + duration, scale)
|
||
|
else:
|
||
|
self.start(t0, -1, scale)
|
||
|
|
||
|
Dtool_funcToMethod(play, CInterval)
|
||
|
del play
|
||
|
#####################################################################
|
||
|
|
||
|
def stop(self):
|
||
|
self.notify.error("CInterval.stop() is deprecated, use finish() instead")
|
||
|
self.finish()
|
||
|
|
||
|
Dtool_funcToMethod(stop, CInterval)
|
||
|
del stop
|
||
|
#####################################################################
|
||
|
|
||
|
def setFinalT(self):
|
||
|
self.notify.error("CInterval.setFinalT() is deprecated, use finish() instead")
|
||
|
self.finish()
|
||
|
|
||
|
Dtool_funcToMethod(setFinalT, CInterval)
|
||
|
del setFinalT
|
||
|
#####################################################################
|
||
|
|
||
|
def privPostEvent(self):
|
||
|
# Call after calling any of the priv* methods to do any required
|
||
|
# Python finishing steps.
|
||
|
t = self.getT()
|
||
|
if hasattr(self, "setTHooks"):
|
||
|
for func in self.setTHooks:
|
||
|
func(t)
|
||
|
|
||
|
Dtool_funcToMethod(privPostEvent, CInterval)
|
||
|
del privPostEvent
|
||
|
#####################################################################
|
||
|
|
||
|
def popupControls(self, tl = None):
|
||
|
"""
|
||
|
Popup control panel for interval.
|
||
|
"""
|
||
|
from direct.showbase.TkGlobal import Toplevel, Frame, Button, LEFT, X, Pmw
|
||
|
import math
|
||
|
from direct.tkwidgets import EntryScale
|
||
|
if tl == None:
|
||
|
tl = Toplevel()
|
||
|
tl.title('Interval Controls')
|
||
|
outerFrame = Frame(tl)
|
||
|
def entryScaleCommand(t, s=self):
|
||
|
s.setT(t)
|
||
|
s.pause()
|
||
|
self.es = es = EntryScale.EntryScale(
|
||
|
outerFrame, text = self.getName(),
|
||
|
min = 0, max = math.floor(self.getDuration() * 100) / 100,
|
||
|
command = entryScaleCommand)
|
||
|
es.set(self.getT(), fCommand = 0)
|
||
|
es.pack(expand = 1, fill = X)
|
||
|
bf = Frame(outerFrame)
|
||
|
# Jump to start and end
|
||
|
def toStart(s=self, es=es):
|
||
|
s.setT(0.0)
|
||
|
s.pause()
|
||
|
def toEnd(s=self):
|
||
|
s.setT(s.getDuration())
|
||
|
s.pause()
|
||
|
jumpToStart = Button(bf, text = '<<', command = toStart)
|
||
|
# Stop/play buttons
|
||
|
def doPlay(s=self, es=es):
|
||
|
s.resume(es.get())
|
||
|
|
||
|
stop = Button(bf, text = 'Stop',
|
||
|
command = lambda s=self: s.pause())
|
||
|
play = Button(
|
||
|
bf, text = 'Play',
|
||
|
command = doPlay)
|
||
|
jumpToEnd = Button(bf, text = '>>', command = toEnd)
|
||
|
jumpToStart.pack(side = LEFT, expand = 1, fill = X)
|
||
|
play.pack(side = LEFT, expand = 1, fill = X)
|
||
|
stop.pack(side = LEFT, expand = 1, fill = X)
|
||
|
jumpToEnd.pack(side = LEFT, expand = 1, fill = X)
|
||
|
bf.pack(expand = 1, fill = X)
|
||
|
outerFrame.pack(expand = 1, fill = X)
|
||
|
# Add function to update slider during setT calls
|
||
|
def update(t, es=es):
|
||
|
es.set(t, fCommand = 0)
|
||
|
if not hasattr(self, "setTHooks"):
|
||
|
self.setTHooks = []
|
||
|
self.setTHooks.append(update)
|
||
|
self.setWantsTCallback(1)
|
||
|
# Clear out function on destroy
|
||
|
def onDestroy(e, s=self, u=update):
|
||
|
if u in s.setTHooks:
|
||
|
s.setTHooks.remove(u)
|
||
|
tl.bind('<Destroy>', onDestroy)
|
||
|
|
||
|
Dtool_funcToMethod(popupControls, CInterval)
|
||
|
del popupControls
|
||
|
#####################################################################
|
||
|
|