Advertisement
Guest User

Untitled

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