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. import constInfo
  14. from _weakref import proxy
  15. BACKGROUND_COLOR = grp.GenerateColor(0.0, 0.0, 0.0, 1.0)
  16. DARK_COLOR = grp.GenerateColor(0.2, 0.2, 0.2, 1.0)
  17. BRIGHT_COLOR = grp.GenerateColor(0.7, 0.7, 0.7, 1.0)
  18. if localeInfo.IsCANADA():
  19. SELECT_COLOR = grp.GenerateColor(0.9, 0.03, 0.01, 0.4)
  20. else:
  21. SELECT_COLOR = grp.GenerateColor(0.0, 0.0, 0.5, 0.3)
  22. WHITE_COLOR = grp.GenerateColor(1.0, 1.0, 1.0, 0.5)
  23. HALF_WHITE_COLOR = grp.GenerateColor(1.0, 1.0, 1.0, 0.2)
  24. createToolTipWindowDict = {}
  25. def RegisterCandidateWindowClass(codePage, candidateWindowClass):
  26. EditLine.candidateWindowClassDict[codePage]=candidateWindowClass
  27. def RegisterToolTipWindow(type, createToolTipWindow):
  28. createToolTipWindowDict[type]=createToolTipWindow
  29. app.SetDefaultFontName(localeInfo.UI_DEF_FONT)
  30. ## Window Manager Event List##
  31. ##############################
  32. ## "OnMouseLeftButtonDown"
  33. ## "OnMouseLeftButtonUp"
  34. ## "OnMouseLeftButtonDoubleClick"
  35. ## "OnMouseRightButtonDown"
  36. ## "OnMouseRightButtonUp"
  37. ## "OnMouseRightButtonDoubleClick"
  38. ## "OnMouseDrag"
  39. ## "OnSetFocus"
  40. ## "OnKillFocus"
  41. ## "OnMouseOverIn"
  42. ## "OnMouseOverOut"
  43. ## "OnRender"
  44. ## "OnUpdate"
  45. ## "OnKeyDown"
  46. ## "OnKeyUp"
  47. ## "OnTop"
  48. ## "OnIMEUpdate" ## IME Only
  49. ## "OnIMETab" ## IME Only
  50. ## "OnIMEReturn" ## IME Only
  51. ##############################
  52. ## Window Manager Event List##
  53. class __mem_func__:
  54. class __noarg_call__:
  55. def __init__(self, cls, obj, func):
  56. self.cls=cls
  57. self.obj=proxy(obj)
  58. self.func=proxy(func)
  59. def __call__(self, *arg):
  60. return self.func(self.obj)
  61. class __arg_call__:
  62. def __init__(self, cls, obj, func):
  63. self.cls=cls
  64. self.obj=proxy(obj)
  65. self.func=proxy(func)
  66. def __call__(self, *arg):
  67. return self.func(self.obj, *arg)
  68. def __init__(self, mfunc):
  69. if mfunc.im_func.func_code.co_argcount>1:
  70. self.call=__mem_func__.__arg_call__(mfunc.im_class, mfunc.im_self, mfunc.im_func)
  71. else:
  72. self.call=__mem_func__.__noarg_call__(mfunc.im_class, mfunc.im_self, mfunc.im_func)
  73. def __call__(self, *arg):
  74. return self.call(*arg)
  75. class Window(object):
  76. def NoneMethod(cls):
  77. pass
  78. NoneMethod = classmethod(NoneMethod)
  79. def __init__(self, layer = "UI"):
  80. self.clickEvent = None
  81. self.hWnd = None
  82. self.parentWindow = 0
  83. self.onMouseLeftButtonUpEvent = None
  84. if app.ENABLE_MOUSEWHEEL_EVENT:
  85. self.onMouseWheelScrollEvent=None
  86. self.RegisterWindow(layer)
  87. self.Hide()
  88. if app.ENABLE_QUEST_CATEGORY_SYSTEM:
  89. self.propertyList = {}
  90. if app.ENABLE_TARGET_INFORMATION_SYSTEM:
  91. self.mouseLeftButtonDownEvent = None
  92. self.mouseLeftButtonDownArgs = None
  93. self.mouseLeftButtonUpEvent = None
  94. self.mouseLeftButtonUpArgs = None
  95. self.mouseLeftButtonDoubleClickEvent = None
  96. self.mouseRightButtonDownEvent = None
  97. self.mouseRightButtonDownArgs = None
  98. self.moveWindowEvent = None
  99. self.renderEvent = None
  100. self.renderArgs = None
  101. self.overInEvent = None
  102. self.overInArgs = None
  103. self.overOutEvent = None
  104. self.overOutArgs = None
  105. self.baseX = 0
  106. self.baseY = 0
  107. self.SetWindowName("NONAME_Window")
  108. def __del__(self):
  109. wndMgr.Destroy(self.hWnd)
  110. def RegisterWindow(self, layer):
  111. self.hWnd = wndMgr.Register(self, layer)
  112. def Destroy(self):
  113. pass
  114. def GetWindowHandle(self):
  115. return self.hWnd
  116. def AddFlag(self, style):
  117. wndMgr.AddFlag(self.hWnd, style)
  118. def IsRTL(self):
  119. return wndMgr.IsRTL(self.hWnd)
  120. def SetWindowName(self, Name):
  121. wndMgr.SetName(self.hWnd, Name)
  122. def GetWindowName(self):
  123. return wndMgr.GetName(self.hWnd)
  124. if app.ENABLE_TARGET_INFORMATION_SYSTEM:
  125. def SetParent(self, parent):
  126. if parent:
  127. wndMgr.SetParent(self.hWnd, parent.hWnd)
  128. else:
  129. wndMgr.SetParent(self.hWnd, 0)
  130. def SetAttachParent(self, parent):
  131. wndMgr.SetAttachParent(self.hWnd, parent.hWnd)
  132. else:
  133. def SetParent(self, parent):
  134. wndMgr.SetParent(self.hWnd, parent.hWnd)
  135. def SetParentProxy(self, parent):
  136. self.parentWindow=proxy(parent)
  137. wndMgr.SetParent(self.hWnd, parent.hWnd)
  138. def GetParentProxy(self):
  139. return self.parentWindow
  140. def SetPickAlways(self):
  141. wndMgr.SetPickAlways(self.hWnd)
  142. def SetWindowHorizontalAlignLeft(self):
  143. wndMgr.SetWindowHorizontalAlign(self.hWnd, wndMgr.HORIZONTAL_ALIGN_LEFT)
  144. def SetWindowHorizontalAlignCenter(self):
  145. wndMgr.SetWindowHorizontalAlign(self.hWnd, wndMgr.HORIZONTAL_ALIGN_CENTER)
  146. def SetWindowHorizontalAlignRight(self):
  147. wndMgr.SetWindowHorizontalAlign(self.hWnd, wndMgr.HORIZONTAL_ALIGN_RIGHT)
  148. def SetWindowVerticalAlignTop(self):
  149. wndMgr.SetWindowVerticalAlign(self.hWnd, wndMgr.VERTICAL_ALIGN_TOP)
  150. def SetWindowVerticalAlignCenter(self):
  151. wndMgr.SetWindowVerticalAlign(self.hWnd, wndMgr.VERTICAL_ALIGN_CENTER)
  152. def SetWindowVerticalAlignBottom(self):
  153. wndMgr.SetWindowVerticalAlign(self.hWnd, wndMgr.VERTICAL_ALIGN_BOTTOM)
  154. def SetTop(self):
  155. wndMgr.SetTop(self.hWnd)
  156. def Show(self):
  157. wndMgr.Show(self.hWnd)
  158. def Hide(self):
  159. wndMgr.Hide(self.hWnd)
  160. if app.ENABLE_TARGET_INFORMATION_SYSTEM:
  161. def SetVisible(self, is_show):
  162. if is_show:
  163. self.Show()
  164. else:
  165. self.Hide()
  166. def Lock(self):
  167. wndMgr.Lock(self.hWnd)
  168. def Unlock(self):
  169. wndMgr.Unlock(self.hWnd)
  170. def IsShow(self):
  171. return wndMgr.IsShow(self.hWnd)
  172. def UpdateRect(self):
  173. wndMgr.UpdateRect(self.hWnd)
  174. def SetSize(self, width, height):
  175. wndMgr.SetWindowSize(self.hWnd, width, height)
  176. def GetWidth(self):
  177. return wndMgr.GetWindowWidth(self.hWnd)
  178. def GetHeight(self):
  179. return wndMgr.GetWindowHeight(self.hWnd)
  180. def GetLocalPosition(self):
  181. return wndMgr.GetWindowLocalPosition(self.hWnd)
  182. if app.ENABLE_TARGET_INFORMATION_SYSTEM:
  183. def GetLeft(self):
  184. x, y = self.GetLocalPosition()
  185. return x
  186. def GetGlobalLeft(self):
  187. x, y = self.GetGlobalPosition()
  188. return x
  189. def GetTop(self):
  190. x, y = self.GetLocalPosition()
  191. return y
  192. def GetGlobalTop(self):
  193. x, y = self.GetGlobalPosition()
  194. return y
  195. def GetRight(self):
  196. return self.GetLeft() + self.GetWidth()
  197. def GetBottom(self):
  198. return self.GetTop() + self.GetHeight()
  199. def GetGlobalPosition(self):
  200. return wndMgr.GetWindowGlobalPosition(self.hWnd)
  201. def GetMouseLocalPosition(self):
  202. return wndMgr.GetMouseLocalPosition(self.hWnd)
  203. def GetRect(self):
  204. return wndMgr.GetWindowRect(self.hWnd)
  205. if app.ENABLE_TARGET_INFORMATION_SYSTEM:
  206. def SetLeft(self, x):
  207. wndMgr.SetWindowPosition(self.hWnd, x, self.GetTop())
  208. def SetPosition(self, x, y):
  209. wndMgr.SetWindowPosition(self.hWnd, x, y)
  210. def SetCenterPosition(self, x = 0, y = 0):
  211. self.SetPosition((wndMgr.GetScreenWidth() - self.GetWidth()) / 2 + x, (wndMgr.GetScreenHeight() - self.GetHeight()) / 2 + y)
  212. if app.ENABLE_TARGET_INFORMATION_SYSTEM:
  213. def SavePosition(self):
  214. self.baseX = self.GetLeft()
  215. self.baseY = self.GetTop()
  216. def UpdatePositionByScale(self, scale):
  217. self.SetPosition(self.baseX * scale, self.baseY * scale)
  218. def IsFocus(self):
  219. return wndMgr.IsFocus(self.hWnd)
  220. def SetFocus(self):
  221. wndMgr.SetFocus(self.hWnd)
  222. def KillFocus(self):
  223. wndMgr.KillFocus(self.hWnd)
  224. def GetChildCount(self):
  225. return wndMgr.GetChildCount(self.hWnd)
  226. def IsIn(self):
  227. return wndMgr.IsIn(self.hWnd)
  228. if app.ENABLE_TARGET_INFORMATION_SYSTEM:
  229. def IsInPosition(self):
  230. xMouse, yMouse = wndMgr.GetMousePosition()
  231. x, y = self.GetGlobalPosition()
  232. return xMouse >= x and xMouse < x + self.GetWidth() and yMouse >= y and yMouse < y + self.GetHeight()
  233. def SetClickEvent(self, event):
  234. self.clickEvent = __mem_func__(event)
  235. def OnMouseLeftButtonDown(self):
  236. if self.clickEvent:
  237. self.clickEvent()
  238. # if app.ENABLE_TARGET_INFORMATION_SYSTEM:
  239. # def SetMouseLeftButtonUpEvent(self, event, *args):
  240. # self.mouseLeftButtonUpEvent = event
  241. # self.mouseLeftButtonUpArgs = args
  242. # else:
  243. def SetOnMouseLeftButtonUpEvent(self, event):
  244. self.onMouseLeftButtonUpEvent = event
  245. if app.ENABLE_TARGET_INFORMATION_SYSTEM:
  246. def SetMouseLeftButtonDoubleClickEvent(self, event):
  247. self.mouseLeftButtonDoubleClickEvent = event
  248. def OnMouseLeftButtonDoubleClick(self):
  249. if self.mouseLeftButtonDoubleClickEvent:
  250. self.mouseLeftButtonDoubleClickEvent()
  251. def SetMouseRightButtonDownEvent(self, event, *args):
  252. self.mouseRightButtonDownEvent = event
  253. self.mouseRightButtonDownArgs = args
  254. def OnMouseRightButtonDown(self):
  255. if self.mouseRightButtonDownEvent:
  256. apply(self.mouseRightButtonDownEvent, self.mouseRightButtonDownArgs)
  257. def SetMoveWindowEvent(self, event):
  258. self.moveWindowEvent = event
  259. def OnMoveWindow(self, x, y):
  260. if self.moveWindowEvent:
  261. self.moveWindowEvent(x, y)
  262. def SAFE_SetOverInEvent(self, func, *args):
  263. self.overInEvent = __mem_func__(func)
  264. self.overInArgs = args
  265. def SetOverInEvent(self, func, *args):
  266. self.overInEvent = func
  267. self.overInArgs = args
  268. def SAFE_SetOverOutEvent(self, func, *args):
  269. self.overOutEvent = __mem_func__(func)
  270. self.overOutArgs = args
  271. def SetOverOutEvent(self, func, *args):
  272. self.overOutEvent = func
  273. self.overOutArgs = args
  274. def OnMouseOverIn(self):
  275. if self.overInEvent:
  276. apply(self.overInEvent, self.overInArgs)
  277. def OnMouseOverOut(self):
  278. if self.overOutEvent:
  279. apply(self.overOutEvent, self.overOutArgs)
  280. def SAFE_SetRenderEvent(self, event, *args):
  281. self.renderEvent = __mem_func__(event)
  282. self.renderArgs = args
  283. def ClearRenderEvent(self):
  284. self.renderEvent = None
  285. self.renderArgs = None
  286. def OnRender(self):
  287. if self.renderEvent:
  288. apply(self.renderEvent, self.renderArgs)
  289. def OnMouseLeftButtonUp(self):
  290. if self.onMouseLeftButtonUpEvent:
  291. self.onMouseLeftButtonUpEvent()
  292. if app.ENABLE_MOUSEWHEEL_EVENT:
  293. def SetMouseWheelScrollEvent(self, event):
  294. self.onMouseWheelScrollEvent = event
  295. wndMgr.SetScrollable(self.hWnd)
  296. def OnMouseWheelScroll(self, mode = "UP"): #mode could be value "UP" and "DOWN"
  297. print("OnMouseWheelScroll")
  298. if self.onMouseWheelScrollEvent:
  299. self.onMouseWheelScrollEvent(mode)
  300. if app.ENABLE_QUEST_CATEGORY_SYSTEM:
  301. def SetProperty(self, propName, propValue):
  302. self.propertyList[propName] = propValue
  303. def GetProperty(self, propName):
  304. if propName in self.propertyList:
  305. return self.propertyList[propName]
  306. return None
  307. if app.ENABLE_QUEST_CATEGORY_SYSTEM:
  308. def GetText(self):
  309. if not self.ButtonText:
  310. return ""
  311. return self.ButtonText.GetText()
  312. def SetTextAlignLeft(self, text, height = 4):
  313. if not self.ButtonText:
  314. textLine = TextLine()
  315. textLine.SetParent(self)
  316. textLine.SetPosition(27, self.GetHeight()/2)
  317. textLine.SetVerticalAlignCenter()
  318. textLine.SetHorizontalAlignLeft()
  319. textLine.Show()
  320. self.ButtonText = textLine
  321. #퀘스트 리스트 UI에 맞춰 위치 잡음
  322. self.ButtonText.SetText(text)
  323. self.ButtonText.SetPosition(27, self.GetHeight()/2)
  324. self.ButtonText.SetVerticalAlignCenter()
  325. self.ButtonText.SetHorizontalAlignLeft()
  326. class ListBoxEx(Window):
  327. class Item(Window):
  328. def __init__(self):
  329. Window.__init__(self)
  330. def __del__(self):
  331. Window.__del__(self)
  332. def SetParent(self, parent):
  333. Window.SetParent(self, parent)
  334. self.parent=proxy(parent)
  335. def OnMouseLeftButtonDown(self):
  336. self.parent.SelectItem(self)
  337. def OnRender(self):
  338. if self.parent.GetSelectedItem()==self:
  339. self.OnSelectedRender()
  340. def OnSelectedRender(self):
  341. x, y = self.GetGlobalPosition()
  342. grp.SetColor(grp.GenerateColor(0.0, 0.0, 0.7, 0.7))
  343. grp.RenderBar(x, y, self.GetWidth(), self.GetHeight())
  344. def __init__(self):
  345. Window.__init__(self)
  346. self.viewItemCount=10
  347. self.basePos=0
  348. self.itemHeight=16
  349. self.itemStep=20
  350. self.selItem=0
  351. self.itemList=[]
  352. self.onSelectItemEvent = lambda *arg: None
  353. if localeInfo.IsARABIC():
  354. self.itemWidth=130
  355. else:
  356. self.itemWidth=100
  357. self.scrollBar=None
  358. self.__UpdateSize()
  359. def __del__(self):
  360. Window.__del__(self)
  361. def __UpdateSize(self):
  362. height=self.itemStep*self.__GetViewItemCount()
  363. self.SetSize(self.itemWidth, height)
  364. def IsEmpty(self):
  365. if len(self.itemList)==0:
  366. return 1
  367. return 0
  368. def SetItemStep(self, itemStep):
  369. self.itemStep=itemStep
  370. self.__UpdateSize()
  371. def SetItemSize(self, itemWidth, itemHeight):
  372. self.itemWidth=itemWidth
  373. self.itemHeight=itemHeight
  374. self.__UpdateSize()
  375. def SetViewItemCount(self, viewItemCount):
  376. self.viewItemCount=viewItemCount
  377. def SetSelectEvent(self, event):
  378. self.onSelectItemEvent = event
  379. def SetBasePos(self, basePos):
  380. for oldItem in self.itemList[self.basePos:self.basePos+self.viewItemCount]:
  381. oldItem.Hide()
  382. self.basePos=basePos
  383. pos=basePos
  384. for newItem in self.itemList[self.basePos:self.basePos+self.viewItemCount]:
  385. (x, y)=self.GetItemViewCoord(pos, newItem.GetWidth())
  386. newItem.SetPosition(x, y)
  387. newItem.Show()
  388. pos+=1
  389. def GetItemIndex(self, argItem):
  390. return self.itemList.index(argItem)
  391. def GetSelectedItem(self):
  392. return self.selItem
  393. def SelectIndex(self, index):
  394. if index >= len(self.itemList) or index < 0:
  395. self.selItem = None
  396. return
  397. try:
  398. self.selItem=self.itemList[index]
  399. except:
  400. pass
  401. def SelectItem(self, selItem):
  402. self.selItem=selItem
  403. self.onSelectItemEvent(selItem)
  404. def RemoveAllItems(self):
  405. self.selItem=None
  406. self.itemList=[]
  407. if self.scrollBar:
  408. self.scrollBar.SetPos(0)
  409. def RemoveItem(self, delItem):
  410. if delItem==self.selItem:
  411. self.selItem=None
  412. self.itemList.remove(delItem)
  413. def AppendItem(self, newItem):
  414. newItem.SetParent(self)
  415. newItem.SetSize(self.itemWidth, self.itemHeight)
  416. pos=len(self.itemList)
  417. if self.__IsInViewRange(pos):
  418. (x, y)=self.GetItemViewCoord(pos, newItem.GetWidth())
  419. newItem.SetPosition(x, y)
  420. newItem.Show()
  421. else:
  422. newItem.Hide()
  423. self.itemList.append(newItem)
  424. def SetScrollBar(self, scrollBar):
  425. scrollBar.SetScrollEvent(__mem_func__(self.__OnScroll))
  426. self.scrollBar=scrollBar
  427. def __OnScroll(self):
  428. self.SetBasePos(int(self.scrollBar.GetPos()*self.__GetScrollLen()))
  429. def __GetScrollLen(self):
  430. scrollLen=self.__GetItemCount()-self.__GetViewItemCount()
  431. if scrollLen<0:
  432. return 0
  433. return scrollLen
  434. def __GetViewItemCount(self):
  435. return self.viewItemCount
  436. def __GetItemCount(self):
  437. return len(self.itemList)
  438. def GetItemViewCoord(self, pos, itemWidth):
  439. if localeInfo.IsARABIC():
  440. return (self.GetWidth()-itemWidth-10, (pos-self.basePos)*self.itemStep)
  441. else:
  442. return (0, (pos-self.basePos)*self.itemStep)
  443. def __IsInViewRange(self, pos):
  444. if pos<self.basePos:
  445. return 0
  446. if pos>=self.basePos+self.viewItemCount:
  447. return 0
  448. return 1
  449. if app.ENABLE_TARGET_INFORMATION_SYSTEM:
  450. class ListBoxExNew(Window):
  451. class Item(Window):
  452. def __init__(self):
  453. Window.__init__(self)
  454. self.realWidth = 0
  455. self.realHeight = 0
  456. self.removeTop = 0
  457. self.removeBottom = 0
  458. self.SetWindowName("NONAME_ListBoxExNew_Item")
  459. def __del__(self):
  460. Window.__del__(self)
  461. def SetParent(self, parent):
  462. Window.SetParent(self, parent)
  463. self.parent=proxy(parent)
  464. def SetSize(self, width, height):
  465. self.realWidth = width
  466. self.realHeight = height
  467. Window.SetSize(self, width, height)
  468. def SetRemoveTop(self, height):
  469. self.removeTop = height
  470. self.RefreshHeight()
  471. def SetRemoveBottom(self, height):
  472. self.removeBottom = height
  473. self.RefreshHeight()
  474. def SetCurrentHeight(self, height):
  475. Window.SetSize(self, self.GetWidth(), height)
  476. def GetCurrentHeight(self):
  477. return Window.GetHeight(self)
  478. def ResetCurrentHeight(self):
  479. self.removeTop = 0
  480. self.removeBottom = 0
  481. self.RefreshHeight()
  482. def RefreshHeight(self):
  483. self.SetCurrentHeight(self.GetHeight() - self.removeTop - self.removeBottom)
  484. def GetHeight(self):
  485. return self.realHeight
  486. def __init__(self, stepSize, viewSteps):
  487. Window.__init__(self)
  488. self.viewItemCount=10
  489. self.basePos=0
  490. self.baseIndex=0
  491. self.maxSteps=0
  492. self.viewSteps = viewSteps
  493. self.stepSize = stepSize
  494. self.itemList=[]
  495. self.scrollBar=None
  496. self.SetWindowName("NONAME_ListBoxEx")
  497. def __del__(self):
  498. Window.__del__(self)
  499. def IsEmpty(self):
  500. if len(self.itemList)==0:
  501. return 1
  502. return 0
  503. def __CheckBasePos(self, pos):
  504. self.viewItemCount = 0
  505. start_pos = pos
  506. height = 0
  507. while height < self.GetHeight():
  508. if pos >= len(self.itemList):
  509. return start_pos == 0
  510. height += self.itemList[pos].GetHeight()
  511. pos += 1
  512. self.viewItemCount += 1
  513. return height == self.GetHeight()
  514. def SetBasePos(self, basePos, forceRefresh = True):
  515. if forceRefresh == False and self.basePos == basePos:
  516. return
  517. for oldItem in self.itemList[self.baseIndex:self.baseIndex+self.viewItemCount]:
  518. oldItem.ResetCurrentHeight()
  519. oldItem.Hide()
  520. self.basePos=basePos
  521. baseIndex = 0
  522. while basePos > 0:
  523. basePos -= self.itemList[baseIndex].GetHeight() / self.stepSize
  524. if basePos < 0:
  525. self.itemList[baseIndex].SetRemoveTop(self.stepSize * abs(basePos))
  526. break
  527. baseIndex += 1
  528. self.baseIndex = baseIndex
  529. stepCount = 0
  530. self.viewItemCount = 0
  531. while baseIndex < len(self.itemList):
  532. stepCount += self.itemList[baseIndex].GetCurrentHeight() / self.stepSize
  533. self.viewItemCount += 1
  534. if stepCount > self.viewSteps:
  535. self.itemList[baseIndex].SetRemoveBottom(self.stepSize * (stepCount - self.viewSteps))
  536. break
  537. elif stepCount == self.viewSteps:
  538. break
  539. baseIndex += 1
  540. y = 0
  541. for newItem in self.itemList[self.baseIndex:self.baseIndex+self.viewItemCount]:
  542. newItem.SetPosition(0, y)
  543. newItem.Show()
  544. y += newItem.GetCurrentHeight()
  545. def GetItemIndex(self, argItem):
  546. return self.itemList.index(argItem)
  547. def GetSelectedItem(self):
  548. return self.selItem
  549. def GetSelectedItemIndex(self):
  550. return self.selItemIdx
  551. def RemoveAllItems(self):
  552. self.itemList=[]
  553. self.maxSteps=0
  554. if self.scrollBar:
  555. self.scrollBar.SetPos(0)
  556. def RemoveItem(self, delItem):
  557. self.maxSteps -= delItem.GetHeight() / self.stepSize
  558. self.itemList.remove(delItem)
  559. def AppendItem(self, newItem):
  560. if newItem.GetHeight() % self.stepSize != 0:
  561. import dbg
  562. dbg.TraceError("Invalid AppendItem height %d stepSize %d" % (newItem.GetHeight(), self.stepSize))
  563. return
  564. self.maxSteps += newItem.GetHeight() / self.stepSize
  565. newItem.SetParent(self)
  566. self.itemList.append(newItem)
  567. def SetScrollBar(self, scrollBar):
  568. scrollBar.SetScrollEvent(__mem_func__(self.__OnScroll))
  569. self.scrollBar=scrollBar
  570. def __OnScroll(self):
  571. self.SetBasePos(int(self.scrollBar.GetPos()*self.__GetScrollLen()), False)
  572. def __GetScrollLen(self):
  573. scrollLen=self.maxSteps-self.viewSteps
  574. if scrollLen<0:
  575. return 0
  576. return scrollLen
  577. def __GetViewItemCount(self):
  578. return self.viewItemCount
  579. def __GetItemCount(self):
  580. return len(self.itemList)
  581. def GetViewItemCount(self):
  582. return self.viewItemCount
  583. def GetItemCount(self):
  584. return len(self.itemList)
  585. class CandidateListBox(ListBoxEx):
  586. HORIZONTAL_MODE = 0
  587. VERTICAL_MODE = 1
  588. class Item(ListBoxEx.Item):
  589. def __init__(self, text):
  590. ListBoxEx.Item.__init__(self)
  591. self.textBox=TextLine()
  592. self.textBox.SetParent(self)
  593. self.textBox.SetText(text)
  594. self.textBox.Show()
  595. def __del__(self):
  596. ListBoxEx.Item.__del__(self)
  597. def __init__(self, mode = HORIZONTAL_MODE):
  598. ListBoxEx.__init__(self)
  599. self.itemWidth=32
  600. self.itemHeight=32
  601. self.mode = mode
  602. def __del__(self):
  603. ListBoxEx.__del__(self)
  604. def SetMode(self, mode):
  605. self.mode = mode
  606. def AppendItem(self, newItem):
  607. ListBoxEx.AppendItem(self, newItem)
  608. def GetItemViewCoord(self, pos):
  609. if self.mode == self.HORIZONTAL_MODE:
  610. return ((pos-self.basePos)*self.itemStep, 0)
  611. elif self.mode == self.VERTICAL_MODE:
  612. return (0, (pos-self.basePos)*self.itemStep)
  613. class TextLine(Window):
  614. def __init__(self):
  615. Window.__init__(self)
  616. self.max = 0
  617. self.SetFontName(localeInfo.UI_DEF_FONT)
  618. def __del__(self):
  619. Window.__del__(self)
  620. def RegisterWindow(self, layer):
  621. self.hWnd = wndMgr.RegisterTextLine(self, layer)
  622. def SetMax(self, max):
  623. wndMgr.SetMax(self.hWnd, max)
  624. def SetLimitWidth(self, width):
  625. wndMgr.SetLimitWidth(self.hWnd, width)
  626. def SetMultiLine(self):
  627. wndMgr.SetMultiLine(self.hWnd, True)
  628. def SetHorizontalAlignArabic(self):
  629. wndMgr.SetHorizontalAlign(self.hWnd, wndMgr.TEXT_HORIZONTAL_ALIGN_ARABIC)
  630. def SetHorizontalAlignLeft(self):
  631. wndMgr.SetHorizontalAlign(self.hWnd, wndMgr.TEXT_HORIZONTAL_ALIGN_LEFT)
  632. def SetHorizontalAlignRight(self):
  633. wndMgr.SetHorizontalAlign(self.hWnd, wndMgr.TEXT_HORIZONTAL_ALIGN_RIGHT)
  634. def SetHorizontalAlignCenter(self):
  635. wndMgr.SetHorizontalAlign(self.hWnd, wndMgr.TEXT_HORIZONTAL_ALIGN_CENTER)
  636. def SetVerticalAlignTop(self):
  637. wndMgr.SetVerticalAlign(self.hWnd, wndMgr.TEXT_VERTICAL_ALIGN_TOP)
  638. def SetVerticalAlignBottom(self):
  639. wndMgr.SetVerticalAlign(self.hWnd, wndMgr.TEXT_VERTICAL_ALIGN_BOTTOM)
  640. def SetVerticalAlignCenter(self):
  641. wndMgr.SetVerticalAlign(self.hWnd, wndMgr.TEXT_VERTICAL_ALIGN_CENTER)
  642. def SetSecret(self, Value=True):
  643. wndMgr.SetSecret(self.hWnd, Value)
  644. def SetOutline(self, Value=True):
  645. wndMgr.SetOutline(self.hWnd, Value)
  646. def SetFeather(self, value=True):
  647. wndMgr.SetFeather(self.hWnd, value)
  648. def SetFontName(self, fontName):
  649. wndMgr.SetFontName(self.hWnd, fontName)
  650. def SetDefaultFontName(self):
  651. wndMgr.SetFontName(self.hWnd, localeInfo.UI_DEF_FONT)
  652. def SetFontColor(self, red, green, blue):
  653. wndMgr.SetFontColor(self.hWnd, red, green, blue)
  654. def SetPackedFontColor(self, color):
  655. wndMgr.SetFontColor(self.hWnd, color)
  656. def SetText(self, text):
  657. wndMgr.SetText(self.hWnd, text)
  658. def GetText(self):
  659. return wndMgr.GetText(self.hWnd)
  660. def GetTextSize(self):
  661. return wndMgr.GetTextSize(self.hWnd)
  662. def SetLineHeight(self, Height):
  663. wndMgr.SetLineHeight(self.hWnd, Height)
  664. def GetLineHeight(self):
  665. return wndMgr.GetLineHeight(self.hWnd)
  666. def GetTextLineCount(self):
  667. return wndMgr.GetTextLineCount(self.hWnd)
  668. class EmptyCandidateWindow(Window):
  669. def __init__(self):
  670. Window.__init__(self)
  671. def __del__(self):
  672. Window.__init__(self)
  673. def Load(self):
  674. pass
  675. def SetCandidatePosition(self, x, y, textCount):
  676. pass
  677. def Clear(self):
  678. pass
  679. def Append(self, text):
  680. pass
  681. def Refresh(self):
  682. pass
  683. def Select(self):
  684. pass
  685. class EditLine(TextLine):
  686. candidateWindowClassDict = {}
  687. def __init__(self):
  688. TextLine.__init__(self)
  689. self.eventReturn = Window.NoneMethod
  690. self.eventEscape = Window.NoneMethod
  691. self.eventTab = None
  692. self.numberMode = False
  693. self.useIME = True
  694. self.bCodePage = False
  695. self.candidateWindowClass = None
  696. self.candidateWindow = None
  697. self.SetCodePage(app.GetDefaultCodePage())
  698. self.readingWnd = ReadingWnd()
  699. self.readingWnd.Hide()
  700. def __del__(self):
  701. TextLine.__del__(self)
  702. self.eventReturn = Window.NoneMethod
  703. self.eventEscape = Window.NoneMethod
  704. self.eventTab = None
  705. def SetCodePage(self, codePage):
  706. candidateWindowClass=EditLine.candidateWindowClassDict.get(codePage, EmptyCandidateWindow)
  707. self.__SetCandidateClass(candidateWindowClass)
  708. def __SetCandidateClass(self, candidateWindowClass):
  709. if self.candidateWindowClass==candidateWindowClass:
  710. return
  711. self.candidateWindowClass = candidateWindowClass
  712. self.candidateWindow = self.candidateWindowClass()
  713. self.candidateWindow.Load()
  714. self.candidateWindow.Hide()
  715. def RegisterWindow(self, layer):
  716. self.hWnd = wndMgr.RegisterTextLine(self, layer)
  717. def SAFE_SetReturnEvent(self, event):
  718. self.eventReturn = __mem_func__(event)
  719. def SetReturnEvent(self, event):
  720. self.eventReturn = event
  721. def SetEscapeEvent(self, event):
  722. self.eventEscape = event
  723. def SetTabEvent(self, event):
  724. self.eventTab = event
  725. def SetMax(self, max):
  726. self.max = max
  727. wndMgr.SetMax(self.hWnd, self.max)
  728. ime.SetMax(self.max)
  729. self.SetUserMax(self.max)
  730. def SetUserMax(self, max):
  731. self.userMax = max
  732. ime.SetUserMax(self.userMax)
  733. def SetNumberMode(self):
  734. self.numberMode = True
  735. def CanEdit(self, flag):
  736. self.CanClick = flag
  737. #def AddExceptKey(self, key):
  738. # ime.AddExceptKey(key)
  739. #def ClearExceptKey(self):
  740. # ime.ClearExceptKey()
  741. def SetIMEFlag(self, flag):
  742. self.useIME = flag
  743. def SetText(self, text):
  744. wndMgr.SetText(self.hWnd, text)
  745. if self.IsFocus():
  746. ime.SetText(text)
  747. def Enable(self):
  748. wndMgr.ShowCursor(self.hWnd)
  749. def Disable(self):
  750. wndMgr.HideCursor(self.hWnd)
  751. def SetEndPosition(self):
  752. ime.MoveEnd()
  753. def OnSetFocus(self):
  754. Text = self.GetText()
  755. ime.SetText(Text)
  756. ime.SetMax(self.max)
  757. ime.SetUserMax(self.userMax)
  758. ime.SetCursorPosition(-1)
  759. if self.numberMode:
  760. ime.SetNumberMode()
  761. else:
  762. ime.SetStringMode()
  763. ime.EnableCaptureInput()
  764. if self.useIME:
  765. ime.EnableIME()
  766. else:
  767. ime.DisableIME()
  768. wndMgr.ShowCursor(self.hWnd, True)
  769. def OnKillFocus(self):
  770. self.SetText(ime.GetText(self.bCodePage))
  771. self.OnIMECloseCandidateList()
  772. self.OnIMECloseReadingWnd()
  773. ime.DisableIME()
  774. ime.DisableCaptureInput()
  775. wndMgr.HideCursor(self.hWnd)
  776. def OnIMEChangeCodePage(self):
  777. self.SetCodePage(ime.GetCodePage())
  778. def OnIMEOpenCandidateList(self):
  779. self.candidateWindow.Show()
  780. self.candidateWindow.Clear()
  781. self.candidateWindow.Refresh()
  782. gx, gy = self.GetGlobalPosition()
  783. self.candidateWindow.SetCandidatePosition(gx, gy, len(self.GetText()))
  784. return True
  785. def OnIMECloseCandidateList(self):
  786. self.candidateWindow.Hide()
  787. return True
  788. def OnIMEOpenReadingWnd(self):
  789. gx, gy = self.GetGlobalPosition()
  790. textlen = len(self.GetText())-2
  791. reading = ime.GetReading()
  792. readinglen = len(reading)
  793. self.readingWnd.SetReadingPosition( gx + textlen*6-24-readinglen*6, gy )
  794. self.readingWnd.SetText(reading)
  795. if ime.GetReadingError() == 0:
  796. self.readingWnd.SetTextColor(0xffffffff)
  797. else:
  798. self.readingWnd.SetTextColor(0xffff0000)
  799. self.readingWnd.SetSize(readinglen * 6 + 4, 19)
  800. self.readingWnd.Show()
  801. return True
  802. def OnIMECloseReadingWnd(self):
  803. self.readingWnd.Hide()
  804. return True
  805. def OnIMEUpdate(self):
  806. snd.PlaySound("sound/ui/type.wav")
  807. TextLine.SetText(self, ime.GetText(self.bCodePage))
  808. def OnIMETab(self):
  809. if self.eventTab:
  810. self.eventTab()
  811. return True
  812. return False
  813. def OnIMEReturn(self):
  814. snd.PlaySound("sound/ui/click.wav")
  815. self.eventReturn()
  816. return True
  817. def OnPressEscapeKey(self):
  818. self.eventEscape()
  819. return True
  820. def OnKeyDown(self, key):
  821. if app.DIK_F1 == key:
  822. return False
  823. if app.DIK_F2 == key:
  824. return False
  825. if app.DIK_F3 == key:
  826. return False
  827. if app.DIK_F4 == key:
  828. return False
  829. if app.DIK_LALT == key:
  830. return False
  831. if app.DIK_SYSRQ == key:
  832. return False
  833. if app.DIK_LCONTROL == key:
  834. return False
  835. if app.DIK_V == key:
  836. if app.IsPressed(app.DIK_LCONTROL):
  837. ime.PasteTextFromClipBoard()
  838. return True
  839. def OnKeyUp(self, key):
  840. if app.DIK_F1 == key:
  841. return False
  842. if app.DIK_F2 == key:
  843. return False
  844. if app.DIK_F3 == key:
  845. return False
  846. if app.DIK_F4 == key:
  847. return False
  848. if app.DIK_LALT == key:
  849. return False
  850. if app.DIK_SYSRQ == key:
  851. return False
  852. if app.DIK_LCONTROL == key:
  853. return False
  854. return True
  855. def OnIMEKeyDown(self, key):
  856. # Left
  857. if app.VK_LEFT == key:
  858. ime.MoveLeft()
  859. return True
  860. # Right
  861. if app.VK_RIGHT == key:
  862. ime.MoveRight()
  863. return True
  864. # Home
  865. if app.VK_HOME == key:
  866. ime.MoveHome()
  867. return True
  868. # End
  869. if app.VK_END == key:
  870. ime.MoveEnd()
  871. return True
  872. # Delete
  873. if app.VK_DELETE == key:
  874. ime.Delete()
  875. TextLine.SetText(self, ime.GetText(self.bCodePage))
  876. return True
  877. return True
  878. #def OnMouseLeftButtonDown(self):
  879. # self.SetFocus()
  880. def OnMouseLeftButtonDown(self):
  881. if False == self.IsIn():
  882. return False
  883. self.SetFocus()
  884. PixelPosition = wndMgr.GetCursorPosition(self.hWnd)
  885. ime.SetCursorPosition(PixelPosition)
  886. class MarkBox(Window):
  887. def __init__(self, layer = "UI"):
  888. Window.__init__(self, layer)
  889. def __del__(self):
  890. Window.__del__(self)
  891. def RegisterWindow(self, layer):
  892. self.hWnd = wndMgr.RegisterMarkBox(self, layer)
  893. def Load(self):
  894. wndMgr.MarkBox_Load(self.hWnd)
  895. def SetScale(self, scale):
  896. wndMgr.MarkBox_SetScale(self.hWnd, scale)
  897. def SetIndex(self, guildID):
  898. MarkID = guild.GuildIDToMarkID(guildID)
  899. wndMgr.MarkBox_SetImageFilename(self.hWnd, guild.GetMarkImageFilenameByMarkID(MarkID))
  900. wndMgr.MarkBox_SetIndex(self.hWnd, guild.GetMarkIndexByMarkID(MarkID))
  901. def SetAlpha(self, alpha):
  902. wndMgr.MarkBox_SetDiffuseColor(self.hWnd, 1.0, 1.0, 1.0, alpha)
  903. class ImageBox(Window):
  904. def __init__(self, layer = "UI"):
  905. Window.__init__(self, layer)
  906. if app.ENABLE_OFFICAL_CHARACTER_SCREEN:
  907. self.name=""
  908. self.eventDict={}
  909. self.eventFunc = {"mouse_click" : None, "mouse_over_in" : None, "mouse_over_out" : None}
  910. self.eventArgs = {"mouse_click" : None, "mouse_over_in" : None, "mouse_over_out" : None}
  911. self.argDict={}
  912. self.eventDict={}
  913. def __del__(self):
  914. Window.__del__(self)
  915. def RegisterWindow(self, layer):
  916. self.hWnd = wndMgr.RegisterImageBox(self, layer)
  917. def LoadImage(self, imageName):
  918. self.name=imageName
  919. wndMgr.LoadImage(self.hWnd, imageName)
  920. if len(self.eventDict)!=0:
  921. print "LOAD IMAGE", self, self.eventDict
  922. def SetAlpha(self, alpha):
  923. wndMgr.SetDiffuseColor(self.hWnd, 1.0, 1.0, 1.0, alpha)
  924. def GetWidth(self):
  925. return wndMgr.GetWidth(self.hWnd)
  926. def GetHeight(self):
  927. return wndMgr.GetHeight(self.hWnd)
  928. if app.ENABLE_OFFICAL_CHARACTER_SCREEN:
  929. def ForceRender(self):
  930. wndMgr.ImageForceRender(self.hWnd)
  931. def OnMouseLeftButtonUp(self):
  932. try:
  933. apply(self.eventDict["MOUSE_LEFT_UP"], self.argDict["MOUSE_LEFT_UP"])
  934. except KeyError:
  935. pass
  936. def OnMouseLeftButtonDown(self):
  937. try:
  938. apply(self.eventDict["MOUSE_LEFT_DOWN"], self.argDict["MOUSE_LEFT_DOWN"])
  939. except KeyError:
  940. pass
  941. def SAFE_SetStringEvent(self, event, func, *args):
  942. self.eventDict[event]=__mem_func__(func)
  943. self.argDict[event]=args
  944. def SAFE_SetMouseClickEvent(self, func, *args):
  945. self.eventDict["MOUSE_LEFT_DOWN"]=__mem_func__(func)
  946. self.argDict["MOUSE_LEFT_DOWN"]=args
  947. def SetEvent(self, func, *args) :
  948. result = self.eventFunc.has_key(args[0])
  949. if result :
  950. self.eventFunc[args[0]] = func
  951. self.eventArgs[args[0]] = args
  952. else :
  953. print "[ERROR] ui.py SetEvent, Can`t Find has_key : %s" % args[0]
  954. def OnMouseOverIn(self):
  955. try:
  956. self.eventDict["MOUSE_OVER_IN"]()
  957. except KeyError:
  958. pass
  959. def OnMouseOverOut(self):
  960. try:
  961. self.eventDict["MOUSE_OVER_OUT"]()
  962. except KeyError:
  963. pass
  964. def SAFE_SetStringEvent(self, event, func):
  965. self.eventDict[event]=__mem_func__(func)
  966. def SetOnMouseLeftButtonUpEvent(self, event):
  967. self.onMouseLeftButtonUpEvent = event
  968. class ExpandedImageBox(ImageBox):
  969. def __init__(self, layer = "UI"):
  970. ImageBox.__init__(self, layer)
  971. def __del__(self):
  972. ImageBox.__del__(self)
  973. def RegisterWindow(self, layer):
  974. self.hWnd = wndMgr.RegisterExpandedImageBox(self, layer)
  975. def SetScale(self, xScale, yScale):
  976. wndMgr.SetScale(self.hWnd, xScale, yScale)
  977. def SetOrigin(self, x, y):
  978. wndMgr.SetOrigin(self.hWnd, x, y)
  979. def SetRotation(self, rotation):
  980. wndMgr.SetRotation(self.hWnd, rotation)
  981. def SetRenderingMode(self, mode):
  982. wndMgr.SetRenderingMode(self.hWnd, mode)
  983. def SetRenderingRect(self, left, top, right, bottom):
  984. wndMgr.SetRenderingRect(self.hWnd, left, top, right, bottom)
  985. def SetPercentage(self, curValue, maxValue):
  986. if maxValue:
  987. self.SetRenderingRect(0.0, 0.0, -1.0 + float(curValue) / float(maxValue), 0.0)
  988. else:
  989. self.SetRenderingRect(0.0, 0.0, 0.0, 0.0)
  990. def GetWidth(self):
  991. return wndMgr.GetWindowWidth(self.hWnd)
  992. def GetHeight(self):
  993. return wndMgr.GetWindowHeight(self.hWnd)
  994. def SetOnMouseLeftButtonUpEvent(self, event):
  995. self.onMouseLeftButtonUpEvent = event
  996. class AniImageBox(Window):
  997. def __init__(self, layer = "UI"):
  998. Window.__init__(self, layer)
  999. def __del__(self):
  1000. Window.__del__(self)
  1001. def RegisterWindow(self, layer):
  1002. self.hWnd = wndMgr.RegisterAniImageBox(self, layer)
  1003. def SetDelay(self, delay):
  1004. wndMgr.SetDelay(self.hWnd, delay)
  1005. def AppendImage(self, filename):
  1006. wndMgr.AppendImage(self.hWnd, filename)
  1007. def SetPercentage(self, curValue, maxValue):
  1008. wndMgr.SetRenderingRect(self.hWnd, 0.0, 0.0, -1.0 + float(curValue) / float(maxValue), 0.0)
  1009. def OnEndFrame(self):
  1010. pass
  1011. class CheckBox(Window):
  1012. def __init__(self):
  1013. Window.__init__(self)
  1014. self.backgroundImage = None
  1015. self.checkImage = None
  1016. self.eventFunc = { "ON_CHECK" : None, "ON_UNCKECK" : None, }
  1017. self.eventArgs = { "ON_CHECK" : None, "ON_UNCKECK" : None, }
  1018. self.CreateElements()
  1019. def __del__(self):
  1020. Window.__del__(self)
  1021. self.backgroundImage = None
  1022. self.checkImage = None
  1023. self.eventFunc = { "ON_CHECK" : None, "ON_UNCKECK" : None, }
  1024. self.eventArgs = { "ON_CHECK" : None, "ON_UNCKECK" : None, }
  1025. def CreateElements(self):
  1026. self.backgroundImage = ImageBox()
  1027. self.backgroundImage.SetParent(self)
  1028. self.backgroundImage.AddFlag("not_pick")
  1029. self.backgroundImage.LoadImage("d:/ymir work/ui/game/refine/checkbox.tga")
  1030. self.backgroundImage.Show()
  1031. self.checkImage = ImageBox()
  1032. self.checkImage.SetParent(self)
  1033. self.checkImage.AddFlag("not_pick")
  1034. self.checkImage.SetPosition(0, -4)
  1035. self.checkImage.LoadImage("d:/ymir work/ui/game/refine/checked.tga")
  1036. self.checkImage.Hide()
  1037. self.textInfo = TextLine()
  1038. self.textInfo.SetParent(self)
  1039. self.textInfo.SetPosition(20, -2)
  1040. self.textInfo.Show()
  1041. self.SetSize(self.backgroundImage.GetWidth() + self.textInfo.GetTextSize()[0], self.backgroundImage.GetHeight() + self.textInfo.GetTextSize()[1])
  1042. def SetTextInfo(self, info):
  1043. if self.textInfo:
  1044. self.textInfo.SetText(info)
  1045. self.SetSize(self.backgroundImage.GetWidth() + self.textInfo.GetTextSize()[0], self.backgroundImage.GetHeight() + self.textInfo.GetTextSize()[1])
  1046. def SetCheckStatus(self, flag):
  1047. if flag:
  1048. self.checkImage.Show()
  1049. else:
  1050. self.checkImage.Hide()
  1051. def GetCheckStatus(self):
  1052. if self.checkImage:
  1053. return self.checkImage.IsShow()
  1054. return False
  1055. def SetEvent(self, func, *args) :
  1056. result = self.eventFunc.has_key(args[0])
  1057. if result :
  1058. self.eventFunc[args[0]] = func
  1059. self.eventArgs[args[0]] = args
  1060. else :
  1061. print "[ERROR] ui.py SetEvent, Can`t Find has_key : %s" % args[0]
  1062. def OnMouseLeftButtonUp(self):
  1063. if self.checkImage:
  1064. if self.checkImage.IsShow():
  1065. self.checkImage.Hide()
  1066. if self.eventFunc["ON_UNCKECK"]:
  1067. apply(self.eventFunc["ON_UNCKECK"], self.eventArgs["ON_UNCKECK"])
  1068. else:
  1069. self.checkImage.Show()
  1070. if self.eventFunc["ON_CHECK"]:
  1071. apply(self.eventFunc["ON_CHECK"], self.eventArgs["ON_CHECK"])
  1072. class Button(Window):
  1073. def __init__(self, layer = "UI"):
  1074. Window.__init__(self, layer)
  1075. self.eventFunc = None
  1076. self.eventArgs = None
  1077. self.ButtonText = None
  1078. self.ToolTipText = None
  1079. if app.ENABLE_OFFICAL_CHARACTER_SCREEN:
  1080. self.TextChild = []
  1081. def __del__(self):
  1082. Window.__del__(self)
  1083. self.eventFunc = None
  1084. self.eventArgs = None
  1085. def RegisterWindow(self, layer):
  1086. self.hWnd = wndMgr.RegisterButton(self, layer)
  1087. def SetUpVisual(self, filename):
  1088. wndMgr.SetUpVisual(self.hWnd, filename)
  1089. def SetOverVisual(self, filename):
  1090. wndMgr.SetOverVisual(self.hWnd, filename)
  1091. def SetDownVisual(self, filename):
  1092. wndMgr.SetDownVisual(self.hWnd, filename)
  1093. def SetDisableVisual(self, filename):
  1094. wndMgr.SetDisableVisual(self.hWnd, filename)
  1095. def GetUpVisualFileName(self):
  1096. return wndMgr.GetUpVisualFileName(self.hWnd)
  1097. def GetOverVisualFileName(self):
  1098. return wndMgr.GetOverVisualFileName(self.hWnd)
  1099. def GetDownVisualFileName(self):
  1100. return wndMgr.GetDownVisualFileName(self.hWnd)
  1101. def Flash(self):
  1102. wndMgr.Flash(self.hWnd)
  1103. def Enable(self):
  1104. wndMgr.Enable(self.hWnd)
  1105. def Disable(self):
  1106. wndMgr.Disable(self.hWnd)
  1107. def Down(self):
  1108. wndMgr.Down(self.hWnd)
  1109. def SetUp(self):
  1110. wndMgr.SetUp(self.hWnd)
  1111. def SAFE_SetEvent(self, func, *args):
  1112. self.eventFunc = __mem_func__(func)
  1113. self.eventArgs = args
  1114. def SetEvent(self, func, *args):
  1115. self.eventFunc = func
  1116. self.eventArgs = args
  1117. def SetTextColor(self, color):
  1118. if not self.ButtonText:
  1119. return
  1120. self.ButtonText.SetPackedFontColor(color)
  1121. def SetText(self, text, height = 4):
  1122. if not self.ButtonText:
  1123. textLine = TextLine()
  1124. textLine.SetParent(self)
  1125. textLine.SetPosition(self.GetWidth()/2, self.GetHeight()/2)
  1126. textLine.SetVerticalAlignCenter()
  1127. textLine.SetHorizontalAlignCenter()
  1128. textLine.Show()
  1129. self.ButtonText = textLine
  1130. self.ButtonText.SetText(text)
  1131. if constInfo.EXTRA_UI_FEATURE:
  1132. def GetText(self):
  1133. if not self.ButtonText:
  1134. return ""
  1135. return self.ButtonText.GetText()
  1136. def SetFormToolTipText(self, type, text, x, y):
  1137. if not self.ToolTipText:
  1138. toolTip=createToolTipWindowDict[type]()
  1139. toolTip.SetParent(self)
  1140. toolTip.SetSize(0, 0)
  1141. toolTip.SetHorizontalAlignCenter()
  1142. toolTip.SetOutline()
  1143. toolTip.Hide()
  1144. toolTip.SetPosition(x + self.GetWidth()/2, y)
  1145. self.ToolTipText=toolTip
  1146. self.ToolTipText.SetText(text)
  1147. def SetToolTipWindow(self, toolTip):
  1148. self.ToolTipText=toolTip
  1149. self.ToolTipText.SetParentProxy(self)
  1150. def SetToolTipText(self, text, x=0, y = -19):
  1151. self.SetFormToolTipText("TEXT", text, x, y)
  1152. def CallEvent(self):
  1153. snd.PlaySound("sound/ui/click.wav")
  1154. if self.eventFunc:
  1155. apply(self.eventFunc, self.eventArgs)
  1156. def ShowToolTip(self):
  1157. if self.ToolTipText:
  1158. self.ToolTipText.Show()
  1159. def HideToolTip(self):
  1160. if self.ToolTipText:
  1161. self.ToolTipText.Hide()
  1162. def IsDown(self):
  1163. return wndMgr.IsDown(self.hWnd)
  1164. if app.ENABLE_OFFICAL_CHARACTER_SCREEN:
  1165. def AppendTextLineAllClear(self) :
  1166. self.TextChild = []
  1167. def SetAppendTextChangeText(self, idx, text):
  1168. if not len(self.TextChild) :
  1169. return
  1170. self.TextChild[idx].SetText(text)
  1171. def SetAppendTextColor(self, idx, color) :
  1172. if not len(self.TextChild) :
  1173. return
  1174. self.TextChild[idx].SetPackedFontColor(color)
  1175. def AppendTextLine(self, text, font_size = localeInfo.UI_DEF_FONT, font_color = grp.GenerateColor(0.7607, 0.7607, 0.7607, 1.0), text_sort = "center", pos_x = None, pos_y = None):
  1176. textLine = TextLine()
  1177. textLine.SetParent(self)
  1178. textLine.SetFontName(font_size)
  1179. textLine.SetPackedFontColor(font_color)
  1180. textLine.SetText(text)
  1181. textLine.Show()
  1182. if not pos_x and not pos_y :
  1183. textLine.SetPosition(self.GetWidth()/2, self.GetHeight()/2)
  1184. else :
  1185. textLine.SetPosition(pos_x, pos_y)
  1186. textLine.SetVerticalAlignCenter()
  1187. if "center" == text_sort :
  1188. textLine.SetHorizontalAlignCenter()
  1189. elif "right" == text_sort :
  1190. textLine.SetHorizontalAlignRight()
  1191. elif "left" == text_sort :
  1192. textLine.SetHorizontalAlignLeft()
  1193. self.TextChild.append(textLine)
  1194. class RadioButton(Button):
  1195. def __init__(self):
  1196. Button.__init__(self)
  1197. def __del__(self):
  1198. Button.__del__(self)
  1199. def RegisterWindow(self, layer):
  1200. self.hWnd = wndMgr.RegisterRadioButton(self, layer)
  1201. class RadioButtonGroup:
  1202. def __init__(self):
  1203. self.buttonGroup = []
  1204. self.selectedBtnIdx = -1
  1205. def __del__(self):
  1206. for button, ue, de in self.buttonGroup:
  1207. button.__del__()
  1208. def Show(self):
  1209. for (button, selectEvent, unselectEvent) in self.buttonGroup:
  1210. button.Show()
  1211. def Hide(self):
  1212. for (button, selectEvent, unselectEvent) in self.buttonGroup:
  1213. button.Hide()
  1214. def SetText(self, idx, text):
  1215. if idx >= len(self.buttonGroup):
  1216. return
  1217. (button, selectEvent, unselectEvent) = self.buttonGroup[idx]
  1218. button.SetText(text)
  1219. def OnClick(self, btnIdx):
  1220. if btnIdx == self.selectedBtnIdx:
  1221. return
  1222. (button, selectEvent, unselectEvent) = self.buttonGroup[self.selectedBtnIdx]
  1223. if unselectEvent:
  1224. unselectEvent()
  1225. button.SetUp()
  1226. self.selectedBtnIdx = btnIdx
  1227. (button, selectEvent, unselectEvent) = self.buttonGroup[btnIdx]
  1228. if selectEvent:
  1229. selectEvent()
  1230. button.Down()
  1231. def AddButton(self, button, selectEvent, unselectEvent):
  1232. i = len(self.buttonGroup)
  1233. button.SetEvent(lambda : self.OnClick(i))
  1234. self.buttonGroup.append([button, selectEvent, unselectEvent])
  1235. button.SetUp()
  1236. def Create(rawButtonGroup):
  1237. radioGroup = RadioButtonGroup()
  1238. for (button, selectEvent, unselectEvent) in rawButtonGroup:
  1239. radioGroup.AddButton(button, selectEvent, unselectEvent)
  1240. radioGroup.OnClick(0)
  1241. return radioGroup
  1242. Create=staticmethod(Create)
  1243. class ToggleButton(Button):
  1244. def __init__(self):
  1245. Button.__init__(self)
  1246. self.eventUp = None
  1247. self.eventDown = None
  1248. def __del__(self):
  1249. Button.__del__(self)
  1250. self.eventUp = None
  1251. self.eventDown = None
  1252. def SetToggleUpEvent(self, event):
  1253. self.eventUp = event
  1254. def SetToggleDownEvent(self, event):
  1255. self.eventDown = event
  1256. def RegisterWindow(self, layer):
  1257. self.hWnd = wndMgr.RegisterToggleButton(self, layer)
  1258. def OnToggleUp(self):
  1259. if self.eventUp:
  1260. self.eventUp()
  1261. def OnToggleDown(self):
  1262. if self.eventDown:
  1263. self.eventDown()
  1264. class DragButton(Button):
  1265. def __init__(self):
  1266. Button.__init__(self)
  1267. self.AddFlag("movable")
  1268. self.callbackEnable = True
  1269. self.eventMove = lambda: None
  1270. def __del__(self):
  1271. Button.__del__(self)
  1272. self.eventMove = lambda: None
  1273. def RegisterWindow(self, layer):
  1274. self.hWnd = wndMgr.RegisterDragButton(self, layer)
  1275. def SetMoveEvent(self, event):
  1276. self.eventMove = event
  1277. def SetRestrictMovementArea(self, x, y, width, height):
  1278. wndMgr.SetRestrictMovementArea(self.hWnd, x, y, width, height)
  1279. def TurnOnCallBack(self):
  1280. self.callbackEnable = True
  1281. def TurnOffCallBack(self):
  1282. self.callbackEnable = False
  1283. def OnMove(self):
  1284. if self.callbackEnable:
  1285. self.eventMove()
  1286. class NumberLine(Window):
  1287. def __init__(self, layer = "UI"):
  1288. Window.__init__(self, layer)
  1289. def __del__(self):
  1290. Window.__del__(self)
  1291. def RegisterWindow(self, layer):
  1292. self.hWnd = wndMgr.RegisterNumberLine(self, layer)
  1293. def SetHorizontalAlignCenter(self):
  1294. wndMgr.SetNumberHorizontalAlignCenter(self.hWnd)
  1295. def SetHorizontalAlignRight(self):
  1296. wndMgr.SetNumberHorizontalAlignRight(self.hWnd)
  1297. def SetPath(self, path):
  1298. wndMgr.SetPath(self.hWnd, path)
  1299. def SetNumber(self, number):
  1300. wndMgr.SetNumber(self.hWnd, number)
  1301. ###################################################################################################
  1302. ## PythonScript Element
  1303. ###################################################################################################
  1304. class Box(Window):
  1305. def RegisterWindow(self, layer):
  1306. self.hWnd = wndMgr.RegisterBox(self, layer)
  1307. def SetColor(self, color):
  1308. wndMgr.SetColor(self.hWnd, color)
  1309. class Bar(Window):
  1310. def RegisterWindow(self, layer):
  1311. self.hWnd = wndMgr.RegisterBar(self, layer)
  1312. def SetColor(self, color):
  1313. wndMgr.SetColor(self.hWnd, color)
  1314. class Line(Window):
  1315. def RegisterWindow(self, layer):
  1316. self.hWnd = wndMgr.RegisterLine(self, layer)
  1317. def SetColor(self, color):
  1318. wndMgr.SetColor(self.hWnd, color)
  1319. class SlotBar(Window):
  1320. def __init__(self):
  1321. Window.__init__(self)
  1322. def RegisterWindow(self, layer):
  1323. self.hWnd = wndMgr.RegisterBar3D(self, layer)
  1324. ## Same with SlotBar
  1325. class Bar3D(Window):
  1326. def __init__(self):
  1327. Window.__init__(self)
  1328. def RegisterWindow(self, layer):
  1329. self.hWnd = wndMgr.RegisterBar3D(self, layer)
  1330. def SetColor(self, left, right, center):
  1331. wndMgr.SetColor(self.hWnd, left, right, center)
  1332. class SlotWindow(Window):
  1333. def __init__(self):
  1334. Window.__init__(self)
  1335. self.StartIndex = 0
  1336. self.eventSelectEmptySlot = None
  1337. self.eventSelectItemSlot = None
  1338. self.eventUnselectEmptySlot = None
  1339. self.eventUnselectItemSlot = None
  1340. self.eventUseSlot = None
  1341. self.eventOverInItem = None
  1342. self.eventOverOutItem = None
  1343. self.eventPressedSlotButton = None
  1344. def __del__(self):
  1345. Window.__del__(self)
  1346. self.eventSelectEmptySlot = None
  1347. self.eventSelectItemSlot = None
  1348. self.eventUnselectEmptySlot = None
  1349. self.eventUnselectItemSlot = None
  1350. self.eventUseSlot = None
  1351. self.eventOverInItem = None
  1352. self.eventOverOutItem = None
  1353. self.eventPressedSlotButton = None
  1354. def RegisterWindow(self, layer):
  1355. self.hWnd = wndMgr.RegisterSlotWindow(self, layer)
  1356. def SetSlotStyle(self, style):
  1357. wndMgr.SetSlotStyle(self.hWnd, style)
  1358. def HasSlot(self, slotIndex):
  1359. return wndMgr.HasSlot(self.hWnd, slotIndex)
  1360. def SetSlotBaseImage(self, imageFileName, r, g, b, a):
  1361. wndMgr.SetSlotBaseImage(self.hWnd, imageFileName, r, g, b, a)
  1362. def SetCoverButton(self,\
  1363. slotIndex,\
  1364. upName="d:/ymir work/ui/public/slot_cover_button_01.sub",\
  1365. overName="d:/ymir work/ui/public/slot_cover_button_02.sub",\
  1366. downName="d:/ymir work/ui/public/slot_cover_button_03.sub",\
  1367. disableName="d:/ymir work/ui/public/slot_cover_button_04.sub",\
  1368. LeftButtonEnable = False,\
  1369. RightButtonEnable = True):
  1370. wndMgr.SetCoverButton(self.hWnd, slotIndex, upName, overName, downName, disableName, LeftButtonEnable, RightButtonEnable)
  1371. def EnableCoverButton(self, slotIndex):
  1372. wndMgr.EnableCoverButton(self.hWnd, slotIndex)
  1373. def DisableCoverButton(self, slotIndex):
  1374. wndMgr.DisableCoverButton(self.hWnd, slotIndex)
  1375. def SetAlwaysRenderCoverButton(self, slotIndex, bAlwaysRender = True):
  1376. wndMgr.SetAlwaysRenderCoverButton(self.hWnd, slotIndex, bAlwaysRender)
  1377. def AppendSlotButton(self, upName, overName, downName):
  1378. wndMgr.AppendSlotButton(self.hWnd, upName, overName, downName)
  1379. def ShowSlotButton(self, slotNumber):
  1380. wndMgr.ShowSlotButton(self.hWnd, slotNumber)
  1381. def HideAllSlotButton(self):
  1382. wndMgr.HideAllSlotButton(self.hWnd)
  1383. def AppendRequirementSignImage(self, filename):
  1384. wndMgr.AppendRequirementSignImage(self.hWnd, filename)
  1385. def ShowRequirementSign(self, slotNumber):
  1386. wndMgr.ShowRequirementSign(self.hWnd, slotNumber)
  1387. def HideRequirementSign(self, slotNumber):
  1388. wndMgr.HideRequirementSign(self.hWnd, slotNumber)
  1389. if app.ENABLE_ACCE_SYSTEM:
  1390. def ActivateSlot(self, slotNumber, r = 1.0, g = 1.0, b = 1.0, a = 1.0):
  1391. wndMgr.ActivateEffect(self.hWnd, slotNumber, r, g, b, a)
  1392. def DeactivateSlot(self, slotNumber):
  1393. wndMgr.DeactivateEffect(self.hWnd, slotNumber)
  1394. def ActivateSlotOld(self, slotNumber):
  1395. wndMgr.ActivateSlot(self.hWnd, slotNumber)
  1396. def DeactivateSlotOld(self, slotNumber):
  1397. wndMgr.DeactivateSlot(self.hWnd, slotNumber)
  1398. else:
  1399. def ActivateSlot(self, slotNumber):
  1400. wndMgr.ActivateSlot(self.hWnd, slotNumber)
  1401. def DeactivateSlot(self, slotNumber):
  1402. wndMgr.DeactivateSlot(self.hWnd, slotNumber)
  1403. def ShowSlotBaseImage(self, slotNumber):
  1404. wndMgr.ShowSlotBaseImage(self.hWnd, slotNumber)
  1405. def HideSlotBaseImage(self, slotNumber):
  1406. wndMgr.HideSlotBaseImage(self.hWnd, slotNumber)
  1407. def SAFE_SetButtonEvent(self, button, state, event):
  1408. if "LEFT"==button:
  1409. if "EMPTY"==state:
  1410. self.eventSelectEmptySlot=__mem_func__(event)
  1411. elif "EXIST"==state:
  1412. self.eventSelectItemSlot=__mem_func__(event)
  1413. elif "ALWAYS"==state:
  1414. self.eventSelectEmptySlot=__mem_func__(event)
  1415. self.eventSelectItemSlot=__mem_func__(event)
  1416. elif "RIGHT"==button:
  1417. if "EMPTY"==state:
  1418. self.eventUnselectEmptySlot=__mem_func__(event)
  1419. elif "EXIST"==state:
  1420. self.eventUnselectItemSlot=__mem_func__(event)
  1421. elif "ALWAYS"==state:
  1422. self.eventUnselectEmptySlot=__mem_func__(event)
  1423. self.eventUnselectItemSlot=__mem_func__(event)
  1424. def SetSelectEmptySlotEvent(self, empty):
  1425. self.eventSelectEmptySlot = empty
  1426. def SetSelectItemSlotEvent(self, item):
  1427. self.eventSelectItemSlot = item
  1428. def SetUnselectEmptySlotEvent(self, empty):
  1429. self.eventUnselectEmptySlot = empty
  1430. def SetUnselectItemSlotEvent(self, item):
  1431. self.eventUnselectItemSlot = item
  1432. def SetUseSlotEvent(self, use):
  1433. self.eventUseSlot = use
  1434. def SetOverInItemEvent(self, event):
  1435. self.eventOverInItem = event
  1436. def SetOverOutItemEvent(self, event):
  1437. self.eventOverOutItem = event
  1438. def SetPressedSlotButtonEvent(self, event):
  1439. self.eventPressedSlotButton = event
  1440. def GetSlotCount(self):
  1441. return wndMgr.GetSlotCount(self.hWnd)
  1442. def SetUseMode(self, flag):
  1443. "True일때만 ItemToItem 이 가능한지 보여준다"
  1444. wndMgr.SetUseMode(self.hWnd, flag)
  1445. def SetUsableItem(self, flag):
  1446. "True면 현재 가리킨 아이템이 ItemToItem 적용 가능하다"
  1447. wndMgr.SetUsableItem(self.hWnd, flag)
  1448. ## Slot
  1449. if app.ENABLE_SLOT_WINDOW_EX:
  1450. def IsActivatedSlot(self, slotNumber):
  1451. return wndMgr.IsActivatedSlot(self.hWnd, slotNumber)
  1452. def GetSlotCoolTime(self, slotIndex):
  1453. return wndMgr.GetSlotCoolTime(self.hWnd, slotIndex)
  1454. def SetSlotCoolTime(self, slotIndex, coolTime, elapsedTime = 0.0):
  1455. wndMgr.SetSlotCoolTime(self.hWnd, slotIndex, coolTime, elapsedTime)
  1456. def DisableSlot(self, slotIndex):
  1457. wndMgr.DisableSlot(self.hWnd, slotIndex)
  1458. def EnableSlot(self, slotIndex):
  1459. wndMgr.EnableSlot(self.hWnd, slotIndex)
  1460. def LockSlot(self, slotIndex):
  1461. wndMgr.LockSlot(self.hWnd, slotIndex)
  1462. def UnlockSlot(self, slotIndex):
  1463. wndMgr.UnlockSlot(self.hWnd, slotIndex)
  1464. def RefreshSlot(self):
  1465. wndMgr.RefreshSlot(self.hWnd)
  1466. def ClearSlot(self, slotNumber):
  1467. wndMgr.ClearSlot(self.hWnd, slotNumber)
  1468. def ClearAllSlot(self):
  1469. wndMgr.ClearAllSlot(self.hWnd)
  1470. def AppendSlot(self, index, x, y, width, height):
  1471. wndMgr.AppendSlot(self.hWnd, index, x, y, width, height)
  1472. def SetSlot(self, slotIndex, itemIndex, width, height, icon, diffuseColor = (1.0, 1.0, 1.0, 1.0)):
  1473. wndMgr.SetSlot(self.hWnd, slotIndex, itemIndex, width, height, icon, diffuseColor)
  1474. def SetSlotCount(self, slotNumber, count):
  1475. wndMgr.SetSlotCount(self.hWnd, slotNumber, count)
  1476. def SetSlotCountNew(self, slotNumber, grade, count):
  1477. wndMgr.SetSlotCountNew(self.hWnd, slotNumber, grade, count)
  1478. def SetItemSlot(self, renderingSlotNumber, ItemIndex, ItemCount = 0, diffuseColor = (1.0, 1.0, 1.0, 1.0)):
  1479. if 0 == ItemIndex or None == ItemIndex:
  1480. wndMgr.ClearSlot(self.hWnd, renderingSlotNumber)
  1481. return
  1482. item.SelectItem(ItemIndex)
  1483. itemIcon = item.GetIconImage()
  1484. item.SelectItem(ItemIndex)
  1485. (width, height) = item.GetItemSize()
  1486. wndMgr.SetSlot(self.hWnd, renderingSlotNumber, ItemIndex, width, height, itemIcon, diffuseColor)
  1487. wndMgr.SetSlotCount(self.hWnd, renderingSlotNumber, ItemCount)
  1488. def SetSkillSlot(self, renderingSlotNumber, skillIndex, skillLevel):
  1489. skillIcon = skill.GetIconImage(skillIndex)
  1490. if 0 == skillIcon:
  1491. wndMgr.ClearSlot(self.hWnd, renderingSlotNumber)
  1492. return
  1493. wndMgr.SetSlot(self.hWnd, renderingSlotNumber, skillIndex, 1, 1, skillIcon)
  1494. wndMgr.SetSlotCount(self.hWnd, renderingSlotNumber, skillLevel)
  1495. def SetSkillSlotNew(self, renderingSlotNumber, skillIndex, skillGrade, skillLevel):
  1496. skillIcon = skill.GetIconImageNew(skillIndex, skillGrade)
  1497. if 0 == skillIcon:
  1498. wndMgr.ClearSlot(self.hWnd, renderingSlotNumber)
  1499. return
  1500. wndMgr.SetSlot(self.hWnd, renderingSlotNumber, skillIndex, 1, 1, skillIcon)
  1501. def SetEmotionSlot(self, renderingSlotNumber, emotionIndex):
  1502. import player
  1503. icon = player.GetEmotionIconImage(emotionIndex)
  1504. if 0 == icon:
  1505. wndMgr.ClearSlot(self.hWnd, renderingSlotNumber)
  1506. return
  1507. wndMgr.SetSlot(self.hWnd, renderingSlotNumber, emotionIndex, 1, 1, icon)
  1508. ## Event
  1509. def OnSelectEmptySlot(self, slotNumber):
  1510. if self.eventSelectEmptySlot:
  1511. self.eventSelectEmptySlot(slotNumber)
  1512. def OnSelectItemSlot(self, slotNumber):
  1513. if self.eventSelectItemSlot:
  1514. self.eventSelectItemSlot(slotNumber)
  1515. def OnUnselectEmptySlot(self, slotNumber):
  1516. if self.eventUnselectEmptySlot:
  1517. self.eventUnselectEmptySlot(slotNumber)
  1518. def OnUnselectItemSlot(self, slotNumber):
  1519. if self.eventUnselectItemSlot:
  1520. self.eventUnselectItemSlot(slotNumber)
  1521. def OnUseSlot(self, slotNumber):
  1522. if self.eventUseSlot:
  1523. self.eventUseSlot(slotNumber)
  1524. def OnOverInItem(self, slotNumber):
  1525. if self.eventOverInItem:
  1526. self.eventOverInItem(slotNumber)
  1527. def OnOverOutItem(self):
  1528. if self.eventOverOutItem:
  1529. self.eventOverOutItem()
  1530. def OnPressedSlotButton(self, slotNumber):
  1531. if self.eventPressedSlotButton:
  1532. self.eventPressedSlotButton(slotNumber)
  1533. def GetStartIndex(self):
  1534. return 0
  1535. class GridSlotWindow(SlotWindow):
  1536. def __init__(self):
  1537. SlotWindow.__init__(self)
  1538. self.startIndex = 0
  1539. def __del__(self):
  1540. SlotWindow.__del__(self)
  1541. def RegisterWindow(self, layer):
  1542. self.hWnd = wndMgr.RegisterGridSlotWindow(self, layer)
  1543. def ArrangeSlot(self, StartIndex, xCount, yCount, xSize, ySize, xBlank, yBlank):
  1544. self.startIndex = StartIndex
  1545. wndMgr.ArrangeSlot(self.hWnd, StartIndex, xCount, yCount, xSize, ySize, xBlank, yBlank)
  1546. self.startIndex = StartIndex
  1547. def GetStartIndex(self):
  1548. return self.startIndex
  1549. class TitleBar(Window):
  1550. BLOCK_WIDTH = 32
  1551. BLOCK_HEIGHT = 23
  1552. def __init__(self):
  1553. Window.__init__(self)
  1554. self.AddFlag("attach")
  1555. def __del__(self):
  1556. Window.__del__(self)
  1557. def MakeTitleBar(self, width, color):
  1558. width = max(64, width)
  1559. imgLeft = ImageBox()
  1560. imgCenter = ExpandedImageBox()
  1561. imgRight = ImageBox()
  1562. imgLeft.AddFlag("not_pick")
  1563. imgCenter.AddFlag("not_pick")
  1564. imgRight.AddFlag("not_pick")
  1565. imgLeft.SetParent(self)
  1566. imgCenter.SetParent(self)
  1567. imgRight.SetParent(self)
  1568. if localeInfo.IsARABIC():
  1569. imgLeft.LoadImage("locale/ae/ui/pattern/titlebar_left.tga")
  1570. imgCenter.LoadImage("locale/ae/ui/pattern/titlebar_center.tga")
  1571. imgRight.LoadImage("locale/ae/ui/pattern/titlebar_right.tga")
  1572. else:
  1573. imgLeft.LoadImage("d:/ymir work/ui/pattern/titlebar_left.tga")
  1574. imgCenter.LoadImage("d:/ymir work/ui/pattern/titlebar_center.tga")
  1575. imgRight.LoadImage("d:/ymir work/ui/pattern/titlebar_right.tga")
  1576. imgLeft.Show()
  1577. imgCenter.Show()
  1578. imgRight.Show()
  1579. btnClose = Button()
  1580. btnClose.SetParent(self)
  1581. btnClose.SetUpVisual("d:/ymir work/ui/public/close_button_01.sub")
  1582. btnClose.SetOverVisual("d:/ymir work/ui/public/close_button_02.sub")
  1583. btnClose.SetDownVisual("d:/ymir work/ui/public/close_button_03.sub")
  1584. btnClose.SetToolTipText(localeInfo.UI_CLOSE, 0, -23)
  1585. btnClose.Show()
  1586. self.imgLeft = imgLeft
  1587. self.imgCenter = imgCenter
  1588. self.imgRight = imgRight
  1589. self.btnClose = btnClose
  1590. self.SetWidth(width)
  1591. def SetWidth(self, width):
  1592. self.imgCenter.SetRenderingRect(0.0, 0.0, float((width - self.BLOCK_WIDTH*2) - self.BLOCK_WIDTH) / self.BLOCK_WIDTH, 0.0)
  1593. self.imgCenter.SetPosition(self.BLOCK_WIDTH, 0)
  1594. self.imgRight.SetPosition(width - self.BLOCK_WIDTH, 0)
  1595. if localeInfo.IsARABIC():
  1596. self.btnClose.SetPosition(3, 3)
  1597. else:
  1598. self.btnClose.SetPosition(width - self.btnClose.GetWidth() - 3, 3)
  1599. self.SetSize(width, self.BLOCK_HEIGHT)
  1600. def SetCloseEvent(self, event):
  1601. self.btnClose.SetEvent(event)
  1602. if app.ENABLE_QUEST_CATEGORY_SYSTEM:
  1603. class SubTitleBar(Button):
  1604. def __init__(self):
  1605. Button.__init__(self)
  1606. def __del__(self):
  1607. Button.__del__(self)
  1608. def MakeSubTitleBar(self, width, color):
  1609. width = max(64, width)
  1610. self.SetWidth(width)
  1611. self.SetUpVisual("d:/ymir work/ui/quest_re/quest_tab_01.tga")
  1612. self.SetOverVisual("d:/ymir work/ui/quest_re/quest_tab_01.tga")
  1613. self.SetDownVisual("d:/ymir work/ui/quest_re/quest_tab_01.tga")
  1614. self.Show()
  1615. scrollImage = ImageBox()
  1616. scrollImage.SetParent(self)
  1617. scrollImage.LoadImage("d:/ymir work/ui/quest_re/quest_down.tga")
  1618. scrollImage.SetPosition(5, 2.5)
  1619. scrollImage.AddFlag("not_pick")
  1620. scrollImage.Show()
  1621. self.scrollImage = scrollImage
  1622. def OpenCategory(self, qcount = 0):
  1623. if qcount > 0:
  1624. self.scrollImage.LoadImage("d:/ymir work/ui/quest_re/quest_up.tga")
  1625. else:
  1626. self.scrollImage.LoadImage("d:/ymir work/ui/quest_re/quest_down.tga")
  1627. def CloseCategory(self, qcount = 0):
  1628. self.scrollImage.LoadImage("d:/ymir work/ui/quest_re/quest_down.tga")
  1629. def SetQuestLabel(self, filename, qcount):
  1630. tabColor = ImageBox()
  1631. tabColor.SetParent(self)
  1632. tabColor.LoadImage(filename)
  1633. tabColor.AddFlag("not_pick")
  1634. tabColor.SetPosition(188, 12)
  1635. if qcount > 0:
  1636. tabColor.Show()
  1637. else:
  1638. tabColor.Hide()
  1639. self.tabColor = tabColor
  1640. def SetWidth(self, width):
  1641. self.SetPosition(32, 0)
  1642. self.SetSize(width, 23)
  1643. class ListBar(Button):
  1644. def __init__(self):
  1645. Button.__init__(self)
  1646. def __del__(self):
  1647. Button.__del__(self)
  1648. def MakeListBar(self, width, color):
  1649. width = max(64, width)
  1650. self.SetWidth(width)
  1651. self.Show()
  1652. checkbox = ImageBox()
  1653. checkbox.SetParent(self)
  1654. checkbox.LoadImage("d:/ymir work/ui/quest_re/quest_new.tga")
  1655. checkbox.SetPosition(10, 9)
  1656. checkbox.AddFlag("not_pick")
  1657. checkbox.Show()
  1658. self.checkbox = checkbox
  1659. self.isChecked = False
  1660. def SetWidth(self, width):
  1661. self.SetPosition(32, 0)
  1662. self.SetSize(width, 23)
  1663. def CallEvent(self):
  1664. self.OnClickEvent()
  1665. super(ListBar, self).CallEvent()
  1666. def OnClickEvent(self):
  1667. self.checkbox.Hide()
  1668. self.isChecked = True
  1669. def SetSlot(self, slotIndex, itemIndex, width, height, icon, diffuseColor = (1.0, 1.0, 1.0, 1.0)):
  1670. wndMgr.SetSlot(self.hWnd, slotIndex, itemIndex, width, height, icon, diffuseColor)
  1671. class HorizontalBar(Window):
  1672. BLOCK_WIDTH = 32
  1673. BLOCK_HEIGHT = 17
  1674. def __init__(self):
  1675. Window.__init__(self)
  1676. self.AddFlag("attach")
  1677. def __del__(self):
  1678. Window.__del__(self)
  1679. def Create(self, width):
  1680. width = max(96, width)
  1681. imgLeft = ImageBox()
  1682. imgLeft.SetParent(self)
  1683. imgLeft.AddFlag("not_pick")
  1684. imgLeft.LoadImage("d:/ymir work/ui/pattern/horizontalbar_left.tga")
  1685. imgLeft.Show()
  1686. imgCenter = ExpandedImageBox()
  1687. imgCenter.SetParent(self)
  1688. imgCenter.AddFlag("not_pick")
  1689. imgCenter.LoadImage("d:/ymir work/ui/pattern/horizontalbar_center.tga")
  1690. imgCenter.Show()
  1691. imgRight = ImageBox()
  1692. imgRight.SetParent(self)
  1693. imgRight.AddFlag("not_pick")
  1694. imgRight.LoadImage("d:/ymir work/ui/pattern/horizontalbar_right.tga")
  1695. imgRight.Show()
  1696. self.imgLeft = imgLeft
  1697. self.imgCenter = imgCenter
  1698. self.imgRight = imgRight
  1699. self.SetWidth(width)
  1700. def SetWidth(self, width):
  1701. self.imgCenter.SetRenderingRect(0.0, 0.0, float((width - self.BLOCK_WIDTH*2) - self.BLOCK_WIDTH) / self.BLOCK_WIDTH, 0.0)
  1702. self.imgCenter.SetPosition(self.BLOCK_WIDTH, 0)
  1703. self.imgRight.SetPosition(width - self.BLOCK_WIDTH, 0)
  1704. self.SetSize(width, self.BLOCK_HEIGHT)
  1705. class Gauge(Window):
  1706. SLOT_WIDTH = 16
  1707. SLOT_HEIGHT = 7
  1708. GAUGE_TEMPORARY_PLACE = 12
  1709. GAUGE_WIDTH = 16
  1710. def __init__(self):
  1711. Window.__init__(self)
  1712. self.width = 0
  1713. def __del__(self):
  1714. Window.__del__(self)
  1715. def MakeGauge(self, width, color):
  1716. self.width = max(48, width)
  1717. imgSlotLeft = ImageBox()
  1718. imgSlotLeft.SetParent(self)
  1719. imgSlotLeft.LoadImage("d:/ymir work/ui/pattern/gauge_slot_left.tga")
  1720. imgSlotLeft.Show()
  1721. imgSlotRight = ImageBox()
  1722. imgSlotRight.SetParent(self)
  1723. imgSlotRight.LoadImage("d:/ymir work/ui/pattern/gauge_slot_right.tga")
  1724. imgSlotRight.Show()
  1725. imgSlotRight.SetPosition(width - self.SLOT_WIDTH, 0)
  1726. imgSlotCenter = ExpandedImageBox()
  1727. imgSlotCenter.SetParent(self)
  1728. imgSlotCenter.LoadImage("d:/ymir work/ui/pattern/gauge_slot_center.tga")
  1729. imgSlotCenter.Show()
  1730. imgSlotCenter.SetRenderingRect(0.0, 0.0, float((width - self.SLOT_WIDTH*2) - self.SLOT_WIDTH) / self.SLOT_WIDTH, 0.0)
  1731. imgSlotCenter.SetPosition(self.SLOT_WIDTH, 0)
  1732. imgGauge = ExpandedImageBox()
  1733. imgGauge.SetParent(self)
  1734. imgGauge.LoadImage("d:/ymir work/ui/pattern/gauge_" + color + ".tga")
  1735. imgGauge.Show()
  1736. imgGauge.SetRenderingRect(0.0, 0.0, 0.0, 0.0)
  1737. imgGauge.SetPosition(self.GAUGE_TEMPORARY_PLACE, 0)
  1738. imgSlotLeft.AddFlag("attach")
  1739. imgSlotCenter.AddFlag("attach")
  1740. imgSlotRight.AddFlag("attach")
  1741. self.imgLeft = imgSlotLeft
  1742. self.imgCenter = imgSlotCenter
  1743. self.imgRight = imgSlotRight
  1744. self.imgGauge = imgGauge
  1745. self.SetSize(width, self.SLOT_HEIGHT)
  1746. def SetPercentage(self, curValue, maxValue):
  1747. # PERCENTAGE_MAX_VALUE_ZERO_DIVISION_ERROR
  1748. if maxValue > 0.0:
  1749. percentage = min(1.0, float(curValue)/float(maxValue))
  1750. else:
  1751. percentage = 0.0
  1752. # END_OF_PERCENTAGE_MAX_VALUE_ZERO_DIVISION_ERROR
  1753. gaugeSize = -1.0 + float(self.width - self.GAUGE_TEMPORARY_PLACE*2) * percentage / self.GAUGE_WIDTH
  1754. self.imgGauge.SetRenderingRect(0.0, 0.0, gaugeSize, 0.0)
  1755. class Board(Window):
  1756. CORNER_WIDTH = 32
  1757. CORNER_HEIGHT = 32
  1758. LINE_WIDTH = 128
  1759. LINE_HEIGHT = 128
  1760. LT = 0
  1761. LB = 1
  1762. RT = 2
  1763. RB = 3
  1764. L = 0
  1765. R = 1
  1766. T = 2
  1767. B = 3
  1768. def __init__(self):
  1769. Window.__init__(self)
  1770. self.MakeBoard("d:/ymir work/ui/pattern/Board_Corner_", "d:/ymir work/ui/pattern/Board_Line_")
  1771. self.MakeBase()
  1772. def MakeBoard(self, cornerPath, linePath):
  1773. CornerFileNames = [ cornerPath+dir+".tga" for dir in ("LeftTop", "LeftBottom", "RightTop", "RightBottom", ) ]
  1774. LineFileNames = [ linePath+dir+".tga" for dir in ("Left", "Right", "Top", "Bottom", ) ]
  1775. """
  1776. CornerFileNames = (
  1777. "d:/ymir work/ui/pattern/Board_Corner_LeftTop.tga",
  1778. "d:/ymir work/ui/pattern/Board_Corner_LeftBottom.tga",
  1779. "d:/ymir work/ui/pattern/Board_Corner_RightTop.tga",
  1780. "d:/ymir work/ui/pattern/Board_Corner_RightBottom.tga",
  1781. )
  1782. LineFileNames = (
  1783. "d:/ymir work/ui/pattern/Board_Line_Left.tga",
  1784. "d:/ymir work/ui/pattern/Board_Line_Right.tga",
  1785. "d:/ymir work/ui/pattern/Board_Line_Top.tga",
  1786. "d:/ymir work/ui/pattern/Board_Line_Bottom.tga",
  1787. )
  1788. """
  1789. self.Corners = []
  1790. for fileName in CornerFileNames:
  1791. Corner = ExpandedImageBox()
  1792. Corner.AddFlag("not_pick")
  1793. Corner.LoadImage(fileName)
  1794. Corner.SetParent(self)
  1795. Corner.SetPosition(0, 0)
  1796. Corner.Show()
  1797. self.Corners.append(Corner)
  1798. self.Lines = []
  1799. for fileName in LineFileNames:
  1800. Line = ExpandedImageBox()
  1801. Line.AddFlag("not_pick")
  1802. Line.LoadImage(fileName)
  1803. Line.SetParent(self)
  1804. Line.SetPosition(0, 0)
  1805. Line.Show()
  1806. self.Lines.append(Line)
  1807. self.Lines[self.L].SetPosition(0, self.CORNER_HEIGHT)
  1808. self.Lines[self.T].SetPosition(self.CORNER_WIDTH, 0)
  1809. def MakeBase(self):
  1810. self.Base = ExpandedImageBox()
  1811. self.Base.AddFlag("not_pick")
  1812. self.Base.LoadImage("d:/ymir work/ui/pattern/Board_Base.tga")
  1813. self.Base.SetParent(self)
  1814. self.Base.SetPosition(self.CORNER_WIDTH, self.CORNER_HEIGHT)
  1815. self.Base.Show()
  1816. def __del__(self):
  1817. Window.__del__(self)
  1818. def SetSize(self, width, height):
  1819. width = max(self.CORNER_WIDTH*2, width)
  1820. height = max(self.CORNER_HEIGHT*2, height)
  1821. Window.SetSize(self, width, height)
  1822. self.Corners[self.LB].SetPosition(0, height - self.CORNER_HEIGHT)
  1823. self.Corners[self.RT].SetPosition(width - self.CORNER_WIDTH, 0)
  1824. self.Corners[self.RB].SetPosition(width - self.CORNER_WIDTH, height - self.CORNER_HEIGHT)
  1825. self.Lines[self.R].SetPosition(width - self.CORNER_WIDTH, self.CORNER_HEIGHT)
  1826. self.Lines[self.B].SetPosition(self.CORNER_HEIGHT, height - self.CORNER_HEIGHT)
  1827. verticalShowingPercentage = float((height - self.CORNER_HEIGHT*2) - self.LINE_HEIGHT) / self.LINE_HEIGHT
  1828. horizontalShowingPercentage = float((width - self.CORNER_WIDTH*2) - self.LINE_WIDTH) / self.LINE_WIDTH
  1829. self.Lines[self.L].SetRenderingRect(0, 0, 0, verticalShowingPercentage)
  1830. self.Lines[self.R].SetRenderingRect(0, 0, 0, verticalShowingPercentage)
  1831. self.Lines[self.T].SetRenderingRect(0, 0, horizontalShowingPercentage, 0)
  1832. self.Lines[self.B].SetRenderingRect(0, 0, horizontalShowingPercentage, 0)
  1833. if self.Base:
  1834. self.Base.SetRenderingRect(0, 0, horizontalShowingPercentage, verticalShowingPercentage)
  1835. class BoardWithTitleBar(Board):
  1836. def __init__(self):
  1837. Board.__init__(self)
  1838. titleBar = TitleBar()
  1839. titleBar.SetParent(self)
  1840. titleBar.MakeTitleBar(0, "red")
  1841. titleBar.SetPosition(8, 7)
  1842. titleBar.Show()
  1843. titleName = TextLine()
  1844. titleName.SetParent(titleBar)
  1845. titleName.SetPosition(0, 4)
  1846. titleName.SetWindowHorizontalAlignCenter()
  1847. titleName.SetHorizontalAlignCenter()
  1848. titleName.Show()
  1849. self.titleBar = titleBar
  1850. self.titleName = titleName
  1851. self.SetCloseEvent(self.Hide)
  1852. def __del__(self):
  1853. Board.__del__(self)
  1854. self.titleBar = None
  1855. self.titleName = None
  1856. def SetSize(self, width, height):
  1857. self.titleBar.SetWidth(width - 15)
  1858. #self.pickRestrictWindow.SetSize(width, height - 30)
  1859. Board.SetSize(self, width, height)
  1860. self.titleName.UpdateRect()
  1861. def SetTitleColor(self, color):
  1862. self.titleName.SetPackedFontColor(color)
  1863. def SetTitleName(self, name):
  1864. self.titleName.SetText(name)
  1865. def SetCloseEvent(self, event):
  1866. self.titleBar.SetCloseEvent(event)
  1867. class ThinBoardCircle(Window):
  1868. CORNER_WIDTH = 4
  1869. CORNER_HEIGHT = 4
  1870. LINE_WIDTH = 4
  1871. LINE_HEIGHT = 4
  1872. BOARD_COLOR = grp.GenerateColor(255.0, 255.0, 255.0, 1.0)
  1873. LT = 0
  1874. LB = 1
  1875. RT = 2
  1876. RB = 3
  1877. L = 0
  1878. R = 1
  1879. T = 2
  1880. B = 3
  1881. def __init__(self, layer = "UI"):
  1882. Window.__init__(self, layer)
  1883. CornerFileNames = [ "d:/ymir work/ui/pattern/thinboardcircle/ThinBoard_Corner_"+dir+"_Circle.tga" for dir in ["LeftTop","LeftBottom","RightTop","RightBottom"] ]
  1884. LineFileNames = [ "d:/ymir work/ui/pattern/thinboardcircle/ThinBoard_Line_"+dir+"_Circle.tga" for dir in ["Left","Right","Top","Bottom"] ]
  1885. self.Corners = []
  1886. for fileName in CornerFileNames:
  1887. Corner = ExpandedImageBox()
  1888. Corner.AddFlag("attach")
  1889. Corner.AddFlag("not_pick")
  1890. Corner.LoadImage(fileName)
  1891. Corner.SetParent(self)
  1892. Corner.SetPosition(0, 0)
  1893. Corner.Show()
  1894. self.Corners.append(Corner)
  1895. self.Lines = []
  1896. for fileName in LineFileNames:
  1897. Line = ExpandedImageBox()
  1898. Line.AddFlag("attach")
  1899. Line.AddFlag("not_pick")
  1900. Line.LoadImage(fileName)
  1901. Line.SetParent(self)
  1902. Line.SetPosition(0, 0)
  1903. Line.Show()
  1904. self.Lines.append(Line)
  1905. Base = Bar()
  1906. Base.SetParent(self)
  1907. Base.AddFlag("attach")
  1908. Base.AddFlag("not_pick")
  1909. Base.SetPosition(self.CORNER_WIDTH, self.CORNER_HEIGHT)
  1910. Base.SetColor(self.BOARD_COLOR)
  1911. Base.Show()
  1912. self.Base = Base
  1913. self.ButtonText = None
  1914. self.BonusId = 0
  1915. self.Lines[self.L].SetPosition(0, self.CORNER_HEIGHT)
  1916. self.Lines[self.T].SetPosition(self.CORNER_WIDTH, 0)
  1917. def __del__(self):
  1918. Window.__del__(self)
  1919. def SetSize(self, width, height):
  1920. width = max(self.CORNER_WIDTH*2, width)
  1921. height = max(self.CORNER_HEIGHT*2, height)
  1922. Window.SetSize(self, width, height)
  1923. self.Corners[self.LB].SetPosition(0, height - self.CORNER_HEIGHT)
  1924. self.Corners[self.RT].SetPosition(width - self.CORNER_WIDTH, 0)
  1925. self.Corners[self.RB].SetPosition(width - self.CORNER_WIDTH, height - self.CORNER_HEIGHT)
  1926. self.Lines[self.R].SetPosition(width - self.CORNER_WIDTH, self.CORNER_HEIGHT)
  1927. self.Lines[self.B].SetPosition(self.CORNER_HEIGHT, height - self.CORNER_HEIGHT)
  1928. verticalShowingPercentage = float((height - self.CORNER_HEIGHT*2) - self.LINE_HEIGHT) / self.LINE_HEIGHT
  1929. horizontalShowingPercentage = float((width - self.CORNER_WIDTH*2) - self.LINE_WIDTH) / self.LINE_WIDTH
  1930. self.Lines[self.L].SetRenderingRect(0, 0, 0, verticalShowingPercentage)
  1931. self.Lines[self.R].SetRenderingRect(0, 0, 0, verticalShowingPercentage)
  1932. self.Lines[self.T].SetRenderingRect(0, 0, horizontalShowingPercentage, 0)
  1933. self.Lines[self.B].SetRenderingRect(0, 0, horizontalShowingPercentage, 0)
  1934. self.Base.SetSize(width - self.CORNER_WIDTH*2, height - self.CORNER_HEIGHT*2)
  1935. def SetText(self, text):
  1936. if not self.ButtonText:
  1937. textLine = TextLine()
  1938. textLine.SetParent(self)
  1939. textLine.SetPosition(self.GetWidth()/2, self.GetHeight()/2)
  1940. textLine.SetVerticalAlignCenter()
  1941. textLine.SetHorizontalAlignCenter()
  1942. textLine.Show()
  1943. self.ButtonText = textLine
  1944. self.ButtonText.SetText(text)
  1945. def GetText(self):
  1946. if not self.ButtonText:
  1947. return ""
  1948. return self.ButtonText.GetText()
  1949. def SetBonusId(self, bnsId):
  1950. self.BonusId = bnsId
  1951. def GetBonusId(self):
  1952. if self.BonusId != 0:
  1953. return self.BonusId
  1954. def ShowInternal(self):
  1955. self.Base.Show()
  1956. for wnd in self.Lines:
  1957. wnd.Show()
  1958. for wnd in self.Corners:
  1959. wnd.Show()
  1960. def HideInternal(self):
  1961. self.Base.Hide()
  1962. for wnd in self.Lines:
  1963. wnd.Hide()
  1964. for wnd in self.Corners:
  1965. wnd.Hide()
  1966. class ThinBoard(Window):
  1967. CORNER_WIDTH = 16
  1968. CORNER_HEIGHT = 16
  1969. LINE_WIDTH = 16
  1970. LINE_HEIGHT = 16
  1971. BOARD_COLOR = grp.GenerateColor(0.0, 0.0, 0.0, 0.51)
  1972. LT = 0
  1973. LB = 1
  1974. RT = 2
  1975. RB = 3
  1976. L = 0
  1977. R = 1
  1978. T = 2
  1979. B = 3
  1980. def __init__(self, layer = "UI"):
  1981. Window.__init__(self, layer)
  1982. CornerFileNames = [ "d:/ymir work/ui/pattern/ThinBoard_Corner_"+dir+".tga" for dir in ["LeftTop","LeftBottom","RightTop","RightBottom"] ]
  1983. LineFileNames = [ "d:/ymir work/ui/pattern/ThinBoard_Line_"+dir+".tga" for dir in ["Left","Right","Top","Bottom"] ]
  1984. self.Corners = []
  1985. for fileName in CornerFileNames:
  1986. Corner = ExpandedImageBox()
  1987. Corner.AddFlag("attach")
  1988. Corner.AddFlag("not_pick")
  1989. Corner.LoadImage(fileName)
  1990. Corner.SetParent(self)
  1991. Corner.SetPosition(0, 0)
  1992. Corner.Show()
  1993. self.Corners.append(Corner)
  1994. self.Lines = []
  1995. for fileName in LineFileNames:
  1996. Line = ExpandedImageBox()
  1997. Line.AddFlag("attach")
  1998. Line.AddFlag("not_pick")
  1999. Line.LoadImage(fileName)
  2000. Line.SetParent(self)
  2001. Line.SetPosition(0, 0)
  2002. Line.Show()
  2003. self.Lines.append(Line)
  2004. Base = Bar()
  2005. Base.SetParent(self)
  2006. Base.AddFlag("attach")
  2007. Base.AddFlag("not_pick")
  2008. Base.SetPosition(self.CORNER_WIDTH, self.CORNER_HEIGHT)
  2009. Base.SetColor(self.BOARD_COLOR)
  2010. Base.Show()
  2011. self.Base = Base
  2012. self.Lines[self.L].SetPosition(0, self.CORNER_HEIGHT)
  2013. self.Lines[self.T].SetPosition(self.CORNER_WIDTH, 0)
  2014. def __del__(self):
  2015. Window.__del__(self)
  2016. if app.ENABLE_TARGET_INFORMATION_SYSTEM:
  2017. def ShowCorner(self, corner):
  2018. self.Corners[corner].Show()
  2019. self.SetSize(self.GetWidth(), self.GetHeight())
  2020. def HideCorners(self, corner):
  2021. self.Corners[corner].Hide()
  2022. self.SetSize(self.GetWidth(), self.GetHeight())
  2023. def ShowLine(self, line):
  2024. self.Lines[line].Show()
  2025. self.SetSize(self.GetWidth(), self.GetHeight())
  2026. def HideLine(self, line):
  2027. self.Lines[line].Hide()
  2028. self.SetSize(self.GetWidth(), self.GetHeight())
  2029. def SetSize(self, width, height):
  2030. width = max(self.CORNER_WIDTH*2, width)
  2031. height = max(self.CORNER_HEIGHT*2, height)
  2032. Window.SetSize(self, width, height)
  2033. self.Corners[self.LB].SetPosition(0, height - self.CORNER_HEIGHT)
  2034. self.Corners[self.RT].SetPosition(width - self.CORNER_WIDTH, 0)
  2035. self.Corners[self.RB].SetPosition(width - self.CORNER_WIDTH, height - self.CORNER_HEIGHT)
  2036. self.Lines[self.R].SetPosition(width - self.CORNER_WIDTH, self.CORNER_HEIGHT)
  2037. self.Lines[self.B].SetPosition(self.CORNER_HEIGHT, height - self.CORNER_HEIGHT)
  2038. verticalShowingPercentage = float((height - self.CORNER_HEIGHT*2) - self.LINE_HEIGHT) / self.LINE_HEIGHT
  2039. horizontalShowingPercentage = float((width - self.CORNER_WIDTH*2) - self.LINE_WIDTH) / self.LINE_WIDTH
  2040. self.Lines[self.L].SetRenderingRect(0, 0, 0, verticalShowingPercentage)
  2041. self.Lines[self.R].SetRenderingRect(0, 0, 0, verticalShowingPercentage)
  2042. self.Lines[self.T].SetRenderingRect(0, 0, horizontalShowingPercentage, 0)
  2043. self.Lines[self.B].SetRenderingRect(0, 0, horizontalShowingPercentage, 0)
  2044. self.Base.SetSize(width - self.CORNER_WIDTH*2, height - self.CORNER_HEIGHT*2)
  2045. def ShowInternal(self):
  2046. self.Base.Show()
  2047. for wnd in self.Lines:
  2048. wnd.Show()
  2049. for wnd in self.Corners:
  2050. wnd.Show()
  2051. def HideInternal(self):
  2052. self.Base.Hide()
  2053. for wnd in self.Lines:
  2054. wnd.Hide()
  2055. for wnd in self.Corners:
  2056. wnd.Hide()
  2057. class ThinBoardGold(Window):
  2058. CORNER_WIDTH = 16
  2059. CORNER_HEIGHT = 16
  2060. LINE_WIDTH = 16
  2061. LINE_HEIGHT = 16
  2062. BOARD_COLOR = grp.GenerateColor(0.0, 0.0, 0.0, 0.51)
  2063. LT = 0
  2064. LB = 1
  2065. RT = 2
  2066. RB = 3
  2067. L = 0
  2068. R = 1
  2069. T = 2
  2070. B = 3
  2071. def __init__(self, layer = "UI"):
  2072. Window.__init__(self, layer)
  2073. CornerFileNames = [ "d:/ymir work/ui/pattern/thinboardgold/ThinBoard_Corner_"+dir+".tga" for dir in ["LeftTop_gold", "LeftBottom_gold","RightTop_gold", "RightBottom_gold"]]
  2074. LineFileNames = [ "d:/ymir work/ui/pattern/thinboardgold/ThinBoard_Line_"+dir+".tga" for dir in ["Left_gold", "Right_gold", "Top_gold", "Bottom_gold"]]
  2075. self.Corners = []
  2076. for fileName in CornerFileNames:
  2077. Corner = ExpandedImageBox()
  2078. Corner.AddFlag("attach")
  2079. Corner.AddFlag("not_pick")
  2080. Corner.LoadImage(fileName)
  2081. Corner.SetParent(self)
  2082. Corner.SetPosition(0, 0)
  2083. Corner.Show()
  2084. self.Corners.append(Corner)
  2085. self.Lines = []
  2086. for fileName in LineFileNames:
  2087. Line = ExpandedImageBox()
  2088. Line.AddFlag("attach")
  2089. Line.AddFlag("not_pick")
  2090. Line.LoadImage(fileName)
  2091. Line.SetParent(self)
  2092. Line.SetPosition(0, 0)
  2093. Line.Show()
  2094. self.Lines.append(Line)
  2095. Base = ExpandedImageBox()
  2096. Base.SetParent(self)
  2097. Base.AddFlag("attach")
  2098. Base.AddFlag("not_pick")
  2099. Base.LoadImage("d:/ymir work/ui/pattern/thinboardgold/thinboard_bg_gold.tga")
  2100. Base.SetPosition(self.CORNER_WIDTH, self.CORNER_HEIGHT)
  2101. Base.Show()
  2102. self.Base = Base
  2103. self.Lines[self.L].SetPosition(0, self.CORNER_HEIGHT)
  2104. self.Lines[self.T].SetPosition(self.CORNER_WIDTH, 0)
  2105. def __del__(self):
  2106. Window.__del__(self)
  2107. def SetSize(self, width, height):
  2108. width = max(self.CORNER_WIDTH*2, width)
  2109. height = max(self.CORNER_HEIGHT*2, height)
  2110. Window.SetSize(self, width, height)
  2111. self.Corners[self.LB].SetPosition(0, height - self.CORNER_HEIGHT)
  2112. self.Corners[self.RT].SetPosition(width - self.CORNER_WIDTH, 0)
  2113. self.Corners[self.RB].SetPosition(width - self.CORNER_WIDTH, height - self.CORNER_HEIGHT)
  2114. self.Lines[self.R].SetPosition(width - self.CORNER_WIDTH, self.CORNER_HEIGHT)
  2115. self.Lines[self.B].SetPosition(self.CORNER_HEIGHT, height - self.CORNER_HEIGHT)
  2116. verticalShowingPercentage = float((height - self.CORNER_HEIGHT*2) - self.LINE_HEIGHT) / self.LINE_HEIGHT
  2117. horizontalShowingPercentage = float((width - self.CORNER_WIDTH*2) - self.LINE_WIDTH) / self.LINE_WIDTH
  2118. self.Lines[self.L].SetRenderingRect(0, 0, 0, verticalShowingPercentage)
  2119. self.Lines[self.R].SetRenderingRect(0, 0, 0, verticalShowingPercentage)
  2120. self.Lines[self.T].SetRenderingRect(0, 0, horizontalShowingPercentage, 0)
  2121. self.Lines[self.B].SetRenderingRect(0, 0, horizontalShowingPercentage, 0)
  2122. if self.Base:
  2123. self.Base.SetRenderingRect(0, 0, horizontalShowingPercentage, verticalShowingPercentage)
  2124. def ShowInternal(self):
  2125. self.Base.Show()
  2126. for wnd in self.Lines:
  2127. wnd.Show()
  2128. for wnd in self.Corners:
  2129. wnd.Show()
  2130. def HideInternal(self):
  2131. self.Base.Hide()
  2132. for wnd in self.Lines:
  2133. wnd.Hide()
  2134. for wnd in self.Corners:
  2135. wnd.Hide()
  2136. class ScrollBar(Window):
  2137. SCROLLBAR_WIDTH = 17
  2138. SCROLLBAR_MIDDLE_HEIGHT = 9
  2139. SCROLLBAR_BUTTON_WIDTH = 17
  2140. SCROLLBAR_BUTTON_HEIGHT = 17
  2141. MIDDLE_BAR_POS = 5
  2142. MIDDLE_BAR_UPPER_PLACE = 3
  2143. MIDDLE_BAR_DOWNER_PLACE = 4
  2144. TEMP_SPACE = MIDDLE_BAR_UPPER_PLACE + MIDDLE_BAR_DOWNER_PLACE
  2145. class MiddleBar(DragButton):
  2146. def __init__(self):
  2147. DragButton.__init__(self)
  2148. self.AddFlag("movable")
  2149. #self.AddFlag("restrict_x")
  2150. def MakeImage(self):
  2151. top = ImageBox()
  2152. top.SetParent(self)
  2153. top.LoadImage("d:/ymir work/ui/pattern/ScrollBar_Top.tga")
  2154. top.SetPosition(0, 0)
  2155. top.AddFlag("not_pick")
  2156. top.Show()
  2157. bottom = ImageBox()
  2158. bottom.SetParent(self)
  2159. bottom.LoadImage("d:/ymir work/ui/pattern/ScrollBar_Bottom.tga")
  2160. bottom.AddFlag("not_pick")
  2161. bottom.Show()
  2162. middle = ExpandedImageBox()
  2163. middle.SetParent(self)
  2164. middle.LoadImage("d:/ymir work/ui/pattern/ScrollBar_Middle.tga")
  2165. middle.SetPosition(0, 4)
  2166. middle.AddFlag("not_pick")
  2167. middle.Show()
  2168. self.top = top
  2169. self.bottom = bottom
  2170. self.middle = middle
  2171. def SetSize(self, height):
  2172. height = max(12, height)
  2173. DragButton.SetSize(self, 10, height)
  2174. self.bottom.SetPosition(0, height-4)
  2175. height -= 4*3
  2176. self.middle.SetRenderingRect(0, 0, 0, float(height)/4.0)
  2177. def __init__(self):
  2178. Window.__init__(self)
  2179. self.pageSize = 1
  2180. self.curPos = 0.0
  2181. self.eventScroll = lambda *arg: None
  2182. self.lockFlag = False
  2183. self.scrollStep = 0.20
  2184. self.CreateScrollBar()
  2185. def __del__(self):
  2186. Window.__del__(self)
  2187. def CreateScrollBar(self):
  2188. barSlot = Bar3D()
  2189. barSlot.SetParent(self)
  2190. barSlot.AddFlag("not_pick")
  2191. barSlot.Show()
  2192. middleBar = self.MiddleBar()
  2193. middleBar.SetParent(self)
  2194. middleBar.SetMoveEvent(__mem_func__(self.OnMove))
  2195. middleBar.Show()
  2196. middleBar.MakeImage()
  2197. middleBar.SetSize(12)
  2198. upButton = Button()
  2199. upButton.SetParent(self)
  2200. upButton.SetEvent(__mem_func__(self.OnUp))
  2201. upButton.SetUpVisual("d:/ymir work/ui/public/scrollbar_up_button_01.sub")
  2202. upButton.SetOverVisual("d:/ymir work/ui/public/scrollbar_up_button_02.sub")
  2203. upButton.SetDownVisual("d:/ymir work/ui/public/scrollbar_up_button_03.sub")
  2204. upButton.Show()
  2205. downButton = Button()
  2206. downButton.SetParent(self)
  2207. downButton.SetEvent(__mem_func__(self.OnDown))
  2208. downButton.SetUpVisual("d:/ymir work/ui/public/scrollbar_down_button_01.sub")
  2209. downButton.SetOverVisual("d:/ymir work/ui/public/scrollbar_down_button_02.sub")
  2210. downButton.SetDownVisual("d:/ymir work/ui/public/scrollbar_down_button_03.sub")
  2211. downButton.Show()
  2212. self.upButton = upButton
  2213. self.downButton = downButton
  2214. self.middleBar = middleBar
  2215. self.barSlot = barSlot
  2216. self.SCROLLBAR_WIDTH = self.upButton.GetWidth()
  2217. self.SCROLLBAR_MIDDLE_HEIGHT = self.middleBar.GetHeight()
  2218. self.SCROLLBAR_BUTTON_WIDTH = self.upButton.GetWidth()
  2219. self.SCROLLBAR_BUTTON_HEIGHT = self.upButton.GetHeight()
  2220. if app.ENABLE_MOUSEWHEEL_EVENT:
  2221. self.upButton.SetMouseWheelScrollEvent(self.OnMouseWheelScroll_ScrollBar)
  2222. self.downButton.SetMouseWheelScrollEvent(self.OnMouseWheelScroll_ScrollBar)
  2223. self.middleBar.SetMouseWheelScrollEvent(self.OnMouseWheelScroll_ScrollBar)
  2224. self.barSlot.SetMouseWheelScrollEvent(self.OnMouseWheelScroll_ScrollBar)
  2225. self.SetMouseWheelScrollEvent(self.OnMouseWheelScroll_ScrollBar)
  2226. if app.ENABLE_MOUSEWHEEL_EVENT:
  2227. def OnMouseWheelScroll_ScrollBar(self,mode):
  2228. eventDct = { "UP" : lambda : self.SetPos(self.curPos - (self.scrollStep/4)) , "DOWN" : lambda: self.SetPos(self.curPos + (self.scrollStep/4)) }
  2229. if mode in eventDct:
  2230. eventDct[mode]()
  2231. def Destroy(self):
  2232. self.middleBar = None
  2233. self.upButton = None
  2234. self.downButton = None
  2235. self.eventScroll = lambda *arg: None
  2236. def SetScrollEvent(self, event):
  2237. self.eventScroll = event
  2238. def SetMiddleBarSize(self, pageScale):
  2239. realHeight = self.GetHeight() - self.SCROLLBAR_BUTTON_HEIGHT*2
  2240. self.SCROLLBAR_MIDDLE_HEIGHT = int(pageScale * float(realHeight))
  2241. self.middleBar.SetSize(self.SCROLLBAR_MIDDLE_HEIGHT)
  2242. self.pageSize = (self.GetHeight() - self.SCROLLBAR_BUTTON_HEIGHT*2) - self.SCROLLBAR_MIDDLE_HEIGHT - (self.TEMP_SPACE)
  2243. def SetScrollBarSize(self, height):
  2244. self.pageSize = (height - self.SCROLLBAR_BUTTON_HEIGHT*2) - self.SCROLLBAR_MIDDLE_HEIGHT - (self.TEMP_SPACE)
  2245. self.SetSize(self.SCROLLBAR_WIDTH, height)
  2246. self.upButton.SetPosition(0, 0)
  2247. self.downButton.SetPosition(0, height - self.SCROLLBAR_BUTTON_HEIGHT)
  2248. 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)
  2249. self.middleBar.SetPosition(self.MIDDLE_BAR_POS, 0)
  2250. self.UpdateBarSlot()
  2251. def UpdateBarSlot(self):
  2252. self.barSlot.SetPosition(0, self.SCROLLBAR_BUTTON_HEIGHT)
  2253. self.barSlot.SetSize(self.GetWidth() - 2, self.GetHeight() - self.SCROLLBAR_BUTTON_HEIGHT*2 - 2)
  2254. def GetPos(self):
  2255. return self.curPos
  2256. def SetPos(self, pos):
  2257. pos = max(0.0, pos)
  2258. pos = min(1.0, pos)
  2259. newPos = float(self.pageSize) * pos
  2260. self.middleBar.SetPosition(self.MIDDLE_BAR_POS, int(newPos) + self.SCROLLBAR_BUTTON_HEIGHT + self.MIDDLE_BAR_UPPER_PLACE)
  2261. self.OnMove()
  2262. def SetScrollStep(self, step):
  2263. self.scrollStep = step
  2264. def GetScrollStep(self):
  2265. return self.scrollStep
  2266. def OnUp(self):
  2267. self.SetPos(self.curPos-self.scrollStep)
  2268. def OnDown(self):
  2269. self.SetPos(self.curPos+self.scrollStep)
  2270. def OnMove(self):
  2271. if self.lockFlag:
  2272. return
  2273. if 0 == self.pageSize:
  2274. return
  2275. (xLocal, yLocal) = self.middleBar.GetLocalPosition()
  2276. self.curPos = float(yLocal - self.SCROLLBAR_BUTTON_HEIGHT - self.MIDDLE_BAR_UPPER_PLACE) / float(self.pageSize)
  2277. self.eventScroll()
  2278. def OnMouseLeftButtonDown(self):
  2279. (xMouseLocalPosition, yMouseLocalPosition) = self.GetMouseLocalPosition()
  2280. pickedPos = yMouseLocalPosition - self.SCROLLBAR_BUTTON_HEIGHT - self.SCROLLBAR_MIDDLE_HEIGHT/2
  2281. newPos = float(pickedPos) / float(self.pageSize)
  2282. self.SetPos(newPos)
  2283. def LockScroll(self):
  2284. self.lockFlag = True
  2285. def UnlockScroll(self):
  2286. self.lockFlag = False
  2287. class ThinScrollBar(ScrollBar):
  2288. def CreateScrollBar(self):
  2289. middleBar = self.MiddleBar()
  2290. middleBar.SetParent(self)
  2291. middleBar.SetMoveEvent(__mem_func__(self.OnMove))
  2292. middleBar.Show()
  2293. middleBar.SetUpVisual("d:/ymir work/ui/public/scrollbar_thin_middle_button_01.sub")
  2294. middleBar.SetOverVisual("d:/ymir work/ui/public/scrollbar_thin_middle_button_02.sub")
  2295. middleBar.SetDownVisual("d:/ymir work/ui/public/scrollbar_thin_middle_button_03.sub")
  2296. upButton = Button()
  2297. upButton.SetParent(self)
  2298. upButton.SetUpVisual("d:/ymir work/ui/public/scrollbar_thin_up_button_01.sub")
  2299. upButton.SetOverVisual("d:/ymir work/ui/public/scrollbar_thin_up_button_02.sub")
  2300. upButton.SetDownVisual("d:/ymir work/ui/public/scrollbar_thin_up_button_03.sub")
  2301. upButton.SetEvent(__mem_func__(self.OnUp))
  2302. upButton.Show()
  2303. downButton = Button()
  2304. downButton.SetParent(self)
  2305. downButton.SetUpVisual("d:/ymir work/ui/public/scrollbar_thin_down_button_01.sub")
  2306. downButton.SetOverVisual("d:/ymir work/ui/public/scrollbar_thin_down_button_02.sub")
  2307. downButton.SetDownVisual("d:/ymir work/ui/public/scrollbar_thin_down_button_03.sub")
  2308. downButton.SetEvent(__mem_func__(self.OnDown))
  2309. downButton.Show()
  2310. self.middleBar = middleBar
  2311. self.upButton = upButton
  2312. self.downButton = downButton
  2313. self.SCROLLBAR_WIDTH = self.upButton.GetWidth()
  2314. self.SCROLLBAR_MIDDLE_HEIGHT = self.middleBar.GetHeight()
  2315. self.SCROLLBAR_BUTTON_WIDTH = self.upButton.GetWidth()
  2316. self.SCROLLBAR_BUTTON_HEIGHT = self.upButton.GetHeight()
  2317. self.MIDDLE_BAR_POS = 0
  2318. self.MIDDLE_BAR_UPPER_PLACE = 0
  2319. self.MIDDLE_BAR_DOWNER_PLACE = 0
  2320. self.TEMP_SPACE = 0
  2321. def UpdateBarSlot(self):
  2322. pass
  2323. class SmallThinScrollBar(ScrollBar):
  2324. def CreateScrollBar(self):
  2325. middleBar = self.MiddleBar()
  2326. middleBar.SetParent(self)
  2327. middleBar.SetMoveEvent(__mem_func__(self.OnMove))
  2328. middleBar.Show()
  2329. middleBar.SetUpVisual("d:/ymir work/ui/public/scrollbar_small_thin_middle_button_01.sub")
  2330. middleBar.SetOverVisual("d:/ymir work/ui/public/scrollbar_small_thin_middle_button_01.sub")
  2331. middleBar.SetDownVisual("d:/ymir work/ui/public/scrollbar_small_thin_middle_button_01.sub")
  2332. upButton = Button()
  2333. upButton.SetParent(self)
  2334. upButton.SetUpVisual("d:/ymir work/ui/public/scrollbar_small_thin_up_button_01.sub")
  2335. upButton.SetOverVisual("d:/ymir work/ui/public/scrollbar_small_thin_up_button_02.sub")
  2336. upButton.SetDownVisual("d:/ymir work/ui/public/scrollbar_small_thin_up_button_03.sub")
  2337. upButton.SetEvent(__mem_func__(self.OnUp))
  2338. upButton.Show()
  2339. downButton = Button()
  2340. downButton.SetParent(self)
  2341. downButton.SetUpVisual("d:/ymir work/ui/public/scrollbar_small_thin_down_button_01.sub")
  2342. downButton.SetOverVisual("d:/ymir work/ui/public/scrollbar_small_thin_down_button_02.sub")
  2343. downButton.SetDownVisual("d:/ymir work/ui/public/scrollbar_small_thin_down_button_03.sub")
  2344. downButton.SetEvent(__mem_func__(self.OnDown))
  2345. downButton.Show()
  2346. self.middleBar = middleBar
  2347. self.upButton = upButton
  2348. self.downButton = downButton
  2349. self.SCROLLBAR_WIDTH = self.upButton.GetWidth()
  2350. self.SCROLLBAR_MIDDLE_HEIGHT = self.middleBar.GetHeight()
  2351. self.SCROLLBAR_BUTTON_WIDTH = self.upButton.GetWidth()
  2352. self.SCROLLBAR_BUTTON_HEIGHT = self.upButton.GetHeight()
  2353. self.MIDDLE_BAR_POS = 0
  2354. self.MIDDLE_BAR_UPPER_PLACE = 0
  2355. self.MIDDLE_BAR_DOWNER_PLACE = 0
  2356. self.TEMP_SPACE = 0
  2357. if app.ENABLE_MOUSEWHEEL_EVENT:
  2358. self.middleBar.SetMouseWheelScrollEvent(self.OnMouseWheelScroll_ScrollBar)
  2359. self.upButton.SetMouseWheelScrollEvent(self.OnMouseWheelScroll_ScrollBar)
  2360. self.downButton.SetMouseWheelScrollEvent(self.OnMouseWheelScroll_ScrollBar)
  2361. self.SetMouseWheelScrollEvent(self.OnMouseWheelScroll_ScrollBar)
  2362. def UpdateBarSlot(self):
  2363. pass
  2364. class SliderBar(Window):
  2365. def __init__(self):
  2366. Window.__init__(self)
  2367. self.curPos = 1.0
  2368. self.pageSize = 1.0
  2369. self.eventChange = None
  2370. self.__CreateBackGroundImage()
  2371. self.__CreateCursor()
  2372. def __del__(self):
  2373. Window.__del__(self)
  2374. def __CreateBackGroundImage(self):
  2375. img = ImageBox()
  2376. img.SetParent(self)
  2377. img.LoadImage("d:/ymir work/ui/game/windows/sliderbar.sub")
  2378. img.Show()
  2379. self.backGroundImage = img
  2380. ##
  2381. self.SetSize(self.backGroundImage.GetWidth(), self.backGroundImage.GetHeight())
  2382. def __CreateCursor(self):
  2383. cursor = DragButton()
  2384. cursor.AddFlag("movable")
  2385. cursor.AddFlag("restrict_y")
  2386. cursor.SetParent(self)
  2387. cursor.SetMoveEvent(__mem_func__(self.__OnMove))
  2388. cursor.SetUpVisual("d:/ymir work/ui/game/windows/sliderbar_cursor.sub")
  2389. cursor.SetOverVisual("d:/ymir work/ui/game/windows/sliderbar_cursor.sub")
  2390. cursor.SetDownVisual("d:/ymir work/ui/game/windows/sliderbar_cursor.sub")
  2391. cursor.Show()
  2392. self.cursor = cursor
  2393. ##
  2394. self.cursor.SetRestrictMovementArea(0, 0, self.backGroundImage.GetWidth(), 0)
  2395. self.pageSize = self.backGroundImage.GetWidth() - self.cursor.GetWidth()
  2396. def __OnMove(self):
  2397. (xLocal, yLocal) = self.cursor.GetLocalPosition()
  2398. self.curPos = float(xLocal) / float(self.pageSize)
  2399. if self.eventChange:
  2400. self.eventChange()
  2401. def SetSliderPos(self, pos):
  2402. self.curPos = pos
  2403. self.cursor.SetPosition(int(self.pageSize * pos), 0)
  2404. def GetSliderPos(self):
  2405. return self.curPos
  2406. def SetEvent(self, event):
  2407. self.eventChange = event
  2408. def Enable(self):
  2409. self.cursor.Show()
  2410. def Disable(self):
  2411. self.cursor.Hide()
  2412. class ListBox(Window):
  2413. TEMPORARY_PLACE = 3
  2414. def __init__(self, layer = "UI"):
  2415. Window.__init__(self, layer)
  2416. self.overLine = -1
  2417. self.selectedLine = -1
  2418. self.width = 0
  2419. self.height = 0
  2420. self.stepSize = 17
  2421. self.basePos = 0
  2422. self.showLineCount = 0
  2423. self.itemCenterAlign = True
  2424. self.itemList = []
  2425. self.keyDict = {}
  2426. self.textDict = {}
  2427. self.event = lambda *arg: None
  2428. def __del__(self):
  2429. Window.__del__(self)
  2430. def SetWidth(self, width):
  2431. self.SetSize(width, self.height)
  2432. def SetSize(self, width, height):
  2433. Window.SetSize(self, width, height)
  2434. self.width = width
  2435. self.height = height
  2436. def SetTextCenterAlign(self, flag):
  2437. self.itemCenterAlign = flag
  2438. def SetBasePos(self, pos):
  2439. self.basePos = pos
  2440. self._LocateItem()
  2441. def ClearItem(self):
  2442. self.keyDict = {}
  2443. self.textDict = {}
  2444. self.itemList = []
  2445. self.overLine = -1
  2446. self.selectedLine = -1
  2447. def InsertItem(self, number, text):
  2448. self.keyDict[len(self.itemList)] = number
  2449. self.textDict[len(self.itemList)] = text
  2450. textLine = TextLine()
  2451. textLine.SetParent(self)
  2452. textLine.SetText(text)
  2453. textLine.Show()
  2454. if self.itemCenterAlign:
  2455. textLine.SetWindowHorizontalAlignCenter()
  2456. textLine.SetHorizontalAlignCenter()
  2457. self.itemList.append(textLine)
  2458. self._LocateItem()
  2459. def ChangeItem(self, number, text):
  2460. for key, value in self.keyDict.items():
  2461. if value == number:
  2462. self.textDict[key] = text
  2463. if number < len(self.itemList):
  2464. self.itemList[key].SetText(text)
  2465. return
  2466. def LocateItem(self):
  2467. self._LocateItem()
  2468. def _LocateItem(self):
  2469. skipCount = self.basePos
  2470. yPos = 0
  2471. self.showLineCount = 0
  2472. for textLine in self.itemList:
  2473. textLine.Hide()
  2474. if skipCount > 0:
  2475. skipCount -= 1
  2476. continue
  2477. if localeInfo.IsARABIC():
  2478. w, h = textLine.GetTextSize()
  2479. textLine.SetPosition(w+10, yPos + 3)
  2480. else:
  2481. textLine.SetPosition(0, yPos + 3)
  2482. yPos += self.stepSize
  2483. if yPos <= self.GetHeight():
  2484. self.showLineCount += 1
  2485. textLine.Show()
  2486. def ArrangeItem(self):
  2487. self.SetSize(self.width, len(self.itemList) * self.stepSize)
  2488. self._LocateItem()
  2489. def GetViewItemCount(self):
  2490. return int(self.GetHeight() / self.stepSize)
  2491. def GetItemCount(self):
  2492. return len(self.itemList)
  2493. def SetEvent(self, event):
  2494. self.event = event
  2495. def SelectItem(self, line):
  2496. if not self.keyDict.has_key(line):
  2497. return
  2498. if line == self.selectedLine:
  2499. return
  2500. self.selectedLine = line
  2501. self.event(self.keyDict.get(line, 0), self.textDict.get(line, "None"))
  2502. def GetSelectedItem(self):
  2503. return self.keyDict.get(self.selectedLine, 0)
  2504. def OnMouseLeftButtonDown(self):
  2505. if self.overLine < 0:
  2506. return
  2507. def OnMouseLeftButtonUp(self):
  2508. if self.overLine >= 0:
  2509. self.SelectItem(self.overLine+self.basePos)
  2510. def OnUpdate(self):
  2511. self.overLine = -1
  2512. if self.IsIn():
  2513. x, y = self.GetGlobalPosition()
  2514. height = self.GetHeight()
  2515. xMouse, yMouse = wndMgr.GetMousePosition()
  2516. if yMouse - y < height - 1:
  2517. self.overLine = (yMouse - y) / self.stepSize
  2518. if self.overLine < 0:
  2519. self.overLine = -1
  2520. if self.overLine >= len(self.itemList):
  2521. self.overLine = -1
  2522. def OnRender(self):
  2523. xRender, yRender = self.GetGlobalPosition()
  2524. yRender -= self.TEMPORARY_PLACE
  2525. widthRender = self.width
  2526. heightRender = self.height + self.TEMPORARY_PLACE*2
  2527. if localeInfo.IsCIBN10:
  2528. if -1 != self.overLine and self.keyDict[self.overLine] != -1:
  2529. grp.SetColor(HALF_WHITE_COLOR)
  2530. grp.RenderBar(xRender + 2, yRender + self.overLine*self.stepSize + 4, self.width - 3, self.stepSize)
  2531. if -1 != self.selectedLine and self.keyDict[self.selectedLine] != -1:
  2532. if self.selectedLine >= self.basePos:
  2533. if self.selectedLine - self.basePos < self.showLineCount:
  2534. grp.SetColor(SELECT_COLOR)
  2535. grp.RenderBar(xRender + 2, yRender + (self.selectedLine-self.basePos)*self.stepSize + 4, self.width - 3, self.stepSize)
  2536. else:
  2537. if -1 != self.overLine:
  2538. grp.SetColor(HALF_WHITE_COLOR)
  2539. grp.RenderBar(xRender + 2, yRender + self.overLine*self.stepSize + 4, self.width - 3, self.stepSize)
  2540. if -1 != self.selectedLine:
  2541. if self.selectedLine >= self.basePos:
  2542. if self.selectedLine - self.basePos < self.showLineCount:
  2543. grp.SetColor(SELECT_COLOR)
  2544. grp.RenderBar(xRender + 2, yRender + (self.selectedLine-self.basePos)*self.stepSize + 4, self.width - 3, self.stepSize)
  2545. class ListBox2(ListBox):
  2546. def __init__(self, *args, **kwargs):
  2547. ListBox.__init__(self, *args, **kwargs)
  2548. self.rowCount = 10
  2549. self.barWidth = 0
  2550. self.colCount = 0
  2551. def SetRowCount(self, rowCount):
  2552. self.rowCount = rowCount
  2553. def SetSize(self, width, height):
  2554. ListBox.SetSize(self, width, height)
  2555. self._RefreshForm()
  2556. def ClearItem(self):
  2557. ListBox.ClearItem(self)
  2558. self._RefreshForm()
  2559. def InsertItem(self, *args, **kwargs):
  2560. ListBox.InsertItem(self, *args, **kwargs)
  2561. self._RefreshForm()
  2562. def OnUpdate(self):
  2563. mpos = wndMgr.GetMousePosition()
  2564. self.overLine = self._CalcPointIndex(mpos)
  2565. def OnRender(self):
  2566. x, y = self.GetGlobalPosition()
  2567. pos = (x + 2, y)
  2568. if -1 != self.overLine:
  2569. grp.SetColor(HALF_WHITE_COLOR)
  2570. self._RenderBar(pos, self.overLine)
  2571. if -1 != self.selectedLine:
  2572. if self.selectedLine >= self.basePos:
  2573. if self.selectedLine - self.basePos < self.showLineCount:
  2574. grp.SetColor(SELECT_COLOR)
  2575. self._RenderBar(pos, self.selectedLine-self.basePos)
  2576. def _CalcPointIndex(self, mpos):
  2577. if self.IsIn():
  2578. px, py = mpos
  2579. gx, gy = self.GetGlobalPosition()
  2580. lx, ly = px - gx, py - gy
  2581. col = lx / self.barWidth
  2582. row = ly / self.stepSize
  2583. idx = col * self.rowCount + row
  2584. if col >= 0 and col < self.colCount:
  2585. if row >= 0 and row < self.rowCount:
  2586. if idx >= 0 and idx < len(self.itemList):
  2587. return idx
  2588. return -1
  2589. def _CalcRenderPos(self, pos, idx):
  2590. x, y = pos
  2591. row = idx % self.rowCount
  2592. col = idx / self.rowCount
  2593. return (x + col * self.barWidth, y + row * self.stepSize)
  2594. def _RenderBar(self, basePos, idx):
  2595. x, y = self._CalcRenderPos(basePos, idx)
  2596. grp.RenderBar(x, y, self.barWidth - 3, self.stepSize)
  2597. def _LocateItem(self):
  2598. pos = (0, self.TEMPORARY_PLACE)
  2599. self.showLineCount = 0
  2600. for textLine in self.itemList:
  2601. x, y = self._CalcRenderPos(pos, self.showLineCount)
  2602. textLine.SetPosition(x, y)
  2603. textLine.Show()
  2604. self.showLineCount += 1
  2605. def _RefreshForm(self):
  2606. if len(self.itemList) % self.rowCount:
  2607. self.colCount = len(self.itemList) / self.rowCount + 1
  2608. else:
  2609. self.colCount = len(self.itemList) / self.rowCount
  2610. if self.colCount:
  2611. self.barWidth = self.width / self.colCount
  2612. else:
  2613. self.barWidth = self.width
  2614. class ComboBox(Window):
  2615. class ListBoxWithBoard(ListBox):
  2616. def __init__(self, layer):
  2617. ListBox.__init__(self, layer)
  2618. def OnRender(self):
  2619. xRender, yRender = self.GetGlobalPosition()
  2620. yRender -= self.TEMPORARY_PLACE
  2621. widthRender = self.width
  2622. heightRender = self.height + self.TEMPORARY_PLACE*2
  2623. grp.SetColor(BACKGROUND_COLOR)
  2624. grp.RenderBar(xRender, yRender, widthRender, heightRender)
  2625. grp.SetColor(DARK_COLOR)
  2626. grp.RenderLine(xRender, yRender, widthRender, 0)
  2627. grp.RenderLine(xRender, yRender, 0, heightRender)
  2628. grp.SetColor(BRIGHT_COLOR)
  2629. grp.RenderLine(xRender, yRender+heightRender, widthRender, 0)
  2630. grp.RenderLine(xRender+widthRender, yRender, 0, heightRender)
  2631. ListBox.OnRender(self)
  2632. def __init__(self):
  2633. Window.__init__(self)
  2634. self.x = 0
  2635. self.y = 0
  2636. self.width = 0
  2637. self.height = 0
  2638. self.isSelected = False
  2639. self.isOver = False
  2640. self.isListOpened = False
  2641. self.event = lambda *arg: None
  2642. self.enable = True
  2643. self.textLine = MakeTextLine(self)
  2644. self.textLine.SetText(localeInfo.UI_ITEM)
  2645. self.listBox = self.ListBoxWithBoard("TOP_MOST")
  2646. self.listBox.SetPickAlways()
  2647. self.listBox.SetParent(self)
  2648. self.listBox.SetEvent(__mem_func__(self.OnSelectItem))
  2649. self.listBox.Hide()
  2650. def __del__(self):
  2651. Window.__del__(self)
  2652. def Destroy(self):
  2653. self.textLine = None
  2654. self.listBox = None
  2655. def SetPosition(self, x, y):
  2656. Window.SetPosition(self, x, y)
  2657. self.x = x
  2658. self.y = y
  2659. self.__ArrangeListBox()
  2660. def SetSize(self, width, height):
  2661. Window.SetSize(self, width, height)
  2662. self.width = width
  2663. self.height = height
  2664. self.textLine.UpdateRect()
  2665. self.__ArrangeListBox()
  2666. def __ArrangeListBox(self):
  2667. self.listBox.SetPosition(0, self.height + 5)
  2668. self.listBox.SetWidth(self.width)
  2669. def Enable(self):
  2670. self.enable = True
  2671. def Disable(self):
  2672. self.enable = False
  2673. self.textLine.SetText("")
  2674. self.CloseListBox()
  2675. def SetEvent(self, event):
  2676. self.event = event
  2677. def ClearItem(self):
  2678. self.CloseListBox()
  2679. self.listBox.ClearItem()
  2680. def InsertItem(self, index, name):
  2681. self.listBox.InsertItem(index, name)
  2682. self.listBox.ArrangeItem()
  2683. def SetCurrentItem(self, text):
  2684. self.textLine.SetText(text)
  2685. def SelectItem(self, key):
  2686. self.listBox.SelectItem(key)
  2687. def OnSelectItem(self, index, name):
  2688. self.CloseListBox()
  2689. self.event(index)
  2690. def CloseListBox(self):
  2691. self.isListOpened = False
  2692. self.listBox.Hide()
  2693. def OnMouseLeftButtonDown(self):
  2694. if not self.enable:
  2695. return
  2696. self.isSelected = True
  2697. def OnMouseLeftButtonUp(self):
  2698. if not self.enable:
  2699. return
  2700. self.isSelected = False
  2701. if self.isListOpened:
  2702. self.CloseListBox()
  2703. else:
  2704. if self.listBox.GetItemCount() > 0:
  2705. self.isListOpened = True
  2706. self.listBox.Show()
  2707. self.__ArrangeListBox()
  2708. def OnUpdate(self):
  2709. if not self.enable:
  2710. return
  2711. if self.IsIn():
  2712. self.isOver = True
  2713. else:
  2714. self.isOver = False
  2715. def OnRender(self):
  2716. self.x, self.y = self.GetGlobalPosition()
  2717. xRender = self.x
  2718. yRender = self.y
  2719. widthRender = self.width
  2720. heightRender = self.height
  2721. grp.SetColor(BACKGROUND_COLOR)
  2722. grp.RenderBar(xRender, yRender, widthRender, heightRender)
  2723. grp.SetColor(DARK_COLOR)
  2724. grp.RenderLine(xRender, yRender, widthRender, 0)
  2725. grp.RenderLine(xRender, yRender, 0, heightRender)
  2726. grp.SetColor(BRIGHT_COLOR)
  2727. grp.RenderLine(xRender, yRender+heightRender, widthRender, 0)
  2728. grp.RenderLine(xRender+widthRender, yRender, 0, heightRender)
  2729. if self.isOver:
  2730. grp.SetColor(HALF_WHITE_COLOR)
  2731. grp.RenderBar(xRender + 2, yRender + 3, self.width - 3, heightRender - 5)
  2732. if self.isSelected:
  2733. grp.SetColor(WHITE_COLOR)
  2734. grp.RenderBar(xRender + 2, yRender + 3, self.width - 3, heightRender - 5)
  2735. ###################################################################################################
  2736. ## Python Script Loader
  2737. ###################################################################################################
  2738. if app.__ENABLE_NEW_OFFLINESHOP__:
  2739. class ExpandedButton(Window):
  2740. STATUS_DEFAULT = 0
  2741. STATUS_DOWN = 1
  2742. STATUS_OVER = 2
  2743. def __init__(self, template):
  2744. Window.__init__(self)
  2745. self.SetWindowName("ExpandedButton")
  2746. self.defaultImage = None
  2747. self.downImage = None
  2748. self.overImage = None
  2749. self.eventLeftClick = None
  2750. self.updateEvent = None
  2751. self.downEvent = None
  2752. self.baseInfo = {}
  2753. self.status = 0
  2754. default = template.get('default', "")
  2755. down = template.get('down', "")
  2756. over = template.get('over', "")
  2757. event = template.get('event', None)
  2758. update = template.get('update', None)
  2759. rotation= template.get('rotation', 0)
  2760. downEv = template.get('downevent', None)
  2761. if rotation!=0:
  2762. self.baseInfo['rotated'] = True
  2763. if not default or not down or not over:
  2764. dbg.TraceError("RotatedButton : cannot set template [%s]"%str(template))
  2765. return
  2766. self.__SetDefaultVisual(default)
  2767. self.__SetDownVisual(down)
  2768. self.__SetOverVisual(over)
  2769. if event:
  2770. self.__SetEvent(event)
  2771. if rotation:
  2772. self.__SetRotation(rotation)
  2773. self.SetOnMouseLeftButtonUpEvent(self.__OnClickMe)
  2774. if update:
  2775. self.updateEvent = update
  2776. if downEv:
  2777. self.downEvent = downEv
  2778. def __del__(self):
  2779. self.defaultImage = None
  2780. self.downImage = None
  2781. self.overImage = None
  2782. self.eventLeftClick = None
  2783. self.updateEvent = None
  2784. self.baseInfo = {}
  2785. self.status = 0
  2786. self.downEvent = None
  2787. Window.__del__(self)
  2788. def __SetDefaultVisual(self, default):
  2789. img = ExpandedImageBox()
  2790. img.LoadImage(default)
  2791. img.SetParent(self)
  2792. img.SetPosition(0,0)
  2793. img.Show()
  2794. img.SetOnMouseLeftButtonUpEvent(self.__OnClickMe)
  2795. img.OnMouseOverIn = self.__OverIn
  2796. img.OnMouseOverOut= self.__OverOut
  2797. img.OnMouseLeftButtonDown = self.__OnMouseDown
  2798. img.SetWindowName("ExpandedButton_Default")
  2799. self.baseInfo['default'] = {'width': img.GetWidth(), 'height': img.GetHeight(),}
  2800. self.defaultImage = img
  2801. self.SetSize(img.GetWidth(), img.GetHeight())
  2802. def __SetDownVisual(self, down):
  2803. img = ExpandedImageBox()
  2804. img.LoadImage(down)
  2805. img.SetParent(self)
  2806. img.SetPosition(0, 0)
  2807. img.Hide()
  2808. img.SetOnMouseLeftButtonUpEvent(self.__OnClickMe)
  2809. img.OnMouseOverIn = self.__OverIn
  2810. img.OnMouseOverOut = self.__OverOut
  2811. img.OnMouseLeftButtonDown = self.__OnMouseDown
  2812. img.SetWindowName("ExpandedButton_Down")
  2813. self.baseInfo['down'] = {'width': img.GetWidth(), 'height': img.GetHeight(), }
  2814. self.downImage = img
  2815. def __SetOverVisual(self, over):
  2816. img = ExpandedImageBox()
  2817. img.LoadImage(over)
  2818. img.SetParent(self)
  2819. img.SetPosition(0, 0)
  2820. img.Hide()
  2821. img.SetOnMouseLeftButtonUpEvent(self.__OnClickMe)
  2822. img.OnMouseOverIn = self.__OverIn
  2823. img.OnMouseOverOut = self.__OverOut
  2824. img.OnMouseLeftButtonDown = self.__OnMouseDown
  2825. img.SetWindowName("ExpandedButton_Over")
  2826. self.baseInfo['over'] = {'width': img.GetWidth(), 'height': img.GetHeight(), }
  2827. self.overImage = img
  2828. def SetOnMouseLeftButtonUpEvent(self, event):
  2829. self.onMouseLeftButtonUpEvent = event
  2830. def __SetEvent(self, event):
  2831. self.eventLeftClick = event
  2832. def __SetRotation(self, rotation):
  2833. self.defaultImage.SetRotation(rotation)
  2834. self.downImage.SetRotation(rotation)
  2835. self.overImage.SetRotation(rotation)
  2836. def __OnClickMe(self):
  2837. if self.eventLeftClick:
  2838. self.eventLeftClick()
  2839. self.status = self.STATUS_DEFAULT
  2840. self.__RefreshView()
  2841. def __OverIn(self):
  2842. if self.status==self.STATUS_DOWN:
  2843. return
  2844. self.status = self.STATUS_OVER
  2845. self.__RefreshView()
  2846. def __OverOut(self):
  2847. if self.status != self.STATUS_DOWN:
  2848. self.status = self.STATUS_DEFAULT
  2849. self.__RefreshView()
  2850. print("over out")
  2851. def __OnMouseDown(self):
  2852. self.status = self.STATUS_DOWN
  2853. self.__RefreshView()
  2854. if self.downEvent:
  2855. self.downEvent()
  2856. print("mouse down")
  2857. def __RefreshView(self):
  2858. images = {
  2859. self.STATUS_DEFAULT : self.defaultImage,
  2860. self.STATUS_DOWN : self.downImage,
  2861. self.STATUS_OVER : self.overImage,
  2862. }
  2863. for image in images.values():
  2864. image.Hide()
  2865. images[self.status].Show()
  2866. def OnUpdate(self):
  2867. if self.updateEvent:
  2868. self.updateEvent()
  2869. def SetScale(self, x , y):
  2870. self.defaultImage.SetScale(x,y)
  2871. self.downImage.SetScale(x,y)
  2872. self.overImage.SetScale(x,y)
  2873. if self.baseInfo.get('rotated', False):
  2874. width = self.baseInfo['default']['height']
  2875. height= self.baseInfo['default']['width']
  2876. else:
  2877. height = self.baseInfo['default']['height']
  2878. width = self.baseInfo['default']['width']
  2879. newwidth = int( float(width) * x)
  2880. newheight = int( float(height) * y)
  2881. self.SetSize(newwidth, newheight)
  2882. class CustomScrollBar(Window):
  2883. HORIZONTAL = 1
  2884. VERTICAL = 2
  2885. BOTTOM = 1
  2886. TOP = 2
  2887. RIGHT = 3
  2888. LEFT = 4
  2889. def __init__(self, template):
  2890. Window.__init__(self)
  2891. self.baseImage = None
  2892. self.button1 = None
  2893. self.button2 = None
  2894. self.middleButton = None
  2895. self.onScroll = None
  2896. self.parent = None
  2897. self.orientation = 0
  2898. self.pos = 0.0
  2899. self.middleScale = 0.1
  2900. self.step = 0.1
  2901. self.baseInfo = {}
  2902. self.mouseOffset = {}
  2903. base = template.get('base', "")
  2904. button1 = template.get('button1', {})
  2905. button2 = template.get('button2', {})
  2906. middle = template.get('middle', {})
  2907. onscroll= template.get('onscroll', None)
  2908. orient = template.get('orientation', 0)
  2909. align = template.get('align', {})
  2910. parent = template.get('parent', None)
  2911. position= template.get('position', {})
  2912. if not base or not button1 or not button2 or not middle or not onscroll or not orient or not parent:
  2913. dbg.TraceError("CustomScrollBar : cannot set template [%s]"%str(template))
  2914. return
  2915. self.__SetParent(parent)
  2916. self.__SetOrientation(orient)
  2917. self.__LoadBaseImage(base)
  2918. self.__LoadButton1(button1)
  2919. self.__LoadButton2(button2)
  2920. self.__LoadMiddleButton(middle)
  2921. self.__SetOnScrollEvent(onscroll)
  2922. if template.has_key('align'):
  2923. self.__SetAlign(align)
  2924. elif template.has_key('position'):
  2925. self.__SetPosition(position)
  2926. def __SetParent(self, parent):
  2927. if parent:
  2928. self.parent = parent
  2929. self.SetParent(parent)
  2930. def __SetOrientation(self, orient):
  2931. self.orientation = orient
  2932. def __LoadBaseImage(self, base):
  2933. bg = ExpandedImageBox()
  2934. bg.LoadImage(base)
  2935. bg.SetParent(self)
  2936. bg.SetPosition(0,0)
  2937. bg.Show()
  2938. w , h = (bg.GetWidth() , bg.GetHeight())
  2939. self.baseInfo = {'base' : {'width':w, 'height':h,}}
  2940. self.SetSize(w,h)
  2941. bg.OnMouseLeftButtonDown = self.__OnClickBaseImage
  2942. self.baseImage = bg
  2943. def __LoadButton1(self, button1):
  2944. button1['event'] = self.__OnClickButton1
  2945. btn = ExpandedButton(button1)
  2946. btn.SetParent(self.baseImage)
  2947. btn.SetPosition(0,0)
  2948. btn.Show()
  2949. self.button1 = btn
  2950. def __LoadButton2(self, button2):
  2951. button2['event'] = self.__OnClickButton2
  2952. btn = ExpandedButton(button2)
  2953. btn.SetParent(self.baseImage)
  2954. if self.orientation == self.HORIZONTAL:
  2955. leng = btn.GetWidth()
  2956. btn.SetPosition(self.GetWidth() - leng , 0)
  2957. elif self.orientation == self.VERTICAL:
  2958. leng = btn.GetHeight()
  2959. btn.SetPosition(0, self.GetHeight() - leng)
  2960. btn.Show()
  2961. self.button2 = btn
  2962. def __LoadMiddleButton(self, middle):
  2963. middle['downevent'] = self.__OnClickMiddle
  2964. middle['update'] = self.__OnUpdateMiddleBar
  2965. btn = ExpandedButton(middle)
  2966. btn.SetParent(self.baseImage)
  2967. if self.orientation == self.HORIZONTAL:
  2968. btn.SetPosition(self.button1.GetWidth(), 0)
  2969. elif self.orientation == self.VERTICAL:
  2970. btn.SetPosition(0, self.button1.GetHeight())
  2971. btn.Show()
  2972. self.middleButton = btn
  2973. def __SetOnScrollEvent(self, onscroll):
  2974. self.onScroll = onscroll
  2975. def __SetAlign(self, align):
  2976. mode = align['mode']
  2977. offset1 = align.get('offset1',0)
  2978. offset2 = align.get('offset2',0)
  2979. if not self.parent:
  2980. return
  2981. if self.orientation == self.HORIZONTAL:
  2982. if mode == self.TOP:
  2983. self.SetPosition(offset1, 0)
  2984. if mode == self.BOTTOM:
  2985. self.SetPosition(offset1, self.parent.GetHeight() - self.GetHeight())
  2986. self.SetScrollBarLength(self.parent.GetWidth() - (offset1 + offset2))
  2987. elif self.orientation == self.VERTICAL:
  2988. if mode == self.RIGHT:
  2989. self.SetPosition(self.parent.GetWidth()-self.GetWidth(), offset1 )
  2990. elif mode == self.LEFT:
  2991. self.SetPosition(0, offset1)
  2992. self.SetScrollBarLength(self.parent.GetHeight() - (offset1 + offset2))
  2993. def __SetPosition(self, position):
  2994. self.SetPosition(position['x'] , position['y'])
  2995. def SetScrollBarLength(self, leng):
  2996. if self.orientation == self.VERTICAL:
  2997. self.SetSize(self.GetWidth(), leng)
  2998. baseScale = float(leng) / float(self.baseInfo['base']['height'])
  2999. self.baseImage.SetScale(1.0, baseScale)
  3000. scrollsize = leng - (self.__GetElementLength(self.button1) + self.__GetElementLength(self.button2))
  3001. middle_leng = int(self.middleScale * scrollsize)
  3002. init_middle = float(self.middleButton.baseInfo['default']['height'])
  3003. self.middleButton.SetScale(1.0, float(middle_leng)/init_middle)
  3004. self.middleButton.SetPosition(0,self.__GetElementLength(self.button1) + int((scrollsize - self.__GetElementLength(self.middleButton))* self.pos))
  3005. self.button2.SetPosition(0, self.GetHeight()-self.button2.GetHeight())
  3006. elif self.orientation == self.HORIZONTAL:
  3007. self.SetSize(leng, self.GetHeight())
  3008. baseScale = float(leng) / float(self.baseInfo['base']['width'])
  3009. self.baseImage.SetScale(baseScale, 1.0)
  3010. scrollsize = leng - (self.__GetElementLength(self.button1) + self.__GetElementLength(self.button2))
  3011. middle_leng = int(self.middleScale * scrollsize)
  3012. init_middle = float(self.middleButton.baseInfo['default']['width'])
  3013. self.middleButton.SetScale(float(middle_leng) / init_middle, 1.0)
  3014. self.middleButton.SetPosition(self.__GetElementLength(self.button1) + int((scrollsize - self.__GetElementLength(self.middleButton)) * self.pos),0)
  3015. self.button2.SetPosition(self.GetWidth() - self.button2.GetWidth(), 0)
  3016. def __GetElementLength(self, element):
  3017. if self.orientation == self.VERTICAL:
  3018. return element.GetHeight()
  3019. if self.orientation == self.HORIZONTAL:
  3020. return element.GetWidth()
  3021. return 0
  3022. def __OnUpdateMiddleBar(self):
  3023. if self.middleButton.status != ExpandedButton.STATUS_DOWN:
  3024. return
  3025. x,y = wndMgr.GetMousePosition()
  3026. gx,gy = self.middleButton.GetGlobalPosition()
  3027. gx += self.mouseOffset.get('x',0)
  3028. gy += self.mouseOffset.get('y',0)
  3029. if self.orientation == self.VERTICAL:
  3030. if y == gy:
  3031. return
  3032. elif self.orientation == self.HORIZONTAL:
  3033. if x == gx:
  3034. return
  3035. self.__OnMoveMiddleBar(x,y)
  3036. def __OnClickBaseImage(self):
  3037. x,y = wndMgr.GetMousePosition()
  3038. gx,gy = self.middleButton.GetGlobalPosition()
  3039. offset = self.__GetElementLength(self.middleButton)/2
  3040. gx += offset
  3041. gy += offset
  3042. if self.orientation == self.VERTICAL:
  3043. if y == gy:
  3044. return
  3045. elif self.orientation == self.HORIZONTAL:
  3046. if x == gx:
  3047. return
  3048. self.mouseOffset = {'x' : offset, 'y': offset}
  3049. self.__OnMoveMiddleBar(x,y)
  3050. def __OnClickButton2(self):
  3051. self.mouseOffset={'x' : 0, 'y' :0}
  3052. gx,gy = self.middleButton.GetGlobalPosition()
  3053. if self.orientation == self.VERTICAL:
  3054. gy += self.__GetElementLength(self.middleButton)
  3055. elif self.orientation == self.HORIZONTAL:
  3056. gx += self.__GetElementLength(self.middleButton)
  3057. self.__OnMoveMiddleBar(gx,gy)
  3058. def __OnClickButton1(self):
  3059. self.mouseOffset={'x' : 0, 'y' :0}
  3060. gx, gy = self.middleButton.GetGlobalPosition()
  3061. if self.orientation == self.VERTICAL:
  3062. gy -= self.__GetElementLength(self.middleButton)
  3063. elif self.orientation == self.HORIZONTAL:
  3064. gx -= self.__GetElementLength(self.middleButton)
  3065. self.__OnMoveMiddleBar(gx, gy)
  3066. def __OnMoveMiddleBar(self, x , y):
  3067. gx, gy = self.GetGlobalPosition()
  3068. x -= self.mouseOffset.get('x', 0)
  3069. y -= self.mouseOffset.get('y', 0)
  3070. if self.orientation == self.VERTICAL:
  3071. min_ = gy + self.__GetElementLength(self.button1)
  3072. max_ = min_ + (self.GetHeight() - (self.__GetElementLength(self.button1) + self.__GetElementLength(self.button2) + self.__GetElementLength(self.middleButton)))
  3073. if max_ < y and self.pos == 1.0:
  3074. return
  3075. if min_ > y and self.pos == 0.0:
  3076. return
  3077. realy = max(y, min_)
  3078. realy = min(realy, max_)
  3079. scroll= max_-min_
  3080. if scroll == 0.0:
  3081. return
  3082. self.pos = float(realy-min_) / float(scroll)
  3083. self.middleButton.SetPosition(0, realy-gy)
  3084. self.__OnScroll()
  3085. elif self.orientation == self.HORIZONTAL:
  3086. min_ = gx + self.__GetElementLength(self.button1)
  3087. max_ = min_ + (self.GetWidth() - (self.__GetElementLength(self.button1) + self.__GetElementLength(self.button2) + self.__GetElementLength(self.middleButton)))
  3088. if max_ < x and self.pos == 1.0:
  3089. return
  3090. if min_ > x and self.pos == 0.0:
  3091. return
  3092. realx = max(x, min_)
  3093. realx = min(realx, max_)
  3094. scroll = max_ - min_
  3095. if scroll == 0.0:
  3096. return
  3097. self.pos = float(realx - min_) / float(scroll)
  3098. self.middleButton.SetPosition(realx-gx, 0)
  3099. self.__OnScroll()
  3100. def __OnScroll(self):
  3101. if self.onScroll:
  3102. self.onScroll()
  3103. def __OnClickMiddle(self):
  3104. x,y = wndMgr.GetMousePosition()
  3105. gx,gy = self.middleButton.GetGlobalPosition()
  3106. x-= gx
  3107. y-= gy
  3108. self.mouseOffset = {"x" : x, "y": y,}
  3109. def GetPos(self):
  3110. return self.pos
  3111. def GetStep(self):
  3112. return self.step
  3113. def SetScrollStep(self, step):
  3114. step = min(1.0, max(0.1 , step))
  3115. self.middleScale = step
  3116. self.step = step
  3117. self.SetScrollBarLength(self.__GetElementLength(self.baseImage))
  3118. # if app.ENABLE_WHEEL_MOUSE:
  3119. # def OnRunMouseWheel(self, nLen):
  3120. # if nLen > 0:
  3121. # self.__OnClickButton1()
  3122. # else:
  3123. # self.__OnClickButton2()
  3124. class CheckBox(Window):
  3125. def __init__(self, images = {}):
  3126. Window.__init__(self)
  3127. self.clear()
  3128. self.__loadCheckBox(images)
  3129. self.SetOnMouseLeftButtonUpEvent(self.__OnClick)
  3130. self.SetWindowName("checkbox")
  3131. def clear(self):
  3132. self.status = "disabled"
  3133. self.bg_image = None
  3134. self.tip_image = None
  3135. def __del__(self):
  3136. self.status = "disabled"
  3137. self.bg_image = None
  3138. self.tip_image = None
  3139. Window.__del__(self)
  3140. def __loadCheckBox(self, images):
  3141. bg = ImageBox()
  3142. bg.SetParent(self)
  3143. bg.SetPosition(0,0)
  3144. if not images:
  3145. bg.LoadImage("d:/ymir work/ui/pattern/checkbox_bg.png")
  3146. else:
  3147. bg.LoadImage(images['base'])
  3148. bg.SetOnMouseLeftButtonUpEvent(self.__OnClick)
  3149. bg.SetWindowName("checkbox_bg")
  3150. self.SetSize(bg.GetWidth(), bg.GetHeight())
  3151. bg.Show()
  3152. self.bg_image = bg
  3153. tip = ImageBox()
  3154. tip.SetParent(self.bg_image)
  3155. if not images:
  3156. tip.LoadImage("d:/ymir work/ui/pattern/checkbox_tip.png")
  3157. else:
  3158. tip.LoadImage(images['tip'])
  3159. tip.SetPosition(0 , 0)
  3160. tip.Show()
  3161. tip.SetWindowName("checkbox_tip")
  3162. tip.SetOnMouseLeftButtonUpEvent(self.__OnClick)
  3163. self.tip_image = tip
  3164. self.__refreshView()
  3165. def __refreshView(self):
  3166. if self.status == "enabled":
  3167. self.tip_image.Show()
  3168. else:
  3169. self.tip_image.Hide()
  3170. def __OnClick(self):
  3171. if self.status == "disabled":
  3172. self.status = "enabled"
  3173. else:
  3174. self.status = "disabled"
  3175. print("clicked!")
  3176. self.__refreshView()
  3177. def IsEnabled(self):
  3178. return self.status == "enabled"
  3179. def Enable(self):
  3180. self.status = "enabled"
  3181. self.__refreshView()
  3182. def Disable(self):
  3183. self.status = "disabled"
  3184. self.__refreshView()
  3185. def SetOnMouseLeftButtonUpEvent(self, event):
  3186. self.onMouseLeftButtonUpEvent = event
  3187. class ScriptWindow(Window):
  3188. def __init__(self, layer = "UI"):
  3189. Window.__init__(self, layer)
  3190. self.Children = []
  3191. self.ElementDictionary = {}
  3192. def __del__(self):
  3193. Window.__del__(self)
  3194. def ClearDictionary(self):
  3195. self.Children = []
  3196. self.ElementDictionary = {}
  3197. def InsertChild(self, name, child):
  3198. self.ElementDictionary[name] = child
  3199. def IsChild(self, name):
  3200. return self.ElementDictionary.has_key(name)
  3201. def GetChild(self, name):
  3202. return self.ElementDictionary[name]
  3203. def GetChild2(self, name):
  3204. return self.ElementDictionary.get(name, None)
  3205. class PythonScriptLoader(object):
  3206. BODY_KEY_LIST = ( "x", "y", "width", "height" )
  3207. #####
  3208. DEFAULT_KEY_LIST = ( "type", "x", "y", )
  3209. WINDOW_KEY_LIST = ( "width", "height", )
  3210. IMAGE_KEY_LIST = ( "image", )
  3211. EXPANDED_IMAGE_KEY_LIST = ( "image", )
  3212. ANI_IMAGE_KEY_LIST = ( "images", )
  3213. SLOT_KEY_LIST = ( "width", "height", "slot", )
  3214. CANDIDATE_LIST_KEY_LIST = ( "item_step", "item_xsize", "item_ysize", )
  3215. GRID_TABLE_KEY_LIST = ( "start_index", "x_count", "y_count", "x_step", "y_step", )
  3216. EDIT_LINE_KEY_LIST = ( "width", "height", "input_limit", )
  3217. COMBO_BOX_KEY_LIST = ( "width", "height", "item", )
  3218. TITLE_BAR_KEY_LIST = ( "width", )
  3219. HORIZONTAL_BAR_KEY_LIST = ( "width", )
  3220. BOARD_KEY_LIST = ( "width", "height", )
  3221. BOARD_WITH_TITLEBAR_KEY_LIST = ( "width", "height", "title", )
  3222. BOX_KEY_LIST = ( "width", "height", )
  3223. BAR_KEY_LIST = ( "width", "height", )
  3224. LINE_KEY_LIST = ( "width", "height", )
  3225. SLOTBAR_KEY_LIST = ( "width", "height", )
  3226. GAUGE_KEY_LIST = ( "width", "color", )
  3227. SCROLLBAR_KEY_LIST = ( "size", )
  3228. LIST_BOX_KEY_LIST = ( "width", "height", )
  3229. if app.ENABLE_QUEST_CATEGORY_SYSTEM:
  3230. SUB_TITLE_BAR_KEY_LIST = ( "width", )
  3231. LIST_BAR_KEY_LIST = ( "width", )
  3232. def __init__(self):
  3233. self.Clear()
  3234. def Clear(self):
  3235. self.ScriptDictionary = { "SCREEN_WIDTH" : wndMgr.GetScreenWidth(), "SCREEN_HEIGHT" : wndMgr.GetScreenHeight() }
  3236. self.InsertFunction = 0
  3237. def LoadScriptFile(self, window, FileName):
  3238. import exception
  3239. import exceptions
  3240. import os
  3241. import errno
  3242. self.Clear()
  3243. print "===== Load Script File : %s" % (FileName)
  3244. import sys
  3245. from utils import Sandbox
  3246. sandbox = Sandbox(True, ["uiScriptLocale", "localeInfo", "sys", "item", "app", "player","utils"]) #@ikd - added 'utils' to import it in scriptfile (to use GetElementDictByName)
  3247. import chr
  3248. import player
  3249. import app
  3250. self.ScriptDictionary["PLAYER_NAME_MAX_LEN"] = chr.PLAYER_NAME_MAX_LEN
  3251. self.ScriptDictionary["DRAGON_SOUL_EQUIPMENT_SLOT_START"] = player.DRAGON_SOUL_EQUIPMENT_SLOT_START
  3252. self.ScriptDictionary["LOCALE_PATH"] = app.GetLocalePath()
  3253. if __USE_EXTRA_CYTHON__:
  3254. # sub functions
  3255. from os.path import splitext as op_splitext, basename as op_basename, dirname as op_dirname
  3256. def GetModName(filename):
  3257. return op_splitext(op_basename(filename))[0]
  3258. def IsInUiPath(filename):
  3259. def ICmp(s1, s2):
  3260. return s1.lower() == s2.lower()
  3261. return ICmp(op_dirname(filename), "uiscript")
  3262. # module name to import
  3263. modname = GetModName(FileName)
  3264. # lazy loading of uiscriptlib
  3265. import uiscriptlib
  3266. # copy scriptdictionary stuff to builtin scope (otherwise, import will fail)
  3267. tpl2Main = (
  3268. "SCREEN_WIDTH","SCREEN_HEIGHT",
  3269. "PLAYER_NAME_MAX_LEN", "DRAGON_SOUL_EQUIPMENT_SLOT_START","LOCALE_PATH"
  3270. )
  3271. import __builtin__ as bt
  3272. for idx in tpl2Main:
  3273. tmpVal = self.ScriptDictionary[idx]
  3274. exec "bt.%s = tmpVal"%idx in globals(), locals()
  3275. # debug stuff
  3276. import dbg
  3277. dbg.TraceError("Loading %s (%s %s)"%(FileName, GetModName(FileName), IsInUiPath(FileName)))
  3278. try:
  3279. if __USE_EXTRA_CYTHON__ and IsInUiPath(FileName) and uiscriptlib.isExist(modname):
  3280. m1 = uiscriptlib.moduleImport(modname)
  3281. self.ScriptDictionary["window"] = m1.window.copy()
  3282. del m1
  3283. else:
  3284. sandbox.execfile(FileName, self.ScriptDictionary)
  3285. except IOError, err:
  3286. import sys
  3287. import dbg
  3288. dbg.TraceError("Failed to load script file : %s" % (FileName))
  3289. dbg.TraceError("error : %s" % (err))
  3290. exception.Abort("LoadScriptFile1")
  3291. except RuntimeError,err:
  3292. import sys
  3293. import dbg
  3294. dbg.TraceError("Failed to load script file : %s" % (FileName))
  3295. dbg.TraceError("error : %s" % (err))
  3296. exception.Abort("LoadScriptFile2")
  3297. except:
  3298. import sys
  3299. import dbg
  3300. dbg.TraceError("Failed to load script file : %s" % (FileName))
  3301. exception.Abort("LoadScriptFile!!!!!!!!!!!!!!")
  3302. #####
  3303. Body = self.ScriptDictionary["window"]
  3304. self.CheckKeyList("window", Body, self.BODY_KEY_LIST)
  3305. window.ClearDictionary()
  3306. self.InsertFunction = window.InsertChild
  3307. window.SetPosition(int(Body["x"]), int(Body["y"]))
  3308. if localeInfo.IsARABIC():
  3309. w = wndMgr.GetScreenWidth()
  3310. h = wndMgr.GetScreenHeight()
  3311. if Body.has_key("width"):
  3312. w = int(Body["width"])
  3313. if Body.has_key("height"):
  3314. h = int(Body["height"])
  3315. window.SetSize(w, h)
  3316. else:
  3317. window.SetSize(int(Body["width"]), int(Body["height"]))
  3318. if True == Body.has_key("style"):
  3319. for StyleList in Body["style"]:
  3320. window.AddFlag(StyleList)
  3321. self.LoadChildren(window, Body)
  3322. def LoadChildren(self, parent, dicChildren):
  3323. if localeInfo.IsARABIC():
  3324. parent.AddFlag( "rtl" )
  3325. if True == dicChildren.has_key("style"):
  3326. for style in dicChildren["style"]:
  3327. parent.AddFlag(style)
  3328. if False == dicChildren.has_key("children"):
  3329. return False
  3330. Index = 0
  3331. ChildrenList = dicChildren["children"]
  3332. parent.Children = range(len(ChildrenList))
  3333. for ElementValue in ChildrenList:
  3334. try:
  3335. Name = ElementValue["name"]
  3336. except KeyError:
  3337. Name = ElementValue["name"] = "NONAME"
  3338. try:
  3339. Type = ElementValue["type"]
  3340. except KeyError:
  3341. Type = ElementValue["type"] = "window"
  3342. if False == self.CheckKeyList(Name, ElementValue, self.DEFAULT_KEY_LIST):
  3343. del parent.Children[Index]
  3344. continue
  3345. if Type == "window":
  3346. parent.Children[Index] = ScriptWindow()
  3347. parent.Children[Index].SetParent(parent)
  3348. self.LoadElementWindow(parent.Children[Index], ElementValue, parent)
  3349. elif Type == "button":
  3350. parent.Children[Index] = Button()
  3351. parent.Children[Index].SetParent(parent)
  3352. self.LoadElementButton(parent.Children[Index], ElementValue, parent)
  3353. elif Type == "radio_button":
  3354. parent.Children[Index] = RadioButton()
  3355. parent.Children[Index].SetParent(parent)
  3356. self.LoadElementButton(parent.Children[Index], ElementValue, parent)
  3357. elif Type == "toggle_button":
  3358. parent.Children[Index] = ToggleButton()
  3359. parent.Children[Index].SetParent(parent)
  3360. self.LoadElementButton(parent.Children[Index], ElementValue, parent)
  3361. elif Type == "mark":
  3362. parent.Children[Index] = MarkBox()
  3363. parent.Children[Index].SetParent(parent)
  3364. self.LoadElementMark(parent.Children[Index], ElementValue, parent)
  3365. elif Type == "image":
  3366. parent.Children[Index] = ImageBox()
  3367. parent.Children[Index].SetParent(parent)
  3368. self.LoadElementImage(parent.Children[Index], ElementValue, parent)
  3369. elif Type == "expanded_image":
  3370. parent.Children[Index] = ExpandedImageBox()
  3371. parent.Children[Index].SetParent(parent)
  3372. self.LoadElementExpandedImage(parent.Children[Index], ElementValue, parent)
  3373. elif Type == "ani_image":
  3374. parent.Children[Index] = AniImageBox()
  3375. parent.Children[Index].SetParent(parent)
  3376. self.LoadElementAniImage(parent.Children[Index], ElementValue, parent)
  3377. elif Type == "slot":
  3378. parent.Children[Index] = SlotWindow()
  3379. parent.Children[Index].SetParent(parent)
  3380. self.LoadElementSlot(parent.Children[Index], ElementValue, parent)
  3381. elif Type == "candidate_list":
  3382. parent.Children[Index] = CandidateListBox()
  3383. parent.Children[Index].SetParent(parent)
  3384. self.LoadElementCandidateList(parent.Children[Index], ElementValue, parent)
  3385. elif Type == "grid_table":
  3386. parent.Children[Index] = GridSlotWindow()
  3387. parent.Children[Index].SetParent(parent)
  3388. self.LoadElementGridTable(parent.Children[Index], ElementValue, parent)
  3389. elif Type == "text":
  3390. parent.Children[Index] = TextLine()
  3391. parent.Children[Index].SetParent(parent)
  3392. self.LoadElementText(parent.Children[Index], ElementValue, parent)
  3393. elif Type == "editline":
  3394. parent.Children[Index] = EditLine()
  3395. parent.Children[Index].SetParent(parent)
  3396. self.LoadElementEditLine(parent.Children[Index], ElementValue, parent)
  3397. elif Type == "titlebar":
  3398. parent.Children[Index] = TitleBar()
  3399. parent.Children[Index].SetParent(parent)
  3400. self.LoadElementTitleBar(parent.Children[Index], ElementValue, parent)
  3401. elif Type == "horizontalbar":
  3402. parent.Children[Index] = HorizontalBar()
  3403. parent.Children[Index].SetParent(parent)
  3404. self.LoadElementHorizontalBar(parent.Children[Index], ElementValue, parent)
  3405. elif Type == "board":
  3406. parent.Children[Index] = Board()
  3407. parent.Children[Index].SetParent(parent)
  3408. self.LoadElementBoard(parent.Children[Index], ElementValue, parent)
  3409. elif Type == "board_with_titlebar":
  3410. parent.Children[Index] = BoardWithTitleBar()
  3411. parent.Children[Index].SetParent(parent)
  3412. self.LoadElementBoardWithTitleBar(parent.Children[Index], ElementValue, parent)
  3413. elif Type == "thinboard":
  3414. parent.Children[Index] = ThinBoard()
  3415. parent.Children[Index].SetParent(parent)
  3416. self.LoadElementThinBoard(parent.Children[Index], ElementValue, parent)
  3417. elif Type == "thinboard_gold":
  3418. parent.Children[Index] = ThinBoardGold()
  3419. parent.Children[Index].SetParent(parent)
  3420. self.LoadElementThinBoardGold(parent.Children[Index], ElementValue, parent)
  3421. elif Type == "thinboard_circle":
  3422. parent.Children[Index] = ThinBoardCircle()
  3423. parent.Children[Index].SetParent(parent)
  3424. self.LoadElementThinBoard(parent.Children[Index], ElementValue, parent)
  3425. elif Type == "box":
  3426. parent.Children[Index] = Box()
  3427. parent.Children[Index].SetParent(parent)
  3428. self.LoadElementBox(parent.Children[Index], ElementValue, parent)
  3429. elif Type == "bar":
  3430. parent.Children[Index] = Bar()
  3431. parent.Children[Index].SetParent(parent)
  3432. self.LoadElementBar(parent.Children[Index], ElementValue, parent)
  3433. elif Type == "line":
  3434. parent.Children[Index] = Line()
  3435. parent.Children[Index].SetParent(parent)
  3436. self.LoadElementLine(parent.Children[Index], ElementValue, parent)
  3437. elif Type == "slotbar":
  3438. parent.Children[Index] = SlotBar()
  3439. parent.Children[Index].SetParent(parent)
  3440. self.LoadElementSlotBar(parent.Children[Index], ElementValue, parent)
  3441. elif Type == "gauge":
  3442. parent.Children[Index] = Gauge()
  3443. parent.Children[Index].SetParent(parent)
  3444. self.LoadElementGauge(parent.Children[Index], ElementValue, parent)
  3445. elif Type == "scrollbar":
  3446. parent.Children[Index] = ScrollBar()
  3447. parent.Children[Index].SetParent(parent)
  3448. self.LoadElementScrollBar(parent.Children[Index], ElementValue, parent)
  3449. elif Type == "thin_scrollbar":
  3450. parent.Children[Index] = ThinScrollBar()
  3451. parent.Children[Index].SetParent(parent)
  3452. self.LoadElementScrollBar(parent.Children[Index], ElementValue, parent)
  3453. elif Type == "small_thin_scrollbar":
  3454. parent.Children[Index] = SmallThinScrollBar()
  3455. parent.Children[Index].SetParent(parent)
  3456. self.LoadElementScrollBar(parent.Children[Index], ElementValue, parent)
  3457. elif Type == "sliderbar":
  3458. parent.Children[Index] = SliderBar()
  3459. parent.Children[Index].SetParent(parent)
  3460. self.LoadElementSliderBar(parent.Children[Index], ElementValue, parent)
  3461. elif Type == "listbox":
  3462. parent.Children[Index] = ListBox()
  3463. parent.Children[Index].SetParent(parent)
  3464. self.LoadElementListBox(parent.Children[Index], ElementValue, parent)
  3465. elif Type == "listbox2":
  3466. parent.Children[Index] = ListBox2()
  3467. parent.Children[Index].SetParent(parent)
  3468. self.LoadElementListBox2(parent.Children[Index], ElementValue, parent)
  3469. elif Type == "listboxex":
  3470. parent.Children[Index] = ListBoxEx()
  3471. parent.Children[Index].SetParent(parent)
  3472. self.LoadElementListBoxEx(parent.Children[Index], ElementValue, parent)
  3473. elif Type == "subtitlebar" and app.ENABLE_QUEST_CATEGORY_SYSTEM:
  3474. parent.Children[Index] = SubTitleBar()
  3475. parent.Children[Index].SetParent(parent)
  3476. self.LoadElementSubTitleBar(parent.Children[Index], ElementValue, parent)
  3477. elif Type == "listbar" and app.ENABLE_QUEST_CATEGORY_SYSTEM:
  3478. parent.Children[Index] = ListBar()
  3479. parent.Children[Index].SetParent(parent)
  3480. self.LoadElementListBar(parent.Children[Index], ElementValue, parent)
  3481. else:
  3482. Index += 1
  3483. continue
  3484. parent.Children[Index].SetWindowName(Name)
  3485. if 0 != self.InsertFunction:
  3486. self.InsertFunction(Name, parent.Children[Index])
  3487. self.LoadChildren(parent.Children[Index], ElementValue)
  3488. Index += 1
  3489. def CheckKeyList(self, name, value, key_list):
  3490. for DataKey in key_list:
  3491. if False == value.has_key(DataKey):
  3492. print "Failed to find data key", "[" + name + "/" + DataKey + "]"
  3493. return False
  3494. return True
  3495. def LoadDefaultData(self, window, value, parentWindow):
  3496. loc_x = int(value["x"])
  3497. loc_y = int(value["y"])
  3498. if value.has_key("vertical_align"):
  3499. if "center" == value["vertical_align"]:
  3500. window.SetWindowVerticalAlignCenter()
  3501. elif "bottom" == value["vertical_align"]:
  3502. window.SetWindowVerticalAlignBottom()
  3503. if parentWindow.IsRTL():
  3504. loc_x = int(value["x"]) + window.GetWidth()
  3505. if value.has_key("horizontal_align"):
  3506. if "center" == value["horizontal_align"]:
  3507. window.SetWindowHorizontalAlignCenter()
  3508. loc_x = - int(value["x"])
  3509. elif "right" == value["horizontal_align"]:
  3510. window.SetWindowHorizontalAlignLeft()
  3511. loc_x = int(value["x"]) - window.GetWidth()
  3512. ## loc_x = parentWindow.GetWidth() - int(value["x"]) + window.GetWidth()
  3513. else:
  3514. window.SetWindowHorizontalAlignRight()
  3515. if value.has_key("all_align"):
  3516. window.SetWindowVerticalAlignCenter()
  3517. window.SetWindowHorizontalAlignCenter()
  3518. loc_x = - int(value["x"])
  3519. else:
  3520. if value.has_key("horizontal_align"):
  3521. if "center" == value["horizontal_align"]:
  3522. window.SetWindowHorizontalAlignCenter()
  3523. elif "right" == value["horizontal_align"]:
  3524. window.SetWindowHorizontalAlignRight()
  3525. window.SetPosition(loc_x, loc_y)
  3526. window.Show()
  3527. ## Window
  3528. def LoadElementWindow(self, window, value, parentWindow):
  3529. if False == self.CheckKeyList(value["name"], value, self.WINDOW_KEY_LIST):
  3530. return False
  3531. window.SetSize(int(value["width"]), int(value["height"]))
  3532. self.LoadDefaultData(window, value, parentWindow)
  3533. return True
  3534. ## Button
  3535. def LoadElementButton(self, window, value, parentWindow):
  3536. if value.has_key("width") and value.has_key("height"):
  3537. window.SetSize(int(value["width"]), int(value["height"]))
  3538. if True == value.has_key("default_image"):
  3539. window.SetUpVisual(value["default_image"])
  3540. if True == value.has_key("over_image"):
  3541. window.SetOverVisual(value["over_image"])
  3542. if True == value.has_key("down_image"):
  3543. window.SetDownVisual(value["down_image"])
  3544. if True == value.has_key("disable_image"):
  3545. window.SetDisableVisual(value["disable_image"])
  3546. if True == value.has_key("text"):
  3547. if True == value.has_key("text_height"):
  3548. window.SetText(value["text"], value["text_height"])
  3549. else:
  3550. window.SetText(value["text"])
  3551. if value.has_key("text_color"):
  3552. window.SetTextColor(value["text_color"])
  3553. if True == value.has_key("tooltip_text"):
  3554. if True == value.has_key("tooltip_x") and True == value.has_key("tooltip_y"):
  3555. window.SetToolTipText(value["tooltip_text"], int(value["tooltip_x"]), int(value["tooltip_y"]))
  3556. else:
  3557. window.SetToolTipText(value["tooltip_text"])
  3558. self.LoadDefaultData(window, value, parentWindow)
  3559. return True
  3560. ## Mark
  3561. def LoadElementMark(self, window, value, parentWindow):
  3562. #if False == self.CheckKeyList(value["name"], value, self.MARK_KEY_LIST):
  3563. # return False
  3564. self.LoadDefaultData(window, value, parentWindow)
  3565. return True
  3566. ## Image
  3567. def LoadElementImage(self, window, value, parentWindow):
  3568. if False == self.CheckKeyList(value["name"], value, self.IMAGE_KEY_LIST):
  3569. return False
  3570. window.LoadImage(value["image"])
  3571. self.LoadDefaultData(window, value, parentWindow)
  3572. return True
  3573. ## AniImage
  3574. def LoadElementAniImage(self, window, value, parentWindow):
  3575. if False == self.CheckKeyList(value["name"], value, self.ANI_IMAGE_KEY_LIST):
  3576. return False
  3577. if True == value.has_key("delay"):
  3578. window.SetDelay(value["delay"])
  3579. for image in value["images"]:
  3580. window.AppendImage(image)
  3581. if value.has_key("width") and value.has_key("height"):
  3582. window.SetSize(value["width"], value["height"])
  3583. self.LoadDefaultData(window, value, parentWindow)
  3584. return True
  3585. ## Expanded Image
  3586. def LoadElementExpandedImage(self, window, value, parentWindow):
  3587. if False == self.CheckKeyList(value["name"], value, self.EXPANDED_IMAGE_KEY_LIST):
  3588. return False
  3589. window.LoadImage(value["image"])
  3590. if True == value.has_key("x_origin") and True == value.has_key("y_origin"):
  3591. window.SetOrigin(float(value["x_origin"]), float(value["y_origin"]))
  3592. if True == value.has_key("x_scale") and True == value.has_key("y_scale"):
  3593. window.SetScale(float(value["x_scale"]), float(value["y_scale"]))
  3594. if True == value.has_key("rect"):
  3595. RenderingRect = value["rect"]
  3596. window.SetRenderingRect(RenderingRect[0], RenderingRect[1], RenderingRect[2], RenderingRect[3])
  3597. if True == value.has_key("mode"):
  3598. mode = value["mode"]
  3599. if "MODULATE" == mode:
  3600. window.SetRenderingMode(wndMgr.RENDERING_MODE_MODULATE)
  3601. self.LoadDefaultData(window, value, parentWindow)
  3602. return True
  3603. ## Slot
  3604. def LoadElementSlot(self, window, value, parentWindow):
  3605. if False == self.CheckKeyList(value["name"], value, self.SLOT_KEY_LIST):
  3606. return False
  3607. global_x = int(value["x"])
  3608. global_y = int(value["y"])
  3609. global_width = int(value["width"])
  3610. global_height = int(value["height"])
  3611. window.SetPosition(global_x, global_y)
  3612. window.SetSize(global_width, global_height)
  3613. window.Show()
  3614. r = 1.0
  3615. g = 1.0
  3616. b = 1.0
  3617. a = 1.0
  3618. if True == value.has_key("image_r") and \
  3619. True == value.has_key("image_g") and \
  3620. True == value.has_key("image_b") and \
  3621. True == value.has_key("image_a"):
  3622. r = float(value["image_r"])
  3623. g = float(value["image_g"])
  3624. b = float(value["image_b"])
  3625. a = float(value["image_a"])
  3626. SLOT_ONE_KEY_LIST = ("index", "x", "y", "width", "height")
  3627. for slot in value["slot"]:
  3628. if True == self.CheckKeyList(value["name"] + " - one", slot, SLOT_ONE_KEY_LIST):
  3629. wndMgr.AppendSlot(window.hWnd,
  3630. int(slot["index"]),
  3631. int(slot["x"]),
  3632. int(slot["y"]),
  3633. int(slot["width"]),
  3634. int(slot["height"]))
  3635. if True == value.has_key("image"):
  3636. wndMgr.SetSlotBaseImage(window.hWnd,
  3637. value["image"],
  3638. r, g, b, a)
  3639. return True
  3640. def LoadElementCandidateList(self, window, value, parentWindow):
  3641. if False == self.CheckKeyList(value["name"], value, self.CANDIDATE_LIST_KEY_LIST):
  3642. return False
  3643. window.SetPosition(int(value["x"]), int(value["y"]))
  3644. window.SetItemSize(int(value["item_xsize"]), int(value["item_ysize"]))
  3645. window.SetItemStep(int(value["item_step"]))
  3646. window.Show()
  3647. return True
  3648. ## Table
  3649. def LoadElementGridTable(self, window, value, parentWindow):
  3650. if False == self.CheckKeyList(value["name"], value, self.GRID_TABLE_KEY_LIST):
  3651. return False
  3652. xBlank = 0
  3653. yBlank = 0
  3654. if True == value.has_key("x_blank"):
  3655. xBlank = int(value["x_blank"])
  3656. if True == value.has_key("y_blank"):
  3657. yBlank = int(value["y_blank"])
  3658. if localeInfo.IsARABIC():
  3659. pass
  3660. else:
  3661. window.SetPosition(int(value["x"]), int(value["y"]))
  3662. window.ArrangeSlot( int(value["start_index"]),
  3663. int(value["x_count"]),
  3664. int(value["y_count"]),
  3665. int(value["x_step"]),
  3666. int(value["y_step"]),
  3667. xBlank,
  3668. yBlank)
  3669. if True == value.has_key("image"):
  3670. r = 1.0
  3671. g = 1.0
  3672. b = 1.0
  3673. a = 1.0
  3674. if True == value.has_key("image_r") and \
  3675. True == value.has_key("image_g") and \
  3676. True == value.has_key("image_b") and \
  3677. True == value.has_key("image_a"):
  3678. r = float(value["image_r"])
  3679. g = float(value["image_g"])
  3680. b = float(value["image_b"])
  3681. a = float(value["image_a"])
  3682. wndMgr.SetSlotBaseImage(window.hWnd, value["image"], r, g, b, a)
  3683. if True == value.has_key("style"):
  3684. if "select" == value["style"]:
  3685. wndMgr.SetSlotStyle(window.hWnd, wndMgr.SLOT_STYLE_SELECT)
  3686. if localeInfo.IsARABIC():
  3687. self.LoadDefaultData(window, value, parentWindow)
  3688. else:
  3689. window.Show()
  3690. return True
  3691. ## Text
  3692. def LoadElementText(self, window, value, parentWindow):
  3693. if value.has_key("fontsize"):
  3694. fontSize = value["fontsize"]
  3695. if "LARGE" == fontSize:
  3696. window.SetFontName(localeInfo.UI_DEF_FONT_LARGE)
  3697. elif value.has_key("fontname"):
  3698. fontName = value["fontname"]
  3699. window.SetFontName(fontName)
  3700. if value.has_key("text_horizontal_align"):
  3701. if "left" == value["text_horizontal_align"]:
  3702. window.SetHorizontalAlignLeft()
  3703. elif "center" == value["text_horizontal_align"]:
  3704. window.SetHorizontalAlignCenter()
  3705. elif "right" == value["text_horizontal_align"]:
  3706. window.SetHorizontalAlignRight()
  3707. if value.has_key("text_vertical_align"):
  3708. if "top" == value["text_vertical_align"]:
  3709. window.SetVerticalAlignTop()
  3710. elif "center" == value["text_vertical_align"]:
  3711. window.SetVerticalAlignCenter()
  3712. elif "bottom" == value["text_vertical_align"]:
  3713. window.SetVerticalAlignBottom()
  3714. if value.has_key("all_align"):
  3715. window.SetHorizontalAlignCenter()
  3716. window.SetVerticalAlignCenter()
  3717. window.SetWindowHorizontalAlignCenter()
  3718. window.SetWindowVerticalAlignCenter()
  3719. if value.has_key("r") and value.has_key("g") and value.has_key("b"):
  3720. window.SetFontColor(float(value["r"]), float(value["g"]), float(value["b"]))
  3721. elif value.has_key("color"):
  3722. window.SetPackedFontColor(value["color"])
  3723. else:
  3724. window.SetFontColor(0.8549, 0.8549, 0.8549)
  3725. if value.has_key("outline"):
  3726. if value["outline"]:
  3727. window.SetOutline()
  3728. if True == value.has_key("text"):
  3729. window.SetText(value["text"])
  3730. self.LoadDefaultData(window, value, parentWindow)
  3731. return True
  3732. ## EditLine
  3733. def LoadElementEditLine(self, window, value, parentWindow):
  3734. if False == self.CheckKeyList(value["name"], value, self.EDIT_LINE_KEY_LIST):
  3735. return False
  3736. if value.has_key("secret_flag"):
  3737. window.SetSecret(value["secret_flag"])
  3738. if value.has_key("with_codepage"):
  3739. if value["with_codepage"]:
  3740. window.bCodePage = True
  3741. if value.has_key("only_number"):
  3742. if value["only_number"]:
  3743. window.SetNumberMode()
  3744. if value.has_key("enable_codepage"):
  3745. window.SetIMEFlag(value["enable_codepage"])
  3746. if value.has_key("enable_ime"):
  3747. window.SetIMEFlag(value["enable_ime"])
  3748. if value.has_key("limit_width"):
  3749. window.SetLimitWidth(value["limit_width"])
  3750. if value.has_key("multi_line"):
  3751. if value["multi_line"]:
  3752. window.SetMultiLine()
  3753. window.SetMax(int(value["input_limit"]))
  3754. window.SetSize(int(value["width"]), int(value["height"]))
  3755. self.LoadElementText(window, value, parentWindow)
  3756. return True
  3757. ## TitleBar
  3758. def LoadElementTitleBar(self, window, value, parentWindow):
  3759. if False == self.CheckKeyList(value["name"], value, self.TITLE_BAR_KEY_LIST):
  3760. return False
  3761. window.MakeTitleBar(int(value["width"]), value.get("color", "red"))
  3762. self.LoadDefaultData(window, value, parentWindow)
  3763. return True
  3764. ## HorizontalBar
  3765. def LoadElementHorizontalBar(self, window, value, parentWindow):
  3766. if False == self.CheckKeyList(value["name"], value, self.HORIZONTAL_BAR_KEY_LIST):
  3767. return False
  3768. window.Create(int(value["width"]))
  3769. self.LoadDefaultData(window, value, parentWindow)
  3770. return True
  3771. ## Board
  3772. def LoadElementBoard(self, window, value, parentWindow):
  3773. if False == self.CheckKeyList(value["name"], value, self.BOARD_KEY_LIST):
  3774. return False
  3775. window.SetSize(int(value["width"]), int(value["height"]))
  3776. self.LoadDefaultData(window, value, parentWindow)
  3777. return True
  3778. ## Board With TitleBar
  3779. def LoadElementBoardWithTitleBar(self, window, value, parentWindow):
  3780. if False == self.CheckKeyList(value["name"], value, self.BOARD_WITH_TITLEBAR_KEY_LIST):
  3781. return False
  3782. window.SetSize(int(value["width"]), int(value["height"]))
  3783. window.SetTitleName(value["title"])
  3784. self.LoadDefaultData(window, value, parentWindow)
  3785. return True
  3786. def LoadElementThinBoardCircle(self, window, value, parentWindow):
  3787. if FALSE == self.CheckKeyList(value["name"], value, self.BOARD_KEY_LIST):
  3788. return FALSE
  3789. window.SetSize(int(value["width"]), int(value["height"]))
  3790. self.LoadDefaultData(window, value, parentWindow)
  3791. return TRUE
  3792. ## ThinBoard
  3793. def LoadElementThinBoard(self, window, value, parentWindow):
  3794. if False == self.CheckKeyList(value["name"], value, self.BOARD_KEY_LIST):
  3795. return False
  3796. window.SetSize(int(value["width"]), int(value["height"]))
  3797. self.LoadDefaultData(window, value, parentWindow)
  3798. return True
  3799. def LoadElementThinBoardGold(self, window, value, parentWindow):
  3800. if False == self.CheckKeyList(value["name"], value, self.BOARD_KEY_LIST):
  3801. return False
  3802. window.SetSize(int(value["width"]), int(value["height"]))
  3803. self.LoadDefaultData(window, value, parentWindow)
  3804. return True
  3805. if app.ENABLE_QUEST_CATEGORY_SYSTEM:
  3806. ## SubTitleBar
  3807. def LoadElementSubTitleBar(self, window, value, parentWindow):
  3808. if False == self.CheckKeyList(value["name"], value, self.SUB_TITLE_BAR_KEY_LIST):
  3809. return False
  3810. window.MakeSubTitleBar(int(value["width"]), value.get("color", "red"))
  3811. self.LoadElementButton(window, value, parentWindow)
  3812. window.Show()
  3813. return True
  3814. ## ListBar
  3815. def LoadElementListBar(self, window, value, parentWindow):
  3816. if False == self.CheckKeyList(value["name"], value, self.LIST_BAR_KEY_LIST):
  3817. return False
  3818. window.MakeListBar(int(value["width"]), value.get("color", "red"))
  3819. self.LoadElementButton(window, value, parentWindow)
  3820. return True
  3821. ## Box
  3822. def LoadElementBox(self, window, value, parentWindow):
  3823. if False == self.CheckKeyList(value["name"], value, self.BOX_KEY_LIST):
  3824. return False
  3825. if True == value.has_key("color"):
  3826. window.SetColor(value["color"])
  3827. window.SetSize(int(value["width"]), int(value["height"]))
  3828. self.LoadDefaultData(window, value, parentWindow)
  3829. return True
  3830. ## Bar
  3831. def LoadElementBar(self, window, value, parentWindow):
  3832. if False == self.CheckKeyList(value["name"], value, self.BAR_KEY_LIST):
  3833. return False
  3834. if True == value.has_key("color"):
  3835. window.SetColor(value["color"])
  3836. window.SetSize(int(value["width"]), int(value["height"]))
  3837. self.LoadDefaultData(window, value, parentWindow)
  3838. return True
  3839. ## Line
  3840. def LoadElementLine(self, window, value, parentWindow):
  3841. if False == self.CheckKeyList(value["name"], value, self.LINE_KEY_LIST):
  3842. return False
  3843. if True == value.has_key("color"):
  3844. window.SetColor(value["color"])
  3845. window.SetSize(int(value["width"]), int(value["height"]))
  3846. self.LoadDefaultData(window, value, parentWindow)
  3847. return True
  3848. ## Slot
  3849. def LoadElementSlotBar(self, window, value, parentWindow):
  3850. if False == self.CheckKeyList(value["name"], value, self.SLOTBAR_KEY_LIST):
  3851. return False
  3852. window.SetSize(int(value["width"]), int(value["height"]))
  3853. self.LoadDefaultData(window, value, parentWindow)
  3854. return True
  3855. ## Gauge
  3856. def LoadElementGauge(self, window, value, parentWindow):
  3857. if False == self.CheckKeyList(value["name"], value, self.GAUGE_KEY_LIST):
  3858. return False
  3859. window.MakeGauge(value["width"], value["color"])
  3860. self.LoadDefaultData(window, value, parentWindow)
  3861. return True
  3862. ## ScrollBar
  3863. def LoadElementScrollBar(self, window, value, parentWindow):
  3864. if False == self.CheckKeyList(value["name"], value, self.SCROLLBAR_KEY_LIST):
  3865. return False
  3866. window.SetScrollBarSize(value["size"])
  3867. self.LoadDefaultData(window, value, parentWindow)
  3868. return True
  3869. ## SliderBar
  3870. def LoadElementSliderBar(self, window, value, parentWindow):
  3871. self.LoadDefaultData(window, value, parentWindow)
  3872. return True
  3873. ## ListBox
  3874. def LoadElementListBox(self, window, value, parentWindow):
  3875. if False == self.CheckKeyList(value["name"], value, self.LIST_BOX_KEY_LIST):
  3876. return False
  3877. if value.has_key("item_align"):
  3878. window.SetTextCenterAlign(value["item_align"])
  3879. window.SetSize(value["width"], value["height"])
  3880. self.LoadDefaultData(window, value, parentWindow)
  3881. return True
  3882. ## ListBox2
  3883. def LoadElementListBox2(self, window, value, parentWindow):
  3884. if False == self.CheckKeyList(value["name"], value, self.LIST_BOX_KEY_LIST):
  3885. return False
  3886. window.SetRowCount(value.get("row_count", 10))
  3887. window.SetSize(value["width"], value["height"])
  3888. self.LoadDefaultData(window, value, parentWindow)
  3889. if value.has_key("item_align"):
  3890. window.SetTextCenterAlign(value["item_align"])
  3891. return True
  3892. def LoadElementListBoxEx(self, window, value, parentWindow):
  3893. if False == self.CheckKeyList(value["name"], value, self.LIST_BOX_KEY_LIST):
  3894. return False
  3895. window.SetSize(value["width"], value["height"])
  3896. self.LoadDefaultData(window, value, parentWindow)
  3897. if value.has_key("itemsize_x") and value.has_key("itemsize_y"):
  3898. window.SetItemSize(int(value["itemsize_x"]), int(value["itemsize_y"]))
  3899. if value.has_key("itemstep"):
  3900. window.SetItemStep(int(value["itemstep"]))
  3901. if value.has_key("viewcount"):
  3902. window.SetViewItemCount(int(value["viewcount"]))
  3903. return True
  3904. class ReadingWnd(Bar):
  3905. def __init__(self):
  3906. Bar.__init__(self,"TOP_MOST")
  3907. self.__BuildText()
  3908. self.SetSize(80, 19)
  3909. self.Show()
  3910. def __del__(self):
  3911. Bar.__del__(self)
  3912. def __BuildText(self):
  3913. self.text = TextLine()
  3914. self.text.SetParent(self)
  3915. self.text.SetPosition(4, 3)
  3916. self.text.Show()
  3917. def SetText(self, text):
  3918. self.text.SetText(text)
  3919. def SetReadingPosition(self, x, y):
  3920. xPos = x + 2
  3921. yPos = y - self.GetHeight() - 2
  3922. self.SetPosition(xPos, yPos)
  3923. def SetTextColor(self, color):
  3924. self.text.SetPackedFontColor(color)
  3925. def MakeSlotBar(parent, x, y, width, height):
  3926. slotBar = SlotBar()
  3927. slotBar.SetParent(parent)
  3928. slotBar.SetSize(width, height)
  3929. slotBar.SetPosition(x, y)
  3930. slotBar.Show()
  3931. return slotBar
  3932. def MakeImageBox(parent, name, x, y):
  3933. image = ImageBox()
  3934. image.SetParent(parent)
  3935. image.LoadImage(name)
  3936. image.SetPosition(x, y)
  3937. image.Show()
  3938. return image
  3939. def MakeTextLine(parent):
  3940. textLine = TextLine()
  3941. textLine.SetParent(parent)
  3942. textLine.SetWindowHorizontalAlignCenter()
  3943. textLine.SetWindowVerticalAlignCenter()
  3944. textLine.SetHorizontalAlignCenter()
  3945. textLine.SetVerticalAlignCenter()
  3946. textLine.Show()
  3947. return textLine
  3948. def MakeButton(parent, x, y, tooltipText, path, up, over, down):
  3949. button = Button()
  3950. button.SetParent(parent)
  3951. button.SetPosition(x, y)
  3952. button.SetUpVisual(path + up)
  3953. button.SetOverVisual(path + over)
  3954. button.SetDownVisual(path + down)
  3955. button.SetToolTipText(tooltipText)
  3956. button.Show()
  3957. return button
  3958. def RenderRoundBox(x, y, width, height, color):
  3959. grp.SetColor(color)
  3960. grp.RenderLine(x+2, y, width-3, 0)
  3961. grp.RenderLine(x+2, y+height, width-3, 0)
  3962. grp.RenderLine(x, y+2, 0, height-4)
  3963. grp.RenderLine(x+width, y+1, 0, height-3)
  3964. grp.RenderLine(x, y+2, 2, -2)
  3965. grp.RenderLine(x, y+height-2, 2, 2)
  3966. grp.RenderLine(x+width-2, y, 2, 2)
  3967. grp.RenderLine(x+width-2, y+height, 2, -2)
  3968. def GenerateColor(r, g, b):
  3969. r = float(r) / 255.0
  3970. g = float(g) / 255.0
  3971. b = float(b) / 255.0
  3972. return grp.GenerateColor(r, g, b, 1.0)
  3973. def EnablePaste(flag):
  3974. ime.EnablePaste(flag)
  3975. def GetHyperlink():
  3976. return wndMgr.GetHyperlink()
  3977. RegisterToolTipWindow("TEXT", TextLine)