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