mavzermete 1
mavzermete
Mt2Hizmet 1
Mt2Hizmet
xranzei 1
xranzei
Bvural41 1
Bvural41
noisiv 1
noisiv
Manwe Work 1
Manwe Work
Hikaye Ekle

Cevaplandı ticaret camı açılmama sorunu (syserr)

HERAKLES Otomatik Avlı kalıcı sunucu. 19 Haziran'da açılıyor. Atius & Wizard güvencesiyle hemen kayıt ol, ön kayıt ödülleri aktif. HEMEN TIKLA!

ticaret camı açılmama sorunu

tc.png
 
Moderatör tarafında düzenlendi:
sorun olan kısım şu




def OnUpdate(self):

if (app.GetTime() - self.searchclicktime) > self.CLICK_LIMIT_TIME and self.searchbutton.IsDIsable() == 0:
self.searchbutton.Enable()

if (app.GetTime() - self.buyclicktime) > self.CLICK_LIMIT_TIME and self.buybutton.IsDIsable() == 0 and self.iscashitem == 1:
self.buybutton.Enable()
Dosyaları at ilk yorumda dediğim dosyaları.
 
Kod:
import app
import ime
import grp
import snd
import wndMgr
import item
import skill
import localeInfo
import constInfo
import systemSetting

# MARK_BUG_FIX
import guild
# END_OF_MARK_BUG_FIX

from _weakref import proxy

import uiScriptLocale
LOCALE_PATH = uiScriptLocale.WINDOWS_PATH
interfacelist = (
                        "d:/ymir work/ui/pattern/Board_Corner_LeftTop.tga",
                        "d:/ymir work/ui/pattern/Board_Corner_LeftBottom.tga",
                        "d:/ymir work/ui/pattern/Board_Corner_RightTop.tga",
                        "d:/ymir work/ui/pattern/Board_Corner_RightBottom.tga",
                        "d:/ymir work/ui/pattern/Board_Line_Left.tga",
                        "d:/ymir work/ui/pattern/Board_Line_Right.tga",
                        "d:/ymir work/ui/pattern/Board_Line_Top.tga",
                        "d:/ymir work/ui/pattern/Board_Line_Bottom.tga",
                        "d:/ymir work/ui/pattern/TaskBar_Base.tga",
                        "d:/ymir work/ui/game/windows/equipment_base.sub",
                        "d:/ymir work/ui/equipment_bg_without_ring.tga",
                        "d:/ymir work/ui/pattern/titlebar_left.tga",
                        "d:/ymir work/ui/pattern/titlebar_center.tga",
                        "d:/ymir work/ui/pattern/titlebar_right.tga",
                        "d:/ymir work/ui/pattern/Board_Base.tga",
                        "d:/ymir work/ui/minimap/minimap.sub",
                        LOCALE_PATH+"tab_1.sub",
                        LOCALE_PATH+"tab_2.sub",
                        LOCALE_PATH+"tab_3.sub",
                        LOCALE_PATH+"tab_4.sub",
                        LOCALE_PATH+"label_std_item1.sub",
                        LOCALE_PATH+"label_std_item2.sub",
                        LOCALE_PATH+"label_ext_item1.sub",
                        LOCALE_PATH+"label_ext_item2.sub",
                        "d:/ymir work/ui/pattern/ThinBoard_Corner_LeftTop.tga",
                        "d:/ymir work/ui/pattern/ThinBoard_Corner_LeftBottom.tga",
                        "d:/ymir work/ui/pattern/ThinBoard_Corner_RightBottom.tga",
                        "d:/ymir work/ui/pattern/ThinBoard_Corner_RightTop.tga",
                        "d:/ymir work/ui/pattern/ThinBoard_Line_Left.tga",
                        "d:/ymir work/ui/pattern/ThinBoard_Line_Right.tga",
                        "d:/ymir work/ui/pattern/ThinBoard_Line_Top.tga",
                        "d:/ymir work/ui/pattern/ThinBoard_Line_Bottom.tga",
)


interfacelist2 = []

def zmiengrafike(r,g,b,a):
    for x in interfacelist2:
        if x:
            wndMgr.SetDiffuseColor(x.hWnd, r, g, b, a)

    pass

BACKGROUND_COLOR = grp.GenerateColor(0.0, 0.0, 0.0, 1.0)
DARK_COLOR = grp.GenerateColor(0.2, 0.2, 0.2, 1.0)
BRIGHT_COLOR = grp.GenerateColor(0.7, 0.7, 0.7, 1.0)

if localeInfo.IsCANADA():
    SELECT_COLOR = grp.GenerateColor(0.9, 0.03, 0.01, 0.4)
else:
    SELECT_COLOR = grp.GenerateColor(0.0, 0.0, 0.5, 0.3)

WHITE_COLOR = grp.GenerateColor(1.0, 1.0, 1.0, 0.5)
HALF_WHITE_COLOR = grp.GenerateColor(1.0, 1.0, 1.0, 0.2)

createToolTipWindowDict = {}
def RegisterCandidateWindowClass(codePage, candidateWindowClass):
    EditLine.candidateWindowClassDict[codePage]=candidateWindowClass
def RegisterToolTipWindow(type, createToolTipWindow):
    createToolTipWindowDict[type]=createToolTipWindow

app.SetDefaultFontName(localeInfo.UI_DEF_FONT)

## Window Manager Event List##
##############################
## "OnMouseLeftButtonDown"
## "OnMouseLeftButtonUp"
## "OnMouseLeftButtonDoubleClick"
## "OnMouseRightButtonDown"
## "OnMouseRightButtonUp"
## "OnMouseRightButtonDoubleClick"
## "OnMouseDrag"
## "OnSetFocus"
## "OnKillFocus"
## "OnMouseOverIn"
## "OnMouseOverOut"
## "OnRender"
## "OnUpdate"
## "OnKeyDown"
## "OnKeyUp"
## "OnTop"
## "OnIMEUpdate" ## IME Only
## "OnIMETab"    ## IME Only
## "OnIMEReturn" ## IME Only
##############################
## Window Manager Event List##


class __mem_func__:
    class __noarg_call__:
        def __init__(self, cls, obj, func):
            self.cls=cls
            self.obj=proxy(obj)
            self.func=proxy(func)

        def __call__(self, *arg):
            return self.func(self.obj)

    class __arg_call__:
        def __init__(self, cls, obj, func):
            self.cls=cls
            self.obj=proxy(obj)
            self.func=proxy(func)

        def __call__(self, *arg):
            return self.func(self.obj, *arg)

    def __init__(self, mfunc):
        if mfunc.im_func.func_code.co_argcount>1:
            self.call=__mem_func__.__arg_call__(mfunc.im_class, mfunc.im_self, mfunc.im_func)
        else:
            self.call=__mem_func__.__noarg_call__(mfunc.im_class, mfunc.im_self, mfunc.im_func)

    def __call__(self, *arg):
        return self.call(*arg)


class Window(object):

    def SetClickEvent(self, event):
        self.clickEvent = __mem_func__(event)

    def OnMouseLeftButtonDown(self):
        if self.clickEvent:
            self.clickEvent()

    def NoneMethod(cls):
        pass

    NoneMethod = classmethod(NoneMethod)

    def __init__(self, layer = "UI"):
        self.clickEvent = None
        self.hWnd = None
        self.parentWindow = 0
        self.onMouseLeftButtonUpEvent = None
        self.RegisterWindow(layer)
        self.Hide()
        
        if app.ENABLE_SEND_TARGET_INFO:
            self.mouseLeftButtonDownEvent = None
            self.mouseLeftButtonDownArgs = None
            self.mouseLeftButtonUpEvent = None
            self.mouseLeftButtonUpArgs = None
            self.mouseLeftButtonDoubleClickEvent = None
            self.mouseRightButtonDownEvent = None
            self.mouseRightButtonDownArgs = None
            self.moveWindowEvent = None
            self.renderEvent = None
            self.renderArgs = None

            self.overInEvent = None
            self.overInArgs = None

            self.overOutEvent = None
            self.overOutArgs = None

            self.baseX = 0
            self.baseY = 0

            self.SetWindowName("NONAME_Window")       

    def __del__(self):
        wndMgr.Destroy(self.hWnd)

    def RegisterWindow(self, layer):
        self.hWnd = wndMgr.Register(self, layer)

    def Destroy(self):
        pass

    def GetWindowHandle(self):
        return self.hWnd

    def AddFlag(self, style):
        wndMgr.AddFlag(self.hWnd, style)

    def IsRTL(self):
        return wndMgr.IsRTL(self.hWnd)

    def SetWindowName(self, Name):
        wndMgr.SetName(self.hWnd, Name)

    if app.ENABLE_SEND_TARGET_INFO:
        def SetParent(self, parent):
            if parent:
                wndMgr.SetParent(self.hWnd, parent.hWnd)
            else:
                wndMgr.SetParent(self.hWnd, 0)
    
        def SetAttachParent(self, parent):
            wndMgr.SetAttachParent(self.hWnd, parent.hWnd)
    else:
        def SetParent(self, parent):
            wndMgr.SetParent(self.hWnd, parent.hWnd)

    def SetParentProxy(self, parent):
        self.parentWindow=proxy(parent)
        wndMgr.SetParent(self.hWnd, parent.hWnd)

    
    def GetParentProxy(self):
        return self.parentWindow

    def SetPickAlways(self):
        wndMgr.SetPickAlways(self.hWnd)

    def SetWindowHorizontalAlignLeft(self):
        wndMgr.SetWindowHorizontalAlign(self.hWnd, wndMgr.HORIZONTAL_ALIGN_LEFT)

    def SetWindowHorizontalAlignCenter(self):
        wndMgr.SetWindowHorizontalAlign(self.hWnd, wndMgr.HORIZONTAL_ALIGN_CENTER)

    def SetWindowHorizontalAlignRight(self):
        wndMgr.SetWindowHorizontalAlign(self.hWnd, wndMgr.HORIZONTAL_ALIGN_RIGHT)

    def SetWindowVerticalAlignTop(self):
        wndMgr.SetWindowVerticalAlign(self.hWnd, wndMgr.VERTICAL_ALIGN_TOP)

    def SetWindowVerticalAlignCenter(self):
        wndMgr.SetWindowVerticalAlign(self.hWnd, wndMgr.VERTICAL_ALIGN_CENTER)

    def SetWindowVerticalAlignBottom(self):
        wndMgr.SetWindowVerticalAlign(self.hWnd, wndMgr.VERTICAL_ALIGN_BOTTOM)

    def SetTop(self):
        wndMgr.SetTop(self.hWnd)

    def Show(self):
        wndMgr.Show(self.hWnd)

    def Hide(self):
        wndMgr.Hide(self.hWnd)
        
    if app.ENABLE_SEND_TARGET_INFO:
        def SetVisible(self, is_show):
            if is_show:
                self.Show()
            else:
                self.Hide()       

    def Lock(self):
        wndMgr.Lock(self.hWnd)

    def Unlock(self):
        wndMgr.Unlock(self.hWnd)

    def IsShow(self):
        return wndMgr.IsShow(self.hWnd)

    def UpdateRect(self):
        wndMgr.UpdateRect(self.hWnd)

    def SetSize(self, width, height):
        wndMgr.SetWindowSize(self.hWnd, width, height)

    def GetWidth(self):
        return wndMgr.GetWindowWidth(self.hWnd)

    def GetHeight(self):
        return wndMgr.GetWindowHeight(self.hWnd)

    def GetLocalPosition(self):
        return wndMgr.GetWindowLocalPosition(self.hWnd)
        
    if app.ENABLE_SEND_TARGET_INFO:
        def GetLeft(self):
            x, y = self.GetLocalPosition()
            return x
    
        def GetGlobalLeft(self):
            x, y = self.GetGlobalPosition()
            return x
    
        def GetTop(self):
            x, y = self.GetLocalPosition()
            return y
    
        def GetGlobalTop(self):
            x, y = self.GetGlobalPosition()
            return y
    
        def GetRight(self):
            return self.GetLeft() + self.GetWidth()
    
        def GetBottom(self):
            return self.GetTop() + self.GetHeight()       

    def GetGlobalPosition(self):
        return wndMgr.GetWindowGlobalPosition(self.hWnd)

    def GetMouseLocalPosition(self):
        return wndMgr.GetMouseLocalPosition(self.hWnd)

    def GetRect(self):
        return wndMgr.GetWindowRect(self.hWnd)
        
    if app.ENABLE_SEND_TARGET_INFO:
        def SetLeft(self, x):
            wndMgr.SetWindowPosition(self.hWnd, x, self.GetTop())       

    def SetPosition(self, x, y):
        wndMgr.SetWindowPosition(self.hWnd, x, y)

    def SetCenterPosition(self, x = 0, y = 0):
        self.SetPosition((wndMgr.GetScreenWidth() - self.GetWidth()) / 2 + x, (wndMgr.GetScreenHeight() - self.GetHeight()) / 2 + y)

    if app.ENABLE_SEND_TARGET_INFO:
        def SavePosition(self):
            self.baseX = self.GetLeft()
            self.baseY = self.GetTop()
    
        def UpdatePositionByScale(self, scale):
            self.SetPosition(self.baseX * scale, self.baseY * scale)

    def IsFocus(self):
        return wndMgr.IsFocus(self.hWnd)

    def SetFocus(self):
        wndMgr.SetFocus(self.hWnd)

    def KillFocus(self):
        wndMgr.KillFocus(self.hWnd)

    def GetChildCount(self):
        return wndMgr.GetChildCount(self.hWnd)

    def IsIn(self):
        return wndMgr.IsIn(self.hWnd)
        
    if app.ENABLE_SEND_TARGET_INFO:
        def IsInPosition(self):
            xMouse, yMouse = wndMgr.GetMousePosition()
            x, y = self.GetGlobalPosition()
            return xMouse >= x and xMouse < x + self.GetWidth() and yMouse >= y and yMouse < y + self.GetHeight()
    
        def SetMouseLeftButtonDownEvent(self, event, *args):
            self.mouseLeftButtonDownEvent = event
            self.mouseLeftButtonDownArgs = args
    
        def OnMouseLeftButtonDown(self):
            if self.mouseLeftButtonDownEvent:
                apply(self.mouseLeftButtonDownEvent, self.mouseLeftButtonDownArgs)       

    if app.ENABLE_SEND_TARGET_INFO:
        def SetMouseLeftButtonUpEvent(self, event, *args):
            self.mouseLeftButtonUpEvent = event
            self.mouseLeftButtonUpArgs = args
    else:
        def SetOnMouseLeftButtonUpEvent(self, event):
            self.onMouseLeftButtonUpEvent = ev

    if app.ENABLE_SEND_TARGET_INFO:
        def SetMouseLeftButtonDoubleClickEvent(self, event):
            self.mouseLeftButtonDoubleClickEvent = event
    
        def OnMouseLeftButtonDoubleClick(self):
            if self.mouseLeftButtonDoubleClickEvent:
                self.mouseLeftButtonDoubleClickEvent()
    
        def SetMouseRightButtonDownEvent(self, event, *args):
            self.mouseRightButtonDownEvent = event
            self.mouseRightButtonDownArgs = args
    
        def OnMouseRightButtonDown(self):
            if self.mouseRightButtonDownEvent:
                apply(self.mouseRightButtonDownEvent, self.mouseRightButtonDownArgs)
    
        def SetMoveWindowEvent(self, event):
            self.moveWindowEvent = event
    
        def OnMoveWindow(self, x, y):
            if self.moveWindowEvent:
                self.moveWindowEvent(x, y)
    
        def SAFE_SetOverInEvent(self, func, *args):
            self.overInEvent = __mem_func__(func)
            self.overInArgs = args
    
        def SetOverInEvent(self, func, *args):
            self.overInEvent = func
            self.overInArgs = args
    
        def SAFE_SetOverOutEvent(self, func, *args):
            self.overOutEvent = __mem_func__(func)
            self.overOutArgs = args
    
        def SetOverOutEvent(self, func, *args):
            self.overOutEvent = func
            self.overOutArgs = args
    
        def OnMouseOverIn(self):
            if self.overInEvent:
                apply(self.overInEvent, self.overInArgs)
    
        def OnMouseOverOut(self):
            if self.overOutEvent:
                apply(self.overOutEvent, self.overOutArgs)
    
        def SAFE_SetRenderEvent(self, event, *args):
            self.renderEvent = __mem_func__(event)
            self.renderArgs = args
    
        def ClearRenderEvent(self):
            self.renderEvent = None
            self.renderArgs = None
    
        def OnRender(self):
            if self.renderEvent:
                apply(self.renderEvent, self.renderArgs)
        
    def OnMouseLeftButtonUp(self):
        if self.onMouseLeftButtonUpEvent:
            self.onMouseLeftButtonUpEvent()

class ListBoxEx(Window):
    class Item(Window):
        def __init__(self):
            Window.__init__(self)

        def __del__(self):
            Window.__del__(self)

        def SetParent(self, parent):
            Window.SetParent(self, parent)
            self.parent=proxy(parent)

        def OnMouseLeftButtonDown(self):
            self.parent.SelectItem(self)

        def OnRender(self):
            if self.parent.GetSelectedItem()==self:
                self.OnSelectedRender()

        def OnSelectedRender(self):
            x, y = self.GetGlobalPosition()
            grp.SetColor(grp.GenerateColor(0.0, 0.0, 0.7, 0.7))
            grp.RenderBar(x, y, self.GetWidth(), self.GetHeight())

    def __init__(self):
        Window.__init__(self)

        self.viewItemCount=10
        self.basePos=0
        self.itemHeight=16
        self.itemStep=20
        self.selItem=0
        self.itemList=[]
        self.onSelectItemEvent = lambda *arg: None

        if localeInfo.IsARABIC():
            self.itemWidth=130
        else:
            self.itemWidth=100

        self.scrollBar=None
        self.__UpdateSize()

    def __del__(self):
        Window.__del__(self)

    def __UpdateSize(self):
        height=self.itemStep*self.__GetViewItemCount()

        self.SetSize(self.itemWidth, height)

    def IsEmpty(self):
        if len(self.itemList)==0:
            return 1
        return 0

    def SetItemStep(self, itemStep):
        self.itemStep=itemStep
        self.__UpdateSize()

    def SetItemSize(self, itemWidth, itemHeight):
        self.itemWidth=itemWidth
        self.itemHeight=itemHeight
        self.__UpdateSize()

    def SetViewItemCount(self, viewItemCount):
        self.viewItemCount=viewItemCount

    def SetSelectEvent(self, event):
        self.onSelectItemEvent = event

    def SetBasePos(self, basePos):
        for oldItem in self.itemList[self.basePos:self.basePos+self.viewItemCount]:
            oldItem.Hide()

        self.basePos=basePos

        pos=basePos
        for newItem in self.itemList[self.basePos:self.basePos+self.viewItemCount]:
            (x, y)=self.GetItemViewCoord(pos, newItem.GetWidth())
            newItem.SetPosition(x, y)
            newItem.Show()
            pos+=1

    def GetItemIndex(self, argItem):
        return self.itemList.index(argItem)

    def GetSelectedItem(self):
        return self.selItem

    def SelectIndex(self, index):

        if index >= len(self.itemList) or index < 0:
            self.selItem = None
            return

        try:
            self.selItem=self.itemList[index]
        except:
            pass

    def SelectItem(self, selItem):
        self.selItem=selItem
        self.onSelectItemEvent(selItem)

    def RemoveAllItems(self):
        self.selItem=None
        self.itemList=[]

        if self.scrollBar:
            self.scrollBar.SetPos(0)

    def RemoveItem(self, delItem):
        if delItem==self.selItem:
            self.selItem=None

        self.itemList.remove(delItem)

    def AppendItem(self, newItem):
        newItem.SetParent(self)
        newItem.SetSize(self.itemWidth, self.itemHeight)

        pos=len(self.itemList)
        if self.__IsInViewRange(pos):
            (x, y)=self.GetItemViewCoord(pos, newItem.GetWidth())
            newItem.SetPosition(x, y)
            newItem.Show()
        else:
            newItem.Hide()

        self.itemList.append(newItem)

    def SetScrollBar(self, scrollBar):
        scrollBar.SetScrollEvent(__mem_func__(self.__OnScroll))
        self.scrollBar=scrollBar

    def __OnScroll(self):
        self.SetBasePos(int(self.scrollBar.GetPos()*self.__GetScrollLen()))

    def __GetScrollLen(self):
        scrollLen=self.__GetItemCount()-self.__GetViewItemCount()
        if scrollLen<0:
            return 0

        return scrollLen

    def __GetViewItemCount(self):
        return self.viewItemCount

    def __GetItemCount(self):
        return len(self.itemList)

    def GetItemViewCoord(self, pos, itemWidth):
        if localeInfo.IsARABIC():
            return (self.GetWidth()-itemWidth-10, (pos-self.basePos)*self.itemStep)
        else:
            return (0, (pos-self.basePos)*self.itemStep)

    def __IsInViewRange(self, pos):
        if pos<self.basePos:
            return 0
        if pos>=self.basePos+self.viewItemCount:
            return 0
        return 1


