Guest User

Untitled

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