mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-04 10:54:24 -04:00
698 lines
35 KiB
Python
698 lines
35 KiB
Python
#################################################################
|
|
# controllerWindow.py
|
|
# Written by Yi-Hong Lin, yihhongl@andrew.cmu.edu, 2004
|
|
#################################################################
|
|
# Import Tkinter, Pmw, and the floater code from this directory tree.
|
|
from direct.tkwidgets.AppShell import *
|
|
from direct.showbase.TkGlobal import *
|
|
from direct.tkwidgets import VectorWidgets
|
|
from direct.tkwidgets import Floater
|
|
import string
|
|
|
|
# Define the Category
|
|
KEYBORAD = 'Keyboard-'
|
|
TRACKER = 'Tarcker-'
|
|
|
|
class controllerWindow(AppShell):
|
|
#################################################################
|
|
# This will open a talk window for user to set the control mechanism
|
|
# In here, user can choose to control what object by keyboard or other inputs.
|
|
#################################################################
|
|
|
|
# Override class variables
|
|
appname = 'Controller Panel'
|
|
frameWidth = 500
|
|
frameHeight = 500
|
|
|
|
widgetsDict = {} # category-id : widget obj
|
|
|
|
# setup the type of controller we handle here.
|
|
controllerList = ['Keyboard',
|
|
'Tracker']
|
|
|
|
# Default Keyboard setting
|
|
keyboardMapDict = {}
|
|
keyboardSpeedDict = {}
|
|
|
|
def __init__(self, listOfObj, controlType , dataList, parent = None, **kw):
|
|
if controlType == 'Keyboard':
|
|
self.nodePath = dataList[0] # Default setting -> mainly used for Keyboard control now.
|
|
self.nameOfNode = self.nodePath.getName()
|
|
self.controllType = 'Keyboard'
|
|
self.keyboardMapDict.clear()
|
|
self.keyboardMapDict = dataList[1]
|
|
self.keyboardSpeedDict.clear()
|
|
self.keyboardSpeedDict = dataList[2]
|
|
|
|
self.listOfObj = listOfObj
|
|
self.keepControl = False
|
|
|
|
INITOPT = Pmw.INITOPT
|
|
optiondefs = (
|
|
('title', self.appname, None),
|
|
)
|
|
self.defineoptions(kw, optiondefs)
|
|
|
|
# Initialize the superclass
|
|
AppShell.__init__(self)
|
|
|
|
# Execute option callbacks
|
|
self.initialiseoptions(controllerWindow)
|
|
|
|
self.parent.resizable(False,False) ## Disable the ability to resize for this Window.
|
|
|
|
def createInterface(self):
|
|
# Handle to the toplevels interior
|
|
interior = self.interior()
|
|
menuBar = self.menuBar
|
|
|
|
# We don't need menu bar here
|
|
self.menuBar.destroy()
|
|
|
|
# Create a frame to hold all stuff
|
|
mainFrame = Frame(interior)
|
|
|
|
# A comboBox to switch the controller
|
|
frame = Frame(mainFrame)
|
|
self.cotrollerTypeEntry = self.createcomponent(
|
|
'Controller Type', (), None,
|
|
Pmw.ComboBox, (frame,),
|
|
labelpos = W, label_text='Controller Type:', entry_width = 20,entry_state = DISABLED,
|
|
selectioncommand = self.setControllerType,
|
|
scrolledlist_items = self.controllerList)
|
|
self.cotrollerTypeEntry.pack(side=LEFT)
|
|
frame.pack(side=TOP, fill=X, expand=False, pady = 3)
|
|
self.cotrollerTypeEntry.selectitem('Keyboard', setentry=True)
|
|
|
|
self.inputZone = Pmw.Group(mainFrame, tag_pyclass = None)
|
|
self.inputZone.pack(fill='both',expand=1)
|
|
settingFrame = self.inputZone.interior()
|
|
|
|
###################################################
|
|
# Notebook pages for specific controller setting #
|
|
###################################################
|
|
self.contentWidge = self.createcomponent(
|
|
'scrolledFrame',
|
|
(), None,
|
|
Pmw.ScrolledFrame, (settingFrame,),
|
|
hull_width = 200, hull_height = 300,
|
|
usehullsize = 1)
|
|
self.contentFrame = self.contentWidge.component('frame')
|
|
self.contentWidge.pack(fill = 'both', expand = 1,padx = 3, pady = 5)
|
|
self.objNotebook = Pmw.NoteBook(self.contentFrame, tabpos = None,
|
|
borderwidth = 0)
|
|
keyboardPage = self.objNotebook.add('Keyboard')
|
|
tarckerPage = self.objNotebook.add('Tracker')
|
|
self.objNotebook.selectpage('Keyboard')
|
|
self.objNotebook.pack(side = TOP, fill='both',expand=False)
|
|
# Put this here so it isn't called right away
|
|
self.objNotebook['raisecommand'] = self.updateControlInfo
|
|
|
|
# Keyboard setting
|
|
assignFrame = Frame(keyboardPage)
|
|
|
|
Interior = Frame(assignFrame)
|
|
widget = self.createcomponent(
|
|
'Target Type', (), None,
|
|
Pmw.ComboBox, (Interior,),
|
|
labelpos = W, label_text='Target Object:', entry_width = 20, entry_state = DISABLED,
|
|
selectioncommand = self.setTargetObj,
|
|
scrolledlist_items = self.listOfObj)
|
|
widget.pack(side=LEFT, padx=3)
|
|
Interior.pack(side=TOP, fill=X, expand=True, pady = 5)
|
|
widget.selectitem(self.nameOfNode, setentry=True)
|
|
self.widgetsDict[KEYBORAD+'ObjList'] = widget
|
|
|
|
inputZone = Pmw.Group(assignFrame, tag_pyclass = None)
|
|
inputZone.pack(fill='both',expand=1)
|
|
settingFrame = inputZone.interior()
|
|
|
|
Interior = Frame(settingFrame)
|
|
widget = Label(Interior, text = 'Assign a Key For:').pack(side=LEFT, expand = False)
|
|
Interior.pack(side=TOP, fill=X, expand=True,pady = 6 )
|
|
|
|
Interior = Frame(settingFrame)
|
|
widget = Label(Interior, text = 'Forward :', width = 20, anchor = W).pack(side=LEFT, expand = False)
|
|
widget = self.createcomponent(
|
|
'Forward key', (), None,
|
|
Pmw.EntryField, (Interior,),
|
|
value = self.keyboardMapDict['KeyForward'],
|
|
labelpos = W, label_text='Key :', entry_width = 10)
|
|
widget.pack(side=LEFT, expand = False)
|
|
self.widgetsDict[KEYBORAD+'KeyForward'] = widget
|
|
widget = Label(Interior, text = ' ').pack(side=LEFT, expand = False)
|
|
widget = self.createcomponent(
|
|
'Forward Speed', (), None,
|
|
Pmw.EntryField, (Interior,),
|
|
value = self.keyboardSpeedDict['SpeedForward'],
|
|
labelpos = W, label_text='Speed :', entry_width = 10)
|
|
widget.pack(side=LEFT, expand = False)
|
|
self.widgetsDict[KEYBORAD+'SpeedForward'] = widget
|
|
widget = Label(Interior, text = 'Per Seceond').pack(side=LEFT, expand = False)
|
|
Interior.pack(side=TOP, fill=X, expand=True, pady = 4 )
|
|
|
|
Interior = Frame(settingFrame)
|
|
widget = Label(Interior, text = 'Backward :', width = 20, anchor = W).pack(side=LEFT, expand = False)
|
|
widget = self.createcomponent(
|
|
'Backward key', (), None,
|
|
Pmw.EntryField, (Interior,),
|
|
value = self.keyboardMapDict['KeyBackward'],
|
|
labelpos = W, label_text='Key :', entry_width = 10)
|
|
widget.pack(side=LEFT, expand = False)
|
|
self.widgetsDict[KEYBORAD+'KeyBackward'] = widget
|
|
widget = Label(Interior, text = ' ').pack(side=LEFT, expand = False)
|
|
widget = self.createcomponent(
|
|
'Backward Speed', (), None,
|
|
Pmw.EntryField, (Interior,),
|
|
value = self.keyboardSpeedDict['SpeedBackward'],
|
|
labelpos = W, label_text='Speed :', entry_width = 10)
|
|
widget.pack(side=LEFT, expand = False)
|
|
self.widgetsDict[KEYBORAD+'SpeedBackward'] = widget
|
|
widget = Label(Interior, text = 'Per Seceond').pack(side=LEFT, expand = False)
|
|
Interior.pack(side=TOP, fill=X, expand=True, pady = 4 )
|
|
|
|
Interior = Frame(settingFrame)
|
|
widget = Label(Interior, text = 'Right :', width = 20, anchor = W).pack(side=LEFT, expand = False)
|
|
widget = self.createcomponent(
|
|
'Right key', (), None,
|
|
Pmw.EntryField, (Interior,),
|
|
value = self.keyboardMapDict['KeyRight'],
|
|
labelpos = W, label_text='Key :', entry_width = 10)
|
|
widget.pack(side=LEFT, expand = False)
|
|
self.widgetsDict[KEYBORAD+'KeyRight'] = widget
|
|
widget = Label(Interior, text = ' ').pack(side=LEFT, expand = False)
|
|
widget = self.createcomponent(
|
|
'Right Speed', (), None,
|
|
Pmw.EntryField, (Interior,),
|
|
value = self.keyboardSpeedDict['SpeedRight'],
|
|
labelpos = W, label_text='Speed :', entry_width = 10)
|
|
widget.pack(side=LEFT, expand = False)
|
|
self.widgetsDict[KEYBORAD+'SpeedRight'] = widget
|
|
widget = Label(Interior, text = 'Per Seceond').pack(side=LEFT, expand = False)
|
|
Interior.pack(side=TOP, fill=X, expand=True, pady = 4 )
|
|
|
|
Interior = Frame(settingFrame)
|
|
widget = Label(Interior, text = 'Left :', width = 20, anchor = W).pack(side=LEFT, expand = False)
|
|
widget = self.createcomponent(
|
|
'Left key', (), None,
|
|
Pmw.EntryField, (Interior,),
|
|
value = self.keyboardMapDict['KeyLeft'],
|
|
labelpos = W, label_text='Key :', entry_width = 10)
|
|
widget.pack(side=LEFT, expand = False)
|
|
self.widgetsDict[KEYBORAD+'KeyLeft'] = widget
|
|
widget = Label(Interior, text = ' ').pack(side=LEFT, expand = False)
|
|
widget = self.createcomponent(
|
|
'Left Speed', (), None,
|
|
Pmw.EntryField, (Interior,),
|
|
value = self.keyboardSpeedDict['SpeedLeft'],
|
|
labelpos = W, label_text='Speed :', entry_width = 10)
|
|
widget.pack(side=LEFT, expand = False)
|
|
self.widgetsDict[KEYBORAD+'SpeedLeft'] = widget
|
|
widget = Label(Interior, text = 'Per Seceond').pack(side=LEFT, expand = False)
|
|
Interior.pack(side=TOP, fill=X, expand=True, pady = 4 )
|
|
|
|
Interior = Frame(settingFrame)
|
|
widget = Label(Interior, text = 'Up :', width = 20, anchor = W).pack(side=LEFT, expand = False)
|
|
widget = self.createcomponent(
|
|
'Up key', (), None,
|
|
Pmw.EntryField, (Interior,),
|
|
value = self.keyboardMapDict['KeyUp'],
|
|
labelpos = W, label_text='Key :', entry_width = 10)
|
|
widget.pack(side=LEFT, expand = False)
|
|
self.widgetsDict[KEYBORAD+'KeyUp'] = widget
|
|
widget = Label(Interior, text = ' ').pack(side=LEFT, expand = False)
|
|
widget = self.createcomponent(
|
|
'Up Speed', (), None,
|
|
Pmw.EntryField, (Interior,),
|
|
value = self.keyboardSpeedDict['SpeedUp'],
|
|
labelpos = W, label_text='Speed :', entry_width = 10)
|
|
widget.pack(side=LEFT, expand = False)
|
|
self.widgetsDict[KEYBORAD+'SpeedUp'] = widget
|
|
widget = Label(Interior, text = 'Per Seceond').pack(side=LEFT, expand = False)
|
|
Interior.pack(side=TOP, fill=X, expand=True, pady = 4 )
|
|
|
|
Interior = Frame(settingFrame)
|
|
widget = Label(Interior, text = 'Down :', width = 20, anchor = W).pack(side=LEFT, expand = False)
|
|
widget = self.createcomponent(
|
|
'Down key', (), None,
|
|
Pmw.EntryField, (Interior,),
|
|
value = self.keyboardMapDict['KeyDown'],
|
|
labelpos = W, label_text='Key :', entry_width = 10)
|
|
widget.pack(side=LEFT, expand = False)
|
|
self.widgetsDict[KEYBORAD+'KeyDown'] = widget
|
|
widget = Label(Interior, text = ' ').pack(side=LEFT, expand = False)
|
|
widget = self.createcomponent(
|
|
'Down Speed', (), None,
|
|
Pmw.EntryField, (Interior,),
|
|
value = self.keyboardSpeedDict['SpeedDown'],
|
|
labelpos = W, label_text='Speed :', entry_width = 10)
|
|
widget.pack(side=LEFT, expand = False)
|
|
self.widgetsDict[KEYBORAD+'SpeedDown'] = widget
|
|
widget = Label(Interior, text = 'Per Seceond').pack(side=LEFT, expand = False)
|
|
Interior.pack(side=TOP, fill=X, expand=True, pady = 4 )
|
|
|
|
Interior = Frame(settingFrame)
|
|
widget = Label(Interior, text = 'Turn Right:', width = 20, anchor = W).pack(side=LEFT, expand = False)
|
|
widget = self.createcomponent(
|
|
'Turn Right key', (), None,
|
|
Pmw.EntryField, (Interior,),
|
|
value = self.keyboardMapDict['KeyTurnRight'],
|
|
labelpos = W, label_text='Key :', entry_width = 10)
|
|
widget.pack(side=LEFT, expand = False)
|
|
self.widgetsDict[KEYBORAD+'KeyTurnRight'] = widget
|
|
widget = Label(Interior, text = ' ').pack(side=LEFT, expand = False)
|
|
widget = self.createcomponent(
|
|
'Turn Right Speed', (), None,
|
|
Pmw.EntryField, (Interior,),
|
|
value = self.keyboardSpeedDict['SpeedTurnRight'],
|
|
labelpos = W, label_text='Speed :', entry_width = 10)
|
|
widget.pack(side=LEFT, expand = False)
|
|
self.widgetsDict[KEYBORAD+'SpeedTurnRight'] = widget
|
|
widget = Label(Interior, text = 'Per Seceond').pack(side=LEFT, expand = False)
|
|
Interior.pack(side=TOP, fill=X, expand=True, pady = 4 )
|
|
|
|
Interior = Frame(settingFrame)
|
|
widget = Label(Interior, text = 'Turn Left :', width = 20, anchor = W).pack(side=LEFT, expand = False)
|
|
widget = self.createcomponent(
|
|
'Turn Left key', (), None,
|
|
Pmw.EntryField, (Interior,),
|
|
value = self.keyboardMapDict['KeyTurnLeft'],
|
|
labelpos = W, label_text='Key :', entry_width = 10)
|
|
widget.pack(side=LEFT, expand = False)
|
|
self.widgetsDict[KEYBORAD+'KeyTurnLeft'] = widget
|
|
widget = Label(Interior, text = ' ').pack(side=LEFT, expand = False)
|
|
widget = self.createcomponent(
|
|
'Turn Left Speed', (), None,
|
|
Pmw.EntryField, (Interior,),
|
|
value = self.keyboardSpeedDict['SpeedTurnLeft'],
|
|
labelpos = W, label_text='Speed :', entry_width = 10)
|
|
widget.pack(side=LEFT, expand = False)
|
|
self.widgetsDict[KEYBORAD+'SpeedTurnLeft'] = widget
|
|
widget = Label(Interior, text = 'Per Seceond').pack(side=LEFT, expand = False)
|
|
Interior.pack(side=TOP, fill=X, expand=True, pady = 4 )
|
|
|
|
Interior = Frame(settingFrame)
|
|
widget = Label(Interior, text = 'Turn UP :', width = 20, anchor = W).pack(side=LEFT, expand = False)
|
|
widget = self.createcomponent(
|
|
'Turn UP key', (), None,
|
|
Pmw.EntryField, (Interior,),
|
|
value = self.keyboardMapDict['KeyTurnUp'],
|
|
labelpos = W, label_text='Key :', entry_width = 10)
|
|
widget.pack(side=LEFT, expand = False)
|
|
self.widgetsDict[KEYBORAD+'KeyTurnUp'] = widget
|
|
widget = Label(Interior, text = ' ').pack(side=LEFT, expand = False)
|
|
widget = self.createcomponent(
|
|
'Turn UP Speed', (), None,
|
|
Pmw.EntryField, (Interior,),
|
|
value = self.keyboardSpeedDict['SpeedTurnUp'],
|
|
labelpos = W, label_text='Speed :', entry_width = 10)
|
|
widget.pack(side=LEFT, expand = False)
|
|
self.widgetsDict[KEYBORAD+'SpeedTurnUp'] = widget
|
|
widget = Label(Interior, text = 'Per Seceond').pack(side=LEFT, expand = False)
|
|
Interior.pack(side=TOP, fill=X, expand=True, pady = 4 )
|
|
|
|
Interior = Frame(settingFrame)
|
|
widget = Label(Interior, text = 'Turn Down :', width = 20, anchor = W).pack(side=LEFT, expand = False)
|
|
widget = self.createcomponent(
|
|
'Turn Down key', (), None,
|
|
Pmw.EntryField, (Interior,),
|
|
value = self.keyboardMapDict['KeyTurnDown'],
|
|
labelpos = W, label_text='Key :', entry_width = 10)
|
|
widget.pack(side=LEFT, expand = False)
|
|
self.widgetsDict[KEYBORAD+'KeyTurnDown'] = widget
|
|
widget = Label(Interior, text = ' ').pack(side=LEFT, expand = False)
|
|
widget = self.createcomponent(
|
|
'Turn Down Speed', (), None,
|
|
Pmw.EntryField, (Interior,),
|
|
value = self.keyboardSpeedDict['SpeedTurnDown'],
|
|
labelpos = W, label_text='Speed :', entry_width = 10)
|
|
widget.pack(side=LEFT, expand = False)
|
|
self.widgetsDict[KEYBORAD+'SpeedTurnDown'] = widget
|
|
widget = Label(Interior, text = 'Per Seceond').pack(side=LEFT, expand = False)
|
|
Interior.pack(side=TOP, fill=X, expand=True, pady = 4 )
|
|
|
|
Interior = Frame(settingFrame)
|
|
widget = Label(Interior, text = 'Roll Right:', width = 20, anchor = W).pack(side=LEFT, expand = False)
|
|
widget = self.createcomponent(
|
|
'Roll Right key', (), None,
|
|
Pmw.EntryField, (Interior,),
|
|
value = self.keyboardMapDict['KeyRollRight'],
|
|
labelpos = W, label_text='Key :', entry_width = 10)
|
|
widget.pack(side=LEFT, expand = False)
|
|
self.widgetsDict[KEYBORAD+'KeyRollRight'] = widget
|
|
widget = Label(Interior, text = ' ').pack(side=LEFT, expand = False)
|
|
widget = self.createcomponent(
|
|
'Roll Right Speed', (), None,
|
|
Pmw.EntryField, (Interior,),
|
|
value = self.keyboardSpeedDict['SpeedRollRight'],
|
|
labelpos = W, label_text='Speed :', entry_width = 10)
|
|
widget.pack(side=LEFT, expand = False)
|
|
self.widgetsDict[KEYBORAD+'SpeedRollRight'] = widget
|
|
widget = Label(Interior, text = 'Per Seceond').pack(side=LEFT, expand = False)
|
|
Interior.pack(side=TOP, fill=X, expand=True, pady = 4 )
|
|
|
|
Interior = Frame(settingFrame)
|
|
widget = Label(Interior, text = 'Roll Left :', width = 20, anchor = W).pack(side=LEFT, expand = False)
|
|
widget = self.createcomponent(
|
|
'Roll Left key', (), None,
|
|
Pmw.EntryField, (Interior,),
|
|
value = self.keyboardMapDict['KeyRollLeft'],
|
|
labelpos = W, label_text='Key :', entry_width = 10)
|
|
widget.pack(side=LEFT, expand = False)
|
|
self.widgetsDict[KEYBORAD+'KeyRollLeft'] = widget
|
|
widget = Label(Interior, text = ' ').pack(side=LEFT, expand = False)
|
|
widget = self.createcomponent(
|
|
'Roll Left Speed', (), None,
|
|
Pmw.EntryField, (Interior,),
|
|
value = self.keyboardSpeedDict['SpeedRollLeft'],
|
|
labelpos = W, label_text='Speed :', entry_width = 10)
|
|
widget.pack(side=LEFT, expand = False)
|
|
self.widgetsDict[KEYBORAD+'SpeedRollLeft'] = widget
|
|
widget = Label(Interior, text = 'Per Seceond').pack(side=LEFT, expand = False)
|
|
Interior.pack(side=TOP, fill=X, expand=True, pady = 4 )
|
|
|
|
Interior = Frame(settingFrame)
|
|
widget = Label(Interior, text = 'Scale UP :', width = 20, anchor = W).pack(side=LEFT, expand = False)
|
|
widget = self.createcomponent(
|
|
'Scale UP key', (), None,
|
|
Pmw.EntryField, (Interior,),
|
|
value = self.keyboardMapDict['KeyScaleUp'],
|
|
labelpos = W, label_text='Key :', entry_width = 10)
|
|
widget.pack(side=LEFT, expand = False)
|
|
self.widgetsDict[KEYBORAD+'KeyScaleUp'] = widget
|
|
widget = Label(Interior, text = ' ').pack(side=LEFT, expand = False)
|
|
widget = self.createcomponent(
|
|
'Scale UP Speed', (), None,
|
|
Pmw.EntryField, (Interior,),
|
|
value = self.keyboardSpeedDict['SpeedScaleUp'],
|
|
labelpos = W, label_text='Speed :', entry_width = 10)
|
|
widget.pack(side=LEFT, expand = False)
|
|
self.widgetsDict[KEYBORAD+'SpeedScaleUp'] = widget
|
|
widget = Label(Interior, text = 'Per Seceond').pack(side=LEFT, expand = False)
|
|
Interior.pack(side=TOP, fill=X, expand=True, pady = 4 )
|
|
|
|
Interior = Frame(settingFrame)
|
|
widget = Label(Interior, text = 'Scale Down:', width = 20, anchor = W).pack(side=LEFT, expand = False)
|
|
widget = self.createcomponent(
|
|
'Scale Down key', (), None,
|
|
Pmw.EntryField, (Interior,),
|
|
value = self.keyboardMapDict['KeyScaleDown'],
|
|
labelpos = W, label_text='Key :', entry_width = 10)
|
|
widget.pack(side=LEFT, expand = False)
|
|
self.widgetsDict[KEYBORAD+'KeyScaleDown'] = widget
|
|
widget = Label(Interior, text = ' ').pack(side=LEFT, expand = False)
|
|
widget = self.createcomponent(
|
|
'Scale Down Speed', (), None,
|
|
Pmw.EntryField, (Interior,),
|
|
value = self.keyboardSpeedDict['SpeedScaleDown'],
|
|
labelpos = W, label_text='Speed :', entry_width = 10)
|
|
widget.pack(side=LEFT, expand = False)
|
|
self.widgetsDict[KEYBORAD+'SpeedScaleDown'] = widget
|
|
widget = Label(Interior, text = 'Per Seceond').pack(side=LEFT, expand = False)
|
|
Interior.pack(side=TOP, fill=X, expand=True, pady = 4 )
|
|
|
|
Interior = Frame(settingFrame)
|
|
widget = Label(Interior, text = 'Scale X UP :', width = 20, anchor = W).pack(side=LEFT, expand = False)
|
|
widget = self.createcomponent(
|
|
'Scale X UP key', (), None,
|
|
Pmw.EntryField, (Interior,),
|
|
value = self.keyboardMapDict['KeyScaleXUp'],
|
|
labelpos = W, label_text='Key :', entry_width = 10)
|
|
widget.pack(side=LEFT, expand = False)
|
|
self.widgetsDict[KEYBORAD+'KeyScaleXUp'] = widget
|
|
widget = Label(Interior, text = ' ').pack(side=LEFT, expand = False)
|
|
widget = self.createcomponent(
|
|
'Scale X UP Speed', (), None,
|
|
Pmw.EntryField, (Interior,),
|
|
value = self.keyboardSpeedDict['SpeedScaleXUp'],
|
|
labelpos = W, label_text='Speed :', entry_width = 10)
|
|
widget.pack(side=LEFT, expand = False)
|
|
self.widgetsDict[KEYBORAD+'SpeedScaleXUp'] = widget
|
|
widget = Label(Interior, text = 'Per Seceond').pack(side=LEFT, expand = False)
|
|
Interior.pack(side=TOP, fill=X, expand=True, pady = 4 )
|
|
|
|
Interior = Frame(settingFrame)
|
|
widget = Label(Interior, text = 'Scale X Down:', width = 20, anchor = W).pack(side=LEFT, expand = False)
|
|
widget = self.createcomponent(
|
|
'Scale X Down key', (), None,
|
|
Pmw.EntryField, (Interior,),
|
|
value = self.keyboardMapDict['KeyScaleXDown'],
|
|
labelpos = W, label_text='Key :', entry_width = 10)
|
|
widget.pack(side=LEFT, expand = False)
|
|
self.widgetsDict[KEYBORAD+'KeyScaleXDown'] = widget
|
|
widget = Label(Interior, text = ' ').pack(side=LEFT, expand = False)
|
|
widget = self.createcomponent(
|
|
'Scale Down X Speed', (), None,
|
|
Pmw.EntryField, (Interior,),
|
|
value = self.keyboardSpeedDict['SpeedScaleXDown'],
|
|
labelpos = W, label_text='Speed :', entry_width = 10)
|
|
widget.pack(side=LEFT, expand = False)
|
|
self.widgetsDict[KEYBORAD+'SpeedScaleXDown'] = widget
|
|
widget = Label(Interior, text = 'Per Seceond').pack(side=LEFT, expand = False)
|
|
Interior.pack(side=TOP, fill=X, expand=True, pady = 4 )
|
|
|
|
Interior = Frame(settingFrame)
|
|
widget = Label(Interior, text = 'Scale Y UP :', width = 20, anchor = W).pack(side=LEFT, expand = False)
|
|
widget = self.createcomponent(
|
|
'Scale Y UP key', (), None,
|
|
Pmw.EntryField, (Interior,),
|
|
value = self.keyboardMapDict['KeyScaleYUp'],
|
|
labelpos = W, label_text='Key :', entry_width = 10)
|
|
widget.pack(side=LEFT, expand = False)
|
|
self.widgetsDict[KEYBORAD+'KeyScaleYUp'] = widget
|
|
widget = Label(Interior, text = ' ').pack(side=LEFT, expand = False)
|
|
widget = self.createcomponent(
|
|
'Scale Y UP Speed', (), None,
|
|
Pmw.EntryField, (Interior,),
|
|
value = self.keyboardSpeedDict['SpeedScaleYUp'],
|
|
labelpos = W, label_text='Speed :', entry_width = 10)
|
|
widget.pack(side=LEFT, expand = False)
|
|
self.widgetsDict[KEYBORAD+'SpeedScaleYUp'] = widget
|
|
widget = Label(Interior, text = 'Per Seceond').pack(side=LEFT, expand = False)
|
|
Interior.pack(side=TOP, fill=X, expand=True, pady = 4 )
|
|
|
|
Interior = Frame(settingFrame)
|
|
widget = Label(Interior, text = 'Scale Y Down:', width = 20, anchor = W).pack(side=LEFT, expand = False)
|
|
widget = self.createcomponent(
|
|
'Scale Y Down key', (), None,
|
|
Pmw.EntryField, (Interior,),
|
|
value = self.keyboardMapDict['KeyScaleYDown'],
|
|
labelpos = W, label_text='Key :', entry_width = 10)
|
|
widget.pack(side=LEFT, expand = False)
|
|
self.widgetsDict[KEYBORAD+'KeyScaleYDown'] = widget
|
|
widget = Label(Interior, text = ' ').pack(side=LEFT, expand = False)
|
|
widget = self.createcomponent(
|
|
'Scale Down XY Speed', (), None,
|
|
Pmw.EntryField, (Interior,),
|
|
value = self.keyboardSpeedDict['SpeedScaleYDown'],
|
|
labelpos = W, label_text='Speed :', entry_width = 10)
|
|
widget.pack(side=LEFT, expand = False)
|
|
self.widgetsDict[KEYBORAD+'SpeedScaleYDown'] = widget
|
|
widget = Label(Interior, text = 'Per Seceond').pack(side=LEFT, expand = False)
|
|
Interior.pack(side=TOP, fill=X, expand=True, pady = 4 )
|
|
|
|
Interior = Frame(settingFrame)
|
|
widget = Label(Interior, text = 'Scale Z UP :', width = 20, anchor = W).pack(side=LEFT, expand = False)
|
|
widget = self.createcomponent(
|
|
'Scale Z UP key', (), None,
|
|
Pmw.EntryField, (Interior,),
|
|
value = self.keyboardMapDict['KeyScaleZUp'],
|
|
labelpos = W, label_text='Key :', entry_width = 10)
|
|
widget.pack(side=LEFT, expand = False)
|
|
self.widgetsDict[KEYBORAD+'KeyScaleZUp'] = widget
|
|
widget = Label(Interior, text = ' ').pack(side=LEFT, expand = False)
|
|
widget = self.createcomponent(
|
|
'Scale Z UP Speed', (), None,
|
|
Pmw.EntryField, (Interior,),
|
|
value = self.keyboardSpeedDict['SpeedScaleZUp'],
|
|
labelpos = W, label_text='Speed :', entry_width = 10)
|
|
widget.pack(side=LEFT, expand = False)
|
|
self.widgetsDict[KEYBORAD+'SpeedScaleZUp'] = widget
|
|
widget = Label(Interior, text = 'Per Seceond').pack(side=LEFT, expand = False)
|
|
Interior.pack(side=TOP, fill=X, expand=True, pady = 4 )
|
|
|
|
Interior = Frame(settingFrame)
|
|
widget = Label(Interior, text = 'Scale Z Down:', width = 20, anchor = W).pack(side=LEFT, expand = False)
|
|
widget = self.createcomponent(
|
|
'Scale Z Down key', (), None,
|
|
Pmw.EntryField, (Interior,),
|
|
value = self.keyboardMapDict['KeyScaleZDown'],
|
|
labelpos = W, label_text='Key :', entry_width = 10)
|
|
widget.pack(side=LEFT, expand = False)
|
|
self.widgetsDict[KEYBORAD+'KeyScaleZDown'] = widget
|
|
widget = Label(Interior, text = ' ').pack(side=LEFT, expand = False)
|
|
widget = self.createcomponent(
|
|
'Scale Down Z Speed', (), None,
|
|
Pmw.EntryField, (Interior,),
|
|
value = self.keyboardSpeedDict['SpeedScaleZDown'],
|
|
labelpos = W, label_text='Speed :', entry_width = 10)
|
|
widget.pack(side=LEFT, expand = False)
|
|
self.widgetsDict[KEYBORAD+'SpeedScaleZDown'] = widget
|
|
widget = Label(Interior, text = 'Per Seceond').pack(side=LEFT, expand = False)
|
|
Interior.pack(side=TOP, fill=X, expand=True, pady = 4 )
|
|
|
|
assignFrame.pack(side=TOP, expand=True, fill = X)
|
|
keyboardPage.pack(side=TOP, expand=True, fill = X)
|
|
|
|
####################################################################
|
|
####################################################################
|
|
# End of Keyboard control page
|
|
####################################################################
|
|
####################################################################
|
|
# Pack the mainFrame
|
|
frame = Frame(mainFrame)
|
|
widget = Button(frame, text='OK', width = 13, command=self.ok_press).pack(side=RIGHT)
|
|
widget = Button(frame, text='Enable Control', width = 13, command=self.enableControl).pack(side=LEFT)
|
|
widget = Button(frame, text='Disable Control', width = 13, command=self.disableControl).pack(side=LEFT)
|
|
widget = Button(frame, text='Save & Keep', width = 13, command=self.saveKeepControl).pack(side=LEFT)
|
|
frame.pack(side = BOTTOM, expand=1, fill = X)
|
|
mainFrame.pack(expand=1, fill = BOTH)
|
|
|
|
def onDestroy(self, event):
|
|
# Check if user wish to keep the control after the window closed.
|
|
if not self.keepControl:
|
|
messenger.send('ControlW_controlDisable',[self.controllType])
|
|
messenger.send('ControlW_close')
|
|
'''
|
|
If you have open any thing, please rewrite here!
|
|
'''
|
|
pass
|
|
|
|
def ok_press(self):
|
|
####################################################################
|
|
# ok_press(self)
|
|
# After user clicked on "OK" button, this function will be called.
|
|
# This function will collect data from the panel and send it back to
|
|
# sceneEditor and close the window. It won't activate control at all.
|
|
####################################################################
|
|
if self.controllType=='Keyboard':
|
|
for index in self.keyboardMapDict:
|
|
self.keyboardMapDict[index] = self.widgetsDict['Keyboard-'+index].getvalue()
|
|
for index in self.keyboardSpeedDict:
|
|
self.keyboardSpeedDict[index] = float(self.widgetsDict['Keyboard-'+index].getvalue())
|
|
messenger.send('ControlW_controlSetting', ['Keyboard', [self.nodePath, self.keyboardMapDict, self.keyboardSpeedDict]])
|
|
self.quit()
|
|
return
|
|
|
|
def enableControl(self):
|
|
####################################################################
|
|
# enableControl(self)
|
|
# Call back function.
|
|
# THis function will be called each time when user clicks on the
|
|
# "Enable Control" button. This function will do pretty much
|
|
# the same thing with ok_press function, except that this function
|
|
# will activate the control process in sceneEditor.
|
|
# However, if user didn't click on the button "Keep ANd Save,"
|
|
# the control process will be terminated when user closed the panel.
|
|
####################################################################
|
|
if self.controllType=='Keyboard':
|
|
for index in self.keyboardMapDict:
|
|
self.keyboardMapDict[index] = self.widgetsDict['Keyboard-'+index].getvalue()
|
|
for index in self.keyboardSpeedDict:
|
|
self.keyboardSpeedDict[index] = float(self.widgetsDict['Keyboard-'+index].getvalue())
|
|
messenger.send('ControlW_controlEnable', ['Keyboard', [self.nodePath, self.keyboardMapDict, self.keyboardSpeedDict]])
|
|
return
|
|
|
|
def disableControl(self):
|
|
####################################################################
|
|
# disableControl(self)
|
|
# This function will send out a message to sceneEditor to stop the
|
|
# control task.
|
|
####################################################################
|
|
messenger.send('ControlW_controlDisable',[self.controllType])
|
|
return
|
|
|
|
def setControllerType(self, typeName = 'Keyboard'):
|
|
#################################################################
|
|
# setControllerType(self, typeName = 'Keyboard')
|
|
# Call back function
|
|
# This function will be called when user select the type of
|
|
# controller they want on the combo box on the panel.
|
|
# Basically, this function's job is to switch the notebook page to right one.
|
|
#################################################################
|
|
self.controllType = typeName
|
|
if self.controllType=='Keyboard':
|
|
self.objNotebook.selectpage('Keyboard')
|
|
elif self.controllType=='Tracker':
|
|
self.objNotebook.selectpage('Tracker')
|
|
|
|
return
|
|
|
|
def updateControlInfo(self, page=None):
|
|
#################################################################
|
|
# Nothing. Unlike in the lighting panel, we don't have to keep data
|
|
# once user switch the page.
|
|
#################################################################
|
|
return
|
|
|
|
def setTargetObj(self, name = None, tracker = None):
|
|
#################################################################
|
|
# setTargetObj(self, name = None)
|
|
# setup the target object we want to control
|
|
#################################################################
|
|
if tracker == None: # Call from Keyboard page.
|
|
if name=='camera':
|
|
self.nodePath = camera
|
|
else:
|
|
messenger.send('ControlW_require',[name])
|
|
return
|
|
|
|
def resetNameList(self, list, name = None, nodePath = None):
|
|
####################################################################
|
|
# resetNameList(self, list, name = None, nodePath = None)
|
|
# This function will be called be sceneEditor in order to reset the
|
|
# object list inside the panel.
|
|
# list here is a name list for all objects that can be set on control
|
|
# in the scene. If user has specify a name and a nodePath in, it will
|
|
# check if the name is equal to the name of current control target.
|
|
# If so, it will change the name showed on panel.
|
|
####################################################################
|
|
self.widgetsDict['Keyboard-ObjList'].setlist(list)
|
|
if name != None:
|
|
if self.nameOfNode == name:
|
|
self.nameOfNode = self.nodePath.getName()
|
|
self.widgetsDict['Keyboard-ObjList'].selectitem(self.nameOfNode, setentry=True)
|
|
return
|
|
|
|
def setNodePathIn(self, nodePath):
|
|
####################################################################
|
|
# setNodePathIn(self, nodePath)
|
|
# THis function will be called by sceneEditor.
|
|
# After we send out a message to sceneEditor in setTargetObj function,
|
|
# This function will be called by sceneEditor after we get the reference
|
|
# of target object from dataHolder.
|
|
# This function will keep the reference.
|
|
####################################################################
|
|
self.nodePath = nodePath
|
|
self.nameOfNode = self.nodePath.getName()
|
|
return
|
|
|
|
def saveKeepControl(self):
|
|
#################################################################
|
|
# saveKeepControl(self)
|
|
# When any time user has click on the "Save & Keep" button,
|
|
# This function will be called.
|
|
# This function will send out the message to sceneEditor to process
|
|
# the saving. Also, this function will change the "self.keepControl" flag.
|
|
# So, when user closes the window with control enabled, it will keep
|
|
# the control process runnning. otherwise program will disable the
|
|
# control automatically when panel has been closed.
|
|
#
|
|
# It doesn't mean that this function will automatically enable the
|
|
# control when user closed the window!!
|
|
# This flag will only decide that we will send out a "stopControl"
|
|
# message or not.
|
|
#
|
|
#################################################################
|
|
self.keepControl = True
|
|
if self.controllType=='Keyboard':
|
|
for index in self.keyboardMapDict:
|
|
self.keyboardMapDict[index] = self.widgetsDict['Keyboard-'+index].getvalue()
|
|
for index in self.keyboardSpeedDict:
|
|
self.keyboardSpeedDict[index] = float(self.widgetsDict['Keyboard-'+index].getvalue())
|
|
print self.nodePath
|
|
messenger.send('ControlW_saveSetting', ['Keyboard', [self.nodePath, self.keyboardMapDict, self.keyboardSpeedDict]])
|
|
return
|
|
|
|
|