if app.ENABLE_SEND_TARGET_INFO:
    class ListBoxExNew(Window):
        class Item(Window):
            def __init__(self):
                Window.__init__(self)

                self.realWidth = 0
                self.realHeight = 0

                self.removeTop = 0
                self.removeBottom = 0

                self.SetWindowName("NONAME_ListBoxExNew_Item")

            def __del__(self):
                Window.__del__(self)

            def SetParent(self, parent):
                Window.SetParent(self, parent)
                self.parent=proxy(parent)

            def SetSize(self, width, height):
                self.realWidth = width
                self.realHeight = height
                Window.SetSize(self, width, height)

            def SetRemoveTop(self, height):
                self.removeTop = height
                self.RefreshHeight()

            def SetRemoveBottom(self, height):
                self.removeBottom = height
                self.RefreshHeight()

            def SetCurrentHeight(self, height):
                Window.SetSize(self, self.GetWidth(), height)

            def GetCurrentHeight(self):
                return Window.GetHeight(self)

            def ResetCurrentHeight(self):
                self.removeTop = 0
                self.removeBottom = 0
                self.RefreshHeight()

            def RefreshHeight(self):
                self.SetCurrentHeight(self.GetHeight() - self.removeTop - self.removeBottom)

            def GetHeight(self):
                return self.realHeight

        def __init__(self, stepSize, viewSteps):
            Window.__init__(self)

            self.viewItemCount=10
            self.basePos=0
            self.baseIndex=0
            self.maxSteps=0
            self.viewSteps = viewSteps
            self.stepSize = stepSize
            self.itemList=[]

            self.scrollBar=None

            self.SetWindowName("NONAME_ListBoxEx")

        def __del__(self):
            Window.__del__(self)

        def IsEmpty(self):
            if len(self.itemList)==0:
                return 1
            return 0

        def __CheckBasePos(self, pos):
            self.viewItemCount = 0

            start_pos = pos

            height = 0
            while height < self.GetHeight():
                if pos >= len(self.itemList):
                    return start_pos == 0
                height += self.itemList[pos].GetHeight()
                pos += 1
                self.viewItemCount += 1
            return height == self.GetHeight()

        def SetBasePos(self, basePos, forceRefresh = TRUE):
            if forceRefresh == FALSE and self.basePos == basePos:
                return

            for oldItem in self.itemList[self.baseIndex:self.baseIndex+self.viewItemCount]:
                oldItem.ResetCurrentHeight()
                oldItem.Hide()

            self.basePos=basePos

            baseIndex = 0
            while basePos > 0:
                basePos -= self.itemList[baseIndex].GetHeight() / self.stepSize
                if basePos < 0:
                    self.itemList[baseIndex].SetRemoveTop(self.stepSize * abs(basePos))
                    break
                baseIndex += 1
            self.baseIndex = baseIndex

            stepCount = 0
            self.viewItemCount = 0
            while baseIndex < len(self.itemList):
                stepCount += self.itemList[baseIndex].GetCurrentHeight() / self.stepSize
                self.viewItemCount += 1
                if stepCount > self.viewSteps:
                    self.itemList[baseIndex].SetRemoveBottom(self.stepSize * (stepCount - self.viewSteps))
                    break
                elif stepCount == self.viewSteps:
                    break
                baseIndex += 1

            y = 0
            for newItem in self.itemList[self.baseIndex:self.baseIndex+self.viewItemCount]:
                newItem.SetPosition(0, y)
                newItem.Show()
                y += newItem.GetCurrentHeight()

        def GetItemIndex(self, argItem):
            return self.itemList.index(argItem)

        def GetSelectedItem(self):
            return self.selItem

        def GetSelectedItemIndex(self):
            return self.selItemIdx

        def RemoveAllItems(self):
            self.itemList=[]
            self.maxSteps=0

            if self.scrollBar:
                self.scrollBar.SetPos(0)

        def RemoveItem(self, delItem):
            self.maxSteps -= delItem.GetHeight() / self.stepSize
            self.itemList.remove(delItem)

        def AppendItem(self, newItem):
            if newItem.GetHeight() % self.stepSize != 0:
                import dbg
                dbg.TraceError("Invalid AppendItem height %d stepSize %d" % (newItem.GetHeight(), self.stepSize))
                return

            self.maxSteps += newItem.GetHeight() / self.stepSize
            newItem.SetParent(self)
            self.itemList.append(newItem)

        def SetScrollBar(self, scrollBar):
            scrollBar.SetScrollEvent(__mem_func__(self.__OnScroll))
            self.scrollBar=scrollBar

        def __OnScroll(self):
            self.SetBasePos(int(self.scrollBar.GetPos()*self.__GetScrollLen()), FALSE)

        def __GetScrollLen(self):
            scrollLen=self.maxSteps-self.viewSteps
            if scrollLen<0:
                return 0

            return scrollLen

        def __GetViewItemCount(self):
            return self.viewItemCount

        def __GetItemCount(self):
            return len(self.itemList)

        def GetViewItemCount(self):
            return self.viewItemCount

        def GetItemCount(self):
            return len(self.itemList)

class CandidateListBox(ListBoxEx):

    HORIZONTAL_MODE = 0
    VERTICAL_MODE = 1

    class Item(ListBoxEx.Item):
        def __init__(self, text):
            ListBoxEx.Item.__init__(self)

            self.textBox=TextLine()
            self.textBox.SetParent(self)
            self.textBox.SetText(text)
            self.textBox.Show()

        def __del__(self):
            ListBoxEx.Item.__del__(self)

    def __init__(self, mode = HORIZONTAL_MODE):
        ListBoxEx.__init__(self)
        self.itemWidth=32
        self.itemHeight=32
        self.mode = mode

    def __del__(self):
        ListBoxEx.__del__(self)

    def SetMode(self, mode):
        self.mode = mode

    def AppendItem(self, newItem):
        ListBoxEx.AppendItem(self, newItem)

    def GetItemViewCoord(self, pos):
        if self.mode == self.HORIZONTAL_MODE:
            return ((pos-self.basePos)*self.itemStep, 0)
        elif self.mode == self.VERTICAL_MODE:
            return (0, (pos-self.basePos)*self.itemStep)


class TextLine(Window):
    def __init__(self):
        Window.__init__(self)
        self.max = 0
        self.SetFontName(localeInfo.UI_DEF_FONT)

    def __del__(self):
        Window.__del__(self)

    def RegisterWindow(self, layer):
        self.hWnd = wndMgr.RegisterTextLine(self, layer)

    def SetMax(self, max):
        wndMgr.SetMax(self.hWnd, max)

    def SetLimitWidth(self, width):
        wndMgr.SetLimitWidth(self.hWnd, width)

    def SetMultiLine(self):
        wndMgr.SetMultiLine(self.hWnd, TRUE)

    def SetHorizontalAlignArabic(self):
        wndMgr.SetHorizontalAlign(self.hWnd, wndMgr.TEXT_HORIZONTAL_ALIGN_ARABIC)

    def SetHorizontalAlignLeft(self):
        wndMgr.SetHorizontalAlign(self.hWnd, wndMgr.TEXT_HORIZONTAL_ALIGN_LEFT)

    def SetHorizontalAlignRight(self):
        wndMgr.SetHorizontalAlign(self.hWnd, wndMgr.TEXT_HORIZONTAL_ALIGN_RIGHT)

    def SetHorizontalAlignCenter(self):
        wndMgr.SetHorizontalAlign(self.hWnd, wndMgr.TEXT_HORIZONTAL_ALIGN_CENTER)

    def SetVerticalAlignTop(self):
        wndMgr.SetVerticalAlign(self.hWnd, wndMgr.TEXT_VERTICAL_ALIGN_TOP)

    def SetVerticalAlignBottom(self):
        wndMgr.SetVerticalAlign(self.hWnd, wndMgr.TEXT_VERTICAL_ALIGN_BOTTOM)

    def SetVerticalAlignCenter(self):
        wndMgr.SetVerticalAlign(self.hWnd, wndMgr.TEXT_VERTICAL_ALIGN_CENTER)

    def SetSecret(self, Value=TRUE):
        wndMgr.SetSecret(self.hWnd, Value)

    def SetOutline(self, Value=TRUE):
        wndMgr.SetOutline(self.hWnd, Value)

    def SetFeather(self, value=TRUE):
        wndMgr.SetFeather(self.hWnd, value)

    def SetFontName(self, fontName):
        wndMgr.SetFontName(self.hWnd, fontName)

    def SetDefaultFontName(self):
        wndMgr.SetFontName(self.hWnd, localeInfo.UI_DEF_FONT)

    def SetFontColor(self, red, green, blue):
        wndMgr.SetFontColor(self.hWnd, red, green, blue)

    def SetPackedFontColor(self, color):
        wndMgr.SetFontColor(self.hWnd, color)

    def SetText(self, text):
        wndMgr.SetText(self.hWnd, text)

    def GetText(self):
        return wndMgr.GetText(self.hWnd)

    def GetTextSize(self):
        return wndMgr.GetTextSize(self.hWnd)

class TextLine_Alisveris(Window):
    def __init__(self):
        Window.__init__(self)
        self.max = 0
        self.SetFontName(localeInfo.UI_DEF_FONT_LARGE)

    def __del__(self):
        Window.__del__(self)

    def RegisterWindow(self, layer):
        self.hWnd = wndMgr.RegisterTextLine(self, layer)

    def SetMax(self, max):
        wndMgr.SetMax(self.hWnd, max)

    def SetLimitWidth(self, width):
        wndMgr.SetLimitWidth(self.hWnd, width)

    def SetMultiLine(self):
        wndMgr.SetMultiLine(self.hWnd, TRUE)

    def SetHorizontalAlignArabic(self):
        wndMgr.SetHorizontalAlign(self.hWnd, wndMgr.TEXT_HORIZONTAL_ALIGN_ARABIC)

    def SetHorizontalAlignLeft(self):
        wndMgr.SetHorizontalAlign(self.hWnd, wndMgr.TEXT_HORIZONTAL_ALIGN_LEFT)

    def SetHorizontalAlignRight(self):
        wndMgr.SetHorizontalAlign(self.hWnd, wndMgr.TEXT_HORIZONTAL_ALIGN_RIGHT)

    def SetHorizontalAlignCenter(self):
        wndMgr.SetHorizontalAlign(self.hWnd, wndMgr.TEXT_HORIZONTAL_ALIGN_CENTER)

    def SetVerticalAlignTop(self):
        wndMgr.SetVerticalAlign(self.hWnd, wndMgr.TEXT_VERTICAL_ALIGN_TOP)

    def SetVerticalAlignBottom(self):
        wndMgr.SetVerticalAlign(self.hWnd, wndMgr.TEXT_VERTICAL_ALIGN_BOTTOM)

    def SetVerticalAlignCenter(self):
        wndMgr.SetVerticalAlign(self.hWnd, wndMgr.TEXT_VERTICAL_ALIGN_CENTER)

    def SetSecret(self, Value=TRUE):
        wndMgr.SetSecret(self.hWnd, Value)

    def SetOutline(self, Value=TRUE):
        wndMgr.SetOutline(self.hWnd, Value)

    def SetFeather(self, value=TRUE):
        wndMgr.SetFeather(self.hWnd, value)

    def SetFontName(self, fontName):
        wndMgr.SetFontName(self.hWnd, fontName)

    def SetDefaultFontName(self):
        wndMgr.SetFontName(self.hWnd, localeInfo.UI_DEF_FONT)

    def SetFontColor(self, red, green, blue):
        wndMgr.SetFontColor(self.hWnd, red, green, blue)

    def SetPackedFontColor(self, color):
        wndMgr.SetFontColor(self.hWnd, color)

    def SetText(self, text):
        wndMgr.SetText(self.hWnd, text)

    def GetText(self):
        return wndMgr.GetText(self.hWnd)

    def GetTextSize(self):
        return wndMgr.GetTextSize(self.hWnd)

class EmptyCandidateWindow(Window):
    def __init__(self):
        Window.__init__(self)

    def __del__(self):
        Window.__init__(self)

    def Load(self):
        pass

    def SetCandidatePosition(self, x, y, textCount):
        pass

    def Clear(self):
        pass

    def Append(self, text):
        pass

    def Refresh(self):
        pass

    def Select(self):
        pass

class EditLine(TextLine):
    candidateWindowClassDict = {}

    def __init__(self):
        TextLine.__init__(self)

        self.eventReturn = Window.NoneMethod
        self.eventEscape = Window.NoneMethod
        self.eventTab = None
        self.numberMode = FALSE
        self.useIME = TRUE

        self.bCodePage = FALSE

        self.candidateWindowClass = None
        self.candidateWindow = None
        self.SetCodePage(app.GetDefaultCodePage())

        self.readingWnd = ReadingWnd()
        self.readingWnd.Hide()

    def __del__(self):
        TextLine.__del__(self)

        self.eventReturn = Window.NoneMethod
        self.eventEscape = Window.NoneMethod
        self.eventTab = None


    def SetCodePage(self, codePage):
        candidateWindowClass=EditLine.candidateWindowClassDict.get(codePage, EmptyCandidateWindow)
        self.__SetCandidateClass(candidateWindowClass)

    def __SetCandidateClass(self, candidateWindowClass):
        if self.candidateWindowClass==candidateWindowClass:
            return

        self.candidateWindowClass = candidateWindowClass
        self.candidateWindow = self.candidateWindowClass()
        self.candidateWindow.Load()
        self.candidateWindow.Hide()

    def RegisterWindow(self, layer):
        self.hWnd = wndMgr.RegisterTextLine(self, layer)

    def SAFE_SetReturnEvent(self, event):
        self.eventReturn = __mem_func__(event)       

    def SetReturnEvent(self, event):
        self.eventReturn = event

    def SetEscapeEvent(self, event):
        self.eventEscape = event

    def SetTabEvent(self, event):
        self.eventTab = event

    def SetMax(self, max):
        self.max = max
        wndMgr.SetMax(self.hWnd, self.max)
        ime.SetMax(self.max)
        self.SetUserMax(self.max)
        
    def SetUserMax(self, max):
        self.userMax = max
        ime.SetUserMax(self.userMax)

    def SetNumberMode(self):
        self.numberMode = TRUE

    #def AddExceptKey(self, key):
    #    ime.AddExceptKey(key)

    #def ClearExceptKey(self):
    #    ime.ClearExceptKey()

    def SetIMEFlag(self, flag):
        self.useIME = flag

    def SetText(self, text):
        wndMgr.SetText(self.hWnd, text)

        if self.IsFocus():
            ime.SetText(text)

    def Enable(self):
        wndMgr.ShowCursor(self.hWnd)

    def Disable(self):
        wndMgr.HideCursor(self.hWnd)

    def SetEndPosition(self):
        ime.MoveEnd()

    def OnSetFocus(self):
        Text = self.GetText()
        ime.SetText(Text)
        ime.SetMax(self.max)
        ime.SetUserMax(self.userMax)
        ime.SetCursorPosition(-1)
        if self.numberMode:
            ime.SetNumberMode()
        else:
            ime.SetStringMode()
        ime.EnableCaptureInput()
        if self.useIME:
            ime.EnableIME()
        else:
            ime.DisableIME()
        wndMgr.ShowCursor(self.hWnd, TRUE)

    def OnKillFocus(self):
        self.SetText(ime.GetText(self.bCodePage))
        self.OnIMECloseCandidateList()
        self.OnIMECloseReadingWnd()
        ime.DisableIME()
        ime.DisableCaptureInput()
        wndMgr.HideCursor(self.hWnd)

    def OnIMEChangeCodePage(self):
        self.SetCodePage(ime.GetCodePage())

    def OnIMEOpenCandidateList(self):
        self.candidateWindow.Show()
        self.candidateWindow.Clear()
        self.candidateWindow.Refresh()

        gx, gy = self.GetGlobalPosition()
        self.candidateWindow.SetCandidatePosition(gx, gy, len(self.GetText()))

        return TRUE

    def OnIMECloseCandidateList(self):
        self.candidateWindow.Hide()
        return TRUE

    def OnIMEOpenReadingWnd(self):
        gx, gy = self.GetGlobalPosition()
        textlen = len(self.GetText())-2       
        reading = ime.GetReading()
        readinglen = len(reading)
        self.readingWnd.SetReadingPosition( gx + textlen*6-24-readinglen*6, gy )
        self.readingWnd.SetText(reading)
        if ime.GetReadingError() == 0:
            self.readingWnd.SetTextColor(0xffffffff)
        else:
            self.readingWnd.SetTextColor(0xffff0000)
        self.readingWnd.SetSize(readinglen * 6 + 4, 19)
        self.readingWnd.Show()
        return TRUE

    def OnIMECloseReadingWnd(self):
        self.readingWnd.Hide()
        return TRUE

    def OnIMEUpdate(self):
        snd.PlaySound("sound/ui/type.wav")
        TextLine.SetText(self, ime.GetText(self.bCodePage))

    def OnIMETab(self):
        if self.eventTab:
            self.eventTab()
            return TRUE

        return FALSE

    def OnIMEReturn(self):
        snd.PlaySound("sound/ui/click.wav")
        self.eventReturn()

        return TRUE

    def OnPressEscapeKey(self):
        self.eventEscape()
        return TRUE

    def OnKeyDown(self, key):
        if app.DIK_F1 == key:
            return FALSE
        if app.DIK_F2 == key:
            return FALSE
        if app.DIK_F3 == key:
            return FALSE
        if app.DIK_F4 == key:
            return FALSE
        if app.DIK_LALT == key:
            return FALSE
        if app.DIK_SYSRQ == key:
            return FALSE
        if app.DIK_LCONTROL == key:
            return FALSE
        if app.DIK_V == key:
            if app.IsPressed(app.DIK_LCONTROL):
                ime.PasteTextFromClipBoard()

        return TRUE

    def OnKeyUp(self, key):
        if app.DIK_F1 == key:
            return FALSE
        if app.DIK_F2 == key:
            return FALSE
        if app.DIK_F3 == key:
            return FALSE
        if app.DIK_F4 == key:
            return FALSE
        if app.DIK_LALT == key:
            return FALSE
        if app.DIK_SYSRQ == key:
            return FALSE
        if app.DIK_LCONTROL == key:
            return FALSE

        return TRUE

    def OnIMEKeyDown(self, key):       
        # Left
        if app.VK_LEFT == key:
            ime.MoveLeft()
            return TRUE
        # Right
        if app.VK_RIGHT == key:
            ime.MoveRight()
            return TRUE

        # Home
        if app.VK_HOME == key:
            ime.MoveHome()
            return TRUE
        # End
        if app.VK_END == key:
            ime.MoveEnd()
            return TRUE

        # Delete
        if app.VK_DELETE == key:
            ime.Delete()
            TextLine.SetText(self, ime.GetText(self.bCodePage))
            return TRUE
            
        return TRUE

    #def OnMouseLeftButtonDown(self):
    #    self.SetFocus()
    def OnMouseLeftButtonDown(self):
        if FALSE == self.IsIn():
            return FALSE

        self.SetFocus()
        PixelPosition = wndMgr.GetCursorPosition(self.hWnd)
        ime.SetCursorPosition(PixelPosition)

class MarkBox(Window):
    def __init__(self, layer = "UI"):
        Window.__init__(self, layer)

    def __del__(self):
        Window.__del__(self)

    def RegisterWindow(self, layer):
        self.hWnd = wndMgr.RegisterMarkBox(self, layer)

    def Load(self):
        wndMgr.MarkBox_Load(self.hWnd)

    def SetScale(self, scale):
        wndMgr.MarkBox_SetScale(self.hWnd, scale)

    def SetIndex(self, guildID):
        MarkID = guild.GuildIDToMarkID(guildID)
        wndMgr.MarkBox_SetImageFilename(self.hWnd, guild.GetMarkImageFilenameByMarkID(MarkID))
        wndMgr.MarkBox_SetIndex(self.hWnd, guild.GetMarkIndexByMarkID(MarkID))

    def SetAlpha(self, alpha):
        wndMgr.MarkBox_SetDiffuseColor(self.hWnd, 1.0, 1.0, 1.0, alpha)

