1. import app
  2. import ime
  3. import grp
  4. import snd
  5. import wndMgr
  6. import item
  7. import skill
  8. import localeInfo
  9. import dbg
  10. # MARK_BUG_FIX
  11. import guild
  12. # END_OF_MARK_BUG_FIX
  13. from _weakref import proxy
  14. BACKGROUND_COLOR = grp.GenerateColor(0.0, 0.0, 0.0, 1.0)
  15. DARK_COLOR = grp.GenerateColor(0.2, 0.2, 0.2, 1.0)
  16. BRIGHT_COLOR = grp.GenerateColor(0.7, 0.7, 0.7, 1.0)
  17. if localeInfo.IsCANADA():
  18. SELECT_COLOR = grp.GenerateColor(0.9, 0.03, 0.01, 0.4)
  19. else:
  20. SELECT_COLOR = grp.GenerateColor(0.0, 0.0, 0.5, 0.3)
  21. WHITE_COLOR = grp.GenerateColor(1.0, 1.0, 1.0, 0.5)
  22. HALF_WHITE_COLOR = grp.GenerateColor(1.0, 1.0, 1.0, 0.2)
  23. createToolTipWindowDict = {}
  24. def RegisterCandidateWindowClass(codePage, candidateWindowClass):
  25. EditLine.candidateWindowClassDict[codePage]=candidateWindowClass
  26. def RegisterToolTipWindow(type, createToolTipWindow):
  27. createToolTipWindowDict[type]=createToolTipWindow
  28. app.SetDefaultFontName(localeInfo.UI_DEF_FONT)
  29. ## Window Manager Event List##
  30. ##############################
  31. ## "OnMouseLeftButtonDown"
  32. ## "OnMouseLeftButtonUp"
  33. ## "OnMouseLeftButtonDoubleClick"
  34. ## "OnMouseRightButtonDown"
  35. ## "OnMouseRightButtonUp"
  36. ## "OnMouseRightButtonDoubleClick"
  37. ## "OnMouseDrag"
  38. ## "OnSetFocus"
  39. ## "OnKillFocus"
  40. ## "OnMouseOverIn"
  41. ## "OnMouseOverOut"
  42. ## "OnRender"
  43. ## "OnUpdate"
  44. ## "OnKeyDown"
  45. ## "OnKeyUp"
  46. ## "OnTop"
  47. ## "OnIMEUpdate" ## IME Only
  48. ## "OnIMETab" ## IME Only
  49. ## "OnIMEReturn" ## IME Only
  50. ##############################
  51. ## Window Manager Event List##
  52. class __mem_func__:
  53. class __noarg_call__:
  54. def __init__(self, cls, obj, func):
  55. self.cls=cls
  56. self.obj=proxy(obj)
  57. self.func=proxy(func)
  58. def __call__(self, *arg):
  59. return self.func(self.obj)
  60. class __arg_call__:
  61. def __init__(self, cls, obj, func):
  62. self.cls=cls
  63. self.obj=proxy(obj)
  64. self.func=proxy(func)
  65. def __call__(self, *arg):
  66. return self.func(self.obj, *arg)
  67. def __init__(self, mfunc):
  68. if mfunc.im_func.func_code.co_argcount>1:
  69. self.call=__mem_func__.__arg_call__(mfunc.im_class, mfunc.im_self, mfunc.im_func)
  70. else:
  71. self.call=__mem_func__.__noarg_call__(mfunc.im_class, mfunc.im_self, mfunc.im_func)
  72. def __call__(self, *arg):
  73. return self.call(*arg)
  74. class Window(object):
  75. def NoneMethod(cls):
  76. pass
  77. NoneMethod = classmethod(NoneMethod)
  78. def __init__(self, layer = "UI"):
  79. self.hWnd = None
  80. self.parentWindow = 0
  81. self.onMouseLeftButtonUpEvent = None
  82. self.RegisterWindow(layer)
  83. self.Hide()
  84. if app.ENABLE_SEND_TARGET_INFO:
  85. self.mouseLeftButtonDownEvent = None
  86. self.mouseLeftButtonDownArgs = None
  87. self.mouseLeftButtonUpEvent = None
  88. self.mouseLeftButtonUpArgs = None
  89. self.mouseLeftButtonDoubleClickEvent = None
  90. self.mouseRightButtonDownEvent = None
  91. self.mouseRightButtonDownArgs = None
  92. self.moveWindowEvent = None
  93. self.renderEvent = None
  94. self.renderArgs = None
  95. self.overInEvent = None
  96. self.overInArgs = None
  97. self.overOutEvent = None
  98. self.overOutArgs = None
  99. self.baseX = 0
  100. self.baseY = 0
  101. self.SetWindowName("NONAME_Window")
  102. def __del__(self):
  103. wndMgr.Destroy(self.hWnd)
  104. def RegisterWindow(self, layer):
  105. self.hWnd = wndMgr.Register(self, layer)
  106. def Destroy(self):
  107. pass
  108. def GetWindowHandle(self):
  109. return self.hWnd
  110. def AddFlag(self, style):
  111. wndMgr.AddFlag(self.hWnd, style)
  112. def IsRTL(self):
  113. return wndMgr.IsRTL(self.hWnd)
  114. def SetWindowName(self, Name):
  115. wndMgr.SetName(self.hWnd, Name)
  116. def GetWindowName(self):
  117. return wndMgr.GetName(self.hWnd)
  118. if app.ENABLE_SEND_TARGET_INFO:
  119. def SetParent(self, parent):
  120. if parent:
  121. wndMgr.SetParent(self.hWnd, parent.hWnd)
  122. else:
  123. wndMgr.SetParent(self.hWnd, 0)
  124. def SetAttachParent(self, parent):
  125. wndMgr.SetAttachParent(self.hWnd, parent.hWnd)
  126. else:
  127. def SetParent(self, parent):
  128. wndMgr.SetParent(self.hWnd, parent.hWnd)
  129. def SetParentProxy(self, parent):
  130. self.parentWindow=proxy(parent)
  131. wndMgr.SetParent(self.hWnd, parent.hWnd)
  132. def GetParentProxy(self):
  133. return self.parentWindow
  134. def SetPickAlways(self):
  135. wndMgr.SetPickAlways(self.hWnd)
  136. def SetWindowHorizontalAlignLeft(self):
  137. wndMgr.SetWindowHorizontalAlign(self.hWnd, wndMgr.HORIZONTAL_ALIGN_LEFT)
  138. def SetWindowHorizontalAlignCenter(self):
  139. wndMgr.SetWindowHorizontalAlign(self.hWnd, wndMgr.HORIZONTAL_ALIGN_CENTER)
  140. def SetWindowHorizontalAlignRight(self):
  141. wndMgr.SetWindowHorizontalAlign(self.hWnd, wndMgr.HORIZONTAL_ALIGN_RIGHT)
  142. def SetWindowVerticalAlignTop(self):
  143. wndMgr.SetWindowVerticalAlign(self.hWnd, wndMgr.VERTICAL_ALIGN_TOP)
  144. def SetWindowVerticalAlignCenter(self):
  145. wndMgr.SetWindowVerticalAlign(self.hWnd, wndMgr.VERTICAL_ALIGN_CENTER)
  146. def SetWindowVerticalAlignBottom(self):
  147. wndMgr.SetWindowVerticalAlign(self.hWnd, wndMgr.VERTICAL_ALIGN_BOTTOM)
  148. def SetTop(self):
  149. wndMgr.SetTop(self.hWnd)
  150. def Show(self):
  151. wndMgr.Show(self.hWnd)
  152. def Hide(self):
  153. wndMgr.Hide(self.hWnd)
  154. if app.ENABLE_SEND_TARGET_INFO:
  155. def SetVisible(self, is_show):
  156. if is_show:
  157. self.Show()
  158. else:
  159. self.Hide()
  160. def Lock(self):
  161. wndMgr.Lock(self.hWnd)
  162. def Unlock(self):
  163. wndMgr.Unlock(self.hWnd)
  164. def IsShow(self):
  165. return wndMgr.IsShow(self.hWnd)
  166. def UpdateRect(self):
  167. wndMgr.UpdateRect(self.hWnd)
  168. def SetSize(self, width, height):
  169. wndMgr.SetWindowSize(self.hWnd, width, height)
  170. def GetWidth(self):
  171. return wndMgr.GetWindowWidth(self.hWnd)
  172. def GetHeight(self):
  173. return wndMgr.GetWindowHeight(self.hWnd)
  174. def GetLocalPosition(self):
  175. return wndMgr.GetWindowLocalPosition(self.hWnd)
  176. if app.ENABLE_SEND_TARGET_INFO:
  177. def GetLeft(self):
  178. x, y = self.GetLocalPosition()
  179. return x
  180. def GetGlobalLeft(self):
  181. x, y = self.GetGlobalPosition()
  182. return x
  183. def GetTop(self):
  184. x, y = self.GetLocalPosition()
  185. return y
  186. def GetGlobalTop(self):
  187. x, y = self.GetGlobalPosition()
  188. return y
  189. def GetRight(self):
  190. return self.GetLeft() + self.GetWidth()
  191. def GetBottom(self):
  192. return self.GetTop() + self.GetHeight()
  193. def GetGlobalPosition(self):
  194. return wndMgr.GetWindowGlobalPosition(self.hWnd)
  195. def GetMouseLocalPosition(self):
  196. return wndMgr.GetMouseLocalPosition(self.hWnd)
  197. def GetRect(self):
  198. return wndMgr.GetWindowRect(self.hWnd)
  199. if app.ENABLE_SEND_TARGET_INFO:
  200. def SetLeft(self, x):
  201. wndMgr.SetWindowPosition(self.hWnd, x, self.GetTop())
  202. def SetPosition(self, x, y):
  203. wndMgr.SetWindowPosition(self.hWnd, x, y)
  204. def SetCenterPosition(self, x = 0, y = 0):
  205. self.SetPosition((wndMgr.GetScreenWidth() - self.GetWidth()) / 2 + x, (wndMgr.GetScreenHeight() - self.GetHeight()) / 2 + y)
  206. if app.ENABLE_SEND_TARGET_INFO:
  207. def SavePosition(self):
  208. self.baseX = self.GetLeft()
  209. self.baseY = self.GetTop()
  210. def UpdatePositionByScale(self, scale):
  211. self.SetPosition(self.baseX * scale, self.baseY * scale)
  212. def IsFocus(self):
  213. return wndMgr.IsFocus(self.hWnd)
  214. def SetFocus(self):
  215. wndMgr.SetFocus(self.hWnd)
  216. def KillFocus(self):
  217. wndMgr.KillFocus(self.hWnd)
  218. def GetChildCount(self):
  219. return wndMgr.GetChildCount(self.hWnd)
  220. def IsIn(self):
  221. return wndMgr.IsIn(self.hWnd)
  222. if app.ENABLE_SEND_TARGET_INFO:
  223. def IsInPosition(self):
  224. xMouse, yMouse = wndMgr.GetMousePosition()
  225. x, y = self.GetGlobalPosition()
  226. return xMouse >= x and xMouse < x + self.GetWidth() and yMouse >= y and yMouse < y + self.GetHeight()
  227. def SetMouseLeftButtonDownEvent(self, event, *args):
  228. self.mouseLeftButtonDownEvent = event
  229. self.mouseLeftButtonDownArgs = args
  230. def OnMouseLeftButtonDown(self):
  231. if self.mouseLeftButtonDownEvent:
  232. apply(self.mouseLeftButtonDownEvent, self.mouseLeftButtonDownArgs)
  233. if app.ENABLE_SEND_TARGET_INFO:
  234. def SetMouseLeftButtonUpEvent(self, event, *args):
  235. self.mouseLeftButtonUpEvent = event
  236. self.mouseLeftButtonUpArgs = args
  237. else:
  238. def SetOnMouseLeftButtonUpEvent(self, event):
  239. self.onMouseLeftButtonUpEvent = ev
  240. if app.ENABLE_SEND_TARGET_INFO:
  241. def SetMouseLeftButtonDoubleClickEvent(self, event):
  242. self.mouseLeftButtonDoubleClickEvent = event
  243. def OnMouseLeftButtonDoubleClick(self):
  244. if self.mouseLeftButtonDoubleClickEvent:
  245. self.mouseLeftButtonDoubleClickEvent()
  246. def SetMouseRightButtonDownEvent(self, event, *args):
  247. self.mouseRightButtonDownEvent = event
  248. self.mouseRightButtonDownArgs = args
  249. def OnMouseRightButtonDown(self):
  250. if self.mouseRightButtonDownEvent:
  251. apply(self.mouseRightButtonDownEvent, self.mouseRightButtonDownArgs)
  252. def SetMoveWindowEvent(self, event):
  253. self.moveWindowEvent = event
  254. def OnMoveWindow(self, x, y):
  255. if self.moveWindowEvent:
  256. self.moveWindowEvent(x, y)
  257. def SAFE_SetOverInEvent(self, func, *args):
  258. self.overInEvent = __mem_func__(func)
  259. self.overInArgs = args
  260. def SetOverInEvent(self, func, *args):
  261. self.overInEvent = func
  262. self.overInArgs = args
  263. def SAFE_SetOverOutEvent(self, func, *args):
  264. self.overOutEvent = __mem_func__(func)
  265. self.overOutArgs = args
  266. def SetOverOutEvent(self, func, *args):
  267. self.overOutEvent = func
  268. self.overOutArgs = args
  269. def OnMouseOverIn(self):
  270. if self.overInEvent:
  271. apply(self.overInEvent, self.overInArgs)
  272. def OnMouseOverOut(self):
  273. if self.overOutEvent:
  274. apply(self.overOutEvent, self.overOutArgs)
  275. def SAFE_SetRenderEvent(self, event, *args):
  276. self.renderEvent = __mem_func__(event)
  277. self.renderArgs = args
  278. def ClearRenderEvent(self):
  279. self.renderEvent = None
  280. self.renderArgs = None
  281. def OnRender(self):
  282. if self.renderEvent:
  283. apply(self.renderEvent, self.renderArgs)
  284. def SetOnMouseLeftButtonUpEvent(self, event):
  285. self.onMouseLeftButtonUpEvent = event
  286. def OnMouseLeftButtonUp(self):
  287. if self.onMouseLeftButtonUpEvent:
  288. self.onMouseLeftButtonUpEvent()
  289. class ListBoxEx(Window):
  290. class Item(Window):
  291. def __init__(self):
  292. Window.__init__(self)
  293. def __del__(self):
  294. Window.__del__(self)
  295. def SetParent(self, parent):
  296. Window.SetParent(self, parent)
  297. self.parent=proxy(parent)
  298. def OnMouseLeftButtonDown(self):
  299. self.parent.SelectItem(self)
  300. def OnRender(self):
  301. if self.parent.GetSelectedItem()==self:
  302. self.OnSelectedRender()
  303. def OnSelectedRender(self):
  304. x, y = self.GetGlobalPosition()
  305. grp.SetColor(grp.GenerateColor(0.0, 0.0, 0.7, 0.7))
  306. grp.RenderBar(x, y, self.GetWidth(), self.GetHeight())
  307. def __init__(self):
  308. Window.__init__(self)
  309. self.viewItemCount=10
  310. self.basePos=0
  311. self.itemHeight=16
  312. self.itemStep=20
  313. self.selItem=0
  314. self.itemList=[]
  315. self.onSelectItemEvent = lambda *arg: None
  316. if localeInfo.IsARABIC():
  317. self.itemWidth=130
  318. else:
  319. self.itemWidth=100
  320. self.scrollBar=None
  321. self.__UpdateSize()
  322. def __del__(self):
  323. Window.__del__(self)
  324. def __UpdateSize(self):
  325. height=self.itemStep*self.__GetViewItemCount()
  326. self.SetSize(self.itemWidth, height)
  327. def IsEmpty(self):
  328. if len(self.itemList)==0:
  329. return 1
  330. return 0
  331. def SetItemStep(self, itemStep):
  332. self.itemStep=itemStep
  333. self.__UpdateSize()
  334. def SetItemSize(self, itemWidth, itemHeight):
  335. self.itemWidth=itemWidth
  336. self.itemHeight=itemHeight
  337. self.__UpdateSize()
  338. def SetViewItemCount(self, viewItemCount):
  339. self.viewItemCount=viewItemCount
  340. def SetSelectEvent(self, event):
  341. self.onSelectItemEvent = event
  342. def SetBasePos(self, basePos):
  343. for oldItem in self.itemList[self.basePos:self.basePos+self.viewItemCount]:
  344. oldItem.Hide()
  345. self.basePos=basePos
  346. pos=basePos
  347. for newItem in self.itemList[self.basePos:self.basePos+self.viewItemCount]:
  348. (x, y)=self.GetItemViewCoord(pos, newItem.GetWidth())
  349. newItem.SetPosition(x, y)
  350. newItem.Show()
  351. pos+=1
  352. def GetItemIndex(self, argItem):
  353. return self.itemList.index(argItem)
  354. def GetSelectedItem(self):
  355. return self.selItem
  356. def SelectIndex(self, index):
  357. if index >= len(self.itemList) or index < 0:
  358. self.selItem = None
  359. return
  360. try:
  361. self.selItem=self.itemList[index]
  362. except:
  363. pass
  364. def SelectItem(self, selItem):
  365. self.selItem=selItem
  366. self.onSelectItemEvent(selItem)
  367. def RemoveAllItems(self):
  368. self.selItem=None
  369. self.itemList=[]
  370. if self.scrollBar:
  371. self.scrollBar.SetPos(0)
  372. def RemoveItem(self, delItem):
  373. if delItem==self.selItem:
  374. self.selItem=None
  375. self.itemList.remove(delItem)
  376. def AppendItem(self, newItem):
  377. newItem.SetParent(self)
  378. newItem.SetSize(self.itemWidth, self.itemHeight)
  379. pos=len(self.itemList)
  380. if self.__IsInViewRange(pos):
  381. (x, y)=self.GetItemViewCoord(pos, newItem.GetWidth())
  382. newItem.SetPosition(x, y)
  383. newItem.Show()
  384. else:
  385. newItem.Hide()
  386. self.itemList.append(newItem)
  387. def SetScrollBar(self, scrollBar):
  388. scrollBar.SetScrollEvent(__mem_func__(self.__OnScroll))
  389. self.scrollBar=scrollBar
  390. def __OnScroll(self):
  391. self.SetBasePos(int(self.scrollBar.GetPos()*self.__GetScrollLen()))
  392. def __GetScrollLen(self):
  393. scrollLen=self.__GetItemCount()-self.__GetViewItemCount()
  394. if scrollLen<0:
  395. return 0
  396. return scrollLen
  397. def __GetViewItemCount(self):
  398. return self.viewItemCount
  399. def __GetItemCount(self):
  400. return len(self.itemList)
  401. def GetItemViewCoord(self, pos, itemWidth):
  402. if localeInfo.IsARABIC():
  403. return (self.GetWidth()-itemWidth-10, (pos-self.basePos)*self.itemStep)
  404. else:
  405. return (0, (pos-self.basePos)*self.itemStep)
  406. def __IsInViewRange(self, pos):
  407. if pos<self.basePos:
  408. return 0
  409. if pos>=self.basePos+self.viewItemCount:
  410. return 0
  411. return 1
  412. if app.ENABLE_SEND_TARGET_INFO:
  413. class ListBoxExNew(Window):
  414. class Item(Window):
  415. def __init__(self):
  416. Window.__init__(self)
  417. self.realWidth = 0
  418. self.realHeight = 0
  419. self.removeTop = 0
  420. self.removeBottom = 0
  421. self.SetWindowName("NONAME_ListBoxExNew_Item")
  422. def __del__(self):
  423. Window.__del__(self)
  424. def SetParent(self, parent):
  425. Window.SetParent(self, parent)
  426. self.parent=proxy(parent)
  427. def SetSize(self, width, height):
  428. self.realWidth = width
  429. self.realHeight = height
  430. Window.SetSize(self, width, height)
  431. def SetRemoveTop(self, height):
  432. self.removeTop = height
  433. self.RefreshHeight()
  434. def SetRemoveBottom(self, height):
  435. self.removeBottom = height
  436. self.RefreshHeight()
  437. def SetCurrentHeight(self, height):
  438. Window.SetSize(self, self.GetWidth(), height)
  439. def GetCurrentHeight(self):
  440. return Window.GetHeight(self)
  441. def ResetCurrentHeight(self):
  442. self.removeTop = 0
  443. self.removeBottom = 0
  444. self.RefreshHeight()
  445. def RefreshHeight(self):
  446. self.SetCurrentHeight(self.GetHeight() - self.removeTop - self.removeBottom)
  447. def GetHeight(self):
  448. return self.realHeight
  449. def __init__(self, stepSize, viewSteps):
  450. Window.__init__(self)
  451. self.viewItemCount=10
  452. self.basePos=0
  453. self.baseIndex=0
  454. self.maxSteps=0
  455. self.viewSteps = viewSteps
  456. self.stepSize = stepSize
  457. self.itemList=[]
  458. self.scrollBar=None
  459. self.SetWindowName("NONAME_ListBoxEx")
  460. def __del__(self):
  461. Window.__del__(self)
  462. def IsEmpty(self):
  463. if len(self.itemList)==0:
  464. return 1
  465. return 0
  466. def __CheckBasePos(self, pos):
  467. self.viewItemCount = 0
  468. start_pos = pos
  469. height = 0
  470. while height < self.GetHeight():
  471. if pos >= len(self.itemList):
  472. return start_pos == 0
  473. height += self.itemList[pos].GetHeight()
  474. pos += 1
  475. self.viewItemCount += 1
  476. return height == self.GetHeight()
  477. def SetBasePos(self, basePos, forceRefresh = TRUE):
  478. if forceRefresh == FALSE and self.basePos == basePos:
  479. return
  480. for oldItem in self.itemList[self.baseIndex:self.baseIndex+self.viewItemCount]:
  481. oldItem.ResetCurrentHeight()
  482. oldItem.Hide()
  483. self.basePos=basePos
  484. baseIndex = 0
  485. while basePos > 0:
  486. basePos -= self.itemList[baseIndex].GetHeight() / self.stepSize
  487. if basePos < 0:
  488. self.itemList[baseIndex].SetRemoveTop(self.stepSize * abs(basePos))
  489. break
  490. baseIndex += 1
  491. self.baseIndex = baseIndex
  492. stepCount = 0
  493. self.viewItemCount = 0
  494. while baseIndex < len(self.itemList):
  495. stepCount += self.itemList[baseIndex].GetCurrentHeight() / self.stepSize
  496. self.viewItemCount += 1
  497. if stepCount > self.viewSteps:
  498. self.itemList[baseIndex].SetRemoveBottom(self.stepSize * (stepCount - self.viewSteps))
  499. break
  500. elif stepCount == self.viewSteps:
  501. break
  502. baseIndex += 1
  503. y = 0
  504. for newItem in self.itemList[self.baseIndex:self.baseIndex+self.viewItemCount]:
  505. newItem.SetPosition(0, y)
  506. newItem.Show()
  507. y += newItem.GetCurrentHeight()
  508. def GetItemIndex(self, argItem):
  509. return self.itemList.index(argItem)
  510. def GetSelectedItem(self):
  511. return self.selItem
  512. def GetSelectedItemIndex(self):
  513. return self.selItemIdx
  514. def RemoveAllItems(self):
  515. self.itemList=[]
  516. self.maxSteps=0
  517. if self.scrollBar:
  518. self.scrollBar.SetPos(0)
  519. def RemoveItem(self, delItem):
  520. self.maxSteps -= delItem.GetHeight() / self.stepSize
  521. self.itemList.remove(delItem)
  522. def AppendItem(self, newItem):
  523. if newItem.GetHeight() % self.stepSize != 0:
  524. import dbg
  525. dbg.TraceError("Invalid AppendItem height %d stepSize %d" % (newItem.GetHeight(), self.stepSize))
  526. return
  527. self.maxSteps += newItem.GetHeight() / self.stepSize
  528. newItem.SetParent(self)
  529. self.itemList.append(newItem)
  530. def SetScrollBar(self, scrollBar):
  531. scrollBar.SetScrollEvent(__mem_func__(self.__OnScroll))
  532. self.scrollBar=scrollBar
  533. def __OnScroll(self):
  534. self.SetBasePos(int(self.scrollBar.GetPos()*self.__GetScrollLen()), FALSE)
  535. def __GetScrollLen(self):
  536. scrollLen=self.maxSteps-self.viewSteps
  537. if scrollLen<0:
  538. return 0
  539. return scrollLen
  540. def __GetViewItemCount(self):
  541. return self.viewItemCount
  542. def __GetItemCount(self):
  543. return len(self.itemList)
  544. def GetViewItemCount(self):
  545. return self.viewItemCount
  546. def GetItemCount(self):
  547. return len(self.itemList)
  548. class CandidateListBox(ListBoxEx):
  549. HORIZONTAL_MODE = 0
  550. VERTICAL_MODE = 1
  551. class Item(ListBoxEx.Item):
  552. def __init__(self, text):
  553. ListBoxEx.Item.__init__(self)
  554. self.textBox=TextLine()
  555. self.textBox.SetParent(self)
  556. self.textBox.SetText(text)
  557. self.textBox.Show()
  558. def __del__(self):
  559. ListBoxEx.Item.__del__(self)
  560. def __init__(self, mode = HORIZONTAL_MODE):
  561. ListBoxEx.__init__(self)
  562. self.itemWidth=32
  563. self.itemHeight=32
  564. self.mode = mode
  565. def __del__(self):
  566. ListBoxEx.__del__(self)
  567. def SetMode(self, mode):
  568. self.mode = mode
  569. def AppendItem(self, newItem):
  570. ListBoxEx.AppendItem(self, newItem)
  571. def GetItemViewCoord(self, pos):
  572. if self.mode == self.HORIZONTAL_MODE:
  573. return ((pos-self.basePos)*self.itemStep, 0)
  574. elif self.mode == self.VERTICAL_MODE:
  575. return (0, (pos-self.basePos)*self.itemStep)
  576. class TextLine(Window):
  577. def __init__(self):
  578. Window.__init__(self)
  579. self.max = 0
  580. self.SetFontName(localeInfo.UI_DEF_FONT)
  581. def __del__(self):
  582. Window.__del__(self)
  583. def RegisterWindow(self, layer):
  584. self.hWnd = wndMgr.RegisterTextLine(self, layer)
  585. def SetMax(self, max):
  586. wndMgr.SetMax(self.hWnd, max)
  587. def SetLimitWidth(self, width):
  588. wndMgr.SetLimitWidth(self.hWnd, width)
  589. def SetMultiLine(self):
  590. wndMgr.SetMultiLine(self.hWnd, True)
  591. def SetHorizontalAlignArabic(self):
  592. wndMgr.SetHorizontalAlign(self.hWnd, wndMgr.TEXT_HORIZONTAL_ALIGN_ARABIC)
  593. def SetHorizontalAlignLeft(self):
  594. wndMgr.SetHorizontalAlign(self.hWnd, wndMgr.TEXT_HORIZONTAL_ALIGN_LEFT)
  595. def SetHorizontalAlignRight(self):
  596. wndMgr.SetHorizontalAlign(self.hWnd, wndMgr.TEXT_HORIZONTAL_ALIGN_RIGHT)
  597. def SetHorizontalAlignCenter(self):
  598. wndMgr.SetHorizontalAlign(self.hWnd, wndMgr.TEXT_HORIZONTAL_ALIGN_CENTER)
  599. def SetVerticalAlignTop(self):
  600. wndMgr.SetVerticalAlign(self.hWnd, wndMgr.TEXT_VERTICAL_ALIGN_TOP)
  601. def SetVerticalAlignBottom(self):
  602. wndMgr.SetVerticalAlign(self.hWnd, wndMgr.TEXT_VERTICAL_ALIGN_BOTTOM)
  603. def SetVerticalAlignCenter(self):
  604. wndMgr.SetVerticalAlign(self.hWnd, wndMgr.TEXT_VERTICAL_ALIGN_CENTER)
  605. def SetSecret(self, Value=True):
  606. wndMgr.SetSecret(self.hWnd, Value)
  607. def SetOutline(self, Value=True):
  608. wndMgr.SetOutline(self.hWnd, Value)
  609. def SetFeather(self, value=True):
  610. wndMgr.SetFeather(self.hWnd, value)
  611. def SetFontName(self, fontName):
  612. wndMgr.SetFontName(self.hWnd, fontName)
  613. def SetDefaultFontName(self):
  614. wndMgr.SetFontName(self.hWnd, localeInfo.UI_DEF_FONT)
  615. def SetFontColor(self, red, green, blue):
  616. wndMgr.SetFontColor(self.hWnd, red, green, blue)
  617. def SetPackedFontColor(self, color):
  618. wndMgr.SetFontColor(self.hWnd, color)
  619. def SetText(self, text):
  620. wndMgr.SetText(self.hWnd, text)
  621. def GetText(self):
  622. return wndMgr.GetText(self.hWnd)
  623. def GetTextSize(self):
  624. return wndMgr.GetTextSize(self.hWnd)
  625. class EmptyCandidateWindow(Window):
  626. def __init__(self):
  627. Window.__init__(self)
  628. def __del__(self):
  629. Window.__init__(self)
  630. def Load(self):
  631. pass
  632. def SetCandidatePosition(self, x, y, textCount):
  633. pass
  634. def Clear(self):
  635. pass
  636. def Append(self, text):
  637. pass
  638. def Refresh(self):
  639. pass
  640. def Select(self):
  641. pass
  642. class EditLine(TextLine):
  643. candidateWindowClassDict = {}
  644. def __init__(self):
  645. TextLine.__init__(self)
  646. self.eventReturn = Window.NoneMethod
  647. self.eventEscape = Window.NoneMethod
  648. self.eventTab = None
  649. self.numberMode = False
  650. self.useIME = True
  651. self.bCodePage = False
  652. self.candidateWindowClass = None
  653. self.candidateWindow = None
  654. self.SetCodePage(app.GetDefaultCodePage())
  655. self.readingWnd = ReadingWnd()
  656. self.readingWnd.Hide()
  657. def __del__(self):
  658. TextLine.__del__(self)
  659. self.eventReturn = Window.NoneMethod
  660. self.eventEscape = Window.NoneMethod
  661. self.eventTab = None
  662. def SetCodePage(self, codePage):
  663. candidateWindowClass=EditLine.candidateWindowClassDict.get(codePage, EmptyCandidateWindow)
  664. self.__SetCandidateClass(candidateWindowClass)
  665. def __SetCandidateClass(self, candidateWindowClass):
  666. if self.candidateWindowClass==candidateWindowClass:
  667. return
  668. self.candidateWindowClass = candidateWindowClass
  669. self.candidateWindow = self.candidateWindowClass()
  670. self.candidateWindow.Load()
  671. self.candidateWindow.Hide()
  672. def RegisterWindow(self, layer):
  673. self.hWnd = wndMgr.RegisterTextLine(self, layer)
  674. def SAFE_SetReturnEvent(self, event):
  675. self.eventReturn = __mem_func__(event)
  676. def SetReturnEvent(self, event):
  677. self.eventReturn = event
  678. def SetEscapeEvent(self, event):
  679. self.eventEscape = event
  680. def SetTabEvent(self, event):
  681. self.eventTab = event
  682. def SetMax(self, max):
  683. self.max = max
  684. wndMgr.SetMax(self.hWnd, self.max)
  685. ime.SetMax(self.max)
  686. self.SetUserMax(self.max)
  687. def SetUserMax(self, max):
  688. self.userMax = max
  689. ime.SetUserMax(self.userMax)
  690. def SetNumberMode(self):
  691. self.numberMode = True
  692. #def AddExceptKey(self, key):
  693. # ime.AddExceptKey(key)
  694. #def ClearExceptKey(self):
  695. # ime.ClearExceptKey()
  696. def SetIMEFlag(self, flag):
  697. self.useIME = flag
  698. def SetText(self, text):
  699. wndMgr.SetText(self.hWnd, text)
  700. if self.IsFocus():
  701. ime.SetText(text)
  702. def Enable(self):
  703. wndMgr.ShowCursor(self.hWnd)
  704. def Disable(self):
  705. wndMgr.HideCursor(self.hWnd)
  706. def SetEndPosition(self):
  707. ime.MoveEnd()
  708. def OnSetFocus(self):
  709. Text = self.GetText()
  710. ime.SetText(Text)
  711. ime.SetMax(self.max)
  712. ime.SetUserMax(self.userMax)
  713. ime.SetCursorPosition(-1)
  714. if self.numberMode:
  715. ime.SetNumberMode()
  716. else:
  717. ime.SetStringMode()
  718. ime.EnableCaptureInput()
  719. if self.useIME:
  720. ime.EnableIME()
  721. else:
  722. ime.DisableIME()
  723. wndMgr.ShowCursor(self.hWnd, True)
  724. def OnKillFocus(self):
  725. self.SetText(ime.GetText(self.bCodePage))
  726. self.OnIMECloseCandidateList()
  727. self.OnIMECloseReadingWnd()
  728. ime.DisableIME()
  729. ime.DisableCaptureInput()
  730. wndMgr.HideCursor(self.hWnd)
  731. def OnIMEChangeCodePage(self):
  732. self.SetCodePage(ime.GetCodePage())
  733. def OnIMEOpenCandidateList(self):
  734. self.candidateWindow.Show()
  735. self.candidateWindow.Clear()
  736. self.candidateWindow.Refresh()
  737. gx, gy = self.GetGlobalPosition()
  738. self.candidateWindow.SetCandidatePosition(gx, gy, len(self.GetText()))
  739. return True
  740. def OnIMECloseCandidateList(self):
  741. self.candidateWindow.Hide()
  742. return True
  743. def OnIMEOpenReadingWnd(self):
  744. gx, gy = self.GetGlobalPosition()
  745. textlen = len(self.GetText())-2
  746. reading = ime.GetReading()
  747. readinglen = len(reading)
  748. self.readingWnd.SetReadingPosition( gx + textlen*6-24-readinglen*6, gy )
  749. self.readingWnd.SetText(reading)
  750. if ime.GetReadingError() == 0:
  751. self.readingWnd.SetTextColor(0xffffffff)
  752. else:
  753. self.readingWnd.SetTextColor(0xffff0000)
  754. self.readingWnd.SetSize(readinglen * 6 + 4, 19)
  755. self.readingWnd.Show()
  756. return True
  757. def OnIMECloseReadingWnd(self):
  758. self.readingWnd.Hide()
  759. return True
  760. def OnIMEUpdate(self):
  761. snd.PlaySound("sound/ui/type.wav")
  762. TextLine.SetText(self, ime.GetText(self.bCodePage))
  763. def OnIMETab(self):
  764. if self.eventTab:
  765. self.eventTab()
  766. return True
  767. return False
  768. def OnIMEReturn(self):
  769. snd.PlaySound("sound/ui/click.wav")
  770. self.eventReturn()
  771. return True
  772. def OnPressEscapeKey(self):
  773. self.eventEscape()
  774. return True
  775. def OnKeyDown(self, key):
  776. if app.DIK_F1 == key:
  777. return False
  778. if app.DIK_F2 == key:
  779. return False
  780. if app.DIK_F3 == key:
  781. return False
  782. if app.DIK_F4 == key:
  783. return False
  784. if app.DIK_LALT == key:
  785. return False
  786. if app.DIK_SYSRQ == key:
  787. return False
  788. if app.DIK_LCONTROL == key:
  789. return False
  790. if app.DIK_V == key:
  791. if app.IsPressed(app.DIK_LCONTROL):
  792. ime.PasteTextFromClipBoard()
  793. return True
  794. def OnKeyUp(self, key):
  795. if app.DIK_F1 == key:
  796. return False
  797. if app.DIK_F2 == key:
  798. return False
  799. if app.DIK_F3 == key:
  800. return False
  801. if app.DIK_F4 == key:
  802. return False
  803. if app.DIK_LALT == key:
  804. return False
  805. if app.DIK_SYSRQ == key:
  806. return False
  807. if app.DIK_LCONTROL == key:
  808. return False
  809. return True
  810. def OnIMEKeyDown(self, key):
  811. # Left
  812. if app.VK_LEFT == key:
  813. ime.MoveLeft()
  814. return True
  815. # Right
  816. if app.VK_RIGHT == key:
  817. ime.MoveRight()
  818. return True
  819. # Home
  820. if app.VK_HOME == key:
  821. ime.MoveHome()
  822. return True
  823. # End
  824. if app.VK_END == key:
  825. ime.MoveEnd()
  826. return True
  827. # Delete
  828. if app.VK_DELETE == key:
  829. ime.Delete()
  830. TextLine.SetText(self, ime.GetText(self.bCodePage))
  831. return True
  832. return True
  833. #def OnMouseLeftButtonDown(self):
  834. # self.SetFocus()
  835. def OnMouseLeftButtonDown(self):
  836. if False == self.IsIn():
  837. return False
  838. self.SetFocus()
  839. PixelPosition = wndMgr.GetCursorPosition(self.hWnd)
  840. ime.SetCursorPosition(PixelPosition)
  841. class MarkBox(Window):
  842. def __init__(self, layer = "UI"):
  843. Window.__init__(self, layer)
  844. def __del__(self):
  845. Window.__del__(self)
  846. def RegisterWindow(self, layer):
  847. self.hWnd = wndMgr.RegisterMarkBox(self, layer)
  848. def Load(self):
  849. wndMgr.MarkBox_Load(self.hWnd)
  850. def SetScale(self, scale):
  851. wndMgr.MarkBox_SetScale(self.hWnd, scale)
  852. def SetIndex(self, guildID):
  853. MarkID = guild.GuildIDToMarkID(guildID)
  854. wndMgr.MarkBox_SetImageFilename(self.hWnd, guild.GetMarkImageFilenameByMarkID(MarkID))
  855. wndMgr.MarkBox_SetIndex(self.hWnd, guild.GetMarkIndexByMarkID(MarkID))
  856. def SetAlpha(self, alpha):
  857. wndMgr.MarkBox_SetDiffuseColor(self.hWnd, 1.0, 1.0, 1.0, alpha)
  858. class ImageBox(Window):
  859. def __init__(self, layer = "UI"):
  860. Window.__init__(self, layer)
  861. self.eventDict={}
  862. def __del__(self):
  863. Window.__del__(self)
  864. def RegisterWindow(self, layer):
  865. self.hWnd = wndMgr.RegisterImageBox(self, layer)
  866. def LoadImage(self, imageName):
  867. self.name=imageName
  868. wndMgr.LoadImage(self.hWnd, imageName)
  869. if len(self.eventDict)!=0:
  870. print "LOAD IMAGE", self, self.eventDict
  871. def SetAlpha(self, alpha):
  872. wndMgr.SetDiffuseColor(self.hWnd, 1.0, 1.0, 1.0, alpha)
  873. def GetWidth(self):
  874. return wndMgr.GetWidth(self.hWnd)
  875. def GetHeight(self):
  876. return wndMgr.GetHeight(self.hWnd)
  877. def OnMouseOverIn(self):
  878. try:
  879. self.eventDict["MOUSE_OVER_IN"]()
  880. except KeyError:
  881. pass
  882. def OnMouseOverOut(self):
  883. try:
  884. self.eventDict["MOUSE_OVER_OUT"]()
  885. except KeyError:
  886. pass
  887. def SAFE_SetStringEvent(self, event, func):
  888. self.eventDict[event]=__mem_func__(func)
  889. class ExpandedImageBox(ImageBox):
  890. def __init__(self, layer = "UI"):
  891. ImageBox.__init__(self, layer)
  892. def __del__(self):
  893. ImageBox.__del__(self)
  894. def RegisterWindow(self, layer):
  895. self.hWnd = wndMgr.RegisterExpandedImageBox(self, layer)
  896. def SetScale(self, xScale, yScale):
  897. wndMgr.SetScale(self.hWnd, xScale, yScale)
  898. def SetOrigin(self, x, y):
  899. wndMgr.SetOrigin(self.hWnd, x, y)
  900. def SetRotation(self, rotation):
  901. wndMgr.SetRotation(self.hWnd, rotation)
  902. def SetRenderingMode(self, mode):
  903. wndMgr.SetRenderingMode(self.hWnd, mode)
  904. # [0.0, 1.0] 사이의 값만큼 퍼센트로 그리지 않는다.
  905. def SetRenderingRect(self, left, top, right, bottom):
  906. wndMgr.SetRenderingRect(self.hWnd, left, top, right, bottom)
  907. def SetPercentage(self, curValue, maxValue):
  908. if maxValue:
  909. self.SetRenderingRect(0.0, 0.0, -1.0 + float(curValue) / float(maxValue), 0.0)
  910. else:
  911. self.SetRenderingRect(0.0, 0.0, 0.0, 0.0)
  912. def GetWidth(self):
  913. return wndMgr.GetWindowWidth(self.hWnd)
  914. def GetHeight(self):
  915. return wndMgr.GetWindowHeight(self.hWnd)
  916. class AniImageBox(Window):
  917. def __init__(self, layer = "UI"):
  918. Window.__init__(self, layer)
  919. def __del__(self):
  920. Window.__del__(self)
  921. def RegisterWindow(self, layer):
  922. self.hWnd = wndMgr.RegisterAniImageBox(self, layer)
  923. def SetDelay(self, delay):
  924. wndMgr.SetDelay(self.hWnd, delay)
  925. def AppendImage(self, filename):
  926. wndMgr.AppendImage(self.hWnd, filename)
  927. def SetPercentage(self, curValue, maxValue):
  928. wndMgr.SetRenderingRect(self.hWnd, 0.0, 0.0, -1.0 + float(curValue) / float(maxValue), 0.0)
  929. def OnEndFrame(self):
  930. pass
  931. class Button(Window):
  932. def __init__(self, layer = "UI"):
  933. Window.__init__(self, layer)
  934. self.eventFunc = None
  935. self.eventArgs = None
  936. self.ButtonText = None
  937. self.ToolTipText = None
  938. def __del__(self):
  939. Window.__del__(self)
  940. self.eventFunc = None
  941. self.eventArgs = None
  942. def RegisterWindow(self, layer):
  943. self.hWnd = wndMgr.RegisterButton(self, layer)
  944. def SetUpVisual(self, filename):
  945. wndMgr.SetUpVisual(self.hWnd, filename)
  946. def SetOverVisual(self, filename):
  947. wndMgr.SetOverVisual(self.hWnd, filename)
  948. def SetDownVisual(self, filename):
  949. wndMgr.SetDownVisual(self.hWnd, filename)
  950. def SetDisableVisual(self, filename):
  951. wndMgr.SetDisableVisual(self.hWnd, filename)
  952. def GetUpVisualFileName(self):
  953. return wndMgr.GetUpVisualFileName(self.hWnd)
  954. def GetOverVisualFileName(self):
  955. return wndMgr.GetOverVisualFileName(self.hWnd)
  956. def GetDownVisualFileName(self):
  957. return wndMgr.GetDownVisualFileName(self.hWnd)
  958. def Flash(self):
  959. wndMgr.Flash(self.hWnd)
  960. def Enable(self):
  961. wndMgr.Enable(self.hWnd)
  962. def Disable(self):
  963. wndMgr.Disable(self.hWnd)
  964. def Down(self):
  965. wndMgr.Down(self.hWnd)
  966. def SetUp(self):
  967. wndMgr.SetUp(self.hWnd)
  968. def SAFE_SetEvent(self, func, *args):
  969. self.eventFunc = __mem_func__(func)
  970. self.eventArgs = args
  971. def SetEvent(self, func, *args):
  972. self.eventFunc = func
  973. self.eventArgs = args
  974. def SetTextColor(self, color):
  975. if not self.ButtonText:
  976. return
  977. self.ButtonText.SetPackedFontColor(color)
  978. def SetText(self, text, height = 4):
  979. if not self.ButtonText:
  980. textLine = TextLine()
  981. textLine.SetParent(self)
  982. textLine.SetPosition(self.GetWidth()/2, self.GetHeight()/2)
  983. textLine.SetVerticalAlignCenter()
  984. textLine.SetHorizontalAlignCenter()
  985. textLine.Show()
  986. self.ButtonText = textLine
  987. self.ButtonText.SetText(text)
  988. def SetFormToolTipText(self, type, text, x, y):
  989. if not self.ToolTipText:
  990. toolTip=createToolTipWindowDict[type]()
  991. toolTip.SetParent(self)
  992. toolTip.SetSize(0, 0)
  993. toolTip.SetHorizontalAlignCenter()
  994. toolTip.SetOutline()
  995. toolTip.Hide()
  996. toolTip.SetPosition(x + self.GetWidth()/2, y)
  997. self.ToolTipText=toolTip
  998. self.ToolTipText.SetText(text)
  999. def SetToolTipWindow(self, toolTip):
  1000. self.ToolTipText=toolTip
  1001. self.ToolTipText.SetParentProxy(self)
  1002. def SetToolTipText(self, text, x=0, y = -19):
  1003. self.SetFormToolTipText("TEXT", text, x, y)
  1004. def CallEvent(self):
  1005. snd.PlaySound("sound/ui/click.wav")
  1006. if self.eventFunc:
  1007. apply(self.eventFunc, self.eventArgs)
  1008. def ShowToolTip(self):
  1009. if self.ToolTipText:
  1010. self.ToolTipText.Show()
  1011. def HideToolTip(self):
  1012. if self.ToolTipText:
  1013. self.ToolTipText.Hide()
  1014. def IsDown(self):
  1015. return wndMgr.IsDown(self.hWnd)
  1016. class RadioButton(Button):
  1017. def __init__(self):
  1018. Button.__init__(self)
  1019. def __del__(self):
  1020. Button.__del__(self)
  1021. def RegisterWindow(self, layer):
  1022. self.hWnd = wndMgr.RegisterRadioButton(self, layer)
  1023. class RadioButtonGroup:
  1024. def __init__(self):
  1025. self.buttonGroup = []
  1026. self.selectedBtnIdx = -1
  1027. def __del__(self):
  1028. for button, ue, de in self.buttonGroup:
  1029. button.__del__()
  1030. def Show(self):
  1031. for (button, selectEvent, unselectEvent) in self.buttonGroup:
  1032. button.Show()
  1033. def Hide(self):
  1034. for (button, selectEvent, unselectEvent) in self.buttonGroup:
  1035. button.Hide()
  1036. def SetText(self, idx, text):
  1037. if idx >= len(self.buttonGroup):
  1038. return
  1039. (button, selectEvent, unselectEvent) = self.buttonGroup[idx]
  1040. button.SetText(text)
  1041. def OnClick(self, btnIdx):
  1042. if btnIdx == self.selectedBtnIdx:
  1043. return
  1044. (button, selectEvent, unselectEvent) = self.buttonGroup[self.selectedBtnIdx]
  1045. if unselectEvent:
  1046. unselectEvent()
  1047. button.SetUp()
  1048. self.selectedBtnIdx = btnIdx
  1049. (button, selectEvent, unselectEvent) = self.buttonGroup[btnIdx]
  1050. if selectEvent:
  1051. selectEvent()
  1052. button.Down()
  1053. def AddButton(self, button, selectEvent, unselectEvent):
  1054. i = len(self.buttonGroup)
  1055. button.SetEvent(lambda : self.OnClick(i))
  1056. self.buttonGroup.append([button, selectEvent, unselectEvent])
  1057. button.SetUp()
  1058. def Create(rawButtonGroup):
  1059. radioGroup = RadioButtonGroup()
  1060. for (button, selectEvent, unselectEvent) in rawButtonGroup:
  1061. radioGroup.AddButton(button, selectEvent, unselectEvent)
  1062. radioGroup.OnClick(0)
  1063. return radioGroup
  1064. Create=staticmethod(Create)
  1065. class ToggleButton(Button):
  1066. def __init__(self):
  1067. Button.__init__(self)
  1068. self.eventUp = None
  1069. self.eventDown = None
  1070. def __del__(self):
  1071. Button.__del__(self)
  1072. self.eventUp = None
  1073. self.eventDown = None
  1074. def SetToggleUpEvent(self, event):
  1075. self.eventUp = event
  1076. def SetToggleDownEvent(self, event):
  1077. self.eventDown = event
  1078. def RegisterWindow(self, layer):
  1079. self.hWnd = wndMgr.RegisterToggleButton(self, layer)
  1080. def OnToggleUp(self):
  1081. if self.eventUp:
  1082. self.eventUp()
  1083. def OnToggleDown(self):
  1084. if self.eventDown:
  1085. self.eventDown()
  1086. class DragButton(Button):
  1087. def __init__(self):
  1088. Button.__init__(self)
  1089. self.AddFlag("movable")
  1090. self.callbackEnable = True
  1091. self.eventMove = lambda: None
  1092. def __del__(self):
  1093. Button.__del__(self)
  1094. self.eventMove = lambda: None
  1095. def RegisterWindow(self, layer):
  1096. self.hWnd = wndMgr.RegisterDragButton(self, layer)
  1097. def SetMoveEvent(self, event):
  1098. self.eventMove = event
  1099. def SetRestrictMovementArea(self, x, y, width, height):
  1100. wndMgr.SetRestrictMovementArea(self.hWnd, x, y, width, height)
  1101. def TurnOnCallBack(self):
  1102. self.callbackEnable = True
  1103. def TurnOffCallBack(self):
  1104. self.callbackEnable = False
  1105. def OnMove(self):
  1106. if self.callbackEnable:
  1107. self.eventMove()
  1108. class NumberLine(Window):
  1109. def __init__(self, layer = "UI"):
  1110. Window.__init__(self, layer)
  1111. def __del__(self):
  1112. Window.__del__(self)
  1113. def RegisterWindow(self, layer):
  1114. self.hWnd = wndMgr.RegisterNumberLine(self, layer)
  1115. def SetHorizontalAlignCenter(self):
  1116. wndMgr.SetNumberHorizontalAlignCenter(self.hWnd)
  1117. def SetHorizontalAlignRight(self):
  1118. wndMgr.SetNumberHorizontalAlignRight(self.hWnd)
  1119. def SetPath(self, path):
  1120. wndMgr.SetPath(self.hWnd, path)
  1121. def SetNumber(self, number):
  1122. wndMgr.SetNumber(self.hWnd, number)
  1123. ###################################################################################################
  1124. ## PythonScript Element
  1125. ###################################################################################################
  1126. class Box(Window):
  1127. def RegisterWindow(self, layer):
  1128. self.hWnd = wndMgr.RegisterBox(self, layer)
  1129. def SetColor(self, color):
  1130. wndMgr.SetColor(self.hWnd, color)
  1131. class Bar(Window):
  1132. def RegisterWindow(self, layer):
  1133. self.hWnd = wndMgr.RegisterBar(self, layer)
  1134. def SetColor(self, color):
  1135. wndMgr.SetColor(self.hWnd, color)
  1136. class Line(Window):
  1137. def RegisterWindow(self, layer):
  1138. self.hWnd = wndMgr.RegisterLine(self, layer)
  1139. def SetColor(self, color):
  1140. wndMgr.SetColor(self.hWnd, color)
  1141. class SlotBar(Window):
  1142. def __init__(self):
  1143. Window.__init__(self)
  1144. def RegisterWindow(self, layer):
  1145. self.hWnd = wndMgr.RegisterBar3D(self, layer)
  1146. ## Same with SlotBar
  1147. class Bar3D(Window):
  1148. def __init__(self):
  1149. Window.__init__(self)
  1150. def RegisterWindow(self, layer):
  1151. self.hWnd = wndMgr.RegisterBar3D(self, layer)
  1152. def SetColor(self, left, right, center):
  1153. wndMgr.SetColor(self.hWnd, left, right, center)
  1154. class SlotWindow(Window):
  1155. def __init__(self):
  1156. Window.__init__(self)
  1157. self.StartIndex = 0
  1158. self.eventSelectEmptySlot = None
  1159. self.eventSelectItemSlot = None
  1160. self.eventUnselectEmptySlot = None
  1161. self.eventUnselectItemSlot = None
  1162. self.eventUseSlot = None
  1163. self.eventOverInItem = None
  1164. self.eventOverOutItem = None
  1165. self.eventPressedSlotButton = None
  1166. def __del__(self):
  1167. Window.__del__(self)
  1168. self.eventSelectEmptySlot = None
  1169. self.eventSelectItemSlot = None
  1170. self.eventUnselectEmptySlot = None
  1171. self.eventUnselectItemSlot = None
  1172. self.eventUseSlot = None
  1173. self.eventOverInItem = None
  1174. self.eventOverOutItem = None
  1175. self.eventPressedSlotButton = None
  1176. def RegisterWindow(self, layer):
  1177. self.hWnd = wndMgr.RegisterSlotWindow(self, layer)
  1178. def SetSlotStyle(self, style):
  1179. wndMgr.SetSlotStyle(self.hWnd, style)
  1180. def HasSlot(self, slotIndex):
  1181. return wndMgr.HasSlot(self.hWnd, slotIndex)
  1182. def SetSlotBaseImage(self, imageFileName, r, g, b, a):
  1183. wndMgr.SetSlotBaseImage(self.hWnd, imageFileName, r, g, b, a)
  1184. def SetCoverButton(self,\
  1185. slotIndex,\
  1186. upName="d:/ymir work/ui/public/slot_cover_button_01.sub",\
  1187. overName="d:/ymir work/ui/public/slot_cover_button_02.sub",\
  1188. downName="d:/ymir work/ui/public/slot_cover_button_03.sub",\
  1189. disableName="d:/ymir work/ui/public/slot_cover_button_04.sub",\
  1190. LeftButtonEnable = False,\
  1191. RightButtonEnable = True):
  1192. wndMgr.SetCoverButton(self.hWnd, slotIndex, upName, overName, downName, disableName, LeftButtonEnable, RightButtonEnable)
  1193. def EnableCoverButton(self, slotIndex):
  1194. wndMgr.EnableCoverButton(self.hWnd, slotIndex)
  1195. def DisableCoverButton(self, slotIndex):
  1196. wndMgr.DisableCoverButton(self.hWnd, slotIndex)
  1197. def SetAlwaysRenderCoverButton(self, slotIndex, bAlwaysRender = TRUE):
  1198. wndMgr.SetAlwaysRenderCoverButton(self.hWnd, slotIndex, bAlwaysRender)
  1199. def AppendSlotButton(self, upName, overName, downName):
  1200. wndMgr.AppendSlotButton(self.hWnd, upName, overName, downName)
  1201. def ShowSlotButton(self, slotNumber):
  1202. wndMgr.ShowSlotButton(self.hWnd, slotNumber)
  1203. def HideAllSlotButton(self):
  1204. wndMgr.HideAllSlotButton(self.hWnd)
  1205. def AppendRequirementSignImage(self, filename):
  1206. wndMgr.AppendRequirementSignImage(self.hWnd, filename)
  1207. def ShowRequirementSign(self, slotNumber):
  1208. wndMgr.ShowRequirementSign(self.hWnd, slotNumber)
  1209. def HideRequirementSign(self, slotNumber):
  1210. wndMgr.HideRequirementSign(self.hWnd, slotNumber)
  1211. if app.ENABLE_SASH_SYSTEM and app.ENABLE_CHANGELOOK_SYSTEM:
  1212. def ActivateSlot(self, slotNumber, r = 1.0, g = 1.0, b = 1.0, a = 1.0):
  1213. wndMgr.ActivateEffect(self.hWnd, slotNumber, r, g, b, a)
  1214. def DeactivateSlot(self, slotNumber):
  1215. wndMgr.DeactivateEffect(self.hWnd, slotNumber)
  1216. def ActivateSlotOld(self, slotNumber):
  1217. wndMgr.ActivateSlot(self.hWnd, slotNumber)
  1218. def DeactivateSlotOld(self, slotNumber):
  1219. wndMgr.DeactivateSlot(self.hWnd, slotNumber)
  1220. else:
  1221. def ActivateSlot(self, slotNumber):
  1222. wndMgr.ActivateSlot(self.hWnd, slotNumber)
  1223. def DeactivateSlot(self, slotNumber):
  1224. wndMgr.DeactivateSlot(self.hWnd, slotNumber)
  1225. def ShowSlotBaseImage(self, slotNumber):
  1226. wndMgr.ShowSlotBaseImage(self.hWnd, slotNumber)
  1227. def HideSlotBaseImage(self, slotNumber):
  1228. wndMgr.HideSlotBaseImage(self.hWnd, slotNumber)
  1229. def SAFE_SetButtonEvent(self, button, state, event):
  1230. if "LEFT"==button:
  1231. if "EMPTY"==state:
  1232. self.eventSelectEmptySlot=__mem_func__(event)
  1233. elif "EXIST"==state:
  1234. self.eventSelectItemSlot=__mem_func__(event)
  1235. elif "ALWAYS"==state:
  1236. self.eventSelectEmptySlot=__mem_func__(event)
  1237. self.eventSelectItemSlot=__mem_func__(event)
  1238. elif "RIGHT"==button:
  1239. if "EMPTY"==state:
  1240. self.eventUnselectEmptySlot=__mem_func__(event)
  1241. elif "EXIST"==state:
  1242. self.eventUnselectItemSlot=__mem_func__(event)
  1243. elif "ALWAYS"==state:
  1244. self.eventUnselectEmptySlot=__mem_func__(event)
  1245. self.eventUnselectItemSlot=__mem_func__(event)
  1246. def SetSelectEmptySlotEvent(self, empty):
  1247. self.eventSelectEmptySlot = empty
  1248. def SetSelectItemSlotEvent(self, item):
  1249. self.eventSelectItemSlot = item
  1250. def SetUnselectEmptySlotEvent(self, empty):
  1251. self.eventUnselectEmptySlot = empty
  1252. def SetUnselectItemSlotEvent(self, item):
  1253. self.eventUnselectItemSlot = item
  1254. def SetUseSlotEvent(self, use):
  1255. self.eventUseSlot = use
  1256. def SetOverInItemEvent(self, event):
  1257. self.eventOverInItem = event
  1258. def SetOverOutItemEvent(self, event):
  1259. self.eventOverOutItem = event
  1260. def SetPressedSlotButtonEvent(self, event):
  1261. self.eventPressedSlotButton = event
  1262. def GetSlotCount(self):
  1263. return wndMgr.GetSlotCount(self.hWnd)
  1264. def SetUseMode(self, flag):
  1265. "True일때만 ItemToItem 이 가능한지 보여준다"
  1266. wndMgr.SetUseMode(self.hWnd, flag)
  1267. def SetUsableItem(self, flag):
  1268. "True면 현재 가리킨 아이템이 ItemToItem 적용 가능하다"
  1269. wndMgr.SetUsableItem(self.hWnd, flag)
  1270. ## Slot
  1271. def SetSlotCoolTime(self, slotIndex, coolTime, elapsedTime = 0.0):
  1272. wndMgr.SetSlotCoolTime(self.hWnd, slotIndex, coolTime, elapsedTime)
  1273. def DisableSlot(self, slotIndex):
  1274. wndMgr.DisableSlot(self.hWnd, slotIndex)
  1275. def EnableSlot(self, slotIndex):
  1276. wndMgr.EnableSlot(self.hWnd, slotIndex)
  1277. def LockSlot(self, slotIndex):
  1278. wndMgr.LockSlot(self.hWnd, slotIndex)
  1279. def UnlockSlot(self, slotIndex):
  1280. wndMgr.UnlockSlot(self.hWnd, slotIndex)
  1281. def RefreshSlot(self):
  1282. wndMgr.RefreshSlot(self.hWnd)
  1283. def ClearSlot(self, slotNumber):
  1284. wndMgr.ClearSlot(self.hWnd, slotNumber)
  1285. def ClearAllSlot(self):
  1286. wndMgr.ClearAllSlot(self.hWnd)
  1287. def AppendSlot(self, index, x, y, width, height):
  1288. wndMgr.AppendSlot(self.hWnd, index, x, y, width, height)
  1289. def SetSlot(self, slotIndex, itemIndex, width, height, icon, diffuseColor = (1.0, 1.0, 1.0, 1.0)):
  1290. wndMgr.SetSlot(self.hWnd, slotIndex, itemIndex, width, height, icon, diffuseColor)
  1291. def SetSlotCount(self, slotNumber, count):
  1292. wndMgr.SetSlotCount(self.hWnd, slotNumber, count)
  1293. def SetSlotCountNew(self, slotNumber, grade, count):
  1294. wndMgr.SetSlotCountNew(self.hWnd, slotNumber, grade, count)
  1295. def SetItemSlot(self, renderingSlotNumber, ItemIndex, ItemCount = 0, diffuseColor = (1.0, 1.0, 1.0, 1.0)):
  1296. if 0 == ItemIndex or None == ItemIndex:
  1297. wndMgr.ClearSlot(self.hWnd, renderingSlotNumber)
  1298. return
  1299. item.SelectItem(ItemIndex)
  1300. itemIcon = item.GetIconImage()
  1301. item.SelectItem(ItemIndex)
  1302. (width, height) = item.GetItemSize()
  1303. wndMgr.SetSlot(self.hWnd, renderingSlotNumber, ItemIndex, width, height, itemIcon, diffuseColor)
  1304. wndMgr.SetSlotCount(self.hWnd, renderingSlotNumber, ItemCount)
  1305. if app.ENABLE_CHANGELOOK_SYSTEM:
  1306. wndMgr.SetCoverButton(self.hWnd, renderingSlotNumber, "d:/ymir work/ui/game/quest/slot_button_00.sub", "d:/ymir work/ui/game/quest/slot_button_00.sub", "d:/ymir work/ui/game/quest/slot_button_00.sub", "icon/item/ingame_convert_mark.tga", False, False)
  1307. def SetSkillSlot(self, renderingSlotNumber, skillIndex, skillLevel):
  1308. skillIcon = skill.GetIconImage(skillIndex)
  1309. if 0 == skillIcon:
  1310. wndMgr.ClearSlot(self.hWnd, renderingSlotNumber)
  1311. return
  1312. wndMgr.SetSlot(self.hWnd, renderingSlotNumber, skillIndex, 1, 1, skillIcon)
  1313. wndMgr.SetSlotCount(self.hWnd, renderingSlotNumber, skillLevel)
  1314. def SetSkillSlotNew(self, renderingSlotNumber, skillIndex, skillGrade, skillLevel):
  1315. skillIcon = skill.GetIconImageNew(skillIndex, skillGrade)
  1316. if 0 == skillIcon:
  1317. wndMgr.ClearSlot(self.hWnd, renderingSlotNumber)
  1318. return
  1319. wndMgr.SetSlot(self.hWnd, renderingSlotNumber, skillIndex, 1, 1, skillIcon)
  1320. def SetEmotionSlot(self, renderingSlotNumber, emotionIndex):
  1321. import player
  1322. icon = player.GetEmotionIconImage(emotionIndex)
  1323. if 0 == icon:
  1324. wndMgr.ClearSlot(self.hWnd, renderingSlotNumber)
  1325. return
  1326. wndMgr.SetSlot(self.hWnd, renderingSlotNumber, emotionIndex, 1, 1, icon)
  1327. ## Event
  1328. def OnSelectEmptySlot(self, slotNumber):
  1329. if self.eventSelectEmptySlot:
  1330. self.eventSelectEmptySlot(slotNumber)
  1331. def OnSelectItemSlot(self, slotNumber):
  1332. if self.eventSelectItemSlot:
  1333. self.eventSelectItemSlot(slotNumber)
  1334. def OnUnselectEmptySlot(self, slotNumber):
  1335. if self.eventUnselectEmptySlot:
  1336. self.eventUnselectEmptySlot(slotNumber)
  1337. def OnUnselectItemSlot(self, slotNumber):
  1338. if self.eventUnselectItemSlot:
  1339. self.eventUnselectItemSlot(slotNumber)
  1340. def OnUseSlot(self, slotNumber):
  1341. if self.eventUseSlot:
  1342. self.eventUseSlot(slotNumber)
  1343. def OnOverInItem(self, slotNumber):
  1344. if self.eventOverInItem:
  1345. self.eventOverInItem(slotNumber)
  1346. def OnOverOutItem(self):
  1347. if self.eventOverOutItem:
  1348. self.eventOverOutItem()
  1349. def OnPressedSlotButton(self, slotNumber):
  1350. if self.eventPressedSlotButton:
  1351. self.eventPressedSlotButton(slotNumber)
  1352. def GetStartIndex(self):
  1353. return 0
  1354. class GridSlotWindow(SlotWindow):
  1355. def __init__(self):
  1356. SlotWindow.__init__(self)
  1357. self.startIndex = 0
  1358. def __del__(self):
  1359. SlotWindow.__del__(self)
  1360. def RegisterWindow(self, layer):
  1361. self.hWnd = wndMgr.RegisterGridSlotWindow(self, layer)
  1362. def ArrangeSlot(self, StartIndex, xCount, yCount, xSize, ySize, xBlank, yBlank):
  1363. self.startIndex = StartIndex
  1364. wndMgr.ArrangeSlot(self.hWnd, StartIndex, xCount, yCount, xSize, ySize, xBlank, yBlank)
  1365. self.startIndex = StartIndex
  1366. def GetStartIndex(self):
  1367. return self.startIndex
  1368. class TitleBar(Window):
  1369. BLOCK_WIDTH = 32
  1370. BLOCK_HEIGHT = 23
  1371. def __init__(self):
  1372. Window.__init__(self)
  1373. self.AddFlag("attach")
  1374. def __del__(self):
  1375. Window.__del__(self)
  1376. def MakeTitleBar(self, width, color):
  1377. ## 현재 Color는 사용하고 있지 않음
  1378. width = max(64, width)
  1379. imgLeft = ImageBox()
  1380. imgCenter = ExpandedImageBox()
  1381. imgRight = ImageBox()
  1382. imgLeft.AddFlag("not_pick")
  1383. imgCenter.AddFlag("not_pick")
  1384. imgRight.AddFlag("not_pick")
  1385. imgLeft.SetParent(self)
  1386. imgCenter.SetParent(self)
  1387. imgRight.SetParent(self)
  1388. if localeInfo.IsARABIC():
  1389. imgLeft.LoadImage("locale/ae/ui/pattern/titlebar_left.tga")
  1390. imgCenter.LoadImage("locale/ae/ui/pattern/titlebar_center.tga")
  1391. imgRight.LoadImage("locale/ae/ui/pattern/titlebar_right.tga")
  1392. else:
  1393. imgLeft.LoadImage("d:/ymir work/ui/pattern/titlebar_left.tga")
  1394. imgCenter.LoadImage("d:/ymir work/ui/pattern/titlebar_center.tga")
  1395. imgRight.LoadImage("d:/ymir work/ui/pattern/titlebar_right.tga")
  1396. imgLeft.Show()
  1397. imgCenter.Show()
  1398. imgRight.Show()
  1399. btnClose = Button()
  1400. btnClose.SetParent(self)
  1401. btnClose.SetUpVisual("d:/ymir work/ui/public/close_button_01.sub")
  1402. btnClose.SetOverVisual("d:/ymir work/ui/public/close_button_02.sub")
  1403. btnClose.SetDownVisual("d:/ymir work/ui/public/close_button_03.sub")
  1404. btnClose.SetToolTipText(localeInfo.UI_CLOSE, 0, -23)
  1405. btnClose.Show()
  1406. self.imgLeft = imgLeft
  1407. self.imgCenter = imgCenter
  1408. self.imgRight = imgRight
  1409. self.btnClose = btnClose
  1410. self.SetWidth(width)
  1411. def SetWidth(self, width):
  1412. self.imgCenter.SetRenderingRect(0.0, 0.0, float((width - self.BLOCK_WIDTH*2) - self.BLOCK_WIDTH) / self.BLOCK_WIDTH, 0.0)
  1413. self.imgCenter.SetPosition(self.BLOCK_WIDTH, 0)
  1414. self.imgRight.SetPosition(width - self.BLOCK_WIDTH, 0)
  1415. if localeInfo.IsARABIC():
  1416. self.btnClose.SetPosition(3, 3)
  1417. else:
  1418. self.btnClose.SetPosition(width - self.btnClose.GetWidth() - 3, 3)
  1419. self.SetSize(width, self.BLOCK_HEIGHT)
  1420. def SetCloseEvent(self, event):
  1421. self.btnClose.SetEvent(event)
  1422. class HorizontalBar(Window):
  1423. BLOCK_WIDTH = 32
  1424. BLOCK_HEIGHT = 17
  1425. def __init__(self):
  1426. Window.__init__(self)
  1427. self.AddFlag("attach")
  1428. def __del__(self):
  1429. Window.__del__(self)
  1430. def Create(self, width):
  1431. width = max(96, width)
  1432. imgLeft = ImageBox()
  1433. imgLeft.SetParent(self)
  1434. imgLeft.AddFlag("not_pick")
  1435. imgLeft.LoadImage("d:/ymir work/ui/pattern/horizontalbar_left.tga")
  1436. imgLeft.Show()
  1437. imgCenter = ExpandedImageBox()
  1438. imgCenter.SetParent(self)
  1439. imgCenter.AddFlag("not_pick")
  1440. imgCenter.LoadImage("d:/ymir work/ui/pattern/horizontalbar_center.tga")
  1441. imgCenter.Show()
  1442. imgRight = ImageBox()
  1443. imgRight.SetParent(self)
  1444. imgRight.AddFlag("not_pick")
  1445. imgRight.LoadImage("d:/ymir work/ui/pattern/horizontalbar_right.tga")
  1446. imgRight.Show()
  1447. self.imgLeft = imgLeft
  1448. self.imgCenter = imgCenter
  1449. self.imgRight = imgRight
  1450. self.SetWidth(width)
  1451. def SetWidth(self, width):
  1452. self.imgCenter.SetRenderingRect(0.0, 0.0, float((width - self.BLOCK_WIDTH*2) - self.BLOCK_WIDTH) / self.BLOCK_WIDTH, 0.0)
  1453. self.imgCenter.SetPosition(self.BLOCK_WIDTH, 0)
  1454. self.imgRight.SetPosition(width - self.BLOCK_WIDTH, 0)
  1455. self.SetSize(width, self.BLOCK_HEIGHT)
  1456. class Gauge(Window):
  1457. SLOT_WIDTH = 16
  1458. SLOT_HEIGHT = 7
  1459. GAUGE_TEMPORARY_PLACE = 12
  1460. GAUGE_WIDTH = 16
  1461. def __init__(self):
  1462. Window.__init__(self)
  1463. self.width = 0
  1464. def __del__(self):
  1465. Window.__del__(self)
  1466. def MakeGauge(self, width, color):
  1467. self.width = max(48, width)
  1468. imgSlotLeft = ImageBox()
  1469. imgSlotLeft.SetParent(self)
  1470. imgSlotLeft.LoadImage("d:/ymir work/ui/pattern/gauge_slot_left.tga")
  1471. imgSlotLeft.Show()
  1472. imgSlotRight = ImageBox()
  1473. imgSlotRight.SetParent(self)
  1474. imgSlotRight.LoadImage("d:/ymir work/ui/pattern/gauge_slot_right.tga")
  1475. imgSlotRight.Show()
  1476. imgSlotRight.SetPosition(width - self.SLOT_WIDTH, 0)
  1477. imgSlotCenter = ExpandedImageBox()
  1478. imgSlotCenter.SetParent(self)
  1479. imgSlotCenter.LoadImage("d:/ymir work/ui/pattern/gauge_slot_center.tga")
  1480. imgSlotCenter.Show()
  1481. imgSlotCenter.SetRenderingRect(0.0, 0.0, float((width - self.SLOT_WIDTH*2) - self.SLOT_WIDTH) / self.SLOT_WIDTH, 0.0)
  1482. imgSlotCenter.SetPosition(self.SLOT_WIDTH, 0)
  1483. imgGauge = ExpandedImageBox()
  1484. imgGauge.SetParent(self)
  1485. imgGauge.LoadImage("d:/ymir work/ui/pattern/gauge_" + color + ".tga")
  1486. imgGauge.Show()
  1487. imgGauge.SetRenderingRect(0.0, 0.0, 0.0, 0.0)
  1488. imgGauge.SetPosition(self.GAUGE_TEMPORARY_PLACE, 0)
  1489. imgSlotLeft.AddFlag("attach")
  1490. imgSlotCenter.AddFlag("attach")
  1491. imgSlotRight.AddFlag("attach")
  1492. self.imgLeft = imgSlotLeft
  1493. self.imgCenter = imgSlotCenter
  1494. self.imgRight = imgSlotRight
  1495. self.imgGauge = imgGauge
  1496. self.SetSize(width, self.SLOT_HEIGHT)
  1497. def SetPercentage(self, curValue, maxValue):
  1498. # PERCENTAGE_MAX_VALUE_ZERO_DIVISION_ERROR
  1499. if maxValue > 0.0:
  1500. percentage = min(1.0, float(curValue)/float(maxValue))
  1501. else:
  1502. percentage = 0.0
  1503. # END_OF_PERCENTAGE_MAX_VALUE_ZERO_DIVISION_ERROR
  1504. gaugeSize = -1.0 + float(self.width - self.GAUGE_TEMPORARY_PLACE*2) * percentage / self.GAUGE_WIDTH
  1505. self.imgGauge.SetRenderingRect(0.0, 0.0, gaugeSize, 0.0)
  1506. class Board(Window):
  1507. CORNER_WIDTH = 32
  1508. CORNER_HEIGHT = 32
  1509. LINE_WIDTH = 128
  1510. LINE_HEIGHT = 128
  1511. LT = 0
  1512. LB = 1
  1513. RT = 2
  1514. RB = 3
  1515. L = 0
  1516. R = 1
  1517. T = 2
  1518. B = 3
  1519. def __init__(self):
  1520. Window.__init__(self)
  1521. self.MakeBoard("d:/ymir work/ui/pattern/Board_Corner_", "d:/ymir work/ui/pattern/Board_Line_")
  1522. self.MakeBase()
  1523. def MakeBoard(self, cornerPath, linePath):
  1524. CornerFileNames = [ cornerPath+dir+".tga" for dir in ("LeftTop", "LeftBottom", "RightTop", "RightBottom", ) ]
  1525. LineFileNames = [ linePath+dir+".tga" for dir in ("Left", "Right", "Top", "Bottom", ) ]
  1526. """
  1527. CornerFileNames = (
  1528. "d:/ymir work/ui/pattern/Board_Corner_LeftTop.tga",
  1529. "d:/ymir work/ui/pattern/Board_Corner_LeftBottom.tga",
  1530. "d:/ymir work/ui/pattern/Board_Corner_RightTop.tga",
  1531. "d:/ymir work/ui/pattern/Board_Corner_RightBottom.tga",
  1532. )
  1533. LineFileNames = (
  1534. "d:/ymir work/ui/pattern/Board_Line_Left.tga",
  1535. "d:/ymir work/ui/pattern/Board_Line_Right.tga",
  1536. "d:/ymir work/ui/pattern/Board_Line_Top.tga",
  1537. "d:/ymir work/ui/pattern/Board_Line_Bottom.tga",
  1538. )
  1539. """
  1540. self.Corners = []
  1541. for fileName in CornerFileNames:
  1542. Corner = ExpandedImageBox()
  1543. Corner.AddFlag("not_pick")
  1544. Corner.LoadImage(fileName)
  1545. Corner.SetParent(self)
  1546. Corner.SetPosition(0, 0)
  1547. Corner.Show()
  1548. self.Corners.append(Corner)
  1549. self.Lines = []
  1550. for fileName in LineFileNames:
  1551. Line = ExpandedImageBox()
  1552. Line.AddFlag("not_pick")
  1553. Line.LoadImage(fileName)
  1554. Line.SetParent(self)
  1555. Line.SetPosition(0, 0)
  1556. Line.Show()
  1557. self.Lines.append(Line)
  1558. self.Lines[self.L].SetPosition(0, self.CORNER_HEIGHT)
  1559. self.Lines[self.T].SetPosition(self.CORNER_WIDTH, 0)
  1560. def MakeBase(self):
  1561. self.Base = ExpandedImageBox()
  1562. self.Base.AddFlag("not_pick")
  1563. self.Base.LoadImage("d:/ymir work/ui/pattern/Board_Base.tga")
  1564. self.Base.SetParent(self)
  1565. self.Base.SetPosition(self.CORNER_WIDTH, self.CORNER_HEIGHT)
  1566. self.Base.Show()
  1567. def __del__(self):
  1568. Window.__del__(self)
  1569. def SetSize(self, width, height):
  1570. width = max(self.CORNER_WIDTH*2, width)
  1571. height = max(self.CORNER_HEIGHT*2, height)
  1572. Window.SetSize(self, width, height)
  1573. self.Corners[self.LB].SetPosition(0, height - self.CORNER_HEIGHT)
  1574. self.Corners[self.RT].SetPosition(width - self.CORNER_WIDTH, 0)
  1575. self.Corners[self.RB].SetPosition(width - self.CORNER_WIDTH, height - self.CORNER_HEIGHT)
  1576. self.Lines[self.R].SetPosition(width - self.CORNER_WIDTH, self.CORNER_HEIGHT)
  1577. self.Lines[self.B].SetPosition(self.CORNER_HEIGHT, height - self.CORNER_HEIGHT)
  1578. verticalShowingPercentage = float((height - self.CORNER_HEIGHT*2) - self.LINE_HEIGHT) / self.LINE_HEIGHT
  1579. horizontalShowingPercentage = float((width - self.CORNER_WIDTH*2) - self.LINE_WIDTH) / self.LINE_WIDTH
  1580. self.Lines[self.L].SetRenderingRect(0, 0, 0, verticalShowingPercentage)
  1581. self.Lines[self.R].SetRenderingRect(0, 0, 0, verticalShowingPercentage)
  1582. self.Lines[self.T].SetRenderingRect(0, 0, horizontalShowingPercentage, 0)
  1583. self.Lines[self.B].SetRenderingRect(0, 0, horizontalShowingPercentage, 0)
  1584. if self.Base:
  1585. self.Base.SetRenderingRect(0, 0, horizontalShowingPercentage, verticalShowingPercentage)
  1586. class BoardWithTitleBar(Board):
  1587. def __init__(self):
  1588. Board.__init__(self)
  1589. titleBar = TitleBar()
  1590. titleBar.SetParent(self)
  1591. titleBar.MakeTitleBar(0, "red")
  1592. titleBar.SetPosition(8, 7)
  1593. titleBar.Show()
  1594. titleName = TextLine()
  1595. titleName.SetParent(titleBar)
  1596. titleName.SetPosition(0, 4)
  1597. titleName.SetWindowHorizontalAlignCenter()
  1598. titleName.SetHorizontalAlignCenter()
  1599. titleName.Show()
  1600. self.titleBar = titleBar
  1601. self.titleName = titleName
  1602. self.SetCloseEvent(self.Hide)
  1603. def __del__(self):
  1604. Board.__del__(self)
  1605. self.titleBar = None
  1606. self.titleName = None
  1607. def SetSize(self, width, height):
  1608. self.titleBar.SetWidth(width - 15)
  1609. #self.pickRestrictWindow.SetSize(width, height - 30)
  1610. Board.SetSize(self, width, height)
  1611. self.titleName.UpdateRect()
  1612. def SetTitleColor(self, color):
  1613. self.titleName.SetPackedFontColor(color)
  1614. def SetTitleName(self, name):
  1615. self.titleName.SetText(name)
  1616. def SetCloseEvent(self, event):
  1617. self.titleBar.SetCloseEvent(event)
  1618. class ThinBoard(Window):
  1619. CORNER_WIDTH = 16
  1620. CORNER_HEIGHT = 16
  1621. LINE_WIDTH = 16
  1622. LINE_HEIGHT = 16
  1623. BOARD_COLOR = grp.GenerateColor(0.0, 0.0, 0.0, 0.51)
  1624. LT = 0
  1625. LB = 1
  1626. RT = 2
  1627. RB = 3
  1628. L = 0
  1629. R = 1
  1630. T = 2
  1631. B = 3
  1632. def __init__(self, layer = "UI"):
  1633. Window.__init__(self, layer)
  1634. CornerFileNames = [ "d:/ymir work/ui/pattern/ThinBoard_Corner_"+dir+".tga" for dir in ["LeftTop","LeftBottom","RightTop","RightBottom"] ]
  1635. LineFileNames = [ "d:/ymir work/ui/pattern/ThinBoard_Line_"+dir+".tga" for dir in ["Left","Right","Top","Bottom"] ]
  1636. self.Corners = []
  1637. for fileName in CornerFileNames:
  1638. Corner = ExpandedImageBox()
  1639. Corner.AddFlag("attach")
  1640. Corner.AddFlag("not_pick")
  1641. Corner.LoadImage(fileName)
  1642. Corner.SetParent(self)
  1643. Corner.SetPosition(0, 0)
  1644. Corner.Show()
  1645. self.Corners.append(Corner)
  1646. self.Lines = []
  1647. for fileName in LineFileNames:
  1648. Line = ExpandedImageBox()
  1649. Line.AddFlag("attach")
  1650. Line.AddFlag("not_pick")
  1651. Line.LoadImage(fileName)
  1652. Line.SetParent(self)
  1653. Line.SetPosition(0, 0)
  1654. Line.Show()
  1655. self.Lines.append(Line)
  1656. Base = Bar()
  1657. Base.SetParent(self)
  1658. Base.AddFlag("attach")
  1659. Base.AddFlag("not_pick")
  1660. Base.SetPosition(self.CORNER_WIDTH, self.CORNER_HEIGHT)
  1661. Base.SetColor(self.BOARD_COLOR)
  1662. Base.Show()
  1663. self.Base = Base
  1664. self.Lines[self.L].SetPosition(0, self.CORNER_HEIGHT)
  1665. self.Lines[self.T].SetPosition(self.CORNER_WIDTH, 0)
  1666. def __del__(self):
  1667. Window.__del__(self)
  1668. def SetSize(self, width, height):
  1669. width = max(self.CORNER_WIDTH*2, width)
  1670. height = max(self.CORNER_HEIGHT*2, height)
  1671. Window.SetSize(self, width, height)
  1672. self.Corners[self.LB].SetPosition(0, height - self.CORNER_HEIGHT)
  1673. self.Corners[self.RT].SetPosition(width - self.CORNER_WIDTH, 0)
  1674. self.Corners[self.RB].SetPosition(width - self.CORNER_WIDTH, height - self.CORNER_HEIGHT)
  1675. self.Lines[self.R].SetPosition(width - self.CORNER_WIDTH, self.CORNER_HEIGHT)
  1676. self.Lines[self.B].SetPosition(self.CORNER_HEIGHT, height - self.CORNER_HEIGHT)
  1677. verticalShowingPercentage = float((height - self.CORNER_HEIGHT*2) - self.LINE_HEIGHT) / self.LINE_HEIGHT
  1678. horizontalShowingPercentage = float((width - self.CORNER_WIDTH*2) - self.LINE_WIDTH) / self.LINE_WIDTH
  1679. self.Lines[self.L].SetRenderingRect(0, 0, 0, verticalShowingPercentage)
  1680. self.Lines[self.R].SetRenderingRect(0, 0, 0, verticalShowingPercentage)
  1681. self.Lines[self.T].SetRenderingRect(0, 0, horizontalShowingPercentage, 0)
  1682. self.Lines[self.B].SetRenderingRect(0, 0, horizontalShowingPercentage, 0)
  1683. self.Base.SetSize(width - self.CORNER_WIDTH*2, height - self.CORNER_HEIGHT*2)
  1684. def ShowInternal(self):
  1685. self.Base.Show()
  1686. for wnd in self.Lines:
  1687. wnd.Show()
  1688. for wnd in self.Corners:
  1689. wnd.Show()
  1690. def HideInternal(self):
  1691. self.Base.Hide()
  1692. for wnd in self.Lines:
  1693. wnd.Hide()
  1694. for wnd in self.Corners:
  1695. wnd.Hide()
  1696. class ThinBoardGold(Window):
  1697. CORNER_WIDTH = 16
  1698. CORNER_HEIGHT = 16
  1699. LINE_WIDTH = 16
  1700. LINE_HEIGHT = 16
  1701. BOARD_COLOR = grp.GenerateColor(0.0, 0.0, 0.0, 0.51)
  1702. LT = 0
  1703. LB = 1
  1704. RT = 2
  1705. RB = 3
  1706. L = 0
  1707. R = 1
  1708. T = 2
  1709. B = 3
  1710. def __init__(self, layer = "UI"):
  1711. Window.__init__(self, layer)
  1712. CornerFileNames = [ "d:/ymir work/ui/pattern/thinboardgold/ThinBoard_Corner_"+dir+".tga" for dir in ["LeftTop_gold", "LeftBottom_gold","RightTop_gold", "RightBottom_gold"]]
  1713. LineFileNames = [ "d:/ymir work/ui/pattern/thinboardgold/ThinBoard_Line_"+dir+".tga" for dir in ["Left_gold", "Right_gold", "Top_gold", "Bottom_gold"]]
  1714. self.Corners = []
  1715. for fileName in CornerFileNames:
  1716. Corner = ExpandedImageBox()
  1717. Corner.AddFlag("attach")
  1718. Corner.AddFlag("not_pick")
  1719. Corner.LoadImage(fileName)
  1720. Corner.SetParent(self)
  1721. Corner.SetPosition(0, 0)
  1722. Corner.Show()
  1723. self.Corners.append(Corner)
  1724. self.Lines = []
  1725. for fileName in LineFileNames:
  1726. Line = ExpandedImageBox()
  1727. Line.AddFlag("attach")
  1728. Line.AddFlag("not_pick")
  1729. Line.LoadImage(fileName)
  1730. Line.SetParent(self)
  1731. Line.SetPosition(0, 0)
  1732. Line.Show()
  1733. self.Lines.append(Line)
  1734. Base = ExpandedImageBox()
  1735. Base.SetParent(self)
  1736. Base.AddFlag("attach")
  1737. Base.AddFlag("not_pick")
  1738. Base.LoadImage("d:/ymir work/ui/pattern/thinboardgold/thinboard_bg_gold.tga")
  1739. Base.SetPosition(self.CORNER_WIDTH, self.CORNER_HEIGHT)
  1740. Base.Show()
  1741. self.Base = Base
  1742. self.Lines[self.L].SetPosition(0, self.CORNER_HEIGHT)
  1743. self.Lines[self.T].SetPosition(self.CORNER_WIDTH, 0)
  1744. def __del__(self):
  1745. Window.__del__(self)
  1746. def SetSize(self, width, height):
  1747. width = max(self.CORNER_WIDTH*2, width)
  1748. height = max(self.CORNER_HEIGHT*2, height)
  1749. Window.SetSize(self, width, height)
  1750. self.Corners[self.LB].SetPosition(0, height - self.CORNER_HEIGHT)
  1751. self.Corners[self.RT].SetPosition(width - self.CORNER_WIDTH, 0)
  1752. self.Corners[self.RB].SetPosition(width - self.CORNER_WIDTH, height - self.CORNER_HEIGHT)
  1753. self.Lines[self.R].SetPosition(width - self.CORNER_WIDTH, self.CORNER_HEIGHT)
  1754. self.Lines[self.B].SetPosition(self.CORNER_HEIGHT, height - self.CORNER_HEIGHT)
  1755. verticalShowingPercentage = float((height - self.CORNER_HEIGHT*2) - self.LINE_HEIGHT) / self.LINE_HEIGHT
  1756. horizontalShowingPercentage = float((width - self.CORNER_WIDTH*2) - self.LINE_WIDTH) / self.LINE_WIDTH
  1757. self.Lines[self.L].SetRenderingRect(0, 0, 0, verticalShowingPercentage)
  1758. self.Lines[self.R].SetRenderingRect(0, 0, 0, verticalShowingPercentage)
  1759. self.Lines[self.T].SetRenderingRect(0, 0, horizontalShowingPercentage, 0)
  1760. self.Lines[self.B].SetRenderingRect(0, 0, horizontalShowingPercentage, 0)
  1761. if self.Base:
  1762. self.Base.SetRenderingRect(0, 0, horizontalShowingPercentage, verticalShowingPercentage)
  1763. def ShowInternal(self):
  1764. self.Base.Show()
  1765. for wnd in self.Lines:
  1766. wnd.Show()
  1767. for wnd in self.Corners:
  1768. wnd.Show()
  1769. def HideInternal(self):
  1770. self.Base.Hide()
  1771. for wnd in self.Lines:
  1772. wnd.Hide()
  1773. for wnd in self.Corners:
  1774. wnd.Hide()
  1775. class ThinBoardCircle(Window):
  1776. CORNER_WIDTH = 4
  1777. CORNER_HEIGHT = 4
  1778. LINE_WIDTH = 4
  1779. LINE_HEIGHT = 4
  1780. BOARD_COLOR = grp.GenerateColor(255.0, 255.0, 255.0, 1.0)
  1781. LT = 0
  1782. LB = 1
  1783. RT = 2
  1784. RB = 3
  1785. L = 0
  1786. R = 1
  1787. T = 2
  1788. B = 3
  1789. def __init__(self, layer = "UI"):
  1790. Window.__init__(self, layer)
  1791. CornerFileNames = [ "d:/ymir work/ui/pattern/thinboardcircle/ThinBoard_Corner_"+dir+".tga" for dir in ["LeftTop_circle","LeftBottom_circle","RightTop_circle","RightBottom_circle"] ]
  1792. LineFileNames = [ "d:/ymir work/ui/pattern/thinboardcircle/ThinBoard_Line_"+dir+".tga" for dir in ["Left_circle","Right_circle","Top_circle","Bottom_circle"] ]
  1793. self.Corners = []
  1794. for fileName in CornerFileNames:
  1795. Corner = ExpandedImageBox()
  1796. Corner.AddFlag("attach")
  1797. Corner.AddFlag("not_pick")
  1798. Corner.LoadImage(fileName)
  1799. Corner.SetParent(self)
  1800. Corner.SetPosition(0, 0)
  1801. Corner.Show()
  1802. self.Corners.append(Corner)
  1803. self.Lines = []
  1804. for fileName in LineFileNames:
  1805. Line = ExpandedImageBox()
  1806. Line.AddFlag("attach")
  1807. Line.AddFlag("not_pick")
  1808. Line.LoadImage(fileName)
  1809. Line.SetParent(self)
  1810. Line.SetPosition(0, 0)
  1811. Line.Show()
  1812. self.Lines.append(Line)
  1813. Base = Bar()
  1814. Base.SetParent(self)
  1815. Base.AddFlag("attach")
  1816. Base.AddFlag("not_pick")
  1817. Base.SetPosition(self.CORNER_WIDTH, self.CORNER_HEIGHT)
  1818. Base.SetColor(self.BOARD_COLOR)
  1819. Base.Show()
  1820. self.Base = Base
  1821. self.Lines[self.L].SetPosition(0, self.CORNER_HEIGHT)
  1822. self.Lines[self.T].SetPosition(self.CORNER_WIDTH, 0)
  1823. def __del__(self):
  1824. Window.__del__(self)
  1825. def SetSize(self, width, height):
  1826. width = max(self.CORNER_WIDTH*2, width)
  1827. height = max(self.CORNER_HEIGHT*2, height)
  1828. Window.SetSize(self, width, height)
  1829. self.Corners[self.LB].SetPosition(0, height - self.CORNER_HEIGHT)
  1830. self.Corners[self.RT].SetPosition(width - self.CORNER_WIDTH, 0)
  1831. self.Corners[self.RB].SetPosition(width - self.CORNER_WIDTH, height - self.CORNER_HEIGHT)
  1832. self.Lines[self.R].SetPosition(width - self.CORNER_WIDTH, self.CORNER_HEIGHT)
  1833. self.Lines[self.B].SetPosition(self.CORNER_HEIGHT, height - self.CORNER_HEIGHT)
  1834. verticalShowingPercentage = float((height - self.CORNER_HEIGHT*2) - self.LINE_HEIGHT) / self.LINE_HEIGHT
  1835. horizontalShowingPercentage = float((width - self.CORNER_WIDTH*2) - self.LINE_WIDTH) / self.LINE_WIDTH
  1836. self.Lines[self.L].SetRenderingRect(0, 0, 0, verticalShowingPercentage)
  1837. self.Lines[self.R].SetRenderingRect(0, 0, 0, verticalShowingPercentage)
  1838. self.Lines[self.T].SetRenderingRect(0, 0, horizontalShowingPercentage, 0)
  1839. self.Lines[self.B].SetRenderingRect(0, 0, horizontalShowingPercentage, 0)
  1840. self.Base.SetSize(width - self.CORNER_WIDTH*2, height - self.CORNER_HEIGHT*2)
  1841. def ShowInternal(self):
  1842. self.Base.Show()
  1843. for wnd in self.Lines:
  1844. wnd.Show()
  1845. for wnd in self.Corners:
  1846. wnd.Show()
  1847. def HideInternal(self):
  1848. self.Base.Hide()
  1849. for wnd in self.Lines:
  1850. wnd.Hide()
  1851. for wnd in self.Corners:
  1852. wnd.Hide()
  1853. class ScrollBar(Window):
  1854. SCROLLBAR_WIDTH = 17
  1855. SCROLLBAR_MIDDLE_HEIGHT = 9
  1856. SCROLLBAR_BUTTON_WIDTH = 17
  1857. SCROLLBAR_BUTTON_HEIGHT = 17
  1858. MIDDLE_BAR_POS = 5
  1859. MIDDLE_BAR_UPPER_PLACE = 3
  1860. MIDDLE_BAR_DOWNER_PLACE = 4
  1861. TEMP_SPACE = MIDDLE_BAR_UPPER_PLACE + MIDDLE_BAR_DOWNER_PLACE
  1862. class MiddleBar(DragButton):
  1863. def __init__(self):
  1864. DragButton.__init__(self)
  1865. self.AddFlag("movable")
  1866. #self.AddFlag("restrict_x")
  1867. def MakeImage(self):
  1868. top = ImageBox()
  1869. top.SetParent(self)
  1870. top.LoadImage("d:/ymir work/ui/pattern/ScrollBar_Top.tga")
  1871. top.SetPosition(0, 0)
  1872. top.AddFlag("not_pick")
  1873. top.Show()
  1874. bottom = ImageBox()
  1875. bottom.SetParent(self)
  1876. bottom.LoadImage("d:/ymir work/ui/pattern/ScrollBar_Bottom.tga")
  1877. bottom.AddFlag("not_pick")
  1878. bottom.Show()
  1879. middle = ExpandedImageBox()
  1880. middle.SetParent(self)
  1881. middle.LoadImage("d:/ymir work/ui/pattern/ScrollBar_Middle.tga")
  1882. middle.SetPosition(0, 4)
  1883. middle.AddFlag("not_pick")
  1884. middle.Show()
  1885. self.top = top
  1886. self.bottom = bottom
  1887. self.middle = middle
  1888. def SetSize(self, height):
  1889. height = max(12, height)
  1890. DragButton.SetSize(self, 10, height)
  1891. self.bottom.SetPosition(0, height-4)
  1892. height -= 4*3
  1893. self.middle.SetRenderingRect(0, 0, 0, float(height)/4.0)
  1894. def __init__(self):
  1895. Window.__init__(self)
  1896. self.pageSize = 1
  1897. self.curPos = 0.0
  1898. self.eventScroll = lambda *arg: None
  1899. self.lockFlag = False
  1900. self.scrollStep = 0.20
  1901. self.CreateScrollBar()
  1902. def __del__(self):
  1903. Window.__del__(self)
  1904. def CreateScrollBar(self):
  1905. barSlot = Bar3D()
  1906. barSlot.SetParent(self)
  1907. barSlot.AddFlag("not_pick")
  1908. barSlot.Show()
  1909. middleBar = self.MiddleBar()
  1910. middleBar.SetParent(self)
  1911. middleBar.SetMoveEvent(__mem_func__(self.OnMove))
  1912. middleBar.Show()
  1913. middleBar.MakeImage()
  1914. middleBar.SetSize(12)
  1915. upButton = Button()
  1916. upButton.SetParent(self)
  1917. upButton.SetEvent(__mem_func__(self.OnUp))
  1918. upButton.SetUpVisual("d:/ymir work/ui/public/scrollbar_up_button_01.sub")
  1919. upButton.SetOverVisual("d:/ymir work/ui/public/scrollbar_up_button_02.sub")
  1920. upButton.SetDownVisual("d:/ymir work/ui/public/scrollbar_up_button_03.sub")
  1921. upButton.Show()
  1922. downButton = Button()
  1923. downButton.SetParent(self)
  1924. downButton.SetEvent(__mem_func__(self.OnDown))
  1925. downButton.SetUpVisual("d:/ymir work/ui/public/scrollbar_down_button_01.sub")
  1926. downButton.SetOverVisual("d:/ymir work/ui/public/scrollbar_down_button_02.sub")
  1927. downButton.SetDownVisual("d:/ymir work/ui/public/scrollbar_down_button_03.sub")
  1928. downButton.Show()
  1929. self.upButton = upButton
  1930. self.downButton = downButton
  1931. self.middleBar = middleBar
  1932. self.barSlot = barSlot
  1933. self.SCROLLBAR_WIDTH = self.upButton.GetWidth()
  1934. self.SCROLLBAR_MIDDLE_HEIGHT = self.middleBar.GetHeight()
  1935. self.SCROLLBAR_BUTTON_WIDTH = self.upButton.GetWidth()
  1936. self.SCROLLBAR_BUTTON_HEIGHT = self.upButton.GetHeight()
  1937. def Destroy(self):
  1938. self.middleBar = None
  1939. self.upButton = None
  1940. self.downButton = None
  1941. self.eventScroll = lambda *arg: None
  1942. def SetScrollEvent(self, event):
  1943. self.eventScroll = event
  1944. def SetMiddleBarSize(self, pageScale):
  1945. realHeight = self.GetHeight() - self.SCROLLBAR_BUTTON_HEIGHT*2
  1946. self.SCROLLBAR_MIDDLE_HEIGHT = int(pageScale * float(realHeight))
  1947. self.middleBar.SetSize(self.SCROLLBAR_MIDDLE_HEIGHT)
  1948. self.pageSize = (self.GetHeight() - self.SCROLLBAR_BUTTON_HEIGHT*2) - self.SCROLLBAR_MIDDLE_HEIGHT - (self.TEMP_SPACE)
  1949. def SetScrollBarSize(self, height):
  1950. self.pageSize = (height - self.SCROLLBAR_BUTTON_HEIGHT*2) - self.SCROLLBAR_MIDDLE_HEIGHT - (self.TEMP_SPACE)
  1951. self.SetSize(self.SCROLLBAR_WIDTH, height)
  1952. self.upButton.SetPosition(0, 0)
  1953. self.downButton.SetPosition(0, height - self.SCROLLBAR_BUTTON_HEIGHT)
  1954. self.middleBar.SetRestrictMovementArea(self.MIDDLE_BAR_POS, self.SCROLLBAR_BUTTON_HEIGHT + self.MIDDLE_BAR_UPPER_PLACE, self.MIDDLE_BAR_POS+2, height - self.SCROLLBAR_BUTTON_HEIGHT*2 - self.TEMP_SPACE)
  1955. self.middleBar.SetPosition(self.MIDDLE_BAR_POS, 0)
  1956. self.UpdateBarSlot()
  1957. def UpdateBarSlot(self):
  1958. self.barSlot.SetPosition(0, self.SCROLLBAR_BUTTON_HEIGHT)
  1959. self.barSlot.SetSize(self.GetWidth() - 2, self.GetHeight() - self.SCROLLBAR_BUTTON_HEIGHT*2 - 2)
  1960. def GetPos(self):
  1961. return self.curPos
  1962. def SetPos(self, pos):
  1963. pos = max(0.0, pos)
  1964. pos = min(1.0, pos)
  1965. newPos = float(self.pageSize) * pos
  1966. self.middleBar.SetPosition(self.MIDDLE_BAR_POS, int(newPos) + self.SCROLLBAR_BUTTON_HEIGHT + self.MIDDLE_BAR_UPPER_PLACE)
  1967. self.OnMove()
  1968. def SetScrollStep(self, step):
  1969. self.scrollStep = step
  1970. def GetScrollStep(self):
  1971. return self.scrollStep
  1972. def OnUp(self):
  1973. self.SetPos(self.curPos-self.scrollStep)
  1974. def OnDown(self):
  1975. self.SetPos(self.curPos+self.scrollStep)
  1976. def OnMove(self):
  1977. if self.lockFlag:
  1978. return
  1979. if 0 == self.pageSize:
  1980. return
  1981. (xLocal, yLocal) = self.middleBar.GetLocalPosition()
  1982. self.curPos = float(yLocal - self.SCROLLBAR_BUTTON_HEIGHT - self.MIDDLE_BAR_UPPER_PLACE) / float(self.pageSize)
  1983. self.eventScroll()
  1984. def OnMouseLeftButtonDown(self):
  1985. (xMouseLocalPosition, yMouseLocalPosition) = self.GetMouseLocalPosition()
  1986. pickedPos = yMouseLocalPosition - self.SCROLLBAR_BUTTON_HEIGHT - self.SCROLLBAR_MIDDLE_HEIGHT/2
  1987. newPos = float(pickedPos) / float(self.pageSize)
  1988. self.SetPos(newPos)
  1989. def LockScroll(self):
  1990. self.lockFlag = True
  1991. def UnlockScroll(self):
  1992. self.lockFlag = False
  1993. class ThinScrollBar(ScrollBar):
  1994. def CreateScrollBar(self):
  1995. middleBar = self.MiddleBar()
  1996. middleBar.SetParent(self)
  1997. middleBar.SetMoveEvent(__mem_func__(self.OnMove))
  1998. middleBar.Show()
  1999. middleBar.SetUpVisual("d:/ymir work/ui/public/scrollbar_thin_middle_button_01.sub")
  2000. middleBar.SetOverVisual("d:/ymir work/ui/public/scrollbar_thin_middle_button_02.sub")
  2001. middleBar.SetDownVisual("d:/ymir work/ui/public/scrollbar_thin_middle_button_03.sub")
  2002. upButton = Button()
  2003. upButton.SetParent(self)
  2004. upButton.SetUpVisual("d:/ymir work/ui/public/scrollbar_thin_up_button_01.sub")
  2005. upButton.SetOverVisual("d:/ymir work/ui/public/scrollbar_thin_up_button_02.sub")
  2006. upButton.SetDownVisual("d:/ymir work/ui/public/scrollbar_thin_up_button_03.sub")
  2007. upButton.SetEvent(__mem_func__(self.OnUp))
  2008. upButton.Show()
  2009. downButton = Button()
  2010. downButton.SetParent(self)
  2011. downButton.SetUpVisual("d:/ymir work/ui/public/scrollbar_thin_down_button_01.sub")
  2012. downButton.SetOverVisual("d:/ymir work/ui/public/scrollbar_thin_down_button_02.sub")
  2013. downButton.SetDownVisual("d:/ymir work/ui/public/scrollbar_thin_down_button_03.sub")
  2014. downButton.SetEvent(__mem_func__(self.OnDown))
  2015. downButton.Show()
  2016. self.middleBar = middleBar
  2017. self.upButton = upButton
  2018. self.downButton = downButton
  2019. self.SCROLLBAR_WIDTH = self.upButton.GetWidth()
  2020. self.SCROLLBAR_MIDDLE_HEIGHT = self.middleBar.GetHeight()
  2021. self.SCROLLBAR_BUTTON_WIDTH = self.upButton.GetWidth()
  2022. self.SCROLLBAR_BUTTON_HEIGHT = self.upButton.GetHeight()
  2023. self.MIDDLE_BAR_POS = 0
  2024. self.MIDDLE_BAR_UPPER_PLACE = 0
  2025. self.MIDDLE_BAR_DOWNER_PLACE = 0
  2026. self.TEMP_SPACE = 0
  2027. def UpdateBarSlot(self):
  2028. pass
  2029. class SmallThinScrollBar(ScrollBar):
  2030. def CreateScrollBar(self):
  2031. middleBar = self.MiddleBar()
  2032. middleBar.SetParent(self)
  2033. middleBar.SetMoveEvent(__mem_func__(self.OnMove))
  2034. middleBar.Show()
  2035. middleBar.SetUpVisual("d:/ymir work/ui/public/scrollbar_small_thin_middle_button_01.sub")
  2036. middleBar.SetOverVisual("d:/ymir work/ui/public/scrollbar_small_thin_middle_button_01.sub")
  2037. middleBar.SetDownVisual("d:/ymir work/ui/public/scrollbar_small_thin_middle_button_01.sub")
  2038. upButton = Button()
  2039. upButton.SetParent(self)
  2040. upButton.SetUpVisual("d:/ymir work/ui/public/scrollbar_small_thin_up_button_01.sub")
  2041. upButton.SetOverVisual("d:/ymir work/ui/public/scrollbar_small_thin_up_button_02.sub")
  2042. upButton.SetDownVisual("d:/ymir work/ui/public/scrollbar_small_thin_up_button_03.sub")
  2043. upButton.SetEvent(__mem_func__(self.OnUp))
  2044. upButton.Show()
  2045. downButton = Button()
  2046. downButton.SetParent(self)
  2047. downButton.SetUpVisual("d:/ymir work/ui/public/scrollbar_small_thin_down_button_01.sub")
  2048. downButton.SetOverVisual("d:/ymir work/ui/public/scrollbar_small_thin_down_button_02.sub")
  2049. downButton.SetDownVisual("d:/ymir work/ui/public/scrollbar_small_thin_down_button_03.sub")
  2050. downButton.SetEvent(__mem_func__(self.OnDown))
  2051. downButton.Show()
  2052. self.middleBar = middleBar
  2053. self.upButton = upButton
  2054. self.downButton = downButton
  2055. self.SCROLLBAR_WIDTH = self.upButton.GetWidth()
  2056. self.SCROLLBAR_MIDDLE_HEIGHT = self.middleBar.GetHeight()
  2057. self.SCROLLBAR_BUTTON_WIDTH = self.upButton.GetWidth()
  2058. self.SCROLLBAR_BUTTON_HEIGHT = self.upButton.GetHeight()
  2059. self.MIDDLE_BAR_POS = 0
  2060. self.MIDDLE_BAR_UPPER_PLACE = 0
  2061. self.MIDDLE_BAR_DOWNER_PLACE = 0
  2062. self.TEMP_SPACE = 0
  2063. def UpdateBarSlot(self):
  2064. pass
  2065. class SliderBar(Window):
  2066. def __init__(self):
  2067. Window.__init__(self)
  2068. self.curPos = 1.0
  2069. self.pageSize = 1.0
  2070. self.eventChange = None
  2071. self.__CreateBackGroundImage()
  2072. self.__CreateCursor()
  2073. def __del__(self):
  2074. Window.__del__(self)
  2075. def __CreateBackGroundImage(self):
  2076. img = ImageBox()
  2077. img.SetParent(self)
  2078. img.LoadImage("d:/ymir work/ui/game/windows/sliderbar.sub")
  2079. img.Show()
  2080. self.backGroundImage = img
  2081. ##
  2082. self.SetSize(self.backGroundImage.GetWidth(), self.backGroundImage.GetHeight())
  2083. def __CreateCursor(self):
  2084. cursor = DragButton()
  2085. cursor.AddFlag("movable")
  2086. cursor.AddFlag("restrict_y")
  2087. cursor.SetParent(self)
  2088. cursor.SetMoveEvent(__mem_func__(self.__OnMove))
  2089. cursor.SetUpVisual("d:/ymir work/ui/game/windows/sliderbar_cursor.sub")
  2090. cursor.SetOverVisual("d:/ymir work/ui/game/windows/sliderbar_cursor.sub")
  2091. cursor.SetDownVisual("d:/ymir work/ui/game/windows/sliderbar_cursor.sub")
  2092. cursor.Show()
  2093. self.cursor = cursor
  2094. ##
  2095. self.cursor.SetRestrictMovementArea(0, 0, self.backGroundImage.GetWidth(), 0)
  2096. self.pageSize = self.backGroundImage.GetWidth() - self.cursor.GetWidth()
  2097. def __OnMove(self):
  2098. (xLocal, yLocal) = self.cursor.GetLocalPosition()
  2099. self.curPos = float(xLocal) / float(self.pageSize)
  2100. if self.eventChange:
  2101. self.eventChange()
  2102. def SetSliderPos(self, pos):
  2103. self.curPos = pos
  2104. self.cursor.SetPosition(int(self.pageSize * pos), 0)
  2105. def GetSliderPos(self):
  2106. return self.curPos
  2107. def SetEvent(self, event):
  2108. self.eventChange = event
  2109. def Enable(self):
  2110. self.cursor.Show()
  2111. def Disable(self):
  2112. self.cursor.Hide()
  2113. class ListBox(Window):
  2114. TEMPORARY_PLACE = 3
  2115. def __init__(self, layer = "UI"):
  2116. Window.__init__(self, layer)
  2117. self.overLine = -1
  2118. self.selectedLine = -1
  2119. self.width = 0
  2120. self.height = 0
  2121. self.stepSize = 17
  2122. self.basePos = 0
  2123. self.showLineCount = 0
  2124. self.itemCenterAlign = True
  2125. self.itemList = []
  2126. self.keyDict = {}
  2127. self.textDict = {}
  2128. self.event = lambda *arg: None
  2129. def __del__(self):
  2130. Window.__del__(self)
  2131. def SetWidth(self, width):
  2132. self.SetSize(width, self.height)
  2133. def SetSize(self, width, height):
  2134. Window.SetSize(self, width, height)
  2135. self.width = width
  2136. self.height = height
  2137. def SetTextCenterAlign(self, flag):
  2138. self.itemCenterAlign = flag
  2139. def SetBasePos(self, pos):
  2140. self.basePos = pos
  2141. self._LocateItem()
  2142. def ClearItem(self):
  2143. self.keyDict = {}
  2144. self.textDict = {}
  2145. self.itemList = []
  2146. self.overLine = -1
  2147. self.selectedLine = -1
  2148. def InsertItem(self, number, text):
  2149. self.keyDict[len(self.itemList)] = number
  2150. self.textDict[len(self.itemList)] = text
  2151. textLine = TextLine()
  2152. textLine.SetParent(self)
  2153. textLine.SetText(text)
  2154. textLine.Show()
  2155. if self.itemCenterAlign:
  2156. textLine.SetWindowHorizontalAlignCenter()
  2157. textLine.SetHorizontalAlignCenter()
  2158. self.itemList.append(textLine)
  2159. self._LocateItem()
  2160. def ChangeItem(self, number, text):
  2161. for key, value in self.keyDict.items():
  2162. if value == number:
  2163. self.textDict[key] = text
  2164. if number < len(self.itemList):
  2165. self.itemList[key].SetText(text)
  2166. return
  2167. def LocateItem(self):
  2168. self._LocateItem()
  2169. def _LocateItem(self):
  2170. skipCount = self.basePos
  2171. yPos = 0
  2172. self.showLineCount = 0
  2173. for textLine in self.itemList:
  2174. textLine.Hide()
  2175. if skipCount > 0:
  2176. skipCount -= 1
  2177. continue
  2178. if localeInfo.IsARABIC():
  2179. w, h = textLine.GetTextSize()
  2180. textLine.SetPosition(w+10, yPos + 3)
  2181. else:
  2182. textLine.SetPosition(0, yPos + 3)
  2183. yPos += self.stepSize
  2184. if yPos <= self.GetHeight():
  2185. self.showLineCount += 1
  2186. textLine.Show()
  2187. def ArrangeItem(self):
  2188. self.SetSize(self.width, len(self.itemList) * self.stepSize)
  2189. self._LocateItem()
  2190. def GetViewItemCount(self):
  2191. return int(self.GetHeight() / self.stepSize)
  2192. def GetItemCount(self):
  2193. return len(self.itemList)
  2194. def SetEvent(self, event):
  2195. self.event = event
  2196. def SelectItem(self, line):
  2197. if not self.keyDict.has_key(line):
  2198. return
  2199. if line == self.selectedLine:
  2200. return
  2201. self.selectedLine = line
  2202. self.event(self.keyDict.get(line, 0), self.textDict.get(line, "None"))
  2203. def GetSelectedItem(self):
  2204. return self.keyDict.get(self.selectedLine, 0)
  2205. def OnMouseLeftButtonDown(self):
  2206. if self.overLine < 0:
  2207. return
  2208. def OnMouseLeftButtonUp(self):
  2209. if self.overLine >= 0:
  2210. self.SelectItem(self.overLine+self.basePos)
  2211. def OnUpdate(self):
  2212. self.overLine = -1
  2213. if self.IsIn():
  2214. x, y = self.GetGlobalPosition()
  2215. height = self.GetHeight()
  2216. xMouse, yMouse = wndMgr.GetMousePosition()
  2217. if yMouse - y < height - 1:
  2218. self.overLine = (yMouse - y) / self.stepSize
  2219. if self.overLine < 0:
  2220. self.overLine = -1
  2221. if self.overLine >= len(self.itemList):
  2222. self.overLine = -1
  2223. def OnRender(self):
  2224. xRender, yRender = self.GetGlobalPosition()
  2225. yRender -= self.TEMPORARY_PLACE
  2226. widthRender = self.width
  2227. heightRender = self.height + self.TEMPORARY_PLACE*2
  2228. if localeInfo.IsCIBN10:
  2229. if -1 != self.overLine and self.keyDict[self.overLine] != -1:
  2230. grp.SetColor(HALF_WHITE_COLOR)
  2231. grp.RenderBar(xRender + 2, yRender + self.overLine*self.stepSize + 4, self.width - 3, self.stepSize)
  2232. if -1 != self.selectedLine and self.keyDict[self.selectedLine] != -1:
  2233. if self.selectedLine >= self.basePos:
  2234. if self.selectedLine - self.basePos < self.showLineCount:
  2235. grp.SetColor(SELECT_COLOR)
  2236. grp.RenderBar(xRender + 2, yRender + (self.selectedLine-self.basePos)*self.stepSize + 4, self.width - 3, self.stepSize)
  2237. else:
  2238. if -1 != self.overLine:
  2239. grp.SetColor(HALF_WHITE_COLOR)
  2240. grp.RenderBar(xRender + 2, yRender + self.overLine*self.stepSize + 4, self.width - 3, self.stepSize)
  2241. if -1 != self.selectedLine:
  2242. if self.selectedLine >= self.basePos:
  2243. if self.selectedLine - self.basePos < self.showLineCount:
  2244. grp.SetColor(SELECT_COLOR)
  2245. grp.RenderBar(xRender + 2, yRender + (self.selectedLine-self.basePos)*self.stepSize + 4, self.width - 3, self.stepSize)
  2246. class ListBox2(ListBox):
  2247. def __init__(self, *args, **kwargs):
  2248. ListBox.__init__(self, *args, **kwargs)
  2249. self.rowCount = 10
  2250. self.barWidth = 0
  2251. self.colCount = 0
  2252. def SetRowCount(self, rowCount):
  2253. self.rowCount = rowCount
  2254. def SetSize(self, width, height):
  2255. ListBox.SetSize(self, width, height)
  2256. self._RefreshForm()
  2257. def ClearItem(self):
  2258. ListBox.ClearItem(self)
  2259. self._RefreshForm()
  2260. def InsertItem(self, *args, **kwargs):
  2261. ListBox.InsertItem(self, *args, **kwargs)
  2262. self._RefreshForm()
  2263. def OnUpdate(self):
  2264. mpos = wndMgr.GetMousePosition()
  2265. self.overLine = self._CalcPointIndex(mpos)
  2266. def OnRender(self):
  2267. x, y = self.GetGlobalPosition()
  2268. pos = (x + 2, y)
  2269. if -1 != self.overLine:
  2270. grp.SetColor(HALF_WHITE_COLOR)
  2271. self._RenderBar(pos, self.overLine)
  2272. if -1 != self.selectedLine:
  2273. if self.selectedLine >= self.basePos:
  2274. if self.selectedLine - self.basePos < self.showLineCount:
  2275. grp.SetColor(SELECT_COLOR)
  2276. self._RenderBar(pos, self.selectedLine-self.basePos)
  2277. def _CalcPointIndex(self, mpos):
  2278. if self.IsIn():
  2279. px, py = mpos
  2280. gx, gy = self.GetGlobalPosition()
  2281. lx, ly = px - gx, py - gy
  2282. col = lx / self.barWidth
  2283. row = ly / self.stepSize
  2284. idx = col * self.rowCount + row
  2285. if col >= 0 and col < self.colCount:
  2286. if row >= 0 and row < self.rowCount:
  2287. if idx >= 0 and idx < len(self.itemList):
  2288. return idx
  2289. return -1
  2290. def _CalcRenderPos(self, pos, idx):
  2291. x, y = pos
  2292. row = idx % self.rowCount
  2293. col = idx / self.rowCount
  2294. return (x + col * self.barWidth, y + row * self.stepSize)
  2295. def _RenderBar(self, basePos, idx):
  2296. x, y = self._CalcRenderPos(basePos, idx)
  2297. grp.RenderBar(x, y, self.barWidth - 3, self.stepSize)
  2298. def _LocateItem(self):
  2299. pos = (0, self.TEMPORARY_PLACE)
  2300. self.showLineCount = 0
  2301. for textLine in self.itemList:
  2302. x, y = self._CalcRenderPos(pos, self.showLineCount)
  2303. textLine.SetPosition(x, y)
  2304. textLine.Show()
  2305. self.showLineCount += 1
  2306. def _RefreshForm(self):
  2307. if len(self.itemList) % self.rowCount:
  2308. self.colCount = len(self.itemList) / self.rowCount + 1
  2309. else:
  2310. self.colCount = len(self.itemList) / self.rowCount
  2311. if self.colCount:
  2312. self.barWidth = self.width / self.colCount
  2313. else:
  2314. self.barWidth = self.width
  2315. class ComboBox(Window):
  2316. class ListBoxWithBoard(ListBox):
  2317. def __init__(self, layer):
  2318. ListBox.__init__(self, layer)
  2319. def OnRender(self):
  2320. xRender, yRender = self.GetGlobalPosition()
  2321. yRender -= self.TEMPORARY_PLACE
  2322. widthRender = self.width
  2323. heightRender = self.height + self.TEMPORARY_PLACE*2
  2324. grp.SetColor(BACKGROUND_COLOR)
  2325. grp.RenderBar(xRender, yRender, widthRender, heightRender)
  2326. grp.SetColor(DARK_COLOR)
  2327. grp.RenderLine(xRender, yRender, widthRender, 0)
  2328. grp.RenderLine(xRender, yRender, 0, heightRender)
  2329. grp.SetColor(BRIGHT_COLOR)
  2330. grp.RenderLine(xRender, yRender+heightRender, widthRender, 0)
  2331. grp.RenderLine(xRender+widthRender, yRender, 0, heightRender)
  2332. ListBox.OnRender(self)
  2333. def __init__(self):
  2334. Window.__init__(self)
  2335. self.x = 0
  2336. self.y = 0
  2337. self.width = 0
  2338. self.height = 0
  2339. self.isSelected = False
  2340. self.isOver = False
  2341. self.isListOpened = False
  2342. self.event = lambda *arg: None
  2343. self.enable = True
  2344. self.textLine = MakeTextLine(self)
  2345. self.textLine.SetText(localeInfo.UI_ITEM)
  2346. self.listBox = self.ListBoxWithBoard("TOP_MOST")
  2347. self.listBox.SetPickAlways()
  2348. self.listBox.SetParent(self)
  2349. self.listBox.SetEvent(__mem_func__(self.OnSelectItem))
  2350. self.listBox.Hide()
  2351. def __del__(self):
  2352. Window.__del__(self)
  2353. def Destroy(self):
  2354. self.textLine = None
  2355. self.listBox = None
  2356. def SetPosition(self, x, y):
  2357. Window.SetPosition(self, x, y)
  2358. self.x = x
  2359. self.y = y
  2360. self.__ArrangeListBox()
  2361. def SetSize(self, width, height):
  2362. Window.SetSize(self, width, height)
  2363. self.width = width
  2364. self.height = height
  2365. self.textLine.UpdateRect()
  2366. self.__ArrangeListBox()
  2367. def __ArrangeListBox(self):
  2368. self.listBox.SetPosition(0, self.height + 5)
  2369. self.listBox.SetWidth(self.width)
  2370. def Enable(self):
  2371. self.enable = True
  2372. def Disable(self):
  2373. self.enable = False
  2374. self.textLine.SetText("")
  2375. self.CloseListBox()
  2376. def SetEvent(self, event):
  2377. self.event = event
  2378. def ClearItem(self):
  2379. self.CloseListBox()
  2380. self.listBox.ClearItem()
  2381. def InsertItem(self, index, name):
  2382. self.listBox.InsertItem(index, name)
  2383. self.listBox.ArrangeItem()
  2384. def SetCurrentItem(self, text):
  2385. self.textLine.SetText(text)
  2386. def SelectItem(self, key):
  2387. self.listBox.SelectItem(key)
  2388. def OnSelectItem(self, index, name):
  2389. self.CloseListBox()
  2390. self.event(index)
  2391. def CloseListBox(self):
  2392. self.isListOpened = False
  2393. self.listBox.Hide()
  2394. def OnMouseLeftButtonDown(self):
  2395. if not self.enable:
  2396. return
  2397. self.isSelected = True
  2398. def OnMouseLeftButtonUp(self):
  2399. if not self.enable:
  2400. return
  2401. self.isSelected = False
  2402. if self.isListOpened:
  2403. self.CloseListBox()
  2404. else:
  2405. if self.listBox.GetItemCount() > 0:
  2406. self.isListOpened = True
  2407. self.listBox.Show()
  2408. self.__ArrangeListBox()
  2409. def OnUpdate(self):
  2410. if not self.enable:
  2411. return
  2412. if self.IsIn():
  2413. self.isOver = True
  2414. else:
  2415. self.isOver = False
  2416. def OnRender(self):
  2417. self.x, self.y = self.GetGlobalPosition()
  2418. xRender = self.x
  2419. yRender = self.y
  2420. widthRender = self.width
  2421. heightRender = self.height
  2422. grp.SetColor(BACKGROUND_COLOR)
  2423. grp.RenderBar(xRender, yRender, widthRender, heightRender)
  2424. grp.SetColor(DARK_COLOR)
  2425. grp.RenderLine(xRender, yRender, widthRender, 0)
  2426. grp.RenderLine(xRender, yRender, 0, heightRender)
  2427. grp.SetColor(BRIGHT_COLOR)
  2428. grp.RenderLine(xRender, yRender+heightRender, widthRender, 0)
  2429. grp.RenderLine(xRender+widthRender, yRender, 0, heightRender)
  2430. if self.isOver:
  2431. grp.SetColor(HALF_WHITE_COLOR)
  2432. grp.RenderBar(xRender + 2, yRender + 3, self.width - 3, heightRender - 5)
  2433. if self.isSelected:
  2434. grp.SetColor(WHITE_COLOR)
  2435. grp.RenderBar(xRender + 2, yRender + 3, self.width - 3, heightRender - 5)
  2436. ###################################################################################################
  2437. ## Python Script Loader
  2438. ###################################################################################################
  2439. class ScriptWindow(Window):
  2440. def __init__(self, layer = "UI"):
  2441. Window.__init__(self, layer)
  2442. self.Children = []
  2443. self.ElementDictionary = {}
  2444. def __del__(self):
  2445. Window.__del__(self)
  2446. def ClearDictionary(self):
  2447. self.Children = []
  2448. self.ElementDictionary = {}
  2449. def InsertChild(self, name, child):
  2450. self.ElementDictionary[name] = child
  2451. def IsChild(self, name):
  2452. return self.ElementDictionary.has_key(name)
  2453. def GetChild(self, name):
  2454. return self.ElementDictionary[name]
  2455. def GetChild2(self, name):
  2456. return self.ElementDictionary.get(name, None)
  2457. class PythonScriptLoader(object):
  2458. BODY_KEY_LIST = ( "x", "y", "width", "height" )
  2459. #####
  2460. DEFAULT_KEY_LIST = ( "type", "x", "y", )
  2461. WINDOW_KEY_LIST = ( "width", "height", )
  2462. IMAGE_KEY_LIST = ( "image", )
  2463. EXPANDED_IMAGE_KEY_LIST = ( "image", )
  2464. ANI_IMAGE_KEY_LIST = ( "images", )
  2465. SLOT_KEY_LIST = ( "width", "height", "slot", )
  2466. CANDIDATE_LIST_KEY_LIST = ( "item_step", "item_xsize", "item_ysize", )
  2467. GRID_TABLE_KEY_LIST = ( "start_index", "x_count", "y_count", "x_step", "y_step", )
  2468. EDIT_LINE_KEY_LIST = ( "width", "height", "input_limit", )
  2469. COMBO_BOX_KEY_LIST = ( "width", "height", "item", )
  2470. TITLE_BAR_KEY_LIST = ( "width", )
  2471. HORIZONTAL_BAR_KEY_LIST = ( "width", )
  2472. BOARD_KEY_LIST = ( "width", "height", )
  2473. BOARD_WITH_TITLEBAR_KEY_LIST = ( "width", "height", "title", )
  2474. BOX_KEY_LIST = ( "width", "height", )
  2475. BAR_KEY_LIST = ( "width", "height", )
  2476. LINE_KEY_LIST = ( "width", "height", )
  2477. SLOTBAR_KEY_LIST = ( "width", "height", )
  2478. GAUGE_KEY_LIST = ( "width", "color", )
  2479. SCROLLBAR_KEY_LIST = ( "size", )
  2480. LIST_BOX_KEY_LIST = ( "width", "height", )
  2481. def __init__(self):
  2482. self.Clear()
  2483. def Clear(self):
  2484. self.ScriptDictionary = { "SCREEN_WIDTH" : wndMgr.GetScreenWidth(), "SCREEN_HEIGHT" : wndMgr.GetScreenHeight() }
  2485. self.InsertFunction = 0
  2486. def LoadScriptFile(self, window, FileName):
  2487. import exception
  2488. import exceptions
  2489. import os
  2490. import errno
  2491. self.Clear()
  2492. print "===== Load Script File : %s" % (FileName)
  2493. try:
  2494. # chr, player 등은 sandbox 내에서 import가 허용되지 않기 때문에,(봇이 악용할 여지가 매우 큼.)
  2495. # 미리 script dictionary에 필요한 상수를 넣어놓는다.
  2496. import chr
  2497. import player
  2498. import app
  2499. self.ScriptDictionary["PLAYER_NAME_MAX_LEN"] = chr.PLAYER_NAME_MAX_LEN
  2500. self.ScriptDictionary["DRAGON_SOUL_EQUIPMENT_SLOT_START"] = player.DRAGON_SOUL_EQUIPMENT_SLOT_START
  2501. self.ScriptDictionary["LOCALE_PATH"] = app.GetLocalePath()
  2502. execfile(FileName, self.ScriptDictionary)
  2503. except IOError, err:
  2504. import sys
  2505. import dbg
  2506. dbg.TraceError("Failed to load script file : %s" % (FileName))
  2507. dbg.TraceError("error : %s" % (err))
  2508. exception.Abort("LoadScriptFile1")
  2509. except RuntimeError,err:
  2510. import sys
  2511. import dbg
  2512. dbg.TraceError("Failed to load script file : %s" % (FileName))
  2513. dbg.TraceError("error : %s" % (err))
  2514. exception.Abort("LoadScriptFile2")
  2515. except:
  2516. import sys
  2517. import dbg
  2518. dbg.TraceError("Failed to load script file : %s" % (FileName))
  2519. exception.Abort("LoadScriptFile!!!!!!!!!!!!!!")
  2520. #####
  2521. Body = self.ScriptDictionary["window"]
  2522. self.CheckKeyList("window", Body, self.BODY_KEY_LIST)
  2523. window.ClearDictionary()
  2524. self.InsertFunction = window.InsertChild
  2525. window.SetPosition(int(Body["x"]), int(Body["y"]))
  2526. if localeInfo.IsARABIC():
  2527. w = wndMgr.GetScreenWidth()
  2528. h = wndMgr.GetScreenHeight()
  2529. if Body.has_key("width"):
  2530. w = int(Body["width"])
  2531. if Body.has_key("height"):
  2532. h = int(Body["height"])
  2533. window.SetSize(w, h)
  2534. else:
  2535. window.SetSize(int(Body["width"]), int(Body["height"]))
  2536. if True == Body.has_key("style"):
  2537. for StyleList in Body["style"]:
  2538. window.AddFlag(StyleList)
  2539. self.LoadChildren(window, Body)
  2540. def LoadChildren(self, parent, dicChildren):
  2541. if localeInfo.IsARABIC():
  2542. parent.AddFlag( "rtl" )
  2543. if True == dicChildren.has_key("style"):
  2544. for style in dicChildren["style"]:
  2545. parent.AddFlag(style)
  2546. if False == dicChildren.has_key("children"):
  2547. return False
  2548. Index = 0
  2549. ChildrenList = dicChildren["children"]
  2550. parent.Children = range(len(ChildrenList))
  2551. for ElementValue in ChildrenList:
  2552. try:
  2553. Name = ElementValue["name"]
  2554. except KeyError:
  2555. Name = ElementValue["name"] = "NONAME"
  2556. try:
  2557. Type = ElementValue["type"]
  2558. except KeyError:
  2559. Type = ElementValue["type"] = "window"
  2560. if False == self.CheckKeyList(Name, ElementValue, self.DEFAULT_KEY_LIST):
  2561. del parent.Children[Index]
  2562. continue
  2563. if Type == "window":
  2564. parent.Children[Index] = ScriptWindow()
  2565. parent.Children[Index].SetParent(parent)
  2566. self.LoadElementWindow(parent.Children[Index], ElementValue, parent)
  2567. elif Type == "button":
  2568. parent.Children[Index] = Button()
  2569. parent.Children[Index].SetParent(parent)
  2570. self.LoadElementButton(parent.Children[Index], ElementValue, parent)
  2571. elif Type == "radio_button":
  2572. parent.Children[Index] = RadioButton()
  2573. parent.Children[Index].SetParent(parent)
  2574. self.LoadElementButton(parent.Children[Index], ElementValue, parent)
  2575. elif Type == "toggle_button":
  2576. parent.Children[Index] = ToggleButton()
  2577. parent.Children[Index].SetParent(parent)
  2578. self.LoadElementButton(parent.Children[Index], ElementValue, parent)
  2579. elif Type == "mark":
  2580. parent.Children[Index] = MarkBox()
  2581. parent.Children[Index].SetParent(parent)
  2582. self.LoadElementMark(parent.Children[Index], ElementValue, parent)
  2583. elif Type == "image":
  2584. parent.Children[Index] = ImageBox()
  2585. parent.Children[Index].SetParent(parent)
  2586. self.LoadElementImage(parent.Children[Index], ElementValue, parent)
  2587. elif Type == "expanded_image":
  2588. parent.Children[Index] = ExpandedImageBox()
  2589. parent.Children[Index].SetParent(parent)
  2590. self.LoadElementExpandedImage(parent.Children[Index], ElementValue, parent)
  2591. elif Type == "ani_image":
  2592. parent.Children[Index] = AniImageBox()
  2593. parent.Children[Index].SetParent(parent)
  2594. self.LoadElementAniImage(parent.Children[Index], ElementValue, parent)
  2595. elif Type == "slot":
  2596. parent.Children[Index] = SlotWindow()
  2597. parent.Children[Index].SetParent(parent)
  2598. self.LoadElementSlot(parent.Children[Index], ElementValue, parent)
  2599. elif Type == "candidate_list":
  2600. parent.Children[Index] = CandidateListBox()
  2601. parent.Children[Index].SetParent(parent)
  2602. self.LoadElementCandidateList(parent.Children[Index], ElementValue, parent)
  2603. elif Type == "grid_table":
  2604. parent.Children[Index] = GridSlotWindow()
  2605. parent.Children[Index].SetParent(parent)
  2606. self.LoadElementGridTable(parent.Children[Index], ElementValue, parent)
  2607. elif Type == "text":
  2608. parent.Children[Index] = TextLine()
  2609. parent.Children[Index].SetParent(parent)
  2610. self.LoadElementText(parent.Children[Index], ElementValue, parent)
  2611. elif Type == "editline":
  2612. parent.Children[Index] = EditLine()
  2613. parent.Children[Index].SetParent(parent)
  2614. self.LoadElementEditLine(parent.Children[Index], ElementValue, parent)
  2615. elif Type == "titlebar":
  2616. parent.Children[Index] = TitleBar()
  2617. parent.Children[Index].SetParent(parent)
  2618. self.LoadElementTitleBar(parent.Children[Index], ElementValue, parent)
  2619. elif Type == "horizontalbar":
  2620. parent.Children[Index] = HorizontalBar()
  2621. parent.Children[Index].SetParent(parent)
  2622. self.LoadElementHorizontalBar(parent.Children[Index], ElementValue, parent)
  2623. elif Type == "board":
  2624. parent.Children[Index] = Board()
  2625. parent.Children[Index].SetParent(parent)
  2626. self.LoadElementBoard(parent.Children[Index], ElementValue, parent)
  2627. elif Type == "board_with_titlebar":
  2628. parent.Children[Index] = BoardWithTitleBar()
  2629. parent.Children[Index].SetParent(parent)
  2630. self.LoadElementBoardWithTitleBar(parent.Children[Index], ElementValue, parent)
  2631. elif Type == "thinboard":
  2632. parent.Children[Index] = ThinBoard()
  2633. parent.Children[Index].SetParent(parent)
  2634. self.LoadElementThinBoard(parent.Children[Index], ElementValue, parent)
  2635. elif Type == "thinboard_gold":
  2636. parent.Children[Index] = ThinBoardGold()
  2637. parent.Children[Index].SetParent(parent)
  2638. self.LoadElementThinBoardGold(parent.Children[Index], ElementValue, parent)
  2639. elif Type == "thinboard_circle":
  2640. parent.Children[Index] = ThinBoardCircle()
  2641. parent.Children[Index].SetParent(parent)
  2642. self.LoadElementThinBoardCircle(parent.Children[Index], ElementValue, parent)
  2643. elif Type == "box":
  2644. parent.Children[Index] = Box()
  2645. parent.Children[Index].SetParent(parent)
  2646. self.LoadElementBox(parent.Children[Index], ElementValue, parent)
  2647. elif Type == "bar":
  2648. parent.Children[Index] = Bar()
  2649. parent.Children[Index].SetParent(parent)
  2650. self.LoadElementBar(parent.Children[Index], ElementValue, parent)
  2651. elif Type == "line":
  2652. parent.Children[Index] = Line()
  2653. parent.Children[Index].SetParent(parent)
  2654. self.LoadElementLine(parent.Children[Index], ElementValue, parent)
  2655. elif Type == "slotbar":
  2656. parent.Children[Index] = SlotBar()
  2657. parent.Children[Index].SetParent(parent)
  2658. self.LoadElementSlotBar(parent.Children[Index], ElementValue, parent)
  2659. elif Type == "gauge":
  2660. parent.Children[Index] = Gauge()
  2661. parent.Children[Index].SetParent(parent)
  2662. self.LoadElementGauge(parent.Children[Index], ElementValue, parent)
  2663. elif Type == "scrollbar":
  2664. parent.Children[Index] = ScrollBar()
  2665. parent.Children[Index].SetParent(parent)
  2666. self.LoadElementScrollBar(parent.Children[Index], ElementValue, parent)
  2667. elif Type == "thin_scrollbar":
  2668. parent.Children[Index] = ThinScrollBar()
  2669. parent.Children[Index].SetParent(parent)
  2670. self.LoadElementScrollBar(parent.Children[Index], ElementValue, parent)
  2671. elif Type == "small_thin_scrollbar":
  2672. parent.Children[Index] = SmallThinScrollBar()
  2673. parent.Children[Index].SetParent(parent)
  2674. self.LoadElementScrollBar(parent.Children[Index], ElementValue, parent)
  2675. elif Type == "sliderbar":
  2676. parent.Children[Index] = SliderBar()
  2677. parent.Children[Index].SetParent(parent)
  2678. self.LoadElementSliderBar(parent.Children[Index], ElementValue, parent)
  2679. elif Type == "listbox":
  2680. parent.Children[Index] = ListBox()
  2681. parent.Children[Index].SetParent(parent)
  2682. self.LoadElementListBox(parent.Children[Index], ElementValue, parent)
  2683. elif Type == "listbox2":
  2684. parent.Children[Index] = ListBox2()
  2685. parent.Children[Index].SetParent(parent)
  2686. self.LoadElementListBox2(parent.Children[Index], ElementValue, parent)
  2687. elif Type == "listboxex":
  2688. parent.Children[Index] = ListBoxEx()
  2689. parent.Children[Index].SetParent(parent)
  2690. self.LoadElementListBoxEx(parent.Children[Index], ElementValue, parent)
  2691. else:
  2692. Index += 1
  2693. continue
  2694. parent.Children[Index].SetWindowName(Name)
  2695. if 0 != self.InsertFunction:
  2696. self.InsertFunction(Name, parent.Children[Index])
  2697. self.LoadChildren(parent.Children[Index], ElementValue)
  2698. Index += 1
  2699. def CheckKeyList(self, name, value, key_list):
  2700. for DataKey in key_list:
  2701. if False == value.has_key(DataKey):
  2702. print "Failed to find data key", "[" + name + "/" + DataKey + "]"
  2703. return False
  2704. return True
  2705. def LoadDefaultData(self, window, value, parentWindow):
  2706. loc_x = int(value["x"])
  2707. loc_y = int(value["y"])
  2708. if value.has_key("vertical_align"):
  2709. if "center" == value["vertical_align"]:
  2710. window.SetWindowVerticalAlignCenter()
  2711. elif "bottom" == value["vertical_align"]:
  2712. window.SetWindowVerticalAlignBottom()
  2713. if parentWindow.IsRTL():
  2714. loc_x = int(value["x"]) + window.GetWidth()
  2715. if value.has_key("horizontal_align"):
  2716. if "center" == value["horizontal_align"]:
  2717. window.SetWindowHorizontalAlignCenter()
  2718. loc_x = - int(value["x"])
  2719. elif "right" == value["horizontal_align"]:
  2720. window.SetWindowHorizontalAlignLeft()
  2721. loc_x = int(value["x"]) - window.GetWidth()
  2722. ## loc_x = parentWindow.GetWidth() - int(value["x"]) + window.GetWidth()
  2723. else:
  2724. window.SetWindowHorizontalAlignRight()
  2725. if value.has_key("all_align"):
  2726. window.SetWindowVerticalAlignCenter()
  2727. window.SetWindowHorizontalAlignCenter()
  2728. loc_x = - int(value["x"])
  2729. else:
  2730. if value.has_key("horizontal_align"):
  2731. if "center" == value["horizontal_align"]:
  2732. window.SetWindowHorizontalAlignCenter()
  2733. elif "right" == value["horizontal_align"]:
  2734. window.SetWindowHorizontalAlignRight()
  2735. window.SetPosition(loc_x, loc_y)
  2736. window.Show()
  2737. ## Window
  2738. def LoadElementWindow(self, window, value, parentWindow):
  2739. if False == self.CheckKeyList(value["name"], value, self.WINDOW_KEY_LIST):
  2740. return False
  2741. window.SetSize(int(value["width"]), int(value["height"]))
  2742. self.LoadDefaultData(window, value, parentWindow)
  2743. return True
  2744. ## Button
  2745. def LoadElementButton(self, window, value, parentWindow):
  2746. if value.has_key("width") and value.has_key("height"):
  2747. window.SetSize(int(value["width"]), int(value["height"]))
  2748. if True == value.has_key("default_image"):
  2749. window.SetUpVisual(value["default_image"])
  2750. if True == value.has_key("over_image"):
  2751. window.SetOverVisual(value["over_image"])
  2752. if True == value.has_key("down_image"):
  2753. window.SetDownVisual(value["down_image"])
  2754. if True == value.has_key("disable_image"):
  2755. window.SetDisableVisual(value["disable_image"])
  2756. if True == value.has_key("text"):
  2757. if True == value.has_key("text_height"):
  2758. window.SetText(value["text"], value["text_height"])
  2759. else:
  2760. window.SetText(value["text"])
  2761. if value.has_key("text_color"):
  2762. window.SetTextColor(value["text_color"])
  2763. if True == value.has_key("tooltip_text"):
  2764. if True == value.has_key("tooltip_x") and True == value.has_key("tooltip_y"):
  2765. window.SetToolTipText(value["tooltip_text"], int(value["tooltip_x"]), int(value["tooltip_y"]))
  2766. else:
  2767. window.SetToolTipText(value["tooltip_text"])
  2768. self.LoadDefaultData(window, value, parentWindow)
  2769. return True
  2770. ## Mark
  2771. def LoadElementMark(self, window, value, parentWindow):
  2772. #if False == self.CheckKeyList(value["name"], value, self.MARK_KEY_LIST):
  2773. # return False
  2774. self.LoadDefaultData(window, value, parentWindow)
  2775. return True
  2776. ## Image
  2777. def LoadElementImage(self, window, value, parentWindow):
  2778. if False == self.CheckKeyList(value["name"], value, self.IMAGE_KEY_LIST):
  2779. return False
  2780. window.LoadImage(value["image"])
  2781. self.LoadDefaultData(window, value, parentWindow)
  2782. return True
  2783. ## AniImage
  2784. def LoadElementAniImage(self, window, value, parentWindow):
  2785. if False == self.CheckKeyList(value["name"], value, self.ANI_IMAGE_KEY_LIST):
  2786. return False
  2787. if True == value.has_key("delay"):
  2788. window.SetDelay(value["delay"])
  2789. for image in value["images"]:
  2790. window.AppendImage(image)
  2791. if value.has_key("width") and value.has_key("height"):
  2792. window.SetSize(value["width"], value["height"])
  2793. self.LoadDefaultData(window, value, parentWindow)
  2794. return True
  2795. ## Expanded Image
  2796. def LoadElementExpandedImage(self, window, value, parentWindow):
  2797. if False == self.CheckKeyList(value["name"], value, self.EXPANDED_IMAGE_KEY_LIST):
  2798. return False
  2799. window.LoadImage(value["image"])
  2800. if True == value.has_key("x_origin") and True == value.has_key("y_origin"):
  2801. window.SetOrigin(float(value["x_origin"]), float(value["y_origin"]))
  2802. if True == value.has_key("x_scale") and True == value.has_key("y_scale"):
  2803. window.SetScale(float(value["x_scale"]), float(value["y_scale"]))
  2804. if True == value.has_key("rect"):
  2805. RenderingRect = value["rect"]
  2806. window.SetRenderingRect(RenderingRect[0], RenderingRect[1], RenderingRect[2], RenderingRect[3])
  2807. if True == value.has_key("mode"):
  2808. mode = value["mode"]
  2809. if "MODULATE" == mode:
  2810. window.SetRenderingMode(wndMgr.RENDERING_MODE_MODULATE)
  2811. self.LoadDefaultData(window, value, parentWindow)
  2812. return True
  2813. ## Slot
  2814. def LoadElementSlot(self, window, value, parentWindow):
  2815. if False == self.CheckKeyList(value["name"], value, self.SLOT_KEY_LIST):
  2816. return False
  2817. global_x = int(value["x"])
  2818. global_y = int(value["y"])
  2819. global_width = int(value["width"])
  2820. global_height = int(value["height"])
  2821. window.SetPosition(global_x, global_y)
  2822. window.SetSize(global_width, global_height)
  2823. window.Show()
  2824. r = 1.0
  2825. g = 1.0
  2826. b = 1.0
  2827. a = 1.0
  2828. if True == value.has_key("image_r") and \
  2829. True == value.has_key("image_g") and \
  2830. True == value.has_key("image_b") and \
  2831. True == value.has_key("image_a"):
  2832. r = float(value["image_r"])
  2833. g = float(value["image_g"])
  2834. b = float(value["image_b"])
  2835. a = float(value["image_a"])
  2836. SLOT_ONE_KEY_LIST = ("index", "x", "y", "width", "height")
  2837. for slot in value["slot"]:
  2838. if True == self.CheckKeyList(value["name"] + " - one", slot, SLOT_ONE_KEY_LIST):
  2839. wndMgr.AppendSlot(window.hWnd,
  2840. int(slot["index"]),
  2841. int(slot["x"]),
  2842. int(slot["y"]),
  2843. int(slot["width"]),
  2844. int(slot["height"]))
  2845. if True == value.has_key("image"):
  2846. wndMgr.SetSlotBaseImage(window.hWnd,
  2847. value["image"],
  2848. r, g, b, a)
  2849. return True
  2850. def LoadElementCandidateList(self, window, value, parentWindow):
  2851. if False == self.CheckKeyList(value["name"], value, self.CANDIDATE_LIST_KEY_LIST):
  2852. return False
  2853. window.SetPosition(int(value["x"]), int(value["y"]))
  2854. window.SetItemSize(int(value["item_xsize"]), int(value["item_ysize"]))
  2855. window.SetItemStep(int(value["item_step"]))
  2856. window.Show()
  2857. return True
  2858. ## Table
  2859. def LoadElementGridTable(self, window, value, parentWindow):
  2860. if False == self.CheckKeyList(value["name"], value, self.GRID_TABLE_KEY_LIST):
  2861. return False
  2862. xBlank = 0
  2863. yBlank = 0
  2864. if True == value.has_key("x_blank"):
  2865. xBlank = int(value["x_blank"])
  2866. if True == value.has_key("y_blank"):
  2867. yBlank = int(value["y_blank"])
  2868. if localeInfo.IsARABIC():
  2869. pass
  2870. else:
  2871. window.SetPosition(int(value["x"]), int(value["y"]))
  2872. window.ArrangeSlot( int(value["start_index"]),
  2873. int(value["x_count"]),
  2874. int(value["y_count"]),
  2875. int(value["x_step"]),
  2876. int(value["y_step"]),
  2877. xBlank,
  2878. yBlank)
  2879. if True == value.has_key("image"):
  2880. r = 1.0
  2881. g = 1.0
  2882. b = 1.0
  2883. a = 1.0
  2884. if True == value.has_key("image_r") and \
  2885. True == value.has_key("image_g") and \
  2886. True == value.has_key("image_b") and \
  2887. True == value.has_key("image_a"):
  2888. r = float(value["image_r"])
  2889. g = float(value["image_g"])
  2890. b = float(value["image_b"])
  2891. a = float(value["image_a"])
  2892. wndMgr.SetSlotBaseImage(window.hWnd, value["image"], r, g, b, a)
  2893. if True == value.has_key("style"):
  2894. if "select" == value["style"]:
  2895. wndMgr.SetSlotStyle(window.hWnd, wndMgr.SLOT_STYLE_SELECT)
  2896. if localeInfo.IsARABIC():
  2897. self.LoadDefaultData(window, value, parentWindow)
  2898. else:
  2899. window.Show()
  2900. return True
  2901. ## Text
  2902. def LoadElementText(self, window, value, parentWindow):
  2903. if value.has_key("fontsize"):
  2904. fontSize = value["fontsize"]
  2905. if "LARGE" == fontSize:
  2906. window.SetFontName(localeInfo.UI_DEF_FONT_LARGE)
  2907. elif value.has_key("fontname"):
  2908. fontName = value["fontname"]
  2909. window.SetFontName(fontName)
  2910. if value.has_key("text_horizontal_align"):
  2911. if "left" == value["text_horizontal_align"]:
  2912. window.SetHorizontalAlignLeft()
  2913. elif "center" == value["text_horizontal_align"]:
  2914. window.SetHorizontalAlignCenter()
  2915. elif "right" == value["text_horizontal_align"]:
  2916. window.SetHorizontalAlignRight()
  2917. if value.has_key("text_vertical_align"):
  2918. if "top" == value["text_vertical_align"]:
  2919. window.SetVerticalAlignTop()
  2920. elif "center" == value["text_vertical_align"]:
  2921. window.SetVerticalAlignCenter()
  2922. elif "bottom" == value["text_vertical_align"]:
  2923. window.SetVerticalAlignBottom()
  2924. if value.has_key("all_align"):
  2925. window.SetHorizontalAlignCenter()
  2926. window.SetVerticalAlignCenter()
  2927. window.SetWindowHorizontalAlignCenter()
  2928. window.SetWindowVerticalAlignCenter()
  2929. if value.has_key("r") and value.has_key("g") and value.has_key("b"):
  2930. window.SetFontColor(float(value["r"]), float(value["g"]), float(value["b"]))
  2931. elif value.has_key("color"):
  2932. window.SetPackedFontColor(value["color"])
  2933. else:
  2934. window.SetFontColor(0.8549, 0.8549, 0.8549)
  2935. if value.has_key("outline"):
  2936. if value["outline"]:
  2937. window.SetOutline()
  2938. if True == value.has_key("text"):
  2939. window.SetText(value["text"])
  2940. self.LoadDefaultData(window, value, parentWindow)
  2941. return True
  2942. ## EditLine
  2943. def LoadElementEditLine(self, window, value, parentWindow):
  2944. if False == self.CheckKeyList(value["name"], value, self.EDIT_LINE_KEY_LIST):
  2945. return False
  2946. if value.has_key("secret_flag"):
  2947. window.SetSecret(value["secret_flag"])
  2948. if value.has_key("with_codepage"):
  2949. if value["with_codepage"]:
  2950. window.bCodePage = True
  2951. if value.has_key("only_number"):
  2952. if value["only_number"]:
  2953. window.SetNumberMode()
  2954. if value.has_key("enable_codepage"):
  2955. window.SetIMEFlag(value["enable_codepage"])
  2956. if value.has_key("enable_ime"):
  2957. window.SetIMEFlag(value["enable_ime"])
  2958. if value.has_key("limit_width"):
  2959. window.SetLimitWidth(value["limit_width"])
  2960. if value.has_key("multi_line"):
  2961. if value["multi_line"]:
  2962. window.SetMultiLine()
  2963. window.SetMax(int(value["input_limit"]))
  2964. window.SetSize(int(value["width"]), int(value["height"]))
  2965. self.LoadElementText(window, value, parentWindow)
  2966. return True
  2967. ## TitleBar
  2968. def LoadElementTitleBar(self, window, value, parentWindow):
  2969. if False == self.CheckKeyList(value["name"], value, self.TITLE_BAR_KEY_LIST):
  2970. return False
  2971. window.MakeTitleBar(int(value["width"]), value.get("color", "red"))
  2972. self.LoadDefaultData(window, value, parentWindow)
  2973. return True
  2974. ## HorizontalBar
  2975. def LoadElementHorizontalBar(self, window, value, parentWindow):
  2976. if False == self.CheckKeyList(value["name"], value, self.HORIZONTAL_BAR_KEY_LIST):
  2977. return False
  2978. window.Create(int(value["width"]))
  2979. self.LoadDefaultData(window, value, parentWindow)
  2980. return True
  2981. ## Board
  2982. def LoadElementBoard(self, window, value, parentWindow):
  2983. if False == self.CheckKeyList(value["name"], value, self.BOARD_KEY_LIST):
  2984. return False
  2985. window.SetSize(int(value["width"]), int(value["height"]))
  2986. self.LoadDefaultData(window, value, parentWindow)
  2987. return True
  2988. ## Board With TitleBar
  2989. def LoadElementBoardWithTitleBar(self, window, value, parentWindow):
  2990. if False == self.CheckKeyList(value["name"], value, self.BOARD_WITH_TITLEBAR_KEY_LIST):
  2991. return False
  2992. window.SetSize(int(value["width"]), int(value["height"]))
  2993. window.SetTitleName(value["title"])
  2994. self.LoadDefaultData(window, value, parentWindow)
  2995. return True
  2996. ## ThinBoard
  2997. def LoadElementThinBoard(self, window, value, parentWindow):
  2998. if False == self.CheckKeyList(value["name"], value, self.BOARD_KEY_LIST):
  2999. return False
  3000. window.SetSize(int(value["width"]), int(value["height"]))
  3001. self.LoadDefaultData(window, value, parentWindow)
  3002. return True
  3003. ## New
  3004. def LoadElementThinBoardGold(self, window, value, parentWindow):
  3005. if False == self.CheckKeyList(value["name"], value, self.BOARD_KEY_LIST):
  3006. return False
  3007. window.SetSize(int(value["width"]), int(value["height"]))
  3008. self.LoadDefaultData(window, value, parentWindow)
  3009. return True
  3010. def LoadElementThinBoardCircle(self, window, value, parentWindow):
  3011. if False == self.CheckKeyList(value["name"], value, self.BOARD_KEY_LIST):
  3012. return False
  3013. window.SetSize(int(value["width"]), int(value["height"]))
  3014. self.LoadDefaultData(window, value, parentWindow)
  3015. return True
  3016. ## Box
  3017. def LoadElementBox(self, window, value, parentWindow):
  3018. if False == self.CheckKeyList(value["name"], value, self.BOX_KEY_LIST):
  3019. return False
  3020. if True == value.has_key("color"):
  3021. window.SetColor(value["color"])
  3022. window.SetSize(int(value["width"]), int(value["height"]))
  3023. self.LoadDefaultData(window, value, parentWindow)
  3024. return True
  3025. ## Bar
  3026. def LoadElementBar(self, window, value, parentWindow):
  3027. if False == self.CheckKeyList(value["name"], value, self.BAR_KEY_LIST):
  3028. return False
  3029. if True == value.has_key("color"):
  3030. window.SetColor(value["color"])
  3031. window.SetSize(int(value["width"]), int(value["height"]))
  3032. self.LoadDefaultData(window, value, parentWindow)
  3033. return True
  3034. ## Line
  3035. def LoadElementLine(self, window, value, parentWindow):
  3036. if False == self.CheckKeyList(value["name"], value, self.LINE_KEY_LIST):
  3037. return False
  3038. if True == value.has_key("color"):
  3039. window.SetColor(value["color"])
  3040. window.SetSize(int(value["width"]), int(value["height"]))
  3041. self.LoadDefaultData(window, value, parentWindow)
  3042. return True
  3043. ## Slot
  3044. def LoadElementSlotBar(self, window, value, parentWindow):
  3045. if False == self.CheckKeyList(value["name"], value, self.SLOTBAR_KEY_LIST):
  3046. return False
  3047. window.SetSize(int(value["width"]), int(value["height"]))
  3048. self.LoadDefaultData(window, value, parentWindow)
  3049. return True
  3050. ## Gauge
  3051. def LoadElementGauge(self, window, value, parentWindow):
  3052. if False == self.CheckKeyList(value["name"], value, self.GAUGE_KEY_LIST):
  3053. return False
  3054. window.MakeGauge(value["width"], value["color"])
  3055. self.LoadDefaultData(window, value, parentWindow)
  3056. return True
  3057. ## ScrollBar
  3058. def LoadElementScrollBar(self, window, value, parentWindow):
  3059. if False == self.CheckKeyList(value["name"], value, self.SCROLLBAR_KEY_LIST):
  3060. return False
  3061. window.SetScrollBarSize(value["size"])
  3062. self.LoadDefaultData(window, value, parentWindow)
  3063. return True
  3064. ## SliderBar
  3065. def LoadElementSliderBar(self, window, value, parentWindow):
  3066. self.LoadDefaultData(window, value, parentWindow)
  3067. return True
  3068. ## ListBox
  3069. def LoadElementListBox(self, window, value, parentWindow):
  3070. if False == self.CheckKeyList(value["name"], value, self.LIST_BOX_KEY_LIST):
  3071. return False
  3072. if value.has_key("item_align"):
  3073. window.SetTextCenterAlign(value["item_align"])
  3074. window.SetSize(value["width"], value["height"])
  3075. self.LoadDefaultData(window, value, parentWindow)
  3076. return True
  3077. ## ListBox2
  3078. def LoadElementListBox2(self, window, value, parentWindow):
  3079. if False == self.CheckKeyList(value["name"], value, self.LIST_BOX_KEY_LIST):
  3080. return False
  3081. window.SetRowCount(value.get("row_count", 10))
  3082. window.SetSize(value["width"], value["height"])
  3083. self.LoadDefaultData(window, value, parentWindow)
  3084. if value.has_key("item_align"):
  3085. window.SetTextCenterAlign(value["item_align"])
  3086. return True
  3087. def LoadElementListBoxEx(self, window, value, parentWindow):
  3088. if False == self.CheckKeyList(value["name"], value, self.LIST_BOX_KEY_LIST):
  3089. return False
  3090. window.SetSize(value["width"], value["height"])
  3091. self.LoadDefaultData(window, value, parentWindow)
  3092. if value.has_key("itemsize_x") and value.has_key("itemsize_y"):
  3093. window.SetItemSize(int(value["itemsize_x"]), int(value["itemsize_y"]))
  3094. if value.has_key("itemstep"):
  3095. window.SetItemStep(int(value["itemstep"]))
  3096. if value.has_key("viewcount"):
  3097. window.SetViewItemCount(int(value["viewcount"]))
  3098. return True
  3099. class ReadingWnd(Bar):
  3100. def __init__(self):
  3101. Bar.__init__(self,"TOP_MOST")
  3102. self.__BuildText()
  3103. self.SetSize(80, 19)
  3104. self.Show()
  3105. def __del__(self):
  3106. Bar.__del__(self)
  3107. def __BuildText(self):
  3108. self.text = TextLine()
  3109. self.text.SetParent(self)
  3110. self.text.SetPosition(4, 3)
  3111. self.text.Show()
  3112. def SetText(self, text):
  3113. self.text.SetText(text)
  3114. def SetReadingPosition(self, x, y):
  3115. xPos = x + 2
  3116. yPos = y - self.GetHeight() - 2
  3117. self.SetPosition(xPos, yPos)
  3118. def SetTextColor(self, color):
  3119. self.text.SetPackedFontColor(color)
  3120. def MakeSlotBar(parent, x, y, width, height):
  3121. slotBar = SlotBar()
  3122. slotBar.SetParent(parent)
  3123. slotBar.SetSize(width, height)
  3124. slotBar.SetPosition(x, y)
  3125. slotBar.Show()
  3126. return slotBar
  3127. def MakeImageBox(parent, name, x, y):
  3128. image = ImageBox()
  3129. image.SetParent(parent)
  3130. image.LoadImage(name)
  3131. image.SetPosition(x, y)
  3132. image.Show()
  3133. return image
  3134. def MakeTextLine(parent):
  3135. textLine = TextLine()
  3136. textLine.SetParent(parent)
  3137. textLine.SetWindowHorizontalAlignCenter()
  3138. textLine.SetWindowVerticalAlignCenter()
  3139. textLine.SetHorizontalAlignCenter()
  3140. textLine.SetVerticalAlignCenter()
  3141. textLine.Show()
  3142. return textLine
  3143. def MakeButton(parent, x, y, tooltipText, path, up, over, down):
  3144. button = Button()
  3145. button.SetParent(parent)
  3146. button.SetPosition(x, y)
  3147. button.SetUpVisual(path + up)
  3148. button.SetOverVisual(path + over)
  3149. button.SetDownVisual(path + down)
  3150. button.SetToolTipText(tooltipText)
  3151. button.Show()
  3152. return button
  3153. def RenderRoundBox(x, y, width, height, color):
  3154. grp.SetColor(color)
  3155. grp.RenderLine(x+2, y, width-3, 0)
  3156. grp.RenderLine(x+2, y+height, width-3, 0)
  3157. grp.RenderLine(x, y+2, 0, height-4)
  3158. grp.RenderLine(x+width, y+1, 0, height-3)
  3159. grp.RenderLine(x, y+2, 2, -2)
  3160. grp.RenderLine(x, y+height-2, 2, 2)
  3161. grp.RenderLine(x+width-2, y, 2, 2)
  3162. grp.RenderLine(x+width-2, y+height, 2, -2)
  3163. def GenerateColor(r, g, b):
  3164. r = float(r) / 255.0
  3165. g = float(g) / 255.0
  3166. b = float(b) / 255.0
  3167. return grp.GenerateColor(r, g, b, 1.0)
  3168. def EnablePaste(flag):
  3169. ime.EnablePaste(flag)
  3170. def GetHyperlink():
  3171. return wndMgr.GetHyperlink()
  3172. RegisterToolTipWindow("TEXT", TextLine)