controllerWindow.py 36 KB

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