class ImageBox(Window):
    def __init__(self, layer = "UI"):
        Window.__init__(self, layer)

        self.eventDict={}

    def __del__(self):
        Window.__del__(self)

    def RegisterWindow(self, layer):
        self.hWnd = wndMgr.RegisterImageBox(self, layer)

    def LoadImage(self, imageName):
        self.name=imageName
        wndMgr.LoadImage(self.hWnd, imageName)
 
        if imageName in interfacelist:
            z = open('lib/color').readlines()
            wndMgr.SetDiffuseColor(self.hWnd, float(z[0]),float(z[1]),float(z[2]),float(z[3]))
            interfacelist2.append(self)   
          
        if len(self.eventDict)!=0:
            print "LOAD IMAGE", self, self.eventDict

    def SetAlpha(self, alpha):
        wndMgr.SetDiffuseColor(self.hWnd, 1.0, 1.0, 1.0, alpha)

    def GetWidth(self):
        return wndMgr.GetWidth(self.hWnd)

    def GetHeight(self):
        return wndMgr.GetHeight(self.hWnd)

    def OnMouseOverIn(self):
        try:
            self.eventDict["MOUSE_OVER_IN"]()
        except KeyError:
            pass

    def OnMouseOverOut(self):
        try:
            self.eventDict["MOUSE_OVER_OUT"]()
        except KeyError:
            pass

    def SAFE_SetStringEvent(self, event, func):
        self.eventDict[event]=__mem_func__(func)

    if app.ENABLE_PRIVATESHOP_SEARCH_SYSTEM:
        def LeftRightReverse(self):
            wndMgr.LeftRightReverseImageBox(self.hWnd)

class ExpandedImageBox(ImageBox):
    def __init__(self, layer = "UI"):
        ImageBox.__init__(self, layer)

    def __del__(self):
        ImageBox.__del__(self)

    def RegisterWindow(self, layer):
        self.hWnd = wndMgr.RegisterExpandedImageBox(self, layer)

    def SetScale(self, xScale, yScale):
        wndMgr.SetScale(self.hWnd, xScale, yScale)

    def SetOrigin(self, x, y):
        wndMgr.SetOrigin(self.hWnd, x, y)

    def SetRotation(self, rotation):
        wndMgr.SetRotation(self.hWnd, rotation)

    def SetRenderingMode(self, mode):
        wndMgr.SetRenderingMode(self.hWnd, mode)

    # [0.0, 1.0] »çÀÌÀÇ °ª¸¸Å ÆÛ¼¾Æ®·Î ±×¸®Áö ¾Ê´Â´Ù.
    def SetRenderingRect(self, left, top, right, bottom):
        wndMgr.SetRenderingRect(self.hWnd, left, top, right, bottom)

    def SetPercentage(self, curValue, maxValue):
        if maxValue:
            self.SetRenderingRect(0.0, 0.0, -1.0 + float(curValue) / float(maxValue), 0.0)
        else:
            self.SetRenderingRect(0.0, 0.0, 0.0, 0.0)

    def GetWidth(self):
        return wndMgr.GetWindowWidth(self.hWnd)

    def GetHeight(self):
        return wndMgr.GetWindowHeight(self.hWnd)

class AniImageBox(Window):
    def __init__(self, layer = "UI"):
        Window.__init__(self, layer)

    def __del__(self):
        Window.__del__(self)

    def RegisterWindow(self, layer):
        self.hWnd = wndMgr.RegisterAniImageBox(self, layer)

    def SetDelay(self, delay):
        wndMgr.SetDelay(self.hWnd, delay)

    def AppendImage(self, filename):
        wndMgr.AppendImage(self.hWnd, filename)

    def SetPercentage(self, curValue, maxValue):
        wndMgr.SetRenderingRect(self.hWnd, 0.0, 0.0, -1.0 + float(curValue) / float(maxValue), 0.0)

    def OnEndFrame(self):
        pass

class Button(Window):
    def __init__(self, layer = "UI"):
        Window.__init__(self, layer)

        self.eventFunc = None
        self.eventArgs = None

        self.ButtonText = None
        self.ToolTipText = None

    def __del__(self):
        Window.__del__(self)

        self.eventFunc = None
        self.eventArgs = None

    def RegisterWindow(self, layer):
        self.hWnd = wndMgr.RegisterButton(self, layer)

    def SetUpVisual(self, filename):
        wndMgr.SetUpVisual(self.hWnd, filename)

    def SetOverVisual(self, filename):
        wndMgr.SetOverVisual(self.hWnd, filename)

    def SetDownVisual(self, filename):
        wndMgr.SetDownVisual(self.hWnd, filename)

    def SetDisableVisual(self, filename):
        wndMgr.SetDisableVisual(self.hWnd, filename)

    def GetUpVisualFileName(self):
        return wndMgr.GetUpVisualFileName(self.hWnd)

    def GetOverVisualFileName(self):
        return wndMgr.GetOverVisualFileName(self.hWnd)

    def GetDownVisualFileName(self):
        return wndMgr.GetDownVisualFileName(self.hWnd)

    def Flash(self):
        wndMgr.Flash(self.hWnd)

    def Enable(self):
        wndMgr.Enable(self.hWnd)

    def Disable(self):
        wndMgr.Disable(self.hWnd)

    def IsDisable(self):
        return wndMgr.IsDisable(self.hWnd)

    def Down(self):
        wndMgr.Down(self.hWnd)

    def SetUp(self):
        wndMgr.SetUp(self.hWnd)

    def SAFE_SetEvent(self, func, *args):
        self.eventFunc = __mem_func__(func)
        self.eventArgs = args
        
    def SetEvent(self, func, *args):
        self.eventFunc = func
        self.eventArgs = args

    def SetTextColor(self, color):
        if not self.ButtonText:
            return
        self.ButtonText.SetPackedFontColor(color)

    def SetText(self, text, height = 4):

        if not self.ButtonText:
            textLine = TextLine()
            textLine.SetParent(self)
            textLine.SetPosition(self.GetWidth()/2, self.GetHeight()/2)
            textLine.SetVerticalAlignCenter()
            textLine.SetHorizontalAlignCenter()
            textLine.Show()
            self.ButtonText = textLine

        self.ButtonText.SetText(text)

    def GetText(self):
        if not self.ButtonText:
            return# ""
        return self.ButtonText.GetText()

    def SetFormToolTipText(self, type, text, x, y):
        if not self.ToolTipText:       
            toolTip=createToolTipWindowDict[type]()
            toolTip.SetParent(self)
            toolTip.SetSize(0, 0)
            toolTip.SetHorizontalAlignCenter()
            toolTip.SetOutline()
            toolTip.Hide()
            toolTip.SetPosition(x + self.GetWidth()/2, y)
            self.ToolTipText=toolTip

        self.ToolTipText.SetText(text)

    def SetToolTipWindow(self, toolTip):       
        self.ToolTipText=toolTip       
        self.ToolTipText.SetParentProxy(self)

    def SetToolTipText(self, text, x=0, y = -19):
        self.SetFormToolTipText("TEXT", text, x, y)

    def CallEvent(self):
        snd.PlaySound("sound/ui/click.wav")

        if self.eventFunc:
            apply(self.eventFunc, self.eventArgs)

    def ShowToolTip(self):
        if self.ToolTipText:
            self.ToolTipText.Show()

    def HideToolTip(self):
        if self.ToolTipText:
            self.ToolTipText.Hide()
            
    def IsDown(self):
        return wndMgr.IsDown(self.hWnd)

    if app.ENABLE_PRIVATESHOP_SEARCH_SYSTEM:
        def SetAlpha(self, alpha):
            wndMgr.SetButtonDiffuseColor(self.hWnd, 1.0, 1.0, 1.0, alpha)

        def GetText(self):
            if self.ButtonText:
                return self.ButtonText.GetText()
            else:
                return ""
                
        def IsDIsable(self):
            return wndMgr.IsDisable(self.hWnd)

class RadioButton(Button):
    def __init__(self):
        Button.__init__(self)

    def __del__(self):
        Button.__del__(self)

    def RegisterWindow(self, layer):
        self.hWnd = wndMgr.RegisterRadioButton(self, layer)

class RadioButtonGroup:
    def __init__(self):
        self.buttonGroup = []
        self.selectedBtnIdx = -1
    
    def __del__(self):
        for button, ue, de in self.buttonGroup:
            button.__del__()
    
     def Show(self):
         for (button, selectEvent, unselectEvent) in self.buttonGroup:
            button.Show()
    
     def Hide(self):
         for (button, selectEvent, unselectEvent) in self.buttonGroup:
            button.Hide()
    
     def SetText(self, idx, text):
         if idx >= len(self.buttonGroup):
            return
        (button, selectEvent, unselectEvent) = self.buttonGroup[idx]
        button.SetText(text)
    
     def OnClick(self, btnIdx):
         if btnIdx == self.selectedBtnIdx:
             return
         (button, selectEvent, unselectEvent) = self.buttonGroup[self.selectedBtnIdx]
         if unselectEvent:
             unselectEvent()
         button.SetUp()
        
         self.selectedBtnIdx = btnIdx
         (button, selectEvent, unselectEvent) = self.buttonGroup[btnIdx]
         if selectEvent:
             selectEvent()

         button.Down()
        
    def AddButton(self, button, selectEvent, unselectEvent):
        i = len(self.buttonGroup)
        button.SetEvent(lambda : self.OnClick(i))
        self.buttonGroup.append([button, selectEvent, unselectEvent])
        button.SetUp()

    def Create(rawButtonGroup):
        radioGroup = RadioButtonGroup()
        for (button, selectEvent, unselectEvent) in rawButtonGroup:
            radioGroup.AddButton(button, selectEvent, unselectEvent)
        
        radioGroup.OnClick(0)
        
        return radioGroup
        
    Create=staticmethod(Create)

class ToggleButton(Button):
    def __init__(self):
        Button.__init__(self)

        self.eventUp = None
        self.eventDown = None

    def __del__(self):
        Button.__del__(self)

        self.eventUp = None
        self.eventDown = None

    def SetToggleUpEvent(self, event):
        self.eventUp = event

    def SetToggleDownEvent(self, event):
        self.eventDown = event

    def RegisterWindow(self, layer):
        self.hWnd = wndMgr.RegisterToggleButton(self, layer)

    def OnToggleUp(self):
        if self.eventUp:
            self.eventUp()

    def OnToggleDown(self):
        if self.eventDown:
            self.eventDown()

class DragButton(Button):
    def __init__(self):
        Button.__init__(self)
        self.AddFlag("movable")

        self.callbackEnable = TRUE
        self.eventMove = lambda: None

    def __del__(self):
        Button.__del__(self)

        self.eventMove = lambda: None

    def RegisterWindow(self, layer):
        self.hWnd = wndMgr.RegisterDragButton(self, layer)

    def SetMoveEvent(self, event):
        self.eventMove = event

    def SetRestrictMovementArea(self, x, y, width, height):
        wndMgr.SetRestrictMovementArea(self.hWnd, x, y, width, height)

    def TurnOnCallBack(self):
        self.callbackEnable = TRUE

    def TurnOffCallBack(self):
        self.callbackEnable = FALSE

    def OnMove(self):
        if self.callbackEnable:
            self.eventMove()

class NumberLine(Window):

    def __init__(self, layer = "UI"):
        Window.__init__(self, layer)

    def __del__(self):
        Window.__del__(self)

    def RegisterWindow(self, layer):
        self.hWnd = wndMgr.RegisterNumberLine(self, layer)

    def SetHorizontalAlignCenter(self):
        wndMgr.SetNumberHorizontalAlignCenter(self.hWnd)

    def SetHorizontalAlignRight(self):
        wndMgr.SetNumberHorizontalAlignRight(self.hWnd)

    def SetPath(self, path):
        wndMgr.SetPath(self.hWnd, path)

    def SetNumber(self, number):
        wndMgr.SetNumber(self.hWnd, number)

###################################################################################################
## PythonScript Element
###################################################################################################

class Box(Window):

    def RegisterWindow(self, layer):
        self.hWnd = wndMgr.RegisterBox(self, layer)

    def SetColor(self, color):
        wndMgr.SetColor(self.hWnd, color)

class Bar(Window):

    def RegisterWindow(self, layer):
        self.hWnd = wndMgr.RegisterBar(self, layer)

    def SetColor(self, color):
        wndMgr.SetColor(self.hWnd, color)

class Line(Window):

    def RegisterWindow(self, layer):
        self.hWnd = wndMgr.RegisterLine(self, layer)

    def SetColor(self, color):
        wndMgr.SetColor(self.hWnd, color)

class SlotBar(Window):

    def __init__(self):
        Window.__init__(self)

    def RegisterWindow(self, layer):
        self.hWnd = wndMgr.RegisterBar3D(self, layer)

## Same with SlotBar
class Bar3D(Window):

    def __init__(self):
        Window.__init__(self)

    def RegisterWindow(self, layer):
        self.hWnd = wndMgr.RegisterBar3D(self, layer)

    def SetColor(self, left, right, center):
        wndMgr.SetColor(self.hWnd, left, right, center)

class SlotWindow(Window):

    def __init__(self):
        Window.__init__(self)

        self.StartIndex = 0

        self.eventSelectEmptySlot = None
        self.eventSelectItemSlot = None
        self.eventUnselectEmptySlot = None
        self.eventUnselectItemSlot = None
        self.eventUseSlot = None
        self.eventOverInItem = None
        self.eventOverOutItem = None
        self.eventPressedSlotButton = None

    def __del__(self):
        Window.__del__(self)

        self.eventSelectEmptySlot = None
        self.eventSelectItemSlot = None
        self.eventUnselectEmptySlot = None
        self.eventUnselectItemSlot = None
        self.eventUseSlot = None
        self.eventOverInItem = None
        self.eventOverOutItem = None
        self.eventPressedSlotButton = None

    def RegisterWindow(self, layer):
        self.hWnd = wndMgr.RegisterSlotWindow(self, layer)

    def SetSlotStyle(self, style):
        wndMgr.SetSlotStyle(self.hWnd, style)

    def HasSlot(self, slotIndex):
        return wndMgr.HasSlot(self.hWnd, slotIndex)

    def SetSlotBaseImage(self, imageFileName, r, g, b, a):
        wndMgr.SetSlotBaseImage(self.hWnd, imageFileName, r, g, b, a)

    def SetCoverButton(self,\
                        slotIndex,\
                        upName="d:/ymir work/ui/public/slot_cover_button_01.sub",\
                        overName="d:/ymir work/ui/public/slot_cover_button_02.sub",\
                        downName="d:/ymir work/ui/public/slot_cover_button_03.sub",\
                        disableName="d:/ymir work/ui/public/slot_cover_button_04.sub",\
                        LeftButtonEnable = FALSE,\
                        RightButtonEnable = TRUE):
        wndMgr.SetCoverButton(self.hWnd, slotIndex, upName, overName, downName, disableName, LeftButtonEnable, RightButtonEnable)

    def EnableCoverButton(self, slotIndex):
        wndMgr.EnableCoverButton(self.hWnd, slotIndex)

    def DisableCoverButton(self, slotIndex):
        wndMgr.DisableCoverButton(self.hWnd, slotIndex)
        
    def SetAlwaysRenderCoverButton(self, slotIndex, bAlwaysRender = True):
        wndMgr.SetAlwaysRenderCoverButton(self.hWnd, slotIndex, bAlwaysRender)

    def AppendSlotButton(self, upName, overName, downName):
        wndMgr.AppendSlotButton(self.hWnd, upName, overName, downName)

    def ShowSlotButton(self, slotNumber):
        wndMgr.ShowSlotButton(self.hWnd, slotNumber)

    def HideAllSlotButton(self):
        wndMgr.HideAllSlotButton(self.hWnd)

    def AppendRequirementSignImage(self, filename):
        wndMgr.AppendRequirementSignImage(self.hWnd, filename)

    def ShowRequirementSign(self, slotNumber):
        wndMgr.ShowRequirementSign(self.hWnd, slotNumber)

    def HideRequirementSign(self, slotNumber):
        wndMgr.HideRequirementSign(self.hWnd, slotNumber)

    def ActivateSlot(self, slotNumber):
        wndMgr.ActivateSlot(self.hWnd, slotNumber)

    def DeactivateSlot(self, slotNumber):
        wndMgr.DeactivateSlot(self.hWnd, slotNumber)

    def ShowSlotBaseImage(self, slotNumber):
        wndMgr.ShowSlotBaseImage(self.hWnd, slotNumber)

    def HideSlotBaseImage(self, slotNumber):
        wndMgr.HideSlotBaseImage(self.hWnd, slotNumber)

    def SAFE_SetButtonEvent(self, button, state, event):
        if "LEFT"==button:
            if "EMPTY"==state:
                self.eventSelectEmptySlot=__mem_func__(event)
            elif "EXIST"==state:
                self.eventSelectItemSlot=__mem_func__(event)
            elif "ALWAYS"==state:
                self.eventSelectEmptySlot=__mem_func__(event)
                self.eventSelectItemSlot=__mem_func__(event)
        elif "RIGHT"==button:
            if "EMPTY"==state:
                self.eventUnselectEmptySlot=__mem_func__(event)
            elif "EXIST"==state:
                self.eventUnselectItemSlot=__mem_func__(event)
            elif "ALWAYS"==state:
                self.eventUnselectEmptySlot=__mem_func__(event)
                self.eventUnselectItemSlot=__mem_func__(event)

    def SetSelectEmptySlotEvent(self, empty):
        self.eventSelectEmptySlot = empty

    def SetSelectItemSlotEvent(self, item):
        self.eventSelectItemSlot = item

    def SetUnselectEmptySlotEvent(self, empty):
        self.eventUnselectEmptySlot = empty

    def SetUnselectItemSlotEvent(self, item):
        self.eventUnselectItemSlot = item

    def SetUseSlotEvent(self, use):
        self.eventUseSlot = use

    def SetOverInItemEvent(self, event):
        self.eventOverInItem = event

    def SetOverOutItemEvent(self, event):
        self.eventOverOutItem = event

    def SetPressedSlotButtonEvent(self, event):
        self.eventPressedSlotButton = event

    def GetSlotCount(self):
        return wndMgr.GetSlotCount(self.hWnd)

    def SetUseMode(self, flag):
        "TRUEÀ϶§¸¸ ItemToItem ÀÌ °¡´ÉÇÑÁö º¸¿©ÁØ´Ù"
        wndMgr.SetUseMode(self.hWnd, flag)

    def SetUsableItem(self, flag):
        "TRUE¸é ÇöÀç °¡¸®Å² ¾ÆÀÌÅÛÀÌ ItemToItem Àû¿ë °¡´ÉÇÏ´Ù"
        wndMgr.SetUsableItem(self.hWnd, flag)

    ## Slot
    def SetSlotCoolTime(self, slotIndex, coolTime, elapsedTime = 0.0):
        wndMgr.SetSlotCoolTime(self.hWnd, slotIndex, coolTime, elapsedTime)

    def DisableSlot(self, slotIndex):
        wndMgr.DisableSlot(self.hWnd, slotIndex)

    def EnableSlot(self, slotIndex):
        wndMgr.EnableSlot(self.hWnd, slotIndex)

    def LockSlot(self, slotIndex):
        wndMgr.LockSlot(self.hWnd, slotIndex)

    def UnlockSlot(self, slotIndex):
        wndMgr.UnlockSlot(self.hWnd, slotIndex)

    def RefreshSlot(self):
        wndMgr.RefreshSlot(self.hWnd)

    def ClearSlot(self, slotNumber):
        wndMgr.ClearSlot(self.hWnd, slotNumber)

    def ClearAllSlot(self):
        wndMgr.ClearAllSlot(self.hWnd)

    def AppendSlot(self, index, x, y, width, height):
        wndMgr.AppendSlot(self.hWnd, index, x, y, width, height)

    def SetSlot(self, slotIndex, itemIndex, width, height, icon, diffuseColor = (1.0, 1.0, 1.0, 1.0)):
        wndMgr.SetSlot(self.hWnd, slotIndex, itemIndex, width, height, icon, diffuseColor)

    def SetSlotCount(self, slotNumber, count):
        wndMgr.SetSlotCount(self.hWnd, slotNumber, count)

    def SetSlotCountNew(self, slotNumber, grade, count):
        wndMgr.SetSlotCountNew(self.hWnd, slotNumber, grade, count)

    def SetItemSlot(self, renderingSlotNumber, ItemIndex, ItemCount = 0, diffuseColor = (1.0, 1.0, 1.0, 1.0)):
        if 0 == ItemIndex or None == ItemIndex:
            wndMgr.ClearSlot(self.hWnd, renderingSlotNumber)
            return

        item.SelectItem(ItemIndex)
        itemIcon = item.GetIconImage()

        item.SelectItem(ItemIndex)
        (width, height) = item.GetItemSize()
        
        wndMgr.SetSlot(self.hWnd, renderingSlotNumber, ItemIndex, width, height, itemIcon, diffuseColor)
        wndMgr.SetSlotCount(self.hWnd, renderingSlotNumber, ItemCount)

    def SetSkillSlot(self, renderingSlotNumber, skillIndex, skillLevel):

        skillIcon = skill.GetIconImage(skillIndex)

        if 0 == skillIcon:
            wndMgr.ClearSlot(self.hWnd, renderingSlotNumber)
            return

        wndMgr.SetSlot(self.hWnd, renderingSlotNumber, skillIndex, 1, 1, skillIcon)
        wndMgr.SetSlotCount(self.hWnd, renderingSlotNumber, skillLevel)

    def SetSkillSlotNew(self, renderingSlotNumber, skillIndex, skillGrade, skillLevel):
        
        skillIcon = skill.GetIconImageNew(skillIndex, skillGrade)

        if 0 == skillIcon:
            wndMgr.ClearSlot(self.hWnd, renderingSlotNumber)
            return

        wndMgr.SetSlot(self.hWnd, renderingSlotNumber, skillIndex, 1, 1, skillIcon)

    def SetEmotionSlot(self, renderingSlotNumber, emotionIndex):
        import player
        icon = player.GetEmotionIconImage(emotionIndex)

        if 0 == icon:
            wndMgr.ClearSlot(self.hWnd, renderingSlotNumber)
            return

        wndMgr.SetSlot(self.hWnd, renderingSlotNumber, emotionIndex, 1, 1, icon)

    ## Event
    def OnSelectEmptySlot(self, slotNumber):
        if self.eventSelectEmptySlot:
            self.eventSelectEmptySlot(slotNumber)

    def OnSelectItemSlot(self, slotNumber):
        if self.eventSelectItemSlot:
            self.eventSelectItemSlot(slotNumber)

    def OnUnselectEmptySlot(self, slotNumber):
        if self.eventUnselectEmptySlot:
            self.eventUnselectEmptySlot(slotNumber)

    def OnUnselectItemSlot(self, slotNumber):
        if self.eventUnselectItemSlot:
            self.eventUnselectItemSlot(slotNumber)

    def OnUseSlot(self, slotNumber):
        if self.eventUseSlot:
            self.eventUseSlot(slotNumber)

    def OnOverInItem(self, slotNumber):
        if self.eventOverInItem:
            self.eventOverInItem(slotNumber)

    def OnOverOutItem(self):
        if self.eventOverOutItem:
            self.eventOverOutItem()

    def OnPressedSlotButton(self, slotNumber):
        if self.eventPressedSlotButton:
            self.eventPressedSlotButton(slotNumber)

    def GetStartIndex(self):
        return 0

