controllerWindow.py 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697
  1. #################################################################
  2. # controllerWindow.py
  3. # Written by Yi-Hong Lin, [email protected], 2004
  4. #################################################################
  5. # Import Tkinter, Pmw, and the floater code from this directory tree.
  6. from direct.tkwidgets.AppShell import *
  7. from direct.showbase.TkGlobal import *
  8. from direct.tkwidgets import VectorWidgets
  9. from direct.tkwidgets import Floater
  10. import string
  11. # Define the Category
  12. KEYBORAD = 'Keyboard-'
  13. TRACKER = 'Tarcker-'
  14. class controllerWindow(AppShell):
  15. #################################################################
  16. # This will open a talk window for user to set the control mechanism
  17. # In here, user can choose to control what object by keyboard or other inputs.
  18. #################################################################
  19. # Override class variables
  20. appname = 'Controller Panel'
  21. frameWidth = 500
  22. frameHeight = 500
  23. widgetsDict = {} # category-id : widget obj
  24. # setup the type of controller we handle here.
  25. controllerList = ['Keyboard',
  26. 'Tracker']
  27. # Default Keyboard setting
  28. keyboardMapDict = {}
  29. keyboardSpeedDict = {}
  30. def __init__(self, listOfObj, controlType , dataList, parent = None, **kw):
  31. if controlType == 'Keyboard':
  32. self.nodePath = dataList[0] # Default setting -> mainly used for Keyboard control now.
  33. self.nameOfNode = self.nodePath.getName()
  34. self.controllType = 'Keyboard'
  35. self.keyboardMapDict.clear()
  36. self.keyboardMapDict = dataList[1]
  37. self.keyboardSpeedDict.clear()
  38. self.keyboardSpeedDict = dataList[2]
  39. self.listOfObj = listOfObj
  40. self.keepControl = False
  41. INITOPT = Pmw.INITOPT
  42. optiondefs = (
  43. ('title', self.appname, None),
  44. )
  45. self.defineoptions(kw, optiondefs)
  46. # Initialize the superclass
  47. AppShell.__init__(self)
  48. # Execute option callbacks
  49. self.initialiseoptions(controllerWindow)
  50. self.parent.resizable(False,False) ## Disable the ability to resize for this Window.
  51. def createInterface(self):
  52. # Handle to the toplevels interior
  53. interior = self.interior()
  54. menuBar = self.menuBar
  55. # We don't need menu bar here
  56. self.menuBar.destroy()
  57. # Create a frame to hold all stuff
  58. mainFrame = Frame(interior)
  59. # A comboBox to switch the controller
  60. frame = Frame(mainFrame)
  61. self.cotrollerTypeEntry = self.createcomponent(
  62. 'Controller Type', (), None,
  63. Pmw.ComboBox, (frame,),
  64. labelpos = W, label_text='Controller Type:', entry_width = 20,entry_state = DISABLED,
  65. selectioncommand = self.setControllerType,
  66. scrolledlist_items = self.controllerList)
  67. self.cotrollerTypeEntry.pack(side=LEFT)
  68. frame.pack(side=TOP, fill=X, expand=False, pady = 3)
  69. self.cotrollerTypeEntry.selectitem('Keyboard', setentry=True)
  70. self.inputZone = Pmw.Group(mainFrame, tag_pyclass = None)
  71. self.inputZone.pack(fill='both',expand=1)
  72. settingFrame = self.inputZone.interior()
  73. ###################################################
  74. # Notebook pages for specific controller setting #
  75. ###################################################
  76. self.contentWidge = self.createcomponent(
  77. 'scrolledFrame',
  78. (), None,
  79. Pmw.ScrolledFrame, (settingFrame,),
  80. hull_width = 200, hull_height = 300,
  81. usehullsize = 1)
  82. self.contentFrame = self.contentWidge.component('frame')
  83. self.contentWidge.pack(fill = 'both', expand = 1,padx = 3, pady = 5)
  84. self.objNotebook = Pmw.NoteBook(self.contentFrame, tabpos = None,
  85. borderwidth = 0)
  86. keyboardPage = self.objNotebook.add('Keyboard')
  87. tarckerPage = self.objNotebook.add('Tracker')
  88. self.objNotebook.selectpage('Keyboard')
  89. self.objNotebook.pack(side = TOP, fill='both',expand=False)
  90. # Put this here so it isn't called right away
  91. self.objNotebook['raisecommand'] = self.updateControlInfo
  92. # Keyboard setting
  93. assignFrame = Frame(keyboardPage)
  94. Interior = Frame(assignFrame)
  95. widget = self.createcomponent(
  96. 'Target Type', (), None,
  97. Pmw.ComboBox, (Interior,),
  98. labelpos = W, label_text='Target Object:', entry_width = 20, entry_state = DISABLED,
  99. selectioncommand = self.setTargetObj,
  100. scrolledlist_items = self.listOfObj)
  101. widget.pack(side=LEFT, padx=3)
  102. Interior.pack(side=TOP, fill=X, expand=True, pady = 5)
  103. widget.selectitem(self.nameOfNode, setentry=True)
  104. self.widgetsDict[KEYBORAD+'ObjList'] = widget
  105. inputZone = Pmw.Group(assignFrame, tag_pyclass = None)
  106. inputZone.pack(fill='both',expand=1)
  107. settingFrame = inputZone.interior()
  108. Interior = Frame(settingFrame)
  109. widget = Label(Interior, text = 'Assign a Key For:').pack(side=LEFT, expand = False)
  110. Interior.pack(side=TOP, fill=X, expand=True,pady = 6 )
  111. Interior = Frame(settingFrame)
  112. widget = Label(Interior, text = 'Forward :', width = 20, anchor = W).pack(side=LEFT, expand = False)
  113. widget = self.createcomponent(
  114. 'Forward key', (), None,
  115. Pmw.EntryField, (Interior,),
  116. value = self.keyboardMapDict['KeyForward'],
  117. labelpos = W, label_text='Key :', entry_width = 10)
  118. widget.pack(side=LEFT, expand = False)
  119. self.widgetsDict[KEYBORAD+'KeyForward'] = widget
  120. widget = Label(Interior, text = ' ').pack(side=LEFT, expand = False)
  121. widget = self.createcomponent(
  122. 'Forward Speed', (), None,
  123. Pmw.EntryField, (Interior,),
  124. value = self.keyboardSpeedDict['SpeedForward'],
  125. labelpos = W, label_text='Speed :', entry_width = 10)
  126. widget.pack(side=LEFT, expand = False)
  127. self.widgetsDict[KEYBORAD+'SpeedForward'] = widget
  128. widget = Label(Interior, text = 'Per Seceond').pack(side=LEFT, expand = False)
  129. Interior.pack(side=TOP, fill=X, expand=True, pady = 4 )
  130. Interior = Frame(settingFrame)
  131. widget = Label(Interior, text = 'Backward :', width = 20, anchor = W).pack(side=LEFT, expand = False)
  132. widget = self.createcomponent(
  133. 'Backward key', (), None,
  134. Pmw.EntryField, (Interior,),
  135. value = self.keyboardMapDict['KeyBackward'],
  136. labelpos = W, label_text='Key :', entry_width = 10)
  137. widget.pack(side=LEFT, expand = False)
  138. self.widgetsDict[KEYBORAD+'KeyBackward'] = widget
  139. widget = Label(Interior, text = ' ').pack(side=LEFT, expand = False)
  140. widget = self.createcomponent(
  141. 'Backward Speed', (), None,
  142. Pmw.EntryField, (Interior,),
  143. value = self.keyboardSpeedDict['SpeedBackward'],
  144. labelpos = W, label_text='Speed :', entry_width = 10)
  145. widget.pack(side=LEFT, expand = False)
  146. self.widgetsDict[KEYBORAD+'SpeedBackward'] = widget
  147. widget = Label(Interior, text = 'Per Seceond').pack(side=LEFT, expand = False)
  148. Interior.pack(side=TOP, fill=X, expand=True, pady = 4 )
  149. Interior = Frame(settingFrame)
  150. widget = Label(Interior, text = 'Right :', width = 20, anchor = W).pack(side=LEFT, expand = False)
  151. widget = self.createcomponent(
  152. 'Right key', (), None,
  153. Pmw.EntryField, (Interior,),
  154. value = self.keyboardMapDict['KeyRight'],
  155. labelpos = W, label_text='Key :', entry_width = 10)
  156. widget.pack(side=LEFT, expand = False)
  157. self.widgetsDict[KEYBORAD+'KeyRight'] = widget
  158. widget = Label(Interior, text = ' ').pack(side=LEFT, expand = False)
  159. widget = self.createcomponent(
  160. 'Right Speed', (), None,
  161. Pmw.EntryField, (Interior,),
  162. value = self.keyboardSpeedDict['SpeedRight'],
  163. labelpos = W, label_text='Speed :', entry_width = 10)
  164. widget.pack(side=LEFT, expand = False)
  165. self.widgetsDict[KEYBORAD+'SpeedRight'] = widget
  166. widget = Label(Interior, text = 'Per Seceond').pack(side=LEFT, expand = False)
  167. Interior.pack(side=TOP, fill=X, expand=True, pady = 4 )
  168. Interior = Frame(settingFrame)
  169. widget = Label(Interior, text = 'Left :', width = 20, anchor = W).pack(side=LEFT, expand = False)
  170. widget = self.createcomponent(
  171. 'Left key', (), None,
  172. Pmw.EntryField, (Interior,),
  173. value = self.keyboardMapDict['KeyLeft'],
  174. labelpos = W, label_text='Key :', entry_width = 10)
  175. widget.pack(side=LEFT, expand = False)
  176. self.widgetsDict[KEYBORAD+'KeyLeft'] = widget
  177. widget = Label(Interior, text = ' ').pack(side=LEFT, expand = False)
  178. widget = self.createcomponent(
  179. 'Left Speed', (), None,
  180. Pmw.EntryField, (Interior,),
  181. value = self.keyboardSpeedDict['SpeedLeft'],
  182. labelpos = W, label_text='Speed :', entry_width = 10)
  183. widget.pack(side=LEFT, expand = False)
  184. self.widgetsDict[KEYBORAD+'SpeedLeft'] = widget
  185. widget = Label(Interior, text = 'Per Seceond').pack(side=LEFT, expand = False)
  186. Interior.pack(side=TOP, fill=X, expand=True, pady = 4 )
  187. Interior = Frame(settingFrame)
  188. widget = Label(Interior, text = 'Up :', width = 20, anchor = W).pack(side=LEFT, expand = False)
  189. widget = self.createcomponent(
  190. 'Up key', (), None,
  191. Pmw.EntryField, (Interior,),
  192. value = self.keyboardMapDict['KeyUp'],
  193. labelpos = W, label_text='Key :', entry_width = 10)
  194. widget.pack(side=LEFT, expand = False)
  195. self.widgetsDict[KEYBORAD+'KeyUp'] = widget
  196. widget = Label(Interior, text = ' ').pack(side=LEFT, expand = False)
  197. widget = self.createcomponent(
  198. 'Up Speed', (), None,
  199. Pmw.EntryField, (Interior,),
  200. value = self.keyboardSpeedDict['SpeedUp'],
  201. labelpos = W, label_text='Speed :', entry_width = 10)
  202. widget.pack(side=LEFT, expand = False)
  203. self.widgetsDict[KEYBORAD+'SpeedUp'] = widget
  204. widget = Label(Interior, text = 'Per Seceond').pack(side=LEFT, expand = False)
  205. Interior.pack(side=TOP, fill=X, expand=True, pady = 4 )
  206. Interior = Frame(settingFrame)
  207. widget = Label(Interior, text = 'Down :', width = 20, anchor = W).pack(side=LEFT, expand = False)
  208. widget = self.createcomponent(
  209. 'Down key', (), None,
  210. Pmw.EntryField, (Interior,),
  211. value = self.keyboardMapDict['KeyDown'],
  212. labelpos = W, label_text='Key :', entry_width = 10)
  213. widget.pack(side=LEFT, expand = False)
  214. self.widgetsDict[KEYBORAD+'KeyDown'] = widget
  215. widget = Label(Interior, text = ' ').pack(side=LEFT, expand = False)
  216. widget = self.createcomponent(
  217. 'Down Speed', (), None,
  218. Pmw.EntryField, (Interior,),
  219. value = self.keyboardSpeedDict['SpeedDown'],
  220. labelpos = W, label_text='Speed :', entry_width = 10)
  221. widget.pack(side=LEFT, expand = False)
  222. self.widgetsDict[KEYBORAD+'SpeedDown'] = widget
  223. widget = Label(Interior, text = 'Per Seceond').pack(side=LEFT, expand = False)
  224. Interior.pack(side=TOP, fill=X, expand=True, pady = 4 )
  225. Interior = Frame(settingFrame)
  226. widget = Label(Interior, text = 'Turn Right:', width = 20, anchor = W).pack(side=LEFT, expand = False)
  227. widget = self.createcomponent(
  228. 'Turn Right key', (), None,
  229. Pmw.EntryField, (Interior,),
  230. value = self.keyboardMapDict['KeyTurnRight'],
  231. labelpos = W, label_text='Key :', entry_width = 10)
  232. widget.pack(side=LEFT, expand = False)
  233. self.widgetsDict[KEYBORAD+'KeyTurnRight'] = widget
  234. widget = Label(Interior, text = ' ').pack(side=LEFT, expand = False)
  235. widget = self.createcomponent(
  236. 'Turn Right Speed', (), None,
  237. Pmw.EntryField, (Interior,),
  238. value = self.keyboardSpeedDict['SpeedTurnRight'],
  239. labelpos = W, label_text='Speed :', entry_width = 10)
  240. widget.pack(side=LEFT, expand = False)
  241. self.widgetsDict[KEYBORAD+'SpeedTurnRight'] = widget
  242. widget = Label(Interior, text = 'Per Seceond').pack(side=LEFT, expand = False)
  243. Interior.pack(side=TOP, fill=X, expand=True, pady = 4 )
  244. Interior = Frame(settingFrame)
  245. widget = Label(Interior, text = 'Turn Left :', width = 20, anchor = W).pack(side=LEFT, expand = False)
  246. widget = self.createcomponent(
  247. 'Turn Left key', (), None,
  248. Pmw.EntryField, (Interior,),
  249. value = self.keyboardMapDict['KeyTurnLeft'],
  250. labelpos = W, label_text='Key :', entry_width = 10)
  251. widget.pack(side=LEFT, expand = False)
  252. self.widgetsDict[KEYBORAD+'KeyTurnLeft'] = widget
  253. widget = Label(Interior, text = ' ').pack(side=LEFT, expand = False)
  254. widget = self.createcomponent(
  255. 'Turn Left Speed', (), None,
  256. Pmw.EntryField, (Interior,),
  257. value = self.keyboardSpeedDict['SpeedTurnLeft'],
  258. labelpos = W, label_text='Speed :', entry_width = 10)
  259. widget.pack(side=LEFT, expand = False)
  260. self.widgetsDict[KEYBORAD+'SpeedTurnLeft'] = widget
  261. widget = Label(Interior, text = 'Per Seceond').pack(side=LEFT, expand = False)
  262. Interior.pack(side=TOP, fill=X, expand=True, pady = 4 )
  263. Interior = Frame(settingFrame)
  264. widget = Label(Interior, text = 'Turn UP :', width = 20, anchor = W).pack(side=LEFT, expand = False)
  265. widget = self.createcomponent(
  266. 'Turn UP key', (), None,
  267. Pmw.EntryField, (Interior,),
  268. value = self.keyboardMapDict['KeyTurnUp'],
  269. labelpos = W, label_text='Key :', entry_width = 10)
  270. widget.pack(side=LEFT, expand = False)
  271. self.widgetsDict[KEYBORAD+'KeyTurnUp'] = widget
  272. widget = Label(Interior, text = ' ').pack(side=LEFT, expand = False)
  273. widget = self.createcomponent(
  274. 'Turn UP Speed', (), None,
  275. Pmw.EntryField, (Interior,),
  276. value = self.keyboardSpeedDict['SpeedTurnUp'],
  277. labelpos = W, label_text='Speed :', entry_width = 10)
  278. widget.pack(side=LEFT, expand = False)
  279. self.widgetsDict[KEYBORAD+'SpeedTurnUp'] = widget
  280. widget = Label(Interior, text = 'Per Seceond').pack(side=LEFT, expand = False)
  281. Interior.pack(side=TOP, fill=X, expand=True, pady = 4 )
  282. Interior = Frame(settingFrame)
  283. widget = Label(Interior, text = 'Turn Down :', width = 20, anchor = W).pack(side=LEFT, expand = False)
  284. widget = self.createcomponent(
  285. 'Turn Down key', (), None,
  286. Pmw.EntryField, (Interior,),
  287. value = self.keyboardMapDict['KeyTurnDown'],
  288. labelpos = W, label_text='Key :', entry_width = 10)
  289. widget.pack(side=LEFT, expand = False)
  290. self.widgetsDict[KEYBORAD+'KeyTurnDown'] = widget
  291. widget = Label(Interior, text = ' ').pack(side=LEFT, expand = False)
  292. widget = self.createcomponent(
  293. 'Turn Down Speed', (), None,
  294. Pmw.EntryField, (Interior,),
  295. value = self.keyboardSpeedDict['SpeedTurnDown'],
  296. labelpos = W, label_text='Speed :', entry_width = 10)
  297. widget.pack(side=LEFT, expand = False)
  298. self.widgetsDict[KEYBORAD+'SpeedTurnDown'] = widget
  299. widget = Label(Interior, text = 'Per Seceond').pack(side=LEFT, expand = False)
  300. Interior.pack(side=TOP, fill=X, expand=True, pady = 4 )
  301. Interior = Frame(settingFrame)
  302. widget = Label(Interior, text = 'Roll Right:', width = 20, anchor = W).pack(side=LEFT, expand = False)
  303. widget = self.createcomponent(
  304. 'Roll Right key', (), None,
  305. Pmw.EntryField, (Interior,),
  306. value = self.keyboardMapDict['KeyRollRight'],
  307. labelpos = W, label_text='Key :', entry_width = 10)
  308. widget.pack(side=LEFT, expand = False)
  309. self.widgetsDict[KEYBORAD+'KeyRollRight'] = widget
  310. widget = Label(Interior, text = ' ').pack(side=LEFT, expand = False)
  311. widget = self.createcomponent(
  312. 'Roll Right Speed', (), None,
  313. Pmw.EntryField, (Interior,),
  314. value = self.keyboardSpeedDict['SpeedRollRight'],
  315. labelpos = W, label_text='Speed :', entry_width = 10)
  316. widget.pack(side=LEFT, expand = False)
  317. self.widgetsDict[KEYBORAD+'SpeedRollRight'] = widget
  318. widget = Label(Interior, text = 'Per Seceond').pack(side=LEFT, expand = False)
  319. Interior.pack(side=TOP, fill=X, expand=True, pady = 4 )
  320. Interior = Frame(settingFrame)
  321. widget = Label(Interior, text = 'Roll Left :', width = 20, anchor = W).pack(side=LEFT, expand = False)
  322. widget = self.createcomponent(
  323. 'Roll Left key', (), None,
  324. Pmw.EntryField, (Interior,),
  325. value = self.keyboardMapDict['KeyRollLeft'],
  326. labelpos = W, label_text='Key :', entry_width = 10)
  327. widget.pack(side=LEFT, expand = False)
  328. self.widgetsDict[KEYBORAD+'KeyRollLeft'] = widget
  329. widget = Label(Interior, text = ' ').pack(side=LEFT, expand = False)
  330. widget = self.createcomponent(
  331. 'Roll Left Speed', (), None,
  332. Pmw.EntryField, (Interior,),
  333. value = self.keyboardSpeedDict['SpeedRollLeft'],
  334. labelpos = W, label_text='Speed :', entry_width = 10)
  335. widget.pack(side=LEFT, expand = False)
  336. self.widgetsDict[KEYBORAD+'SpeedRollLeft'] = widget
  337. widget = Label(Interior, text = 'Per Seceond').pack(side=LEFT, expand = False)
  338. Interior.pack(side=TOP, fill=X, expand=True, pady = 4 )
  339. Interior = Frame(settingFrame)
  340. widget = Label(Interior, text = 'Scale UP :', width = 20, anchor = W).pack(side=LEFT, expand = False)
  341. widget = self.createcomponent(
  342. 'Scale UP key', (), None,
  343. Pmw.EntryField, (Interior,),
  344. value = self.keyboardMapDict['KeyScaleUp'],
  345. labelpos = W, label_text='Key :', entry_width = 10)
  346. widget.pack(side=LEFT, expand = False)
  347. self.widgetsDict[KEYBORAD+'KeyScaleUp'] = widget
  348. widget = Label(Interior, text = ' ').pack(side=LEFT, expand = False)
  349. widget = self.createcomponent(
  350. 'Scale UP Speed', (), None,
  351. Pmw.EntryField, (Interior,),
  352. value = self.keyboardSpeedDict['SpeedScaleUp'],
  353. labelpos = W, label_text='Speed :', entry_width = 10)
  354. widget.pack(side=LEFT, expand = False)
  355. self.widgetsDict[KEYBORAD+'SpeedScaleUp'] = widget
  356. widget = Label(Interior, text = 'Per Seceond').pack(side=LEFT, expand = False)
  357. Interior.pack(side=TOP, fill=X, expand=True, pady = 4 )
  358. Interior = Frame(settingFrame)
  359. widget = Label(Interior, text = 'Scale Down:', width = 20, anchor = W).pack(side=LEFT, expand = False)
  360. widget = self.createcomponent(
  361. 'Scale Down key', (), None,
  362. Pmw.EntryField, (Interior,),
  363. value = self.keyboardMapDict['KeyScaleDown'],
  364. labelpos = W, label_text='Key :', entry_width = 10)
  365. widget.pack(side=LEFT, expand = False)
  366. self.widgetsDict[KEYBORAD+'KeyScaleDown'] = widget
  367. widget = Label(Interior, text = ' ').pack(side=LEFT, expand = False)
  368. widget = self.createcomponent(
  369. 'Scale Down Speed', (), None,
  370. Pmw.EntryField, (Interior,),
  371. value = self.keyboardSpeedDict['SpeedScaleDown'],
  372. labelpos = W, label_text='Speed :', entry_width = 10)
  373. widget.pack(side=LEFT, expand = False)
  374. self.widgetsDict[KEYBORAD+'SpeedScaleDown'] = widget
  375. widget = Label(Interior, text = 'Per Seceond').pack(side=LEFT, expand = False)
  376. Interior.pack(side=TOP, fill=X, expand=True, pady = 4 )
  377. Interior = Frame(settingFrame)
  378. widget = Label(Interior, text = 'Scale X UP :', width = 20, anchor = W).pack(side=LEFT, expand = False)
  379. widget = self.createcomponent(
  380. 'Scale X UP key', (), None,
  381. Pmw.EntryField, (Interior,),
  382. value = self.keyboardMapDict['KeyScaleXUp'],
  383. labelpos = W, label_text='Key :', entry_width = 10)
  384. widget.pack(side=LEFT, expand = False)
  385. self.widgetsDict[KEYBORAD+'KeyScaleXUp'] = widget
  386. widget = Label(Interior, text = ' ').pack(side=LEFT, expand = False)
  387. widget = self.createcomponent(
  388. 'Scale X UP Speed', (), None,
  389. Pmw.EntryField, (Interior,),
  390. value = self.keyboardSpeedDict['SpeedScaleXUp'],
  391. labelpos = W, label_text='Speed :', entry_width = 10)
  392. widget.pack(side=LEFT, expand = False)
  393. self.widgetsDict[KEYBORAD+'SpeedScaleXUp'] = widget
  394. widget = Label(Interior, text = 'Per Seceond').pack(side=LEFT, expand = False)
  395. Interior.pack(side=TOP, fill=X, expand=True, pady = 4 )
  396. Interior = Frame(settingFrame)
  397. widget = Label(Interior, text = 'Scale X Down:', width = 20, anchor = W).pack(side=LEFT, expand = False)
  398. widget = self.createcomponent(
  399. 'Scale X Down key', (), None,
  400. Pmw.EntryField, (Interior,),
  401. value = self.keyboardMapDict['KeyScaleXDown'],
  402. labelpos = W, label_text='Key :', entry_width = 10)
  403. widget.pack(side=LEFT, expand = False)
  404. self.widgetsDict[KEYBORAD+'KeyScaleXDown'] = widget
  405. widget = Label(Interior, text = ' ').pack(side=LEFT, expand = False)
  406. widget = self.createcomponent(
  407. 'Scale Down X Speed', (), None,
  408. Pmw.EntryField, (Interior,),
  409. value = self.keyboardSpeedDict['SpeedScaleXDown'],
  410. labelpos = W, label_text='Speed :', entry_width = 10)
  411. widget.pack(side=LEFT, expand = False)
  412. self.widgetsDict[KEYBORAD+'SpeedScaleXDown'] = widget
  413. widget = Label(Interior, text = 'Per Seceond').pack(side=LEFT, expand = False)
  414. Interior.pack(side=TOP, fill=X, expand=True, pady = 4 )
  415. Interior = Frame(settingFrame)
  416. widget = Label(Interior, text = 'Scale Y UP :', width = 20, anchor = W).pack(side=LEFT, expand = False)
  417. widget = self.createcomponent(
  418. 'Scale Y UP key', (), None,
  419. Pmw.EntryField, (Interior,),
  420. value = self.keyboardMapDict['KeyScaleYUp'],
  421. labelpos = W, label_text='Key :', entry_width = 10)
  422. widget.pack(side=LEFT, expand = False)
  423. self.widgetsDict[KEYBORAD+'KeyScaleYUp'] = widget
  424. widget = Label(Interior, text = ' ').pack(side=LEFT, expand = False)
  425. widget = self.createcomponent(
  426. 'Scale Y UP Speed', (), None,
  427. Pmw.EntryField, (Interior,),
  428. value = self.keyboardSpeedDict['SpeedScaleYUp'],
  429. labelpos = W, label_text='Speed :', entry_width = 10)
  430. widget.pack(side=LEFT, expand = False)
  431. self.widgetsDict[KEYBORAD+'SpeedScaleYUp'] = widget
  432. widget = Label(Interior, text = 'Per Seceond').pack(side=LEFT, expand = False)
  433. Interior.pack(side=TOP, fill=X, expand=True, pady = 4 )
  434. Interior = Frame(settingFrame)
  435. widget = Label(Interior, text = 'Scale Y Down:', width = 20, anchor = W).pack(side=LEFT, expand = False)
  436. widget = self.createcomponent(
  437. 'Scale Y Down key', (), None,
  438. Pmw.EntryField, (Interior,),
  439. value = self.keyboardMapDict['KeyScaleYDown'],
  440. labelpos = W, label_text='Key :', entry_width = 10)
  441. widget.pack(side=LEFT, expand = False)
  442. self.widgetsDict[KEYBORAD+'KeyScaleYDown'] = widget
  443. widget = Label(Interior, text = ' ').pack(side=LEFT, expand = False)
  444. widget = self.createcomponent(
  445. 'Scale Down XY Speed', (), None,
  446. Pmw.EntryField, (Interior,),
  447. value = self.keyboardSpeedDict['SpeedScaleYDown'],
  448. labelpos = W, label_text='Speed :', entry_width = 10)
  449. widget.pack(side=LEFT, expand = False)
  450. self.widgetsDict[KEYBORAD+'SpeedScaleYDown'] = widget
  451. widget = Label(Interior, text = 'Per Seceond').pack(side=LEFT, expand = False)
  452. Interior.pack(side=TOP, fill=X, expand=True, pady = 4 )
  453. Interior = Frame(settingFrame)
  454. widget = Label(Interior, text = 'Scale Z UP :', width = 20, anchor = W).pack(side=LEFT, expand = False)
  455. widget = self.createcomponent(
  456. 'Scale Z UP key', (), None,
  457. Pmw.EntryField, (Interior,),
  458. value = self.keyboardMapDict['KeyScaleZUp'],
  459. labelpos = W, label_text='Key :', entry_width = 10)
  460. widget.pack(side=LEFT, expand = False)
  461. self.widgetsDict[KEYBORAD+'KeyScaleZUp'] = widget
  462. widget = Label(Interior, text = ' ').pack(side=LEFT, expand = False)
  463. widget = self.createcomponent(
  464. 'Scale Z UP Speed', (), None,
  465. Pmw.EntryField, (Interior,),
  466. value = self.keyboardSpeedDict['SpeedScaleZUp'],
  467. labelpos = W, label_text='Speed :', entry_width = 10)
  468. widget.pack(side=LEFT, expand = False)
  469. self.widgetsDict[KEYBORAD+'SpeedScaleZUp'] = widget
  470. widget = Label(Interior, text = 'Per Seceond').pack(side=LEFT, expand = False)
  471. Interior.pack(side=TOP, fill=X, expand=True, pady = 4 )
  472. Interior = Frame(settingFrame)
  473. widget = Label(Interior, text = 'Scale Z Down:', width = 20, anchor = W).pack(side=LEFT, expand = False)
  474. widget = self.createcomponent(
  475. 'Scale Z Down key', (), None,
  476. Pmw.EntryField, (Interior,),
  477. value = self.keyboardMapDict['KeyScaleZDown'],
  478. labelpos = W, label_text='Key :', entry_width = 10)
  479. widget.pack(side=LEFT, expand = False)
  480. self.widgetsDict[KEYBORAD+'KeyScaleZDown'] = widget
  481. widget = Label(Interior, text = ' ').pack(side=LEFT, expand = False)
  482. widget = self.createcomponent(
  483. 'Scale Down Z Speed', (), None,
  484. Pmw.EntryField, (Interior,),
  485. value = self.keyboardSpeedDict['SpeedScaleZDown'],
  486. labelpos = W, label_text='Speed :', entry_width = 10)
  487. widget.pack(side=LEFT, expand = False)
  488. self.widgetsDict[KEYBORAD+'SpeedScaleZDown'] = widget
  489. widget = Label(Interior, text = 'Per Seceond').pack(side=LEFT, expand = False)
  490. Interior.pack(side=TOP, fill=X, expand=True, pady = 4 )
  491. assignFrame.pack(side=TOP, expand=True, fill = X)
  492. keyboardPage.pack(side=TOP, expand=True, fill = X)
  493. ####################################################################
  494. ####################################################################
  495. # End of Keyboard control page
  496. ####################################################################
  497. ####################################################################
  498. # Pack the mainFrame
  499. frame = Frame(mainFrame)
  500. widget = Button(frame, text='OK', width = 13, command=self.ok_press).pack(side=RIGHT)
  501. widget = Button(frame, text='Enable Control', width = 13, command=self.enableControl).pack(side=LEFT)
  502. widget = Button(frame, text='Disable Control', width = 13, command=self.disableControl).pack(side=LEFT)
  503. widget = Button(frame, text='Save & Keep', width = 13, command=self.saveKeepControl).pack(side=LEFT)
  504. frame.pack(side = BOTTOM, expand=1, fill = X)
  505. mainFrame.pack(expand=1, fill = BOTH)
  506. def onDestroy(self, event):
  507. # Check if user wish to keep the control after the window closed.
  508. if not self.keepControl:
  509. messenger.send('ControlW_controlDisable',[self.controllType])
  510. messenger.send('ControlW_close')
  511. '''
  512. If you have open any thing, please rewrite here!
  513. '''
  514. pass
  515. def ok_press(self):
  516. ####################################################################
  517. # ok_press(self)
  518. # After user clicked on "OK" button, this function will be called.
  519. # This function will collect data from the panel and send it back to
  520. # sceneEditor and close the window. It won't activate control at all.
  521. ####################################################################
  522. if self.controllType=='Keyboard':
  523. for index in self.keyboardMapDict:
  524. self.keyboardMapDict[index] = self.widgetsDict['Keyboard-'+index].getvalue()
  525. for index in self.keyboardSpeedDict:
  526. self.keyboardSpeedDict[index] = float(self.widgetsDict['Keyboard-'+index].getvalue())
  527. messenger.send('ControlW_controlSetting', ['Keyboard', [self.nodePath, self.keyboardMapDict, self.keyboardSpeedDict]])
  528. self.quit()
  529. return
  530. def enableControl(self):
  531. ####################################################################
  532. # enableControl(self)
  533. # Call back function.
  534. # THis function will be called each time when user clicks on the
  535. # "Enable Control" button. This function will do pretty much
  536. # the same thing with ok_press function, except that this function
  537. # will activate the control process in sceneEditor.
  538. # However, if user didn't click on the button "Keep ANd Save,"
  539. # the control process will be terminated when user closed the panel.
  540. ####################################################################
  541. if self.controllType=='Keyboard':
  542. for index in self.keyboardMapDict:
  543. self.keyboardMapDict[index] = self.widgetsDict['Keyboard-'+index].getvalue()
  544. for index in self.keyboardSpeedDict:
  545. self.keyboardSpeedDict[index] = float(self.widgetsDict['Keyboard-'+index].getvalue())
  546. messenger.send('ControlW_controlEnable', ['Keyboard', [self.nodePath, self.keyboardMapDict, self.keyboardSpeedDict]])
  547. return
  548. def disableControl(self):
  549. ####################################################################
  550. # disableControl(self)
  551. # This function will send out a message to sceneEditor to stop the
  552. # control task.
  553. ####################################################################
  554. messenger.send('ControlW_controlDisable',[self.controllType])
  555. return
  556. def setControllerType(self, typeName = 'Keyboard'):
  557. #################################################################
  558. # setControllerType(self, typeName = 'Keyboard')
  559. # Call back function
  560. # This function will be called when user select the type of
  561. # controller they want on the combo box on the panel.
  562. # Basically, this function's job is to switch the notebook page to right one.
  563. #################################################################
  564. self.controllType = typeName
  565. if self.controllType=='Keyboard':
  566. self.objNotebook.selectpage('Keyboard')
  567. elif self.controllType=='Tracker':
  568. self.objNotebook.selectpage('Tracker')
  569. return
  570. def updateControlInfo(self, page=None):
  571. #################################################################
  572. # Nothing. Unlike in the lighting panel, we don't have to keep data
  573. # once user switch the page.
  574. #################################################################
  575. return
  576. def setTargetObj(self, name = None, tracker = None):
  577. #################################################################
  578. # setTargetObj(self, name = None)
  579. # setup the target object we want to control
  580. #################################################################
  581. if tracker == None: # Call from Keyboard page.
  582. if name=='camera':
  583. self.nodePath = camera
  584. else:
  585. messenger.send('ControlW_require',[name])
  586. return
  587. def resetNameList(self, list, name = None, nodePath = None):
  588. ####################################################################
  589. # resetNameList(self, list, name = None, nodePath = None)
  590. # This function will be called be sceneEditor in order to reset the
  591. # object list inside the panel.
  592. # list here is a name list for all objects that can be set on control
  593. # in the scene. If user has specify a name and a nodePath in, it will
  594. # check if the name is equal to the name of current control target.
  595. # If so, it will change the name showed on panel.
  596. ####################################################################
  597. self.widgetsDict['Keyboard-ObjList'].setlist(list)
  598. if name != None:
  599. if self.nameOfNode == name:
  600. self.nameOfNode = self.nodePath.getName()
  601. self.widgetsDict['Keyboard-ObjList'].selectitem(self.nameOfNode, setentry=True)
  602. return
  603. def setNodePathIn(self, nodePath):
  604. ####################################################################
  605. # setNodePathIn(self, nodePath)
  606. # THis function will be called by sceneEditor.
  607. # After we send out a message to sceneEditor in setTargetObj function,
  608. # This function will be called by sceneEditor after we get the reference
  609. # of target object from dataHolder.
  610. # This function will keep the reference.
  611. ####################################################################
  612. self.nodePath = nodePath
  613. self.nameOfNode = self.nodePath.getName()
  614. return
  615. def saveKeepControl(self):
  616. #################################################################
  617. # saveKeepControl(self)
  618. # When any time user has click on the "Save & Keep" button,
  619. # This function will be called.
  620. # This function will send out the message to sceneEditor to process
  621. # the saving. Also, this function will change the "self.keepControl" flag.
  622. # So, when user closes the window with control enabled, it will keep
  623. # the control process runnning. otherwise program will disable the
  624. # control automatically when panel has been closed.
  625. #
  626. # It doesn't mean that this function will automatically enable the
  627. # control when user closed the window!!
  628. # This flag will only decide that we will send out a "stopControl"
  629. # message or not.
  630. #
  631. #################################################################
  632. self.keepControl = True
  633. if self.controllType=='Keyboard':
  634. for index in self.keyboardMapDict:
  635. self.keyboardMapDict[index] = self.widgetsDict['Keyboard-'+index].getvalue()
  636. for index in self.keyboardSpeedDict:
  637. self.keyboardSpeedDict[index] = float(self.widgetsDict['Keyboard-'+index].getvalue())
  638. print self.nodePath
  639. messenger.send('ControlW_saveSetting', ['Keyboard', [self.nodePath, self.keyboardMapDict, self.keyboardSpeedDict]])
  640. return