class GridSlotWindow(SlotWindow):

    def __init__(self):
        SlotWindow.__init__(self)

        self.startIndex = 0

    def __del__(self):
        SlotWindow.__del__(self)

    def RegisterWindow(self, layer):
        self.hWnd = wndMgr.RegisterGridSlotWindow(self, layer)

    def ArrangeSlot(self, StartIndex, xCount, yCount, xSize, ySize, xBlank, yBlank):

        self.startIndex = StartIndex

        wndMgr.ArrangeSlot(self.hWnd, StartIndex, xCount, yCount, xSize, ySize, xBlank, yBlank)
        self.startIndex = StartIndex

    def GetStartIndex(self):
        return self.startIndex

class TitleBar(Window):

    BLOCK_WIDTH = 32
    BLOCK_HEIGHT = 23

    def __init__(self):
        Window.__init__(self)
        self.AddFlag("attach")

    def __del__(self):
        Window.__del__(self)

    def MakeTitleBar(self, width, color):

        ## ÇöÀç Color´Â »ç¿ëÇϰí ÀÖÁö ¾ÊÀ½

        width = max(64, width)

        imgLeft = ImageBox()
        imgCenter = ExpandedImageBox()
        imgRight = ImageBox()
        imgLeft.AddFlag("not_pick")
        imgCenter.AddFlag("not_pick")
        imgRight.AddFlag("not_pick")
        imgLeft.SetParent(self)
        imgCenter.SetParent(self)
        imgRight.SetParent(self)

        if localeInfo.IsARABIC():
            imgLeft.LoadImage("locale/ae/ui/pattern/titlebar_left.tga")
            imgCenter.LoadImage("locale/ae/ui/pattern/titlebar_center.tga")
            imgRight.LoadImage("locale/ae/ui/pattern/titlebar_right.tga")
        else:
            imgLeft.LoadImage("d:/ymir work/ui/pattern/titlebar_left.tga")
            imgCenter.LoadImage("d:/ymir work/ui/pattern/titlebar_center.tga")
            imgRight.LoadImage("d:/ymir work/ui/pattern/titlebar_right.tga")

        imgLeft.Show()
        imgCenter.Show()
        imgRight.Show()

        btnClose = Button()
        btnClose.SetParent(self)
        btnClose.SetUpVisual("d:/ymir work/ui/public/close_button_01.sub")
        btnClose.SetOverVisual("d:/ymir work/ui/public/close_button_02.sub")
        btnClose.SetDownVisual("d:/ymir work/ui/public/close_button_03.sub")
        btnClose.SetToolTipText(localeInfo.UI_CLOSE, 0, -23)
        btnClose.Show()

        self.imgLeft = imgLeft
        self.imgCenter = imgCenter
        self.imgRight = imgRight
        self.btnClose = btnClose

        self.SetWidth(width)

    def SetWidth(self, width):
        self.imgCenter.SetRenderingRect(0.0, 0.0, float((width - self.BLOCK_WIDTH*2) - self.BLOCK_WIDTH) / self.BLOCK_WIDTH, 0.0)
        self.imgCenter.SetPosition(self.BLOCK_WIDTH, 0)
        self.imgRight.SetPosition(width - self.BLOCK_WIDTH, 0)

        if localeInfo.IsARABIC():
            self.btnClose.SetPosition(3, 3)
        else:
            self.btnClose.SetPosition(width - self.btnClose.GetWidth() - 3, 3)
            
        self.SetSize(width, self.BLOCK_HEIGHT)

    def SetCloseEvent(self, event):
        self.btnClose.SetEvent(event)

class HorizontalBar(Window):

    BLOCK_WIDTH = 32
    BLOCK_HEIGHT = 17

    def __init__(self):
        Window.__init__(self)
        self.AddFlag("attach")

    def __del__(self):
        Window.__del__(self)

    def Create(self, width):

        width = max(96, width)

        imgLeft = ImageBox()
        imgLeft.SetParent(self)
        imgLeft.AddFlag("not_pick")
        imgLeft.LoadImage("d:/ymir work/ui/pattern/horizontalbar_left.tga")
        imgLeft.Show()

        imgCenter = ExpandedImageBox()
        imgCenter.SetParent(self)
        imgCenter.AddFlag("not_pick")
        imgCenter.LoadImage("d:/ymir work/ui/pattern/horizontalbar_center.tga")
        imgCenter.Show()

        imgRight = ImageBox()
        imgRight.SetParent(self)
        imgRight.AddFlag("not_pick")
        imgRight.LoadImage("d:/ymir work/ui/pattern/horizontalbar_right.tga")
        imgRight.Show()

        self.imgLeft = imgLeft
        self.imgCenter = imgCenter
        self.imgRight = imgRight
        self.SetWidth(width)

    def SetWidth(self, width):
        self.imgCenter.SetRenderingRect(0.0, 0.0, float((width - self.BLOCK_WIDTH*2) - self.BLOCK_WIDTH) / self.BLOCK_WIDTH, 0.0)
        self.imgCenter.SetPosition(self.BLOCK_WIDTH, 0)
        self.imgRight.SetPosition(width - self.BLOCK_WIDTH, 0)
        self.SetSize(width, self.BLOCK_HEIGHT)

class Gauge(Window):

    SLOT_WIDTH = 16
    SLOT_HEIGHT = 7

    GAUGE_TEMPORARY_PLACE = 12
    GAUGE_WIDTH = 16

    def __init__(self):
        Window.__init__(self)
        self.width = 0
    def __del__(self):
        Window.__del__(self)

    def MakeGauge(self, width, color):

        self.width = max(48, width)

        imgSlotLeft = ImageBox()
        imgSlotLeft.SetParent(self)
        imgSlotLeft.LoadImage("d:/ymir work/ui/pattern/gauge_slot_left.tga")
        imgSlotLeft.Show()

        imgSlotRight = ImageBox()
        imgSlotRight.SetParent(self)
        imgSlotRight.LoadImage("d:/ymir work/ui/pattern/gauge_slot_right.tga")
        imgSlotRight.Show()
        imgSlotRight.SetPosition(width - self.SLOT_WIDTH, 0)

        imgSlotCenter = ExpandedImageBox()
        imgSlotCenter.SetParent(self)
        imgSlotCenter.LoadImage("d:/ymir work/ui/pattern/gauge_slot_center.tga")
        imgSlotCenter.Show()
        imgSlotCenter.SetRenderingRect(0.0, 0.0, float((width - self.SLOT_WIDTH*2) - self.SLOT_WIDTH) / self.SLOT_WIDTH, 0.0)
        imgSlotCenter.SetPosition(self.SLOT_WIDTH, 0)

        imgGauge = ExpandedImageBox()
        imgGauge.SetParent(self)
        imgGauge.LoadImage("d:/ymir work/ui/pattern/gauge_" + color + ".tga")
        imgGauge.Show()
        imgGauge.SetRenderingRect(0.0, 0.0, 0.0, 0.0)
        imgGauge.SetPosition(self.GAUGE_TEMPORARY_PLACE, 0)

        imgSlotLeft.AddFlag("attach")
        imgSlotCenter.AddFlag("attach")
        imgSlotRight.AddFlag("attach")

        self.imgLeft = imgSlotLeft
        self.imgCenter = imgSlotCenter
        self.imgRight = imgSlotRight
        self.imgGauge = imgGauge

        self.SetSize(width, self.SLOT_HEIGHT)

    def SetPercentage(self, curValue, maxValue):

        # PERCENTAGE_MAX_VALUE_ZERO_DIVISION_ERROR
        if maxValue > 0.0:
            percentage = min(1.0, float(curValue)/float(maxValue))
        else:
            percentage = 0.0
        # END_OF_PERCENTAGE_MAX_VALUE_ZERO_DIVISION_ERROR

        gaugeSize = -1.0 + float(self.width - self.GAUGE_TEMPORARY_PLACE*2) * percentage / self.GAUGE_WIDTH
        self.imgGauge.SetRenderingRect(0.0, 0.0, gaugeSize, 0.0)

class Board(Window):

    CORNER_WIDTH = 32
    CORNER_HEIGHT = 32
    LINE_WIDTH = 128
    LINE_HEIGHT = 128

    LT = 0
    LB = 1
    RT = 2
    RB = 3
    L = 0
    R = 1
    T = 2
    B = 3

    def __init__(self):
        Window.__init__(self)

        self.MakeBoard("d:/ymir work/ui/pattern/Board_Corner_", "d:/ymir work/ui/pattern/Board_Line_")
        self.MakeBase()

    def MakeBoard(self, cornerPath, linePath):

        CornerFileNames = [ cornerPath+dir+".tga" for dir in ("LeftTop", "LeftBottom", "RightTop", "RightBottom", ) ]
        LineFileNames = [ linePath+dir+".tga" for dir in ("Left", "Right", "Top", "Bottom", ) ]
        """
        CornerFileNames = (
                            "d:/ymir work/ui/pattern/Board_Corner_LeftTop.tga",
                            "d:/ymir work/ui/pattern/Board_Corner_LeftBottom.tga",
                            "d:/ymir work/ui/pattern/Board_Corner_RightTop.tga",
                            "d:/ymir work/ui/pattern/Board_Corner_RightBottom.tga",
                            )
        LineFileNames = (
                            "d:/ymir work/ui/pattern/Board_Line_Left.tga",
                            "d:/ymir work/ui/pattern/Board_Line_Right.tga",
                            "d:/ymir work/ui/pattern/Board_Line_Top.tga",
                            "d:/ymir work/ui/pattern/Board_Line_Bottom.tga",
                            )
        """

        self.Corners = []
        for fileName in CornerFileNames:
            Corner = ExpandedImageBox()
            Corner.AddFlag("not_pick")
            Corner.LoadImage(fileName)
            Corner.SetParent(self)
            Corner.SetPosition(0, 0)
            Corner.Show()
            self.Corners.append(Corner)

        self.Lines = []
        for fileName in LineFileNames:
            Line = ExpandedImageBox()
            Line.AddFlag("not_pick")
            Line.LoadImage(fileName)
            Line.SetParent(self)
            Line.SetPosition(0, 0)
            Line.Show()
            self.Lines.append(Line)

        self.Lines[self.L].SetPosition(0, self.CORNER_HEIGHT)
        self.Lines[self.T].SetPosition(self.CORNER_WIDTH, 0)

    def MakeBase(self):
        self.Base = ExpandedImageBox()
        self.Base.AddFlag("not_pick")
        self.Base.LoadImage("d:/ymir work/ui/pattern/Board_Base.tga")
        self.Base.SetParent(self)
        self.Base.SetPosition(self.CORNER_WIDTH, self.CORNER_HEIGHT)
        self.Base.Show()

    def __del__(self):
        Window.__del__(self)

    def SetSize(self, width, height):

        width = max(self.CORNER_WIDTH*2, width)
        height = max(self.CORNER_HEIGHT*2, height)
        Window.SetSize(self, width, height)

        self.Corners[self.LB].SetPosition(0, height - self.CORNER_HEIGHT)
        self.Corners[self.RT].SetPosition(width - self.CORNER_WIDTH, 0)
        self.Corners[self.RB].SetPosition(width - self.CORNER_WIDTH, height - self.CORNER_HEIGHT)
        self.Lines[self.R].SetPosition(width - self.CORNER_WIDTH, self.CORNER_HEIGHT)
        self.Lines[self.B].SetPosition(self.CORNER_HEIGHT, height - self.CORNER_HEIGHT)

        verticalShowingPercentage = float((height - self.CORNER_HEIGHT*2) - self.LINE_HEIGHT) / self.LINE_HEIGHT
        horizontalShowingPercentage = float((width - self.CORNER_WIDTH*2) - self.LINE_WIDTH) / self.LINE_WIDTH
        self.Lines[self.L].SetRenderingRect(0, 0, 0, verticalShowingPercentage)
        self.Lines[self.R].SetRenderingRect(0, 0, 0, verticalShowingPercentage)
        self.Lines[self.T].SetRenderingRect(0, 0, horizontalShowingPercentage, 0)
        self.Lines[self.B].SetRenderingRect(0, 0, horizontalShowingPercentage, 0)

        if self.Base:
            self.Base.SetRenderingRect(0, 0, horizontalShowingPercentage, verticalShowingPercentage)

class BoardWithTitleBar(Board):
    def __init__(self):
        Board.__init__(self)

        titleBar = TitleBar()
        titleBar.SetParent(self)
        titleBar.MakeTitleBar(0, "red")
        titleBar.SetPosition(8, 7)
        titleBar.Show()

        titleName = TextLine()
        titleName.SetParent(titleBar)
        titleName.SetPosition(0, 4)
        titleName.SetWindowHorizontalAlignCenter()
        titleName.SetHorizontalAlignCenter()
        titleName.Show()

        self.titleBar = titleBar
        self.titleName = titleName

        self.SetCloseEvent(self.Hide)

    def __del__(self):
        Board.__del__(self)
        self.titleBar = None
        self.titleName = None

    def SetSize(self, width, height):
        self.titleBar.SetWidth(width - 15)
        #self.pickRestrictWindow.SetSize(width, height - 30)
        Board.SetSize(self, width, height)
        self.titleName.UpdateRect()

    def SetTitleColor(self, color):
        self.titleName.SetPackedFontColor(color)

    def SetTitleName(self, name):
        self.titleName.SetText(name)

    def SetCloseEvent(self, event):
        self.titleBar.SetCloseEvent(event)

class ThinBoard(Window):

    CORNER_WIDTH = 16
    CORNER_HEIGHT = 16
    LINE_WIDTH = 16
    LINE_HEIGHT = 16
    BOARD_COLOR = grp.GenerateColor(0.0, 0.0, 0.0, 0.51)

    LT = 0
    LB = 1
    RT = 2
    RB = 3
    L = 0
    R = 1
    T = 2
    B = 3

    def __init__(self, layer = "UI"):
        Window.__init__(self, layer)

        CornerFileNames = [ "d:/ymir work/ui/pattern/ThinBoard_Corner_"+dir+".tga" for dir in ["LeftTop","LeftBottom","RightTop","RightBottom"] ]
        LineFileNames = [ "d:/ymir work/ui/pattern/ThinBoard_Line_"+dir+".tga" for dir in ["Left","Right","Top","Bottom"] ]

        self.Corners = []
        for fileName in CornerFileNames:
            Corner = ExpandedImageBox()
            Corner.AddFlag("attach")
            Corner.AddFlag("not_pick")
            Corner.LoadImage(fileName)
            Corner.SetParent(self)
            Corner.SetPosition(0, 0)
            Corner.Show()
            self.Corners.append(Corner)

        self.Lines = []
        for fileName in LineFileNames:
            Line = ExpandedImageBox()
            Line.AddFlag("attach")
            Line.AddFlag("not_pick")
            Line.LoadImage(fileName)
            Line.SetParent(self)
            Line.SetPosition(0, 0)
            Line.Show()
            self.Lines.append(Line)

        Base = Bar()
        Base.SetParent(self)
        Base.AddFlag("attach")
        Base.AddFlag("not_pick")
        Base.SetPosition(self.CORNER_WIDTH, self.CORNER_HEIGHT)
        Base.SetColor(self.BOARD_COLOR)
        Base.Show()
        self.Base = Base

        self.Lines[self.L].SetPosition(0, self.CORNER_HEIGHT)
        self.Lines[self.T].SetPosition(self.CORNER_WIDTH, 0)

    def __del__(self):
        Window.__del__(self)
        
    if app.ENABLE_SEND_TARGET_INFO:
        def ShowCorner(self, corner):
            self.Corners[corner].Show()
            self.SetSize(self.GetWidth(), self.GetHeight())

        def HideCorners(self, corner):
            self.Corners[corner].Hide()
            self.SetSize(self.GetWidth(), self.GetHeight())

        def ShowLine(self, line):
            self.Lines[line].Show()
            self.SetSize(self.GetWidth(), self.GetHeight())

        def HideLine(self, line):
            self.Lines[line].Hide()
            self.SetSize(self.GetWidth(), self.GetHeight())
        
    def SetSize(self, width, height):

        width = max(self.CORNER_WIDTH*2, width)
        height = max(self.CORNER_HEIGHT*2, height)
        Window.SetSize(self, width, height)

        self.Corners[self.LB].SetPosition(0, height - self.CORNER_HEIGHT)
        self.Corners[self.RT].SetPosition(width - self.CORNER_WIDTH, 0)
        self.Corners[self.RB].SetPosition(width - self.CORNER_WIDTH, height - self.CORNER_HEIGHT)
        self.Lines[self.R].SetPosition(width - self.CORNER_WIDTH, self.CORNER_HEIGHT)
        self.Lines[self.B].SetPosition(self.CORNER_HEIGHT, height - self.CORNER_HEIGHT)

        verticalShowingPercentage = float((height - self.CORNER_HEIGHT*2) - self.LINE_HEIGHT) / self.LINE_HEIGHT
        horizontalShowingPercentage = float((width - self.CORNER_WIDTH*2) - self.LINE_WIDTH) / self.LINE_WIDTH
        self.Lines[self.L].SetRenderingRect(0, 0, 0, verticalShowingPercentage)
        self.Lines[self.R].SetRenderingRect(0, 0, 0, verticalShowingPercentage)
        self.Lines[self.T].SetRenderingRect(0, 0, horizontalShowingPercentage, 0)
        self.Lines[self.B].SetRenderingRect(0, 0, horizontalShowingPercentage, 0)
        self.Base.SetSize(width - self.CORNER_WIDTH*2, height - self.CORNER_HEIGHT*2)

    def ShowInternal(self):
        self.Base.Show()
        for wnd in self.Lines:
            wnd.Show()
        for wnd in self.Corners:
            wnd.Show()

    def HideInternal(self):
        self.Base.Hide()
        for wnd in self.Lines:
            wnd.Hide()
        for wnd in self.Corners:
            wnd.Hide()
            
class MiddleBoard(Window):
    CORNER_WIDTH = 16
    CORNER_HEIGHT = 16
    LINE_WIDTH = 16
    LINE_HEIGHT = 16
    BOARD_COLOR = grp.GenerateColor(0.0, 0.0, 0.0, 0.51)

    LT = 0
    LB = 1
    RT = 2
    RB = 3
    L = 0
    R = 1
    T = 2
    B = 3

    def __init__(self, layer = "UI"):
        Window.__init__(self, layer)

        CornerFileNames = [ "d:/ymir work/ui/pattern/ThinBoard_Corner_"+dir+".tga" for dir in ["LeftTop","LeftBottom","RightTop","RightBottom"] ]
        LineFileNames = [ "d:/ymir work/ui/pattern/ThinBoard_Line_"+dir+".tga" for dir in ["Left","Right","Top","Bottom"] ]

        self.Corners = []
        for fileName in CornerFileNames:
            Corner = ExpandedImageBox()
            Corner.AddFlag("attach")
            Corner.AddFlag("not_pick")
            Corner.LoadImage(fileName)
            Corner.SetParent(self)
            Corner.SetPosition(0, 0)
            Corner.Show()
            self.Corners.append(Corner)

        self.Lines = []
        for fileName in LineFileNames:
            Line = ExpandedImageBox()
            Line.AddFlag("attach")
            Line.AddFlag("not_pick")
            Line.LoadImage(fileName)
            Line.SetParent(self)
            Line.SetPosition(0, 0)
            Line.Show()
            self.Lines.append(Line)

        Base = Bar()
        Base.SetParent(self)
        Base.AddFlag("attach")
        Base.AddFlag("not_pick")
        Base.SetPosition(self.CORNER_WIDTH, self.CORNER_HEIGHT)
        Base.SetColor(self.BOARD_COLOR)
        Base.Show()
        self.Base = Base

        self.Lines[self.L].SetPosition(0, self.CORNER_HEIGHT)
        self.Lines[self.T].SetPosition(self.CORNER_WIDTH, 0)

    def __del__(self):
        Window.__del__(self)

    def SetSize(self, width, height):

        width = max(self.CORNER_WIDTH*2, width)
        height = max(self.CORNER_HEIGHT*2, height)
        Window.SetSize(self, width, height)

        self.Corners[self.LB].SetPosition(0, height - self.CORNER_HEIGHT)
        self.Corners[self.RT].SetPosition(width - self.CORNER_WIDTH, 0)
        self.Corners[self.RB].SetPosition(width - self.CORNER_WIDTH, height - self.CORNER_HEIGHT)
        self.Lines[self.R].SetPosition(width - self.CORNER_WIDTH, self.CORNER_HEIGHT)
        self.Lines[self.B].SetPosition(self.CORNER_HEIGHT, height - self.CORNER_HEIGHT)

        verticalShowingPercentage = float((height - self.CORNER_HEIGHT*2) - self.LINE_HEIGHT) / self.LINE_HEIGHT
        horizontalShowingPercentage = float((width - self.CORNER_WIDTH*2) - self.LINE_WIDTH) / self.LINE_WIDTH
        self.Lines[self.L].SetRenderingRect(0, 0, 0, verticalShowingPercentage)
        self.Lines[self.R].SetRenderingRect(0, 0, 0, verticalShowingPercentage)
        self.Lines[self.T].SetRenderingRect(0, 0, horizontalShowingPercentage, 0)
        self.Lines[self.B].SetRenderingRect(0, 0, horizontalShowingPercentage, 0)
        self.Base.SetSize(width - self.CORNER_WIDTH*2, height - self.CORNER_HEIGHT*2)

    def ShowInternal(self):
        self.Base.Show()
        for wnd in self.Lines:
            wnd.Show()
        for wnd in self.Corners:
            wnd.Show()

    def HideInternal(self):
        self.Base.Hide()
        for wnd in self.Lines:
            wnd.Hide()
        for wnd in self.Corners:
            wnd.Hide()

class ThinBoardGold(Window):
    CORNER_WIDTH = 16
    CORNER_HEIGHT = 16
    LINE_WIDTH = 16
    LINE_HEIGHT = 16
    BOARD_COLOR = grp.GenerateColor(0.0, 0.0, 0.0, 0.51)

    LT = 0
    LB = 1
    RT = 2
    RB = 3
    L = 0
    R = 1
    T = 2
    B = 3

    def __init__(self, layer = "UI"):
        Window.__init__(self, layer)
        CornerFileNames = [ "d:/ymir work/ui/pattern/thinboardgold/ThinBoard_Corner_"+dir+".tga" for dir in ["LeftTop_gold", "LeftBottom_gold","RightTop_gold", "RightBottom_gold"]]
        LineFileNames = [ "d:/ymir work/ui/pattern/thinboardgold/ThinBoard_Line_"+dir+".tga" for dir in ["Left_gold", "Right_gold", "Top_gold", "Bottom_gold"]]

        self.Corners = []
        for fileName in CornerFileNames:
            Corner = ExpandedImageBox()
            Corner.AddFlag("attach")
            Corner.AddFlag("not_pick")
            Corner.LoadImage(fileName)
            Corner.SetParent(self)
            Corner.SetPosition(0, 0)
            Corner.Show()
            self.Corners.append(Corner)

        self.Lines = []
        for fileName in LineFileNames:
            Line = ExpandedImageBox()
            Line.AddFlag("attach")
            Line.AddFlag("not_pick")
            Line.LoadImage(fileName)
            Line.SetParent(self)
            Line.SetPosition(0, 0)
            Line.Show()
            self.Lines.append(Line)

        Base = ExpandedImageBox()
        Base.SetParent(self)
        Base.AddFlag("attach")
        Base.AddFlag("not_pick")
        Base.LoadImage("d:/ymir work/ui/pattern/thinboardgold/thinboard_bg_gold.tga")
        Base.SetPosition(self.CORNER_WIDTH, self.CORNER_HEIGHT)
        Base.Show()
        self.Base = Base

        self.Lines[self.L].SetPosition(0, self.CORNER_HEIGHT)
        self.Lines[self.T].SetPosition(self.CORNER_WIDTH, 0)

    def __del__(self):
        Window.__del__(self)

    def SetSize(self, width, height):

        width = max(self.CORNER_WIDTH*2, width)
        height = max(self.CORNER_HEIGHT*2, height)
        Window.SetSize(self, width, height)

        self.Corners[self.LB].SetPosition(0, height - self.CORNER_HEIGHT)
        self.Corners[self.RT].SetPosition(width - self.CORNER_WIDTH, 0)
        self.Corners[self.RB].SetPosition(width - self.CORNER_WIDTH, height - self.CORNER_HEIGHT)
        self.Lines[self.R].SetPosition(width - self.CORNER_WIDTH, self.CORNER_HEIGHT)
        self.Lines[self.B].SetPosition(self.CORNER_HEIGHT, height - self.CORNER_HEIGHT)

        verticalShowingPercentage = float((height - self.CORNER_HEIGHT*2) - self.LINE_HEIGHT) / self.LINE_HEIGHT
        horizontalShowingPercentage = float((width - self.CORNER_WIDTH*2) - self.LINE_WIDTH) / self.LINE_WIDTH
        self.Lines[self.L].SetRenderingRect(0, 0, 0, verticalShowingPercentage)
        self.Lines[self.R].SetRenderingRect(0, 0, 0, verticalShowingPercentage)
        self.Lines[self.T].SetRenderingRect(0, 0, horizontalShowingPercentage, 0)
        self.Lines[self.B].SetRenderingRect(0, 0, horizontalShowingPercentage, 0)
        if self.Base:
            self.Base.SetRenderingRect(0, 0, horizontalShowingPercentage, verticalShowingPercentage)

    def ShowInternal(self):
        self.Base.Show()
        for wnd in self.Lines:
            wnd.Show()
        for wnd in self.Corners:
            wnd.Show()

    def HideInternal(self):
        self.Base.Hide()
        for wnd in self.Lines:
            wnd.Hide()
        for wnd in self.Corners:
            wnd.Hide()

class ThinBoardCircle(Window):
    CORNER_WIDTH = 4
    CORNER_HEIGHT = 4
    LINE_WIDTH = 4
    LINE_HEIGHT = 4
    BOARD_COLOR = grp.GenerateColor(255.0, 255.0, 255.0, 1.0)

    LT = 0
    LB = 1
    RT = 2
    RB = 3
    L = 0
    R = 1
    T = 2
    B = 3

    def __init__(self, layer = "UI"):
        Window.__init__(self, layer)

        CornerFileNames = [ "d:/ymir work/ui/pattern/thinboardcircle/ThinBoard_Corner_"+dir+".tga" for dir in ["LeftTop_circle","LeftBottom_circle","RightTop_circle","RightBottom_circle"] ]
        LineFileNames = [ "d:/ymir work/ui/pattern/thinboardcircle/ThinBoard_Line_"+dir+".tga" for dir in ["Left_circle","Right_circle","Top_circle","Bottom_circle"] ]

        self.Corners = []
        for fileName in CornerFileNames:
            Corner = ExpandedImageBox()
            Corner.AddFlag("attach")
            Corner.AddFlag("not_pick")
            Corner.LoadImage(fileName)
            Corner.SetParent(self)
            Corner.SetPosition(0, 0)
            Corner.Show()
            self.Corners.append(Corner)

        self.Lines = []
        for fileName in LineFileNames:
            Line = ExpandedImageBox()
            Line.AddFlag("attach")
            Line.AddFlag("not_pick")
            Line.LoadImage(fileName)
            Line.SetParent(self)
            Line.SetPosition(0, 0)
            Line.Show()
            self.Lines.append(Line)

        Base = Bar()
        Base.SetParent(self)
        Base.AddFlag("attach")
        Base.AddFlag("not_pick")
        Base.SetPosition(self.CORNER_WIDTH, self.CORNER_HEIGHT)
        Base.SetColor(self.BOARD_COLOR)
        Base.Show()
        self.Base = Base

        self.Lines[self.L].SetPosition(0, self.CORNER_HEIGHT)
        self.Lines[self.T].SetPosition(self.CORNER_WIDTH, 0)

    def __del__(self):
        Window.__del__(self)

    def SetSize(self, width, height):

        width = max(self.CORNER_WIDTH*2, width)
        height = max(self.CORNER_HEIGHT*2, height)
        Window.SetSize(self, width, height)

        self.Corners[self.LB].SetPosition(0, height - self.CORNER_HEIGHT)
        self.Corners[self.RT].SetPosition(width - self.CORNER_WIDTH, 0)
        self.Corners[self.RB].SetPosition(width - self.CORNER_WIDTH, height - self.CORNER_HEIGHT)
        self.Lines[self.R].SetPosition(width - self.CORNER_WIDTH, self.CORNER_HEIGHT)
        self.Lines[self.B].SetPosition(self.CORNER_HEIGHT, height - self.CORNER_HEIGHT)

        verticalShowingPercentage = float((height - self.CORNER_HEIGHT*2) - self.LINE_HEIGHT) / self.LINE_HEIGHT
        horizontalShowingPercentage = float((width - self.CORNER_WIDTH*2) - self.LINE_WIDTH) / self.LINE_WIDTH
        self.Lines[self.L].SetRenderingRect(0, 0, 0, verticalShowingPercentage)
        self.Lines[self.R].SetRenderingRect(0, 0, 0, verticalShowingPercentage)
        self.Lines[self.T].SetRenderingRect(0, 0, horizontalShowingPercentage, 0)
        self.Lines[self.B].SetRenderingRect(0, 0, horizontalShowingPercentage, 0)
        self.Base.SetSize(width - self.CORNER_WIDTH*2, height - self.CORNER_HEIGHT*2)

    def ShowInternal(self):
        self.Base.Show()
        for wnd in self.Lines:
            wnd.Show()
        for wnd in self.Corners:
            wnd.Show()

    def HideInternal(self):
        self.Base.Hide()
        for wnd in self.Lines:
            wnd.Hide()
        for wnd in self.Corners:
            wnd.Hide()

class ScrollBar(Window):

    SCROLLBAR_WIDTH = 17
    SCROLLBAR_MIDDLE_HEIGHT = 9
    SCROLLBAR_BUTTON_WIDTH = 17
    SCROLLBAR_BUTTON_HEIGHT = 17
    MIDDLE_BAR_POS = 5
    MIDDLE_BAR_UPPER_PLACE = 3
    MIDDLE_BAR_DOWNER_PLACE = 4
    TEMP_SPACE = MIDDLE_BAR_UPPER_PLACE + MIDDLE_BAR_DOWNER_PLACE

    class MiddleBar(DragButton):
        def __init__(self):
            DragButton.__init__(self)
            self.AddFlag("movable")
            #self.AddFlag("restrict_x")

        def MakeImage(self):
            top = ImageBox()
            top.SetParent(self)
            top.LoadImage("d:/ymir work/ui/pattern/ScrollBar_Top.tga")
            top.SetPosition(0, 0)
            top.AddFlag("not_pick")
            top.Show()
            bottom = ImageBox()
            bottom.SetParent(self)
            bottom.LoadImage("d:/ymir work/ui/pattern/ScrollBar_Bottom.tga")
            bottom.AddFlag("not_pick")
            bottom.Show()

            middle = ExpandedImageBox()
            middle.SetParent(self)
            middle.LoadImage("d:/ymir work/ui/pattern/ScrollBar_Middle.tga")
            middle.SetPosition(0, 4)
            middle.AddFlag("not_pick")
            middle.Show()

            self.top = top
            self.bottom = bottom
            self.middle = middle

        def SetSize(self, height):
            height = max(12, height)
            DragButton.SetSize(self, 10, height)
            self.bottom.SetPosition(0, height-4)

            height -= 4*3
            self.middle.SetRenderingRect(0, 0, 0, float(height)/4.0)

    def __init__(self):
        Window.__init__(self)

        self.pageSize = 1
        self.curPos = 0.0
        self.eventScroll = lambda *arg: None
        self.lockFlag = FALSE
        self.scrollStep = 0.20


        self.CreateScrollBar()

    def __del__(self):
        Window.__del__(self)

    def CreateScrollBar(self):
        barSlot = Bar3D()
        barSlot.SetParent(self)
        barSlot.AddFlag("not_pick")
        barSlot.Show()

        middleBar = self.MiddleBar()
        middleBar.SetParent(self)
        middleBar.SetMoveEvent(__mem_func__(self.OnMove))
        middleBar.Show()
        middleBar.MakeImage()
        middleBar.SetSize(12)

        upButton = Button()
        upButton.SetParent(self)
        upButton.SetEvent(__mem_func__(self.OnUp))
        upButton.SetUpVisual("d:/ymir work/ui/public/scrollbar_up_button_01.sub")
        upButton.SetOverVisual("d:/ymir work/ui/public/scrollbar_up_button_02.sub")
        upButton.SetDownVisual("d:/ymir work/ui/public/scrollbar_up_button_03.sub")
        upButton.Show()

        downButton = Button()
        downButton.SetParent(self)
        downButton.SetEvent(__mem_func__(self.OnDown))
        downButton.SetUpVisual("d:/ymir work/ui/public/scrollbar_down_button_01.sub")
        downButton.SetOverVisual("d:/ymir work/ui/public/scrollbar_down_button_02.sub")
        downButton.SetDownVisual("d:/ymir work/ui/public/scrollbar_down_button_03.sub")
        downButton.Show()

        self.upButton = upButton
        self.downButton = downButton
        self.middleBar = middleBar
        self.barSlot = barSlot

        self.SCROLLBAR_WIDTH = self.upButton.GetWidth()
        self.SCROLLBAR_MIDDLE_HEIGHT = self.middleBar.GetHeight()
        self.SCROLLBAR_BUTTON_WIDTH = self.upButton.GetWidth()
        self.SCROLLBAR_BUTTON_HEIGHT = self.upButton.GetHeight()

    def Destroy(self):
        self.middleBar = None
        self.upButton = None
        self.downButton = None
        self.eventScroll = lambda *arg: None

    def SetScrollEvent(self, event):
        self.eventScroll = event

    def SetMiddleBarSize(self, pageScale):
        realHeight = self.GetHeight() - self.SCROLLBAR_BUTTON_HEIGHT*2
        self.SCROLLBAR_MIDDLE_HEIGHT = int(pageScale * float(realHeight))
        self.middleBar.SetSize(self.SCROLLBAR_MIDDLE_HEIGHT)
        self.pageSize = (self.GetHeight() - self.SCROLLBAR_BUTTON_HEIGHT*2) - self.SCROLLBAR_MIDDLE_HEIGHT - (self.TEMP_SPACE)

    def SetScrollBarSize(self, height):
        self.pageSize = (height - self.SCROLLBAR_BUTTON_HEIGHT*2) - self.SCROLLBAR_MIDDLE_HEIGHT - (self.TEMP_SPACE)
        self.SetSize(self.SCROLLBAR_WIDTH, height)
        self.upButton.SetPosition(0, 0)
        self.downButton.SetPosition(0, height - self.SCROLLBAR_BUTTON_HEIGHT)
        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)
        self.middleBar.SetPosition(self.MIDDLE_BAR_POS, 0)

        self.UpdateBarSlot()

    def UpdateBarSlot(self):
        self.barSlot.SetPosition(0, self.SCROLLBAR_BUTTON_HEIGHT)
        self.barSlot.SetSize(self.GetWidth() - 2, self.GetHeight() - self.SCROLLBAR_BUTTON_HEIGHT*2 - 2)

    def GetPos(self):
        return self.curPos

    def SetPos(self, pos):
        pos = max(0.0, pos)
        pos = min(1.0, pos)

        newPos = float(self.pageSize) * pos
        self.middleBar.SetPosition(self.MIDDLE_BAR_POS, int(newPos) + self.SCROLLBAR_BUTTON_HEIGHT + self.MIDDLE_BAR_UPPER_PLACE)
        self.OnMove()

    def SetScrollStep(self, step):
        self.scrollStep = step
    
    def GetScrollStep(self):
        return self.scrollStep
        
    def OnUp(self):
        self.SetPos(self.curPos-self.scrollStep)

    def OnDown(self):
        self.SetPos(self.curPos+self.scrollStep)

    def OnMove(self):

        if self.lockFlag:
            return

        if 0 == self.pageSize:
            return

        (xLocal, yLocal) = self.middleBar.GetLocalPosition()
        self.curPos = float(yLocal - self.SCROLLBAR_BUTTON_HEIGHT - self.MIDDLE_BAR_UPPER_PLACE) / float(self.pageSize)

        self.eventScroll()

    def OnMouseLeftButtonDown(self):
        (xMouseLocalPosition, yMouseLocalPosition) = self.GetMouseLocalPosition()
        pickedPos = yMouseLocalPosition - self.SCROLLBAR_BUTTON_HEIGHT - self.SCROLLBAR_MIDDLE_HEIGHT/2
        newPos = float(pickedPos) / float(self.pageSize)
        self.SetPos(newPos)

    def LockScroll(self):
        self.lockFlag = TRUE

    def UnlockScroll(self):
        self.lockFlag = FALSE

class ThinScrollBar(ScrollBar):

    def CreateScrollBar(self):
        middleBar = self.MiddleBar()
        middleBar.SetParent(self)
        middleBar.SetMoveEvent(__mem_func__(self.OnMove))
        middleBar.Show()
        middleBar.SetUpVisual("d:/ymir work/ui/public/scrollbar_thin_middle_button_01.sub")
        middleBar.SetOverVisual("d:/ymir work/ui/public/scrollbar_thin_middle_button_02.sub")
        middleBar.SetDownVisual("d:/ymir work/ui/public/scrollbar_thin_middle_button_03.sub")

        upButton = Button()
        upButton.SetParent(self)
        upButton.SetUpVisual("d:/ymir work/ui/public/scrollbar_thin_up_button_01.sub")
        upButton.SetOverVisual("d:/ymir work/ui/public/scrollbar_thin_up_button_02.sub")
        upButton.SetDownVisual("d:/ymir work/ui/public/scrollbar_thin_up_button_03.sub")
        upButton.SetEvent(__mem_func__(self.OnUp))
        upButton.Show()

        downButton = Button()
        downButton.SetParent(self)
        downButton.SetUpVisual("d:/ymir work/ui/public/scrollbar_thin_down_button_01.sub")
        downButton.SetOverVisual("d:/ymir work/ui/public/scrollbar_thin_down_button_02.sub")
        downButton.SetDownVisual("d:/ymir work/ui/public/scrollbar_thin_down_button_03.sub")
        downButton.SetEvent(__mem_func__(self.OnDown))
        downButton.Show()

        self.middleBar = middleBar
        self.upButton = upButton
        self.downButton = downButton

        self.SCROLLBAR_WIDTH = self.upButton.GetWidth()
        self.SCROLLBAR_MIDDLE_HEIGHT = self.middleBar.GetHeight()
        self.SCROLLBAR_BUTTON_WIDTH = self.upButton.GetWidth()
        self.SCROLLBAR_BUTTON_HEIGHT = self.upButton.GetHeight()
        self.MIDDLE_BAR_POS = 0
        self.MIDDLE_BAR_UPPER_PLACE = 0
        self.MIDDLE_BAR_DOWNER_PLACE = 0
        self.TEMP_SPACE = 0

    def UpdateBarSlot(self):
        pass

class SmallThinScrollBar(ScrollBar):

    def CreateScrollBar(self):
        middleBar = self.MiddleBar()
        middleBar.SetParent(self)
        middleBar.SetMoveEvent(__mem_func__(self.OnMove))
        middleBar.Show()
        middleBar.SetUpVisual("d:/ymir work/ui/public/scrollbar_small_thin_middle_button_01.sub")
        middleBar.SetOverVisual("d:/ymir work/ui/public/scrollbar_small_thin_middle_button_01.sub")
        middleBar.SetDownVisual("d:/ymir work/ui/public/scrollbar_small_thin_middle_button_01.sub")

        upButton = Button()
        upButton.SetParent(self)
        upButton.SetUpVisual("d:/ymir work/ui/public/scrollbar_small_thin_up_button_01.sub")
        upButton.SetOverVisual("d:/ymir work/ui/public/scrollbar_small_thin_up_button_02.sub")
        upButton.SetDownVisual("d:/ymir work/ui/public/scrollbar_small_thin_up_button_03.sub")
        upButton.SetEvent(__mem_func__(self.OnUp))
        upButton.Show()

        downButton = Button()
        downButton.SetParent(self)
        downButton.SetUpVisual("d:/ymir work/ui/public/scrollbar_small_thin_down_button_01.sub")
        downButton.SetOverVisual("d:/ymir work/ui/public/scrollbar_small_thin_down_button_02.sub")
        downButton.SetDownVisual("d:/ymir work/ui/public/scrollbar_small_thin_down_button_03.sub")
        downButton.SetEvent(__mem_func__(self.OnDown))
        downButton.Show()

        self.middleBar = middleBar
        self.upButton = upButton
        self.downButton = downButton

        self.SCROLLBAR_WIDTH = self.upButton.GetWidth()
        self.SCROLLBAR_MIDDLE_HEIGHT = self.middleBar.GetHeight()
        self.SCROLLBAR_BUTTON_WIDTH = self.upButton.GetWidth()
        self.SCROLLBAR_BUTTON_HEIGHT = self.upButton.GetHeight()
        self.MIDDLE_BAR_POS = 0
        self.MIDDLE_BAR_UPPER_PLACE = 0
        self.MIDDLE_BAR_DOWNER_PLACE = 0
        self.TEMP_SPACE = 0

    def UpdateBarSlot(self):
        pass

class SliderBar(Window):

    def __init__(self):
        Window.__init__(self)

        self.curPos = 1.0
        self.pageSize = 1.0
        self.eventChange = None

        self.__CreateBackGroundImage()
        self.__CreateCursor()

    def __del__(self):
        Window.__del__(self)

    def __CreateBackGroundImage(self):
        img = ImageBox()
        img.SetParent(self)
        img.LoadImage("d:/ymir work/ui/game/windows/sliderbar.sub")
        img.Show()
        self.backGroundImage = img

        ##
        self.SetSize(self.backGroundImage.GetWidth(), self.backGroundImage.GetHeight())

    def __CreateCursor(self):
        cursor = DragButton()
        cursor.AddFlag("movable")
        cursor.AddFlag("restrict_y")
        cursor.SetParent(self)
        cursor.SetMoveEvent(__mem_func__(self.__OnMove))
        cursor.SetUpVisual("d:/ymir work/ui/game/windows/sliderbar_cursor.sub")
        cursor.SetOverVisual("d:/ymir work/ui/game/windows/sliderbar_cursor.sub")
        cursor.SetDownVisual("d:/ymir work/ui/game/windows/sliderbar_cursor.sub")
        cursor.Show()
        self.cursor = cursor

        ##
        self.cursor.SetRestrictMovementArea(0, 0, self.backGroundImage.GetWidth(), 0)
        self.pageSize = self.backGroundImage.GetWidth() - self.cursor.GetWidth()

    def __OnMove(self):
        (xLocal, yLocal) = self.cursor.GetLocalPosition()
        self.curPos = float(xLocal) / float(self.pageSize)

        if self.eventChange:
            self.eventChange()

    def SetSliderPos(self, pos):
        self.curPos = pos
        self.cursor.SetPosition(int(self.pageSize * pos), 0)

    def GetSliderPos(self):
        return self.curPos

    def SetEvent(self, event):
        self.eventChange = event

    def Enable(self):
        self.cursor.Show()

    def Disable(self):
        self.cursor.Hide()

class ListBox(Window):

    def GetSelectedItemText(self):
        return self.textDict.get(self.selectedLine, "")

    TEMPORARY_PLACE = 3

    def __init__(self, layer = "UI"):
        Window.__init__(self, layer)
        self.overLine = -1
        self.selectedLine = -1
        self.width = 0
        self.height = 0
        self.stepSize = 17
        self.basePos = 0
        self.showLineCount = 0
        self.itemCenterAlign = TRUE
        self.itemList = []
        self.keyDict = {}
        self.textDict = {}
        self.event = lambda *arg: None
    def __del__(self):
        Window.__del__(self)

    def SetWidth(self, width):
        self.SetSize(width, self.height)

    def SetSize(self, width, height):
        Window.SetSize(self, width, height)
        self.width = width
        self.height = height

    def SetTextCenterAlign(self, flag):
        self.itemCenterAlign = flag

    def SetBasePos(self, pos):
        self.basePos = pos
        self._LocateItem()

    def ClearItem(self):
        self.keyDict = {}
        self.textDict = {}
        self.itemList = []
        self.overLine = -1
        self.selectedLine = -1

    def InsertItem(self, number, text):
        self.keyDict[len(self.itemList)] = number
        self.textDict[len(self.itemList)] = text

        textLine = TextLine()
        textLine.SetParent(self)
        textLine.SetText(text)
        textLine.Show()

        if self.itemCenterAlign:
            textLine.SetWindowHorizontalAlignCenter()
            textLine.SetHorizontalAlignCenter()

        self.itemList.append(textLine)

        self._LocateItem()

    def ChangeItem(self, number, text):
        for key, value in self.keyDict.items():
            if value == number:
                self.textDict[key] = text

                if number < len(self.itemList):
                    self.itemList[key].SetText(text)

                return

    def LocateItem(self):
        self._LocateItem()

    def _LocateItem(self):

        skipCount = self.basePos
        yPos = 0
        self.showLineCount = 0

        for textLine in self.itemList:
            textLine.Hide()

            if skipCount > 0:
                skipCount -= 1
                continue

            if localeInfo.IsARABIC():
                w, h = textLine.GetTextSize()
                textLine.SetPosition(w+10, yPos + 3)
            else:
                textLine.SetPosition(0, yPos + 3)

            if app.ENABLE_PRIVATESHOP_SEARCH_SYSTEM:
                textLine.SetPosition(0, yPos + 3)
            else:
                if localeInfo.IsARABIC():
                    w, h = textLine.GetTextSize()
                    textLine.SetPosition(w+10, yPos + 3)
                else:
                    textLine.SetPosition(0, yPos + 3)

            yPos += self.stepSize

            if yPos <= self.GetHeight():
                self.showLineCount += 1
                textLine.Show()

    def ArrangeItem(self):
        self.SetSize(self.width, len(self.itemList) * self.stepSize)
        self._LocateItem()

    def GetViewItemCount(self):
        return int(self.GetHeight() / self.stepSize)

    def GetItemCount(self):
        return len(self.itemList)

    def SetEvent(self, event):
        self.event = event

    def SelectItem(self, line):

        if not self.keyDict.has_key(line):
            return

        if line == self.selectedLine:
            return

        if not app.ENABLE_PRIVATESHOP_SEARCH_SYSTEM:
            if line == self.selectedLine:
                return

        self.selectedLine = line
        self.event(self.keyDict.get(line, 0), self.textDict.get(line, "None"))

    def GetSelectedItem(self):
        return self.keyDict.get(self.selectedLine, 0)

    def OnMouseLeftButtonDown(self):
        if self.overLine < 0:
            return

    def OnMouseLeftButtonUp(self):
        if self.overLine >= 0:
            self.SelectItem(self.overLine+self.basePos)

    def OnUpdate(self):

        self.overLine = -1

        if self.IsIn():
            x, y = self.GetGlobalPosition()
            height = self.GetHeight()
            xMouse, yMouse = wndMgr.GetMousePosition()

            if yMouse - y < height - 1:
                self.overLine = (yMouse - y) / self.stepSize

                if self.overLine < 0:
                    self.overLine = -1
                if self.overLine >= len(self.itemList):
                    self.overLine = -1

    def OnRender(self):
        xRender, yRender = self.GetGlobalPosition()
        yRender -= self.TEMPORARY_PLACE
        widthRender = self.width
        heightRender = self.height + self.TEMPORARY_PLACE*2

        if localeInfo.IsCIBN10:
            if -1 != self.overLine and self.keyDict[self.overLine] != -1:
                grp.SetColor(HALF_WHITE_COLOR)
                grp.RenderBar(xRender + 2, yRender + self.overLine*self.stepSize + 4, self.width - 3, self.stepSize)               

            if -1 != self.selectedLine and self.keyDict[self.selectedLine] != -1:
                if self.selectedLine >= self.basePos:
                    if self.selectedLine - self.basePos < self.showLineCount:
                        grp.SetColor(SELECT_COLOR)
                        grp.RenderBar(xRender + 2, yRender + (self.selectedLine-self.basePos)*self.stepSize + 4, self.width - 3, self.stepSize)

        else:       
            if -1 != self.overLine:
                grp.SetColor(HALF_WHITE_COLOR)
                grp.RenderBar(xRender + 2, yRender + self.overLine*self.stepSize + 4, self.width - 3, self.stepSize)               

            if -1 != self.selectedLine:
                if self.selectedLine >= self.basePos:
                    if self.selectedLine - self.basePos < self.showLineCount:
                        grp.SetColor(SELECT_COLOR)
                        grp.RenderBar(xRender + 2, yRender + (self.selectedLine-self.basePos)*self.stepSize + 4, self.width - 3, self.stepSize)

class ListBox_Scroll(ListBox):
    def __init__(self):
        ListBox.__init__(self)
        
        self.scrollBar = ScrollBar()
        self.scrollBar.SetParent(self)
        self.scrollBar.SetScrollEvent(self.__OnScroll)
        self.scrollBar.Show()

    def SetSize(self, width, height):
        ListBox.SetSize(self, width - ScrollBar.SCROLLBAR_WIDTH, height)
        Window.SetSize(self, width, height)
        
        self.scrollBar.SetPosition(width - ScrollBar.SCROLLBAR_WIDTH, 0)
        self.scrollBar.SetScrollBarSize(height)

    def ClearItem(self):
        ListBox.ClearItem(self)
        self.scrollBar.SetPos(0)

    def _LocateItem(self):
        ListBox._LocateItem(self)
        
        if self.showLineCount < len(self.itemList):
            #self.scrollBar.SetMiddleBarSize(float(self.GetViewItemCount())/self.GetItemCount())
            self.scrollBar.SetMiddleBarSize(float(self.GetViewItemCount())/self.GetItemCount())
            self.scrollBar.Show()
        else:
            #self.scrollBar.SetMiddleBarSize(float(self.GetViewItemCount())/self.GetItemCount())
            self.scrollBar.Hide()

    def GetViewItemCount(self):
        return self.showLineCount

    def GetItemCount(self):
        return len(self.itemList)

    def GetSelectedItemAdi(self):
        secilen = self.textDict.get(self.selectedLine, 0)
        return secilen

    def __OnScroll(self):
        scrollLen = self.GetItemCount()-self.GetViewItemCount()
        if scrollLen < 0:
            scrollLen = 0
        self.SetBasePos(int(self.scrollBar.GetPos()*scrollLen))

class ListBox2(ListBox):
    def __init__(self, *args, **kwargs):
        ListBox.__init__(self, *args, **kwargs)
        self.rowCount = 10
        self.barWidth = 0
        self.colCount = 0

    def SetRowCount(self, rowCount):
        self.rowCount = rowCount

    def SetSize(self, width, height):
        ListBox.SetSize(self, width, height)
        self._RefreshForm()

    def ClearItem(self):
        ListBox.ClearItem(self)
        self._RefreshForm()

    def InsertItem(self, *args, **kwargs):
        ListBox.InsertItem(self, *args, **kwargs)
        self._RefreshForm()

    def OnUpdate(self):
        mpos = wndMgr.GetMousePosition()
        self.overLine = self._CalcPointIndex(mpos)

    def OnRender(self):
        x, y = self.GetGlobalPosition()
        pos = (x + 2, y)

        if -1 != self.overLine:
            grp.SetColor(HALF_WHITE_COLOR)
            self._RenderBar(pos, self.overLine)

        if -1 != self.selectedLine:
            if self.selectedLine >= self.basePos:
                if self.selectedLine - self.basePos < self.showLineCount:
                    grp.SetColor(SELECT_COLOR)
                    self._RenderBar(pos, self.selectedLine-self.basePos)

    

    def _CalcPointIndex(self, mpos):
        if self.IsIn():
            px, py = mpos
            gx, gy = self.GetGlobalPosition()
            lx, ly = px - gx, py - gy

            col = lx / self.barWidth
            row = ly / self.stepSize
            idx = col * self.rowCount + row
            if col >= 0 and col < self.colCount:
                if row >= 0 and row < self.rowCount:
                    if idx >= 0 and idx < len(self.itemList):
                        return idx
        
        return -1

    def _CalcRenderPos(self, pos, idx):
        x, y = pos
        row = idx % self.rowCount
        col = idx / self.rowCount
        return (x + col * self.barWidth, y + row * self.stepSize)

    def _RenderBar(self, basePos, idx):
        x, y = self._CalcRenderPos(basePos, idx)
        grp.RenderBar(x, y, self.barWidth - 3, self.stepSize)

    def _LocateItem(self):
        pos = (0, self.TEMPORARY_PLACE)

        self.showLineCount = 0
        for textLine in self.itemList:
            x, y = self._CalcRenderPos(pos, self.showLineCount)
            textLine.SetPosition(x, y)
            textLine.Show()

            self.showLineCount += 1

    def _RefreshForm(self):
        if len(self.itemList) % self.rowCount:
            self.colCount = len(self.itemList) / self.rowCount + 1
        else:
            self.colCount = len(self.itemList) / self.rowCount

        if self.colCount:
            self.barWidth = self.width / self.colCount
        else:
            self.barWidth = self.width


class ComboBox(Window):

    class ComboBoxImage(Window):
        class ListBoxWithBoard(ListBox):

            def __init__(self, layer):
                ListBox.__init__(self, layer)

            def OnRender(self):
                xRender, yRender = self.GetGlobalPosition()
                yRender -= self.TEMPORARY_PLACE
                widthRender = self.width
                heightRender = self.height + self.TEMPORARY_PLACE*2
                grp.SetColor(BACKGROUND_COLOR)
                grp.RenderBar(xRender, yRender, widthRender, heightRender)
                grp.SetColor(DARK_COLOR)
                grp.RenderLine(xRender, yRender, widthRender, 0)
                grp.RenderLine(xRender, yRender, 0, heightRender)
                ListBox.OnRender(self)

        def __init__(self, parent, name, x ,y):
            Window.__init__(self)
            self.isSelected = False
            self.isOver = False
            self.isListOpened = False
            self.event = lambda *arg: None
            self.enable = True
            self.imagebox = None

            ## imagebox
            image = ImageBox()
            image.SetParent(parent)
            image.LoadImage(name)
            image.SetPosition(x, y)
            image.Show()
            self.imagebox = image

            ## BaseSetting
            self.x = x + 1
            self.y = y + 1
            self.width = self.imagebox.GetWidth() - 3
            self.height = self.imagebox.GetHeight() - 3
            self.SetParent(parent)

            ## TextLine
            self.textLine = MakeTextLine(self)
            self.textLine.SetText(localeInfo.UI_ITEM)

            ## ListBox
            self.listBox = self.ListBoxWithBoard("TOP_MOST")
            self.listBox.SetPickAlways()
            self.listBox.SetParent(self)
            self.listBox.SetEvent(__mem_func__(self.OnSelectItem))
            self.listBox.Hide()

            Window.SetPosition(self, self.x, self.y)
            Window.SetSize(self, self.width, self.height)
            self.textLine.UpdateRect()
            self.__ArrangeListBox()

        def __del__(self):
            Window.__del__(self)

        def Destroy(self):
            self.textLine = None
            self.listBox = None
            self.imagebox = None

        def SetPosition(self, x, y):
            Window.SetPosition(self, x, y)
            self.imagebox.SetPosition(x, y)
            self.x = x
            self.y = y
            self.__ArrangeListBox()

        def SetSize(self, width, height):
            Window.SetSize(self, width, height)
            self.width = width
            self.height = height
            self.textLine.UpdateRect()
            self.__ArrangeListBox()

        def __ArrangeListBox(self):
            self.listBox.SetPosition(0, self.height + 5)
            self.listBox.SetWidth(self.width)

        def Enable(self):
            self.enable = True

        def Disable(self):
            self.enable = False
            self.textLine.SetText("")
            self.CloseListBox()

        def SetEvent(self, event):
            self.event = event

        def ClearItem(self):
            self.CloseListBox()
            self.listBox.ClearItem()

        def InsertItem(self, index, name):
            self.listBox.InsertItem(index, name)
            self.listBox.ArrangeItem()

        def SetCurrentItem(self, text):
            self.textLine.SetText(text)

        def SelectItem(self, key):
            self.listBox.SelectItem(key)

        def OnSelectItem(self, index, name):
            self.CloseListBox()
            self.event(index)

        def CloseListBox(self):
            self.isListOpened = False
            self.listBox.Hide()

        def OnMouseLeftButtonDown(self):

            if not self.enable:
                return

            self.isSelected = True

        def OnMouseLeftButtonUp(self):
            if not self.enable:
                return

            self.isSelected = False

            if self.isListOpened:
                self.CloseListBox()
            else:
                if self.listBox.GetItemCount() > 0:
                    self.isListOpened = True
                    self.listBox.Show()
                    self.__ArrangeListBox()

        def OnUpdate(self):

            if not self.enable:
                return

            if self.IsIn():
                self.isOver = True
            else:
                self.isOver = False

        def OnRender(self):
            self.x, self.y = self.GetGlobalPosition()
            xRender = self.x
            yRender = self.y
            widthRender = self.width
            heightRender = self.height
            if self.isOver:
                grp.SetColor(HALF_WHITE_COLOR)
                grp.RenderBar(xRender + 2, yRender + 3, self.width - 3, heightRender - 5)
                if self.isSelected:
                    grp.SetColor(WHITE_COLOR)
                    grp.RenderBar(xRender + 2, yRender + 3, self.width - 3, heightRender - 5)

    class ListBoxWithBoard(ListBox):

        def __init__(self, layer):
            ListBox.__init__(self, layer)

        def OnRender(self):
            xRender, yRender = self.GetGlobalPosition()
            yRender -= self.TEMPORARY_PLACE
            widthRender = self.width
            heightRender = self.height + self.TEMPORARY_PLACE*2
            grp.SetColor(BACKGROUND_COLOR)
            grp.RenderBar(xRender, yRender, widthRender, heightRender)
            grp.SetColor(DARK_COLOR)
            grp.RenderLine(xRender, yRender, widthRender, 0)
            grp.RenderLine(xRender, yRender, 0, heightRender)
            grp.SetColor(BRIGHT_COLOR)
            grp.RenderLine(xRender, yRender+heightRender, widthRender, 0)
            grp.RenderLine(xRender+widthRender, yRender, 0, heightRender)

            ListBox.OnRender(self)

    def __init__(self):
        Window.__init__(self)
        self.x = 0
        self.y = 0
        self.width = 0
        self.height = 0
        self.isSelected = FALSE
        self.isOver = FALSE
        self.isListOpened = FALSE
        self.event = lambda *arg: None
        self.enable = TRUE

        self.textLine = MakeTextLine(self)
        self.textLine.SetText(localeInfo.UI_ITEM)

        self.listBox = self.ListBoxWithBoard("TOP_MOST")
        self.listBox.SetPickAlways()
        self.listBox.SetParent(self)
        self.listBox.SetEvent(__mem_func__(self.OnSelectItem))
        self.listBox.Hide()

    def __del__(self):
        Window.__del__(self)

    def Destroy(self):
        self.textLine = None
        self.listBox = None

    def SetPosition(self, x, y):
        Window.SetPosition(self, x, y)
        self.x = x
        self.y = y
        self.__ArrangeListBox()

    def SetSize(self, width, height):
        Window.SetSize(self, width, height)
        self.width = width
        self.height = height
        self.textLine.UpdateRect()
        self.__ArrangeListBox()

    def __ArrangeListBox(self):
        self.listBox.SetPosition(0, self.height + 5)
        self.listBox.SetWidth(self.width)

    def Enable(self):
        self.enable = TRUE

    def Disable(self):
        self.enable = FALSE
        self.textLine.SetText("")
        self.CloseListBox()

    def SetEvent(self, event):
        self.event = event

    def ClearItem(self):
        self.CloseListBox()
        self.listBox.ClearItem()

    def InsertItem(self, index, name):
        self.listBox.InsertItem(index, name)
        self.listBox.ArrangeItem()

    def SetCurrentItem(self, text):
        self.textLine.SetText(text)

    def SelectItem(self, key):
        self.listBox.SelectItem(key)

    def OnSelectItem(self, index, name):

        self.CloseListBox()
        self.event(index)

    def CloseListBox(self):
        self.isListOpened = FALSE
        self.listBox.Hide()

    def OnMouseLeftButtonDown(self):

        if not self.enable:
            return

        self.isSelected = TRUE

    def OnMouseLeftButtonUp(self):

        if not self.enable:
            return

        self.isSelected = FALSE

        if self.isListOpened:
            self.CloseListBox()
        else:
            if self.listBox.GetItemCount() > 0:
                self.isListOpened = TRUE
                self.listBox.Show()
                self.__ArrangeListBox()

    def OnUpdate(self):

        if not self.enable:
            return

        if self.IsIn():
            self.isOver = TRUE
        else:
            self.isOver = FALSE

    def OnRender(self):
        self.x, self.y = self.GetGlobalPosition()
        xRender = self.x
        yRender = self.y
        widthRender = self.width
        heightRender = self.height
        grp.SetColor(BACKGROUND_COLOR)
        grp.RenderBar(xRender, yRender, widthRender, heightRender)
        grp.SetColor(DARK_COLOR)
        grp.RenderLine(xRender, yRender, widthRender, 0)
        grp.RenderLine(xRender, yRender, 0, heightRender)
        grp.SetColor(BRIGHT_COLOR)
        grp.RenderLine(xRender, yRender+heightRender, widthRender, 0)
        grp.RenderLine(xRender+widthRender, yRender, 0, heightRender)

        if self.isOver:
            grp.SetColor(HALF_WHITE_COLOR)
            grp.RenderBar(xRender + 2, yRender + 3, self.width - 3, heightRender - 5)

            if self.isSelected:
                grp.SetColor(WHITE_COLOR)
                grp.RenderBar(xRender + 2, yRender + 3, self.width - 3, heightRender - 5)

###################################################################################################
## Python Script Loader
###################################################################################################
class ListBoxScroll(ListBox):
    def __init__(self):
        ListBox.__init__(self)
        
        self.scrollBar = ScrollBar()
        self.scrollBar.SetParent(self)
        self.scrollBar.SetScrollEvent(self.__OnScroll)
        self.scrollBar.Hide()

    def SetSize(self, width, height):
        ListBox.SetSize(self, width - ScrollBar.SCROLLBAR_WIDTH, height)
        Window.SetSize(self, width, height)
        
        self.scrollBar.SetPosition(width - ScrollBar.SCROLLBAR_WIDTH, 0)
        self.scrollBar.SetScrollBarSize(height)

    def ClearItem(self):
        ListBox.ClearItem(self)
        self.scrollBar.SetPos(0)

    def _LocateItem(self):
        ListBox._LocateItem(self)
        
        if self.showLineCount < len(self.itemList):
            self.scrollBar.SetMiddleBarSize(float(self.GetViewItemCount())/self.GetItemCount())
            self.scrollBar.Show()
        else:
            self.scrollBar.Hide()

    def __OnScroll(self):
        scrollLen = self.GetItemCount()-self.GetViewItemCount()
        if scrollLen < 0:
            scrollLen = 0
        self.SetBasePos(int(self.scrollBar.GetPos()*scrollLen))


class ScriptWindow(Window):
    def __init__(self, layer = "UI"):
        Window.__init__(self, layer)
        self.Children = []
        self.ElementDictionary = {}
    def __del__(self):
        Window.__del__(self)

    def ClearDictionary(self):
        self.Children = []
        self.ElementDictionary = {}
    def InsertChild(self, name, child):
        self.ElementDictionary[name] = child

    def IsChild(self, name):
        return self.ElementDictionary.has_key(name)
    def GetChild(self, name):
        return self.ElementDictionary[name]

    def GetChild2(self, name):
        return self.ElementDictionary.get(name, None)

class PythonScriptLoader(object):

    BODY_KEY_LIST = ( "x", "y", "width", "height" )

    #####

    DEFAULT_KEY_LIST = ( "type", "x", "y", )
    WINDOW_KEY_LIST = ( "width", "height", )
    IMAGE_KEY_LIST = ( "image", )
    EXPANDED_IMAGE_KEY_LIST = ( "image", )
    ANI_IMAGE_KEY_LIST = ( "images", )
    SLOT_KEY_LIST = ( "width", "height", "slot", )
    CANDIDATE_LIST_KEY_LIST = ( "item_step", "item_xsize", "item_ysize", )
    GRID_TABLE_KEY_LIST = ( "start_index", "x_count", "y_count", "x_step", "y_step", )
    EDIT_LINE_KEY_LIST = ( "width", "height", "input_limit", )
    COMBO_BOX_KEY_LIST = ( "width", "height", "item", )
    TITLE_BAR_KEY_LIST = ( "width", )
    HORIZONTAL_BAR_KEY_LIST = ( "width", )
    BOARD_KEY_LIST = ( "width", "height", )
    BOARD_WITH_TITLEBAR_KEY_LIST = ( "width", "height", "title", )
    BOX_KEY_LIST = ( "width", "height", )
    BAR_KEY_LIST = ( "width", "height", )
    LINE_KEY_LIST = ( "width", "height", )
    SLOTBAR_KEY_LIST = ( "width", "height", )
    GAUGE_KEY_LIST = ( "width", "color", )
    SCROLLBAR_KEY_LIST = ( "size", )
    LIST_BOX_KEY_LIST = ( "width", "height", )

    def __init__(self):
        self.Clear()

    def Clear(self):
        self.ScriptDictionary = { "SCREEN_WIDTH" : wndMgr.GetScreenWidth(), "SCREEN_HEIGHT" : wndMgr.GetScreenHeight() }
        self.InsertFunction = 0

    def LoadScriptFile(self, window, FileName):
        import exception
        import exceptions
        import os
        import errno
        self.Clear()

        print "===== Load Script File : %s" % (FileName)

        try:
            # chr, player µîÀº sandbox ³»¿¡¼ import°¡ Çã¿ëµÇÁö ¾Ê±â ¶§¹®¿¡,(º¿ÀÌ ¾Ç¿ëÇÒ ¿©Áö°¡ ¸Å¿ì Å.)
            #  ¹Ì¸® script dictionary¿¡ ÇÊ¿äÇÑ »ó¼ö¸¦ ³Ö¾î³õ´Â´Ù.
            import chr
            import player
            import app
            self.ScriptDictionary["PLAYER_NAME_MAX_LEN"] = chr.PLAYER_NAME_MAX_LEN
            self.ScriptDictionary["DRAGON_SOUL_EQUIPMENT_SLOT_START"] = player.DRAGON_SOUL_EQUIPMENT_SLOT_START
            self.ScriptDictionary["LOCALE_PATH"] = app.GetLocalePath()
            execfile(FileName, self.ScriptDictionary)
        except IOError, err:
            import sys
            import dbg           
            dbg.TraceError("Failed to load script file : %s" % (FileName))
            dbg.TraceError("error  : %s" % (err))
            exception.Abort("LoadScriptFile1")
        except RuntimeError,err:
            import sys
            import dbg           
            dbg.TraceError("Failed to load script file : %s" % (FileName))
            dbg.TraceError("error  : %s" % (err))
            exception.Abort("LoadScriptFile2")
        except:
            import sys
            import dbg           
            dbg.TraceError("Failed to load script file : %s" % (FileName))
            exception.Abort("LoadScriptFile!!!!!!!!!!!!!!")
        
        #####

        Body = self.ScriptDictionary["window"]
        self.CheckKeyList("window", Body, self.BODY_KEY_LIST)

        window.ClearDictionary()
        self.InsertFunction = window.InsertChild

        window.SetPosition(int(Body["x"]), int(Body["y"]))

        if localeInfo.IsARABIC():
            w = wndMgr.GetScreenWidth()
            h = wndMgr.GetScreenHeight()
            if Body.has_key("width"):
                w = int(Body["width"])
            if Body.has_key("height"):
                h = int(Body["height"])

            window.SetSize(w, h)
        else:
            window.SetSize(int(Body["width"]), int(Body["height"]))
            if TRUE == Body.has_key("style"):
                for StyleList in Body["style"]:
                    window.AddFlag(StyleList)
        

        self.LoadChildren(window, Body)

    def LoadChildren(self, parent, dicChildren):

        if localeInfo.IsARABIC():
            parent.AddFlag( "rtl" )

        if TRUE == dicChildren.has_key("style"):
            for style in dicChildren["style"]:
                parent.AddFlag(style)

        if FALSE == dicChildren.has_key("children"):
            return FALSE

        Index = 0

        ChildrenList = dicChildren["children"]
        parent.Children = range(len(ChildrenList))
        for ElementValue in ChildrenList:
            try:
                Name = ElementValue["name"]               
            except KeyError:
                Name = ElementValue["name"] = "NONAME"
                
            try:
                Type = ElementValue["type"]
            except KeyError:                               
                Type = ElementValue["type"] = "window"               

            if FALSE == self.CheckKeyList(Name, ElementValue, self.DEFAULT_KEY_LIST):
                del parent.Children[Index]
                continue

            if Type == "window":
                parent.Children[Index] = ScriptWindow()
                parent.Children[Index].SetParent(parent)
                self.LoadElementWindow(parent.Children[Index], ElementValue, parent)

            elif Type == "button":
                parent.Children[Index] = Button()
                parent.Children[Index].SetParent(parent)
                self.LoadElementButton(parent.Children[Index], ElementValue, parent)

            elif Type == "radio_button":
                parent.Children[Index] = RadioButton()
                parent.Children[Index].SetParent(parent)
                self.LoadElementButton(parent.Children[Index], ElementValue, parent)

            elif Type == "toggle_button":
                parent.Children[Index] = ToggleButton()
                parent.Children[Index].SetParent(parent)
                self.LoadElementButton(parent.Children[Index], ElementValue, parent)

            elif Type == "mark":
                parent.Children[Index] = MarkBox()
                parent.Children[Index].SetParent(parent)
                self.LoadElementMark(parent.Children[Index], ElementValue, parent)

            elif Type == "image":
                parent.Children[Index] = ImageBox()
                parent.Children[Index].SetParent(parent)
                self.LoadElementImage(parent.Children[Index], ElementValue, parent)

            elif Type == "expanded_image":
                parent.Children[Index] = ExpandedImageBox()
                parent.Children[Index].SetParent(parent)
                self.LoadElementExpandedImage(parent.Children[Index], ElementValue, parent)

            elif Type == "ani_image":
                parent.Children[Index] = AniImageBox()
                parent.Children[Index].SetParent(parent)
                self.LoadElementAniImage(parent.Children[Index], ElementValue, parent)

            elif Type == "slot":
                parent.Children[Index] = SlotWindow()
                parent.Children[Index].SetParent(parent)
                self.LoadElementSlot(parent.Children[Index], ElementValue, parent)

            elif Type == "candidate_list":
                parent.Children[Index] = CandidateListBox()
                parent.Children[Index].SetParent(parent)
                self.LoadElementCandidateList(parent.Children[Index], ElementValue, parent)

            elif Type == "grid_table":
                parent.Children[Index] = GridSlotWindow()
                parent.Children[Index].SetParent(parent)
                self.LoadElementGridTable(parent.Children[Index], ElementValue, parent)

            elif Type == "text":
                parent.Children[Index] = TextLine()
                parent.Children[Index].SetParent(parent)
                self.LoadElementText(parent.Children[Index], ElementValue, parent)

            elif Type == "editline":
                parent.Children[Index] = EditLine()
                parent.Children[Index].SetParent(parent)
                self.LoadElementEditLine(parent.Children[Index], ElementValue, parent)

            elif Type == "titlebar":
                parent.Children[Index] = TitleBar()
                parent.Children[Index].SetParent(parent)
                self.LoadElementTitleBar(parent.Children[Index], ElementValue, parent)

            elif Type == "horizontalbar":
                parent.Children[Index] = HorizontalBar()
                parent.Children[Index].SetParent(parent)
                self.LoadElementHorizontalBar(parent.Children[Index], ElementValue, parent)

            elif Type == "board":
                parent.Children[Index] = Board()
                parent.Children[Index].SetParent(parent)
                self.LoadElementBoard(parent.Children[Index], ElementValue, parent)

            elif Type == "board_with_titlebar":
                parent.Children[Index] = BoardWithTitleBar()
                parent.Children[Index].SetParent(parent)
                self.LoadElementBoardWithTitleBar(parent.Children[Index], ElementValue, parent)

            elif Type == "thinboard":
                parent.Children[Index] = ThinBoard()
                parent.Children[Index].SetParent(parent)
                self.LoadElementThinBoard(parent.Children[Index], ElementValue, parent)

                        elif Type == "middleboard":
                                parent.Children[Index] = MiddleBoard()
                                parent.Children[Index].SetParent(parent)
                                self.LoadElementMiddleBoard(parent.Children[Index], ElementValue, parent)
            
            elif Type == "thinboard_gold":
                parent.Children[Index] = ThinBoardGold()
                parent.Children[Index].SetParent(parent)
                self.LoadElementThinBoardGold(parent.Children[Index], ElementValue, parent)

            elif Type == "thinboard_circle":
                parent.Children[Index] = ThinBoardCircle()
                parent.Children[Index].SetParent(parent)
                self.LoadElementThinBoardCircle(parent.Children[Index], ElementValue, parent)

            elif Type == "box":
                parent.Children[Index] = Box()
                parent.Children[Index].SetParent(parent)
                self.LoadElementBox(parent.Children[Index], ElementValue, parent)

            elif Type == "bar":
                parent.Children[Index] = Bar()
                parent.Children[Index].SetParent(parent)
                self.LoadElementBar(parent.Children[Index], ElementValue, parent)

            elif Type == "line":
                parent.Children[Index] = Line()
                parent.Children[Index].SetParent(parent)
                self.LoadElementLine(parent.Children[Index], ElementValue, parent)

            elif Type == "slotbar":
                parent.Children[Index] = SlotBar()
                parent.Children[Index].SetParent(parent)
                self.LoadElementSlotBar(parent.Children[Index], ElementValue, parent)

            elif Type == "gauge":
                parent.Children[Index] = Gauge()
                parent.Children[Index].SetParent(parent)
                self.LoadElementGauge(parent.Children[Index], ElementValue, parent)

            elif Type == "scrollbar":
                parent.Children[Index] = ScrollBar()
                parent.Children[Index].SetParent(parent)
                self.LoadElementScrollBar(parent.Children[Index], ElementValue, parent)

            elif Type == "thin_scrollbar":
                parent.Children[Index] = ThinScrollBar()
                parent.Children[Index].SetParent(parent)
                self.LoadElementScrollBar(parent.Children[Index], ElementValue, parent)

            elif Type == "small_thin_scrollbar":
                parent.Children[Index] = SmallThinScrollBar()
                parent.Children[Index].SetParent(parent)
                self.LoadElementScrollBar(parent.Children[Index], ElementValue, parent)

            elif Type == "sliderbar":
                parent.Children[Index] = SliderBar()
                parent.Children[Index].SetParent(parent)
                self.LoadElementSliderBar(parent.Children[Index], ElementValue, parent)

            elif Type == "listbox":
                parent.Children[Index] = ListBox()
                parent.Children[Index].SetParent(parent)
                self.LoadElementListBox(parent.Children[Index], ElementValue, parent)

            elif Type == "listbox_scroll": 
                parent.Children[Index] = ListBoxScroll()
                parent.Children[Index].SetParent(parent)
                self.LoadElementListBox(parent.Children[Index], ElementValue, parent)

            elif Type == "listbox2":
                parent.Children[Index] = ListBox2()
                parent.Children[Index].SetParent(parent)
                self.LoadElementListBox2(parent.Children[Index], ElementValue, parent)
            elif Type == "listboxex":
                parent.Children[Index] = ListBoxEx()
                parent.Children[Index].SetParent(parent)
                self.LoadElementListBoxEx(parent.Children[Index], ElementValue, parent)

            else:
                Index += 1
                continue

            parent.Children[Index].SetWindowName(Name)
            if 0 != self.InsertFunction:
                self.InsertFunction(Name, parent.Children[Index])

            self.LoadChildren(parent.Children[Index], ElementValue)
            Index += 1

    def CheckKeyList(self, name, value, key_list):

        for DataKey in key_list:
            if FALSE == value.has_key(DataKey):
                print "Failed to find data key", "[" + name + "/" + DataKey + "]"
                return FALSE

        return TRUE

    def LoadDefaultData(self, window, value, parentWindow):
        loc_x = int(value["x"])
        loc_y = int(value["y"])
        if value.has_key("vertical_align"):
            if "center" == value["vertical_align"]:
                window.SetWindowVerticalAlignCenter()
            elif "bottom" == value["vertical_align"]:
                window.SetWindowVerticalAlignBottom()

        if parentWindow.IsRTL():
            loc_x = int(value["x"]) + window.GetWidth()
            if value.has_key("horizontal_align"):
                if "center" == value["horizontal_align"]:
                    window.SetWindowHorizontalAlignCenter()
                    loc_x = - int(value["x"])
                elif "right" == value["horizontal_align"]:
                    window.SetWindowHorizontalAlignLeft()
                    loc_x = int(value["x"]) - window.GetWidth()
                    ## loc_x = parentWindow.GetWidth() - int(value["x"]) + window.GetWidth()
            else:
                window.SetWindowHorizontalAlignRight()

            if value.has_key("all_align"):
                window.SetWindowVerticalAlignCenter()
                window.SetWindowHorizontalAlignCenter()
                loc_x = - int(value["x"])
        else:
            if value.has_key("horizontal_align"):
                if "center" == value["horizontal_align"]:
                    window.SetWindowHorizontalAlignCenter()
                elif "right" == value["horizontal_align"]:
                    window.SetWindowHorizontalAlignRight()

        window.SetPosition(loc_x, loc_y)
        window.Show()

    ## Window
    def LoadElementWindow(self, window, value, parentWindow):

        if FALSE == self.CheckKeyList(value["name"], value, self.WINDOW_KEY_LIST):
            return FALSE

        window.SetSize(int(value["width"]), int(value["height"]))
        self.LoadDefaultData(window, value, parentWindow)

        return TRUE

    ## Button
    def LoadElementButton(self, window, value, parentWindow):

        if value.has_key("width") and value.has_key("height"):
            window.SetSize(int(value["width"]), int(value["height"]))

        if TRUE == value.has_key("default_image"):
            window.SetUpVisual(value["default_image"])
        if TRUE == value.has_key("over_image"):
            window.SetOverVisual(value["over_image"])
        if TRUE == value.has_key("down_image"):
            window.SetDownVisual(value["down_image"])
        if TRUE == value.has_key("disable_image"):
            window.SetDisableVisual(value["disable_image"])

        if TRUE == value.has_key("text"):
            if TRUE == value.has_key("text_height"):
                window.SetText(value["text"], value["text_height"])
            else:
                window.SetText(value["text"])

            if value.has_key("text_color"):
                window.SetTextColor(value["text_color"])

        if TRUE == value.has_key("tooltip_text"):
            if TRUE == value.has_key("tooltip_x") and TRUE == value.has_key("tooltip_y"):
                window.SetToolTipText(value["tooltip_text"], int(value["tooltip_x"]), int(value["tooltip_y"]))
            else:
                window.SetToolTipText(value["tooltip_text"])

        self.LoadDefaultData(window, value, parentWindow)

        return TRUE

    ## Mark
    def LoadElementMark(self, window, value, parentWindow):

        #if FALSE == self.CheckKeyList(value["name"], value, self.MARK_KEY_LIST):
        #    return FALSE

        self.LoadDefaultData(window, value, parentWindow)

        return TRUE

    ## Image
    def LoadElementImage(self, window, value, parentWindow):

        if FALSE == self.CheckKeyList(value["name"], value, self.IMAGE_KEY_LIST):
            return FALSE

        window.LoadImage(value["image"])
        self.LoadDefaultData(window, value, parentWindow)

        return TRUE

    ## AniImage
    def LoadElementAniImage(self, window, value, parentWindow):

        if FALSE == self.CheckKeyList(value["name"], value, self.ANI_IMAGE_KEY_LIST):
            return FALSE

        if TRUE == value.has_key("delay"):
            window.SetDelay(value["delay"])

        for image in value["images"]:
            window.AppendImage(image)

        if value.has_key("width") and value.has_key("height"):
            window.SetSize(value["width"], value["height"])

        self.LoadDefaultData(window, value, parentWindow)

        return TRUE

    ## Expanded Image
    def LoadElementExpandedImage(self, window, value, parentWindow):

        if FALSE == self.CheckKeyList(value["name"], value, self.EXPANDED_IMAGE_KEY_LIST):
            return FALSE

        window.LoadImage(value["image"])

        if TRUE == value.has_key("x_origin") and TRUE == value.has_key("y_origin"):
            window.SetOrigin(float(value["x_origin"]), float(value["y_origin"]))

        if TRUE == value.has_key("x_scale") and TRUE == value.has_key("y_scale"):
            window.SetScale(float(value["x_scale"]), float(value["y_scale"]))

        if TRUE == value.has_key("rect"):
            RenderingRect = value["rect"]
            window.SetRenderingRect(RenderingRect[0], RenderingRect[1], RenderingRect[2], RenderingRect[3])

        if TRUE == value.has_key("mode"):
            mode = value["mode"]
            if "MODULATE" == mode:
                window.SetRenderingMode(wndMgr.RENDERING_MODE_MODULATE)

        self.LoadDefaultData(window, value, parentWindow)

        return TRUE

    ## Slot
    def LoadElementSlot(self, window, value, parentWindow):

        if FALSE == self.CheckKeyList(value["name"], value, self.SLOT_KEY_LIST):
            return FALSE

        global_x = int(value["x"])
        global_y = int(value["y"])
        global_width = int(value["width"])
        global_height = int(value["height"])

        window.SetPosition(global_x, global_y)
        window.SetSize(global_width, global_height)
        window.Show()

        r = 1.0
        g = 1.0
        b = 1.0
        a = 1.0

        if TRUE == value.has_key("image_r") and \
            TRUE == value.has_key("image_g") and \
            TRUE == value.has_key("image_b") and \
            TRUE == value.has_key("image_a"):
            r = float(value["image_r"])
            g = float(value["image_g"])
            b = float(value["image_b"])
            a = float(value["image_a"])

        SLOT_ONE_KEY_LIST = ("index", "x", "y", "width", "height")

        for slot in value["slot"]:
            if TRUE == self.CheckKeyList(value["name"] + " - one", slot, SLOT_ONE_KEY_LIST):
                wndMgr.AppendSlot(window.hWnd,
                                    int(slot["index"]),
                                    int(slot["x"]),
                                    int(slot["y"]),
                                    int(slot["width"]),
                                    int(slot["height"]))

        if TRUE == value.has_key("image"):
            wndMgr.SetSlotBaseImage(window.hWnd,
                                    value["image"],
                                    r, g, b, a)

        return TRUE

    def LoadElementCandidateList(self, window, value, parentWindow):
        if FALSE == self.CheckKeyList(value["name"], value, self.CANDIDATE_LIST_KEY_LIST):
            return FALSE

        window.SetPosition(int(value["x"]), int(value["y"]))
        window.SetItemSize(int(value["item_xsize"]), int(value["item_ysize"]))
        window.SetItemStep(int(value["item_step"]))       
        window.Show()

        return TRUE
                
    ## Table
    def LoadElementGridTable(self, window, value, parentWindow):

        if FALSE == self.CheckKeyList(value["name"], value, self.GRID_TABLE_KEY_LIST):
            return FALSE

        xBlank = 0
        yBlank = 0
        if TRUE == value.has_key("x_blank"):
            xBlank = int(value["x_blank"])
        if TRUE == value.has_key("y_blank"):
            yBlank = int(value["y_blank"])

        if localeInfo.IsARABIC():
            pass
        else:
            window.SetPosition(int(value["x"]), int(value["y"]))

        window.ArrangeSlot(    int(value["start_index"]),
                            int(value["x_count"]),
                            int(value["y_count"]),
                            int(value["x_step"]),
                            int(value["y_step"]),
                            xBlank,
                            yBlank)
        if TRUE == value.has_key("image"):
            r = 1.0
            g = 1.0
            b = 1.0
            a = 1.0
            if TRUE == value.has_key("image_r") and \
                TRUE == value.has_key("image_g") and \
                TRUE == value.has_key("image_b") and \
                TRUE == value.has_key("image_a"):
                r = float(value["image_r"])
                g = float(value["image_g"])
                b = float(value["image_b"])
                a = float(value["image_a"])
            wndMgr.SetSlotBaseImage(window.hWnd, value["image"], r, g, b, a)

        if TRUE == value.has_key("style"):
            if "select" == value["style"]:
                wndMgr.SetSlotStyle(window.hWnd, wndMgr.SLOT_STYLE_SELECT)
        if localeInfo.IsARABIC():
            self.LoadDefaultData(window, value, parentWindow)
        else:
            window.Show()

        return TRUE

    ## Text
    def LoadElementText(self, window, value, parentWindow):

        if value.has_key("fontsize"):
            fontSize = value["fontsize"]

            if "LARGE" == fontSize:
                window.SetFontName(localeInfo.UI_DEF_FONT_LARGE)

        elif value.has_key("fontname"):
            fontName = value["fontname"]
            window.SetFontName(fontName)

        if value.has_key("text_horizontal_align"):
            if "left" == value["text_horizontal_align"]:
                window.SetHorizontalAlignLeft()
            elif "center" == value["text_horizontal_align"]:
                window.SetHorizontalAlignCenter()
            elif "right" == value["text_horizontal_align"]:
                window.SetHorizontalAlignRight()

        if value.has_key("text_vertical_align"):
            if "top" == value["text_vertical_align"]:
                window.SetVerticalAlignTop()
            elif "center" == value["text_vertical_align"]:
                window.SetVerticalAlignCenter()
            elif "bottom" == value["text_vertical_align"]:
                window.SetVerticalAlignBottom()

        if value.has_key("all_align"):
            window.SetHorizontalAlignCenter()
            window.SetVerticalAlignCenter()
            window.SetWindowHorizontalAlignCenter()
            window.SetWindowVerticalAlignCenter()

        if value.has_key("r") and value.has_key("g") and value.has_key("b"):
            window.SetFontColor(float(value["r"]), float(value["g"]), float(value["b"]))
        elif value.has_key("color"):
            window.SetPackedFontColor(value["color"])
        else:
            window.SetFontColor(0.8549, 0.8549, 0.8549)

        if value.has_key("outline"):
            if value["outline"]:
                window.SetOutline()
        if TRUE == value.has_key("text"):
            window.SetText(value["text"])

        self.LoadDefaultData(window, value, parentWindow)

        return TRUE

    ## EditLine
    def LoadElementEditLine(self, window, value, parentWindow):

        if FALSE == self.CheckKeyList(value["name"], value, self.EDIT_LINE_KEY_LIST):
            return FALSE


        if value.has_key("secret_flag"):
            window.SetSecret(value["secret_flag"])
        if value.has_key("with_codepage"):
            if value["with_codepage"]:
                window.bCodePage = TRUE
        if value.has_key("only_number"):
            if value["only_number"]:
                window.SetNumberMode()
        if value.has_key("enable_codepage"):
            window.SetIMEFlag(value["enable_codepage"])
        if value.has_key("enable_ime"):
            window.SetIMEFlag(value["enable_ime"])
        if value.has_key("limit_width"):
            window.SetLimitWidth(value["limit_width"])
        if value.has_key("multi_line"):
            if value["multi_line"]:
                window.SetMultiLine()

        window.SetMax(int(value["input_limit"]))
        window.SetSize(int(value["width"]), int(value["height"]))
        self.LoadElementText(window, value, parentWindow)

        return TRUE

    ## TitleBar
    def LoadElementTitleBar(self, window, value, parentWindow):

        if FALSE == self.CheckKeyList(value["name"], value, self.TITLE_BAR_KEY_LIST):
            return FALSE

        window.MakeTitleBar(int(value["width"]), value.get("color", "red"))
        self.LoadDefaultData(window, value, parentWindow)

        return TRUE

    ## HorizontalBar
    def LoadElementHorizontalBar(self, window, value, parentWindow):

        if FALSE == self.CheckKeyList(value["name"], value, self.HORIZONTAL_BAR_KEY_LIST):
            return FALSE

        window.Create(int(value["width"]))
        self.LoadDefaultData(window, value, parentWindow)

        return TRUE

    ## Board
    def LoadElementBoard(self, window, value, parentWindow):

        if FALSE == self.CheckKeyList(value["name"], value, self.BOARD_KEY_LIST):
            return FALSE

        window.SetSize(int(value["width"]), int(value["height"]))
        self.LoadDefaultData(window, value, parentWindow)

        return TRUE

    ## Board With TitleBar
    def LoadElementBoardWithTitleBar(self, window, value, parentWindow):

        if FALSE == self.CheckKeyList(value["name"], value, self.BOARD_WITH_TITLEBAR_KEY_LIST):
            return FALSE

        window.SetSize(int(value["width"]), int(value["height"]))
        window.SetTitleName(value["title"])
        self.LoadDefaultData(window, value, parentWindow)

        return TRUE

    ## ThinBoard
    def LoadElementThinBoard(self, window, value, parentWindow):

        if FALSE == self.CheckKeyList(value["name"], value, self.BOARD_KEY_LIST):
            return FALSE

        window.SetSize(int(value["width"]), int(value["height"]))
        self.LoadDefaultData(window, value, parentWindow)

        return TRUE

        ## MiddleBoard
        def LoadElementMiddleBoard(self, window, value, parentWindow):

                if FALSE == self.CheckKeyList(value["name"], value, self.BOARD_KEY_LIST):
                        return FALSE

                window.SetSize(int(value["width"]), int(value["height"]))
                self.LoadDefaultData(window, value, parentWindow)

                return TRUE

    ## ThinBoard Gold
    def LoadElementThinBoardGold(self, window, value, parentWindow):

        if False == self.CheckKeyList(value["name"], value, self.BOARD_KEY_LIST):
            return False

        window.SetSize(int(value["width"]), int(value["height"]))
        self.LoadDefaultData(window, value, parentWindow)

        return True

    def LoadElementThinBoardCircle(self, window, value, parentWindow):

        if False == self.CheckKeyList(value["name"], value, self.BOARD_KEY_LIST):
            return False

        window.SetSize(int(value["width"]), int(value["height"]))
        self.LoadDefaultData(window, value, parentWindow)

        return True

        
    ## ThinBoardGold
    def LoadElementThinBoardGold(self, window, value, parentWindow):

        if FALSE == self.CheckKeyList(value["name"], value, self.BOARD_KEY_LIST):
            return FALSE

        window.SetSize(int(value["width"]), int(value["height"]))
        self.LoadDefaultData(window, value, parentWindow)

        return TRUE
        
        ## ThinBoardCircle
    def LoadElementThinBoardCircle(self, window, value, parentWindow):

        if FALSE == self.CheckKeyList(value["name"], value, self.BOARD_KEY_LIST):
            return FALSE

        window.SetSize(int(value["width"]), int(value["height"]))
        self.LoadDefaultData(window, value, parentWindow)

        return TRUE

    ## Box
    def LoadElementBox(self, window, value, parentWindow):

        if FALSE == self.CheckKeyList(value["name"], value, self.BOX_KEY_LIST):
            return FALSE

        if TRUE == value.has_key("color"):
            window.SetColor(value["color"])

        window.SetSize(int(value["width"]), int(value["height"]))
        self.LoadDefaultData(window, value, parentWindow)

        return TRUE

    ## Bar
    def LoadElementBar(self, window, value, parentWindow):

        if FALSE == self.CheckKeyList(value["name"], value, self.BAR_KEY_LIST):
            return FALSE

        if TRUE == value.has_key("color"):
            window.SetColor(value["color"])

        window.SetSize(int(value["width"]), int(value["height"]))
        self.LoadDefaultData(window, value, parentWindow)

        return TRUE

    ## Line
    def LoadElementLine(self, window, value, parentWindow):

        if FALSE == self.CheckKeyList(value["name"], value, self.LINE_KEY_LIST):
            return FALSE

        if TRUE == value.has_key("color"):
            window.SetColor(value["color"])

        window.SetSize(int(value["width"]), int(value["height"]))
        self.LoadDefaultData(window, value, parentWindow)

        return TRUE

    ## Slot
    def LoadElementSlotBar(self, window, value, parentWindow):

        if FALSE == self.CheckKeyList(value["name"], value, self.SLOTBAR_KEY_LIST):
            return FALSE

        window.SetSize(int(value["width"]), int(value["height"]))
        self.LoadDefaultData(window, value, parentWindow)

        return TRUE

    ## Gauge
    def LoadElementGauge(self, window, value, parentWindow):

        if FALSE == self.CheckKeyList(value["name"], value, self.GAUGE_KEY_LIST):
            return FALSE

        window.MakeGauge(value["width"], value["color"])
        self.LoadDefaultData(window, value, parentWindow)

        return TRUE

    ## ScrollBar
    def LoadElementScrollBar(self, window, value, parentWindow):

        if FALSE == self.CheckKeyList(value["name"], value, self.SCROLLBAR_KEY_LIST):
            return FALSE

        window.SetScrollBarSize(value["size"])
        self.LoadDefaultData(window, value, parentWindow)

        return TRUE

    ## SliderBar
    def LoadElementSliderBar(self, window, value, parentWindow):

        self.LoadDefaultData(window, value, parentWindow)

        return TRUE

    ## ListBox
    def LoadElementListBox(self, window, value, parentWindow):

        if FALSE == self.CheckKeyList(value["name"], value, self.LIST_BOX_KEY_LIST):
            return FALSE

        if value.has_key("item_align"):
            window.SetTextCenterAlign(value["item_align"])

        window.SetSize(value["width"], value["height"])
        self.LoadDefaultData(window, value, parentWindow)

        return TRUE

    ## ListBox2
    def LoadElementListBox2(self, window, value, parentWindow):

        if FALSE == self.CheckKeyList(value["name"], value, self.LIST_BOX_KEY_LIST):
            return FALSE

        window.SetRowCount(value.get("row_count", 10))
        window.SetSize(value["width"], value["height"])
        self.LoadDefaultData(window, value, parentWindow)

        if value.has_key("item_align"):
            window.SetTextCenterAlign(value["item_align"])

        return TRUE
    def LoadElementListBoxEx(self, window, value, parentWindow):

        if FALSE == self.CheckKeyList(value["name"], value, self.LIST_BOX_KEY_LIST):
            return FALSE

        window.SetSize(value["width"], value["height"])
        self.LoadDefaultData(window, value, parentWindow)

        if value.has_key("itemsize_x") and value.has_key("itemsize_y"):
            window.SetItemSize(int(value["itemsize_x"]), int(value["itemsize_y"]))

        if value.has_key("itemstep"):
            window.SetItemStep(int(value["itemstep"]))

        if value.has_key("viewcount"):
            window.SetViewItemCount(int(value["viewcount"]))

        return TRUE

class ReadingWnd(Bar):

    def __init__(self):
        Bar.__init__(self,"TOP_MOST")

        self.__BuildText()
        self.SetSize(80, 19)
        self.Show()

    def __del__(self):
        Bar.__del__(self)

    def __BuildText(self):
        self.text = TextLine()
        self.text.SetParent(self)
        self.text.SetPosition(4, 3)
        self.text.Show()

    def SetText(self, text):
        self.text.SetText(text)

    def SetReadingPosition(self, x, y):
        xPos = x + 2
        yPos = y  - self.GetHeight() - 2
        self.SetPosition(xPos, yPos)

    def SetTextColor(self, color):
        self.text.SetPackedFontColor(color)


def MakeSlotBar(parent, x, y, width, height):
    slotBar = SlotBar()
    slotBar.SetParent(parent)
    slotBar.SetSize(width, height)
    slotBar.SetPosition(x, y)
    slotBar.Show()
    return slotBar

def MakeImageBox(parent, name, x, y):
    image = ImageBox()
    image.SetParent(parent)
    image.LoadImage(name)
    image.SetPosition(x, y)
    image.Show()
    return image

def MakeTextLine(parent):
    textLine = TextLine()
    textLine.SetParent(parent)
    textLine.SetWindowHorizontalAlignCenter()
    textLine.SetWindowVerticalAlignCenter()
    textLine.SetHorizontalAlignCenter()
    textLine.SetVerticalAlignCenter()
    textLine.Show()
    return textLine

def MakeButton(parent, x, y, tooltipText, path, up, over, down):
    button = Button()
    button.SetParent(parent)
    button.SetPosition(x, y)
    button.SetUpVisual(path + up)
    button.SetOverVisual(path + over)
    button.SetDownVisual(path + down)
    button.SetToolTipText(tooltipText)
    button.Show()
    return button

def RenderRoundBox(x, y, width, height, color):
    grp.SetColor(color)
    grp.RenderLine(x+2, y, width-3, 0)
    grp.RenderLine(x+2, y+height, width-3, 0)
    grp.RenderLine(x, y+2, 0, height-4)
    grp.RenderLine(x+width, y+1, 0, height-3)
    grp.RenderLine(x, y+2, 2, -2)
    grp.RenderLine(x, y+height-2, 2, 2)
    grp.RenderLine(x+width-2, y, 2, 2)
    grp.RenderLine(x+width-2, y+height, 2, -2)

def GenerateColor(r, g, b):
    r = float(r) / 255.0
    g = float(g) / 255.0
    b = float(b) / 255.0
    return grp.GenerateColor(r, g, b, 1.0)

def EnablePaste(flag):
    ime.EnablePaste(flag)

def GetHyperlink():
    return wndMgr.GetHyperlink()

RegisterToolTipWindow("TEXT", TextLine)

class CheckBox(Window):
    def __init__(self):
        Window.__init__(self)
        
        self.backgroundImage = None
        self.checkImage = None

        self.eventFunc = { "ON_CHECK" : None, "ON_UNCKECK" : None, }
        self.eventArgs = { "ON_CHECK" : None, "ON_UNCKECK" : None, }
    
        self.CreateElements()
        
    def __del__(self):
        Window.__del__(self)
        
        self.backgroundImage = None
        self.checkImage = None
        
        self.eventFunc = { "ON_CHECK" : None, "ON_UNCKECK" : None, }
        self.eventArgs = { "ON_CHECK" : None, "ON_UNCKECK" : None, }
        
    def CreateElements(self):
        self.backgroundImage = ImageBox()
        self.backgroundImage.SetParent(self)
        self.backgroundImage.AddFlag("not_pick")
        self.backgroundImage.LoadImage("d:/ymir work/ui/game/refine/checkbox.tga")
        self.backgroundImage.Show()
        
        self.checkImage = ImageBox()
        self.checkImage.SetParent(self)
        self.checkImage.AddFlag("not_pick")
        self.checkImage.SetPosition(0, -4)
        self.checkImage.LoadImage("d:/ymir work/ui/game/refine/checked.tga")
        self.checkImage.Hide()
        
        self.textInfo = TextLine()
        self.textInfo.SetParent(self)
        self.textInfo.SetPosition(20, -2)
        self.textInfo.Show()
        
        self.SetSize(self.backgroundImage.GetWidth() + self.textInfo.GetTextSize()[0], self.backgroundImage.GetHeight() + self.textInfo.GetTextSize()[1])
        
    def SetTextInfo(self, info):
        if self.textInfo:
            self.textInfo.SetText(info)
            
        self.SetSize(self.backgroundImage.GetWidth() + self.textInfo.GetTextSize()[0], self.backgroundImage.GetHeight() + self.textInfo.GetTextSize()[1])
        
    def SetCheckStatus(self, flag):
        if flag:
            self.checkImage.Show()
        else:
            self.checkImage.Hide()
    
    def GetCheckStatus(self):
        if self.checkImage:
            return self.checkImage.IsShow()
            
        return False
        
    def SetEvent(self, func, *args) :
        result = self.eventFunc.has_key(args[0])       
        if result :
            self.eventFunc[args[0]] = func
            self.eventArgs[args[0]] = args
        else :
            print "[ERROR] ui.py SetEvent, Can`t Find has_key : %s" % args[0]
        
    def OnMouseLeftButtonUp(self):
        if self.checkImage:
            if self.checkImage.IsShow():
                self.checkImage.Hide()

                if self.eventFunc["ON_UNCKECK"]:
                    apply(self.eventFunc["ON_UNCKECK"], self.eventArgs["ON_UNCKECK"])
            else:
                self.checkImage.Show()

                if self.eventFunc["ON_CHECK"]:
                    apply(self.eventFunc["ON_CHECK"], self.eventArgs["ON_CHECK"])
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst