Guest User

Untitled

a guest
Jul 24th, 2021
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 24.00 KB | None | 0 0
  1. import ui
  2. import dbg
  3. import app
  4. import grp
  5. import grpImage
  6. import event
  7. import time
  8. import wndMgr
  9. import net
  10.  
  11. QUEST_BOARD_IMAGE_DIR = 'd:/ymir work/ui/game/questboard/'
  12.  
  13. cur_questpage_number = 1
  14. entire_questbutton_number = 0
  15. entire_questpage_number = 1
  16.  
  17. # TOOLTIP_IMAGE_BOX
  18. class ToolTipImageBox(ui.ImageBox):
  19.     def __init__(self):
  20.         ui.ImageBox.__init__(self)
  21.         self.DestroyToolTip()
  22.     def __del__(self):
  23.         ui.ImageBox.__del__(self)
  24.  
  25.     def CreateToolTip(self, parent, title, desc, x, y):
  26.         import uiToolTip
  27.         self.toolTip = uiToolTip.ToolTip()
  28.         self.toolTip.SetWindowHorizontalAlignCenter()
  29.         self.toolTip.SetFollow(FALSE)
  30.         self.toolTip.SetTitle(title)
  31.         self.toolTip.SetPosition(x, y)
  32.  
  33.         desc = desc.replace("|", "/")
  34.         for line in desc.split("/"):
  35.             self.toolTip.AutoAppendTextLine(line)
  36.  
  37.         self.toolTip.ResizeToolTip()
  38.         self.toolTip.Hide()
  39.  
  40.     def DestroyToolTip(self):
  41.         self.toolTip = None
  42.  
  43.     def OnMouseOverIn(self):
  44.         if self.toolTip:
  45.             self.toolTip.SetTop()
  46.             self.toolTip.Show()
  47.  
  48.     def OnMouseOverOut(self):
  49.         if self.toolTip:
  50.             self.toolTip.Hide()
  51. # END_OF_TOOLTIP_IMAGE_BOX
  52.  
  53. class QuestCurtain(ui.Window):
  54.     CURTAIN_TIME = 0.25
  55.     CURTAIN_SPEED = 200
  56.     BarHeight = 60
  57.     OnDoneEventList = []
  58.     def __init__(self,layer="TOP_MOST"):
  59.         ui.Window.__init__(self,layer)
  60.         self.TopBar = ui.Bar("TOP_MOST")
  61.         self.BottomBar = ui.Bar("TOP_MOST")
  62.  
  63.         self.TopBar.Show()
  64.         self.BottomBar.Show()
  65.  
  66.         self.TopBar.SetColor(0xff000000)
  67.         self.BottomBar.SetColor(0xff000000)
  68.  
  69.         self.TopBar.SetPosition(0,-self.BarHeight)
  70.         self.TopBar.SetSize(wndMgr.GetScreenWidth(),self.BarHeight)
  71.  
  72.         self.BottomBar.SetPosition(0,wndMgr.GetScreenHeight())
  73.         self.BottomBar.SetSize(wndMgr.GetScreenWidth(),self.BarHeight)
  74.  
  75.         self.CurtainMode = 0
  76.  
  77.         self.lastclock = time.clock()
  78.  
  79.     def Close(self):
  80.         self.CurtainMode = 0
  81.         self.TopBar.SetPosition(0, -self.BarHeight-1)
  82.         self.BottomBar.SetPosition(0, wndMgr.GetScreenHeight()+1)
  83.         for OnDoneEvent in QuestCurtain.OnDoneEventList:
  84.             apply(OnDoneEvent,(self,))
  85.         QuestCurtain.OnDoneEventList = []
  86.  
  87.     def OnUpdate(self):
  88.         dt = time.clock() - self.lastclock
  89.         if self.CurtainMode>0:
  90.             self.TopBar.SetPosition(0, int(self.TopBar.GetGlobalPosition()[1]+dt*self.CURTAIN_SPEED))
  91.             self.BottomBar.SetPosition(0, int(self.BottomBar.GetGlobalPosition()[1]-dt*self.CURTAIN_SPEED))
  92.             if self.TopBar.GetGlobalPosition()[1]>0:
  93.                 self.TopBar.SetPosition(0,0)
  94.                 self.BottomBar.SetPosition(0,wndMgr.GetScreenHeight()-self.BarHeight)
  95.                 self.CurtainMode = 0
  96.  
  97.         elif self.CurtainMode<0:
  98.             self.TopBar.SetPosition(0, int(self.TopBar.GetGlobalPosition()[1]-dt*self.CURTAIN_SPEED))
  99.             self.BottomBar.SetPosition(0, int(self.BottomBar.GetGlobalPosition()[1]+dt*self.CURTAIN_SPEED))
  100.             if self.TopBar.GetGlobalPosition()[1]<-self.BarHeight:
  101.                 self.TopBar.SetPosition(0,-self.BarHeight-1)
  102.                 self.BottomBar.SetPosition(0,wndMgr.GetScreenHeight()+1)
  103.                 self.Close()
  104.  
  105.         self.lastclock = time.clock()
  106.  
  107. class EventCurtain(ui.Bar):
  108.  
  109.     COLOR_WHITE = 0.0
  110.     COLOR_BLACK = 1.0
  111.  
  112.     DEFAULT_FADE_SPEED = 0.035
  113.  
  114.     STATE_WAIT = 0
  115.     STATE_OUT = 1
  116.     STATE_IN = 2
  117.  
  118.     def __init__(self, index):
  119.         print "NEW EVENT CURTAIN  ----------------------------------------------------------------------------"
  120.         ui.Bar.__init__(self, "CURTAIN")
  121.         self.SetWindowName("EventCurtain")
  122.         self.AddFlag("float")
  123.         self.SetSize(wndMgr.GetScreenWidth(), wndMgr.GetScreenHeight())
  124.         self.Hide()
  125.  
  126.         self.fadeColor = 1.0
  127.         self.curAlpha = 0.0
  128.         self.FadeInFlag = FALSE
  129.         self.state = self.STATE_WAIT
  130.         self.speed = 1.0
  131.         self.eventIndex = index
  132.  
  133.     def __del__(self):
  134.         print "---------------------------------------------------------------------------- DELETE EVENT CURTAIN"
  135.         ui.Bar.__del__(self)
  136.  
  137.     def SetAlpha(self, alpha):
  138.         color = grp.GenerateColor(self.fadeColor, self.fadeColor, self.fadeColor, alpha)
  139.         self.SetColor(color)
  140.  
  141.     def FadeOut(self, speed):
  142.         self.curAlpha = 0.0
  143.         self.__StartFade(self.STATE_OUT, 0.0, speed)
  144.  
  145.     def FadeIn(self, speed):
  146.         self.curAlpha = 1.0
  147.         self.__StartFade(self.STATE_IN, 0.0, speed)
  148.  
  149.     def WhiteOut(self, speed):
  150.         self.curAlpha = 0.0
  151.         self.__StartFade(self.STATE_OUT, 1.0, speed)
  152.  
  153.     def WhiteIn(self, speed):
  154.         self.curAlpha = 1.0
  155.         self.__StartFade(self.STATE_IN, 1.0, speed)
  156.  
  157.     def __StartFade(self, state, color, speed):
  158.         self.state = state
  159.         self.fadeColor = color
  160.         self.Show()
  161.  
  162.         self.speed = self.DEFAULT_FADE_SPEED
  163.         if 0 != speed:
  164.             self.speed = speed
  165.  
  166.     def __EndFade(self):
  167.         event.EndEventProcess(self.eventIndex)
  168.  
  169.     def OnUpdate(self):
  170.  
  171.         if self.STATE_OUT == self.state:
  172.  
  173.             self.curAlpha += self.speed
  174.  
  175.             if self.curAlpha >= 1.0:
  176.  
  177.                 self.state = self.STATE_WAIT
  178.                 self.curAlpha = 1.0
  179.                 self.__EndFade()
  180.  
  181.         elif self.STATE_IN == self.state:
  182.  
  183.             self.curAlpha -= self.speed
  184.  
  185.             if self.curAlpha <= 0.0:
  186.  
  187.                 self.state = self.STATE_WAIT
  188.                 self.curAlpha = 0.0
  189.                 self.__EndFade()
  190.                 self.Hide()
  191.  
  192.         self.SetAlpha(self.curAlpha)
  193.  
  194. class BarButton(ui.Button):
  195.     ColorUp = 0x40999999
  196.     ColorDown = 0x40aaaacc
  197.     ColorOver = 0x40ddddff
  198.  
  199.     UP=0
  200.     DOWN=1
  201.     OVER=2
  202.  
  203.     def __init__(self, layer = "UI",
  204.             aColorUp   = ColorUp,
  205.             aColorDown = ColorDown,
  206.             aColorOver = ColorOver):
  207.         ui.Button.__init__(self,layer)
  208.         self.state = self.UP
  209.         self.colortable = aColorUp, aColorDown, aColorOver
  210.  
  211.     def OnRender(self):
  212.         x,y = self.GetGlobalPosition()
  213.         grp.SetColor(self.colortable[self.state])
  214.         grp.RenderBar(x,y,self.GetWidth(),self.GetHeight())
  215.  
  216.     def CallEvent(self):
  217.         self.state = self.UP
  218.         ui.Button.CallEvent(self)
  219.  
  220.     def DownEvent(self):
  221.         self.state = self.DOWN
  222.  
  223.     def ShowToolTip(self):
  224.         self.state = self.OVER
  225.  
  226.     def HideToolTip(self):
  227.         self.state = self.UP
  228.  
  229. class DescriptionWindow(ui.Window):
  230.     def __init__(self,idx):
  231.         ui.Window.__init__(self, "TOP_MOST")
  232.         self.descIndex = idx
  233.     def __del__(self):
  234.         ui.Window.__del__(self)
  235.     def OnRender(self):
  236.         event.RenderEventSet(self.descIndex)
  237.  
  238. class QuestDialog(ui.ScriptWindow):
  239.  
  240.     TITLE_STATE_NONE = 0
  241.     TITLE_STATE_APPEAR = 1
  242.     TITLE_STATE_SHOW = 2
  243.     TITLE_STATE_DISAPPEAR = 3
  244.  
  245.     SKIN_NONE = 0
  246.     SKIN_CINEMA = 5
  247.    
  248.     QUEST_BUTTON_MAX_NUM = 8
  249.  
  250.     def __init__(self,skin,idx):
  251.  
  252.         ui.ScriptWindow.__init__(self)
  253.         self.SetWindowName("quest dialog")
  254.  
  255.         self.focusIndex = 0
  256.        
  257.         self.board = None
  258.         self.sx = 0
  259.         self.sy = 0
  260.  
  261.         self.skin = skin
  262.         if skin == 3:
  263.             event.SetRestrictedCount(idx,36)
  264.         else:
  265.             event.SetRestrictedCount(idx,52)
  266.  
  267.         QuestCurtain.BarHeight = (wndMgr.GetScreenHeight()-wndMgr.GetScreenWidth()*9/16)/2
  268.  
  269.         if QuestCurtain.BarHeight<0:
  270.             QuestCurtain.BarHeight = 50
  271.         if not ('QuestCurtain' in QuestDialog.__dict__):
  272.             QuestDialog.QuestCurtain = QuestCurtain()
  273.             QuestDialog.QuestCurtain.Show()
  274.  
  275.         QuestDialog.QuestCurtain.CurtainMode = 1
  276.         self.nextCurtainMode = 0
  277.         if self.skin:
  278.             QuestDialog.QuestCurtain.CurtainMode = 1
  279.             self.nextCurtainMode = 0
  280.             self.LoadDialog(self.skin)
  281.         else:
  282.             QuestDialog.QuestCurtain.CurtainMode = -1
  283.             self.nextCurtainMode = -1
  284.  
  285.         self.descIndex = idx
  286.         self.descWindow = DescriptionWindow(idx)
  287.         self.descWindow.Show()
  288.         self.eventCurtain = EventCurtain(idx)
  289.         event.SetEventHandler(idx, self)
  290.  
  291.         self.OnCloseEvent = None
  292.         self.btnAnswer = None
  293.         self.btnNext = None
  294.         self.imgLeft = None
  295.         self.imgTop = None
  296.         self.imgBackground = None
  297.         self.imgTitle = None
  298.         self.titleState = self.TITLE_STATE_NONE
  299.         self.titleShowTime = 0
  300.         self.images = []
  301.         # self.prevbutton = None
  302.         # self.nextbutton = None
  303.  
  304.         # QUEST_INPUT      
  305.         self.needInputString = FALSE
  306.         self.editSlot = None
  307.         self.editLine = None
  308.         # END_OF_QUEST_INPUT
  309.  
  310.     def __del__(self):
  311.         ui.ScriptWindow.__del__(self)
  312.  
  313.     def LoadDialog(self, skin):
  314.         try:
  315.             PythonScriptLoader = ui.PythonScriptLoader()
  316.             PythonScriptLoader.LoadScriptFile(self, "uiscript/questdialog.py")
  317.         except RuntimeError:
  318.             dbg.TraceError("QuestDialog.LoadDialog")
  319.  
  320.         try:
  321.             self.board = self.GetChild('board')
  322.         except RuntimeError:
  323.             dbg.TraceError("QuestDialog.BindObject")
  324.  
  325.         self.SetCenterPosition()
  326.         if self.SKIN_CINEMA == skin:
  327.             self.board.Hide()
  328.  
  329.     # QUEST_CANCEL
  330.     def OnCancel(self):
  331.         self.nextCurtainMode = -1
  332.         self.CloseSelf()
  333.     # END_OF_QUEST_CANCEL
  334.  
  335.     def CloseSelf(self):
  336.  
  337.         QuestDialog.QuestCurtain.CurtainMode = self.nextCurtainMode
  338.         self.btnNext = None
  339.         self.descWindow = None
  340.         self.btnAnswer = None
  341.         self.Destroy()
  342.         if self.descIndex:
  343.             event.ClearEventSet(self.descIndex)
  344.             self.descIndex = None
  345.  
  346.         self.focusIndex = 0
  347.        
  348.     def Destroy(self):
  349.  
  350.         self.ClearDictionary()
  351.         if self.OnCloseEvent:
  352.             self.OnCloseEvent()
  353.             self.OnCloseEvent = None
  354.  
  355.             # QUEST_INPUT
  356.             if self.needInputString:
  357.                 if self.editLine:
  358.                     text = self.editLine.GetText()
  359.                     net.SendQuestInputStringPacket(text)
  360.             # END_OF_QUEST_INPUT
  361.  
  362.         self.imgTitle = None
  363.         self.images = None
  364.         self.eventCurtain = None
  365.         self.board = None
  366.  
  367.     def OnUpdate(self):
  368.         if self.skin == self.SKIN_CINEMA:
  369.             event.UpdateEventSet(self.descIndex, 50, -(wndMgr.GetScreenHeight() - 44))
  370.            
  371.         # AUTO_RESIZE_BOARD
  372.         elif self.skin == 3:           
  373.             if self.board:
  374.                 event.UpdateEventSet(self.descIndex, self.board.GetGlobalPosition()[0]+20+self.sx, -self.board.GetGlobalPosition()[1]-20-self.sy)
  375.                 event.SetEventSetWidth(self.descIndex, self.board.GetWidth()-40)
  376.         elif self.skin:        
  377.             if self.board:
  378.                 event.UpdateEventSet(self.descIndex, self.board.GetGlobalPosition()[0]+20, -self.board.GetGlobalPosition()[1]-20)
  379.                 event.SetEventSetWidth(self.descIndex, self.board.GetWidth()-40)
  380.         # END_OF_AUTO_RESIZE_BOARD
  381.         else:
  382.             event.UpdateEventSet(self.descIndex, 0, 0)
  383.  
  384.         if self.TITLE_STATE_NONE != self.titleState:
  385.  
  386.             curTime = app.GetTime()
  387.             elapsedTime = app.GetTime() - self.titleShowTime
  388.  
  389.             if self.TITLE_STATE_APPEAR == self.titleState:
  390.                 self.imgTitle.SetAlpha(elapsedTime*2)
  391.                 if elapsedTime > 0.5:
  392.                     self.titleState = self.TITLE_STATE_SHOW
  393.                     self.titleShowTime = curTime
  394.  
  395.             elif self.TITLE_STATE_SHOW == self.titleState:
  396.                 if elapsedTime > 1.0:
  397.                     self.titleState = self.TITLE_STATE_DISAPPEAR
  398.                     self.titleShowTime = curTime
  399.  
  400.             elif self.TITLE_STATE_DISAPPEAR == self.titleState:
  401.                 self.imgTitle.SetAlpha(1.0 - elapsedTime*2)
  402.                 if elapsedTime > 0.5:
  403.                     self.titleState = self.TITLE_STATE_NONE
  404.                     self.titleShowTime = curTime
  405.  
  406.     ## Set Variables
  407.  
  408.     def AddOnCloseEvent(self,f):
  409.         if self.OnCloseEvent:
  410.             self.OnCloseEvent = lambda z=[self.OnCloseEvent, f]:map(apply,z)
  411.         else:
  412.             self.OnCloseEvent = f
  413.  
  414.     def AddOnDoneEvent(self,f):
  415.         QuestCurtain.OnDoneEventList.append(f)
  416.  
  417.     def SetOnCloseEvent(self,f):
  418.         self.OnCloseEvent = f
  419.  
  420.     def SetEventSetPosition(self, x, y):
  421.         self.sx = x
  422.         self.sy = y
  423.  
  424.     def AdjustEventSetPosition(self, x, y):
  425.         self.sx += x
  426.         self.sy += y
  427.  
  428.     ## Event
  429.     # QUEST_CANCEL
  430.     def MakeNextButton(self, button_type):
  431.  
  432.         if self.SKIN_NONE == self.skin:
  433.             return
  434.  
  435.         yPos = event.GetEventSetLocalYPosition(self.descIndex)
  436.  
  437.         b = BarButton()
  438.         b.SetParent(self.board)
  439.         b.SetSize(100,26)
  440.         b.SetPosition(self.sx+self.board.GetWidth()/2-50,self.sy+yPos)
  441.  
  442.         self.nextButtonType = button_type;
  443.        
  444.         import localeinfo
  445.         if event.BUTTON_TYPE_CANCEL == button_type:
  446.             b.SetEvent(lambda s=self:event.SelectAnswer(s.descIndex, 254) or s.OnCancel())
  447.             b.SetText(localeinfo.UI_CANCEL)
  448.         elif event.BUTTON_TYPE_DONE == button_type:
  449.             b.SetEvent(lambda s=self:s.CloseSelf())
  450.             b.SetText(localeinfo.UI_OK)
  451.         elif event.BUTTON_TYPE_NEXT == button_type:
  452.             b.SetEvent(lambda s=self:event.SelectAnswer(s.descIndex, 254) or s.CloseSelf())
  453.             b.SetText(localeinfo.UI_NEXT)
  454.         b.Show()
  455.         b.SetTextColor(0xffffffff)
  456.         self.btnNext = b
  457.     # END_OF_QUEST_CANCEL
  458.    
  459.     def MakeQuestion(self, n):  # nŔş ¸đµç Äů˝şĆ® ´ëȭâŔÇ ¸¶Áö¸· ąöưŔÎ "´Ý±â"¸¦ Ć÷ÇÔÇŃ ŔüĂĽ Äů˝şĆ® ąöư °łĽö. by ±čÁŘČŁ
  460.         global entire_questbutton_number
  461.         global entire_questpage_number
  462.         global cur_questpage_number
  463.         entire_questpage_number = ((n-2)/7)+1
  464.         entire_questbutton_number = n
  465.        
  466.         if not self.board:
  467.             return
  468.            
  469.         c = self.board
  470.  
  471.         def MakeEachButton(i):
  472.             if self.skin == 3:
  473.                 button = BarButton("TOP_MOST",0x50000000, 0x50404040, 0x50606060)
  474.                 button.SetParent(c)
  475.                 button.SetSize(106,26)
  476.                 button.SetPosition(self.sx+c.GetWidth()/2+((i*2)-1)*56-56, self.sy+(event.GetLineCount(self.descIndex))*16+20+5)
  477.                 button.SetText("a")
  478.                 button.SetTextColor(0xff000000)
  479.             else:
  480.                 i = i % 8
  481.                 button = BarButton("TOP_MOST")
  482.                 button.SetParent(c)
  483.                 button.SetSize(200,26)
  484.                 button.SetPosition(self.sx+c.GetWidth()/2-100,self.sy+(event.GetLineCount(self.descIndex)+i*2)*16+20+5)
  485.                 button.SetText("a")
  486.                 button.SetTextColor(0xffffffff)
  487.             return button
  488.            
  489.         def MakeNextPrevPageButton():
  490.             button = BarButton("TOP_MOST")
  491.             button.SetParent(c)
  492.             button.SetSize(52,26)
  493.             button.SetText("a")
  494.             button.SetTextColor(0xffffffff)
  495.             return button
  496.            
  497.         def RefreshQuestPage():
  498.             num = 0
  499.             Showing_button_inx = (cur_questpage_number-1)* self.QUEST_BUTTON_MAX_NUM
  500.                
  501.             while num < n:
  502.                 if num >= Showing_button_inx and num < Showing_button_inx + self.QUEST_BUTTON_MAX_NUM:
  503.                     self.btnAnswer[num].Show()
  504.                 else:
  505.                     self.btnAnswer[num].Hide()
  506.                 num = num + 1
  507.                
  508.             # if cur_questpage_number == 1:
  509.                 # self.prevbutton.Hide()
  510.                 # self.nextbutton.Show()
  511.                
  512.             # elif cur_questpage_number == entire_questpage_number:
  513.                 # self.prevbutton.Show()
  514.                 # self.nextbutton.Hide()
  515.             # else:
  516.                 # self.prevbutton.Show()
  517.                 # self.nextbutton.Show()
  518.            
  519.         def NextQuestPageEvent(one):
  520.             global cur_questpage_number    
  521.             cur_questpage_number = cur_questpage_number + one
  522.             RefreshQuestPage()
  523.                
  524.         def PrevQuestPageEvent(one):
  525.             global cur_questpage_number
  526.             cur_questpage_number = cur_questpage_number - one
  527.             RefreshQuestPage()
  528.  
  529.         self.btnAnswer = [MakeEachButton(i) for i in xrange (n)]
  530.            
  531.         import localeinfo
  532.         # self.prevbutton = MakeNextPrevPageButton()
  533.         # self.prevbutton.SetPosition(self.sx+self.board.GetWidth()/2-164, self.board.GetHeight()/2-16)
  534.         # self.prevbutton.SetText(localeinfo.UI_PREVPAGE)
  535.         # self.prevbutton.SetEvent(PrevQuestPageEvent, 1)
  536.        
  537.         # self.nextbutton = MakeNextPrevPageButton()
  538.         # self.nextbutton.SetPosition(self.sx+self.board.GetWidth()/2+112, self.board.GetHeight()/2-16)
  539.         # self.nextbutton.SetText(localeinfo.UI_NEXTPAGE)      
  540.         # self.nextbutton.SetEvent(NextQuestPageEvent, 1)
  541.        
  542.         if cur_questpage_number != 1:
  543.             cur_questpage_number = 1       
  544.  
  545.     def AppendQuestion(self, name, idx):  # idx´Â 0şÎĹÍ ˝ĂŔŰÇÔ. PythonEventManager.cpp line 881 Âü°í. by ±čÁŘČŁ
  546.         if not self.btnAnswer:
  547.             return
  548.  
  549.         self.btnAnswer[idx].SetText(name)
  550.         x, y= self.btnAnswer[idx].GetGlobalPosition()
  551.        
  552.         def ClickAnswerEvent(s, ai):
  553.             event.SelectAnswer(s.descIndex, ai)
  554.             # self.nextbutton = None
  555.             # self.prevbutton = None
  556.             s.CloseSelf()  
  557.  
  558.         from _weakref import proxy
  559.         self.btnAnswer[idx].SetEvent(ClickAnswerEvent,proxy(self),idx)
  560.        
  561.         global entire_questbutton_number
  562.        
  563.         Showing_button_idx = (cur_questpage_number-1)* self.QUEST_BUTTON_MAX_NUM
  564.        
  565.         if Showing_button_idx <= idx and idx < Showing_button_idx + self.QUEST_BUTTON_MAX_NUM:
  566.             self.btnAnswer[idx].Show()
  567.         else:
  568.             self.btnAnswer[idx].Hide()
  569.         # if entire_questbutton_number >= self.QUEST_BUTTON_MAX_NUM:
  570.             # self.nextbutton.Show()
  571.        
  572.     def FadeOut(self, speed):
  573.         self.eventCurtain.FadeOut(speed)
  574.  
  575.     def FadeIn(self, speed):
  576.         self.eventCurtain.FadeIn(speed)
  577.  
  578.     def WhiteOut(self, speed):
  579.         self.eventCurtain.WhiteOut(speed)
  580.  
  581.     def WhiteIn(self, speed):
  582.         self.eventCurtain.WhiteIn(speed)
  583.  
  584.     def DoneEvent(self):
  585.         self.nextCurtainMode = -1
  586.         if self.SKIN_NONE == self.skin or self.SKIN_CINEMA == self.skin:
  587.             self.CloseSelf()
  588.  
  589.     def __GetQuestImageFileName(self, filename):
  590.         if len(filename) > 1:
  591.             if filename[1]!=':':
  592.                 filename = QUEST_BOARD_IMAGE_DIR+filename
  593.  
  594.         return filename
  595.    
  596.     # QUEST_INPUT
  597.     def OnKeyDown(self, key):
  598.         if self.btnAnswer == None:
  599.             ## Ľ±ĹĂą®ŔĚ ľř°í '´ŮŔ˝', 'Č®ŔÎ' µîŔÇ ŔĎąć ąöư¸¸ ŔÖ´Â °ćżěżˇ ´ëÇŃ Ăł¸®
  600.             if None != self.btnNext:
  601.                 if app.DIK_RETURN == key:
  602.                     self.OnPressEscapeKey()
  603.                
  604.                 if app.DIK_UP == key or app.DIK_DOWN == key:
  605.                     self.btnNext.ShowToolTip()
  606.                
  607.             return TRUE
  608.            
  609.         focusIndex = self.focusIndex;
  610.         lastFocusIndex = focusIndex;
  611.        
  612.         #print "QuestDialog key down - focus, last : ", focusIndex, lastFocusIndex
  613.        
  614.         answerCount = len(self.btnAnswer)
  615.        
  616.         if app.DIK_DOWN == key:
  617.             focusIndex += 1
  618.            
  619.         if app.DIK_UP == key:
  620.             focusIndex -= 1
  621.            
  622.         if focusIndex < 0:
  623.             focusIndex = answerCount - 1
  624.            
  625.         if focusIndex >= answerCount:
  626.             focusIndex = 0
  627.        
  628.         self.focusIndex = focusIndex;
  629.  
  630.         focusBtn = self.btnAnswer[focusIndex]
  631.         lastFocusBtn = self.btnAnswer[lastFocusIndex]
  632.        
  633.         if focusIndex != lastFocusIndex:
  634.             focusBtn.ShowToolTip()
  635.             lastFocusBtn.HideToolTip()
  636.  
  637.         if app.DIK_RETURN == key:
  638.             focusBtn.CallEvent()
  639.            
  640.         return TRUE
  641.        
  642.     def OnPressEscapeKey(self):
  643.  
  644.         # ESC۰ˇ ´­¸° °ćżě "´ŮŔ˝" ąöưŔ» ´©¸Ą °Í°ú °°Ŕş Čż°ú¸¦ ł»µµ·Ď ÇÔ.
  645.         if None != self.btnNext:
  646.             if event.BUTTON_TYPE_CANCEL == self.nextButtonType:
  647.                 event.SelectAnswer(self.descIndex, 254)
  648.                 s.OnCancel()
  649.             elif event.BUTTON_TYPE_DONE == self.nextButtonType:
  650.                 self.CloseSelf()
  651.             elif event.BUTTON_TYPE_NEXT == self.nextButtonType:
  652.                 event.SelectAnswer(self.descIndex, 254)
  653.                 self.CloseSelf()
  654.         else:
  655.             event.SelectAnswer(self.descIndex, entire_questbutton_number - 1)
  656.             # self.nextbutton = None
  657.             # self.prevbutton = None
  658.             self.CloseSelf()   
  659.         return TRUE
  660.  
  661.     def OnIMEReturn(self):
  662.         if self.needInputString:
  663.             self.CloseSelf()
  664.             return TRUE
  665.  
  666.     def OnIMEUpdate(self):
  667.         if not self.needInputString:
  668.             return
  669.  
  670.         if not self.editLine:
  671.             return
  672.  
  673.         self.editLine.OnIMEUpdate()
  674.        
  675.     def OnInput(self):
  676.  
  677.         self.needInputString = TRUE
  678.  
  679.         event.AddEventSetLocalYPosition(self.descIndex, 5+10)
  680.         yPos = event.GetEventSetLocalYPosition(self.descIndex)
  681.  
  682.         self.editSlot = ui.SlotBar()
  683.         self.editSlot.SetSize(200, 18)
  684.         self.editSlot.SetPosition(0, yPos)
  685.         self.editSlot.SetParent(self.board)
  686.         self.editSlot.SetWindowHorizontalAlignCenter()
  687.         self.editSlot.Show()
  688.  
  689.         self.editLine = ui.EditLine()
  690.         self.editLine.SetParent(self.editSlot)
  691.         self.editLine.SetPosition(3, 3)
  692.         self.editLine.SetSize(200, 17)
  693.         self.editLine.SetMax(30)
  694.         self.editLine.SetFocus()
  695.         self.editLine.Show()
  696.  
  697.         event.AddEventSetLocalYPosition(self.descIndex, 25+10)
  698.  
  699.         self.MakeNextButton(event.BUTTON_TYPE_DONE)
  700.  
  701.         self.editLine.UpdateRect()
  702.         self.editSlot.UpdateRect()
  703.         self.board.UpdateRect()
  704.     # END_OF_QUEST_INPUT
  705.  
  706.     def OnImage(self, x, y, filename, desc=""):
  707.         filename = self.__GetQuestImageFileName(filename)
  708.  
  709.         # IMAGE_EXCEPTION_BUG_FIX
  710.         try:
  711.             img = ui.MakeImageBox(self.board, filename, x, y)
  712.             self.images.append(img)
  713.         except RuntimeError:
  714.             pass
  715.         # END_OF_IMAGE_EXCEPTION_BUG_FIX
  716.  
  717.     # QUEST_IMAGE
  718.     def OnInsertItemIcon(self, type, idx, title, desc, index=0, total=1):
  719.         if "item" != type:
  720.             return
  721.  
  722.         import item
  723.         item.SelectItem(idx)
  724.         filename = item.GetIconImageFileName()
  725.  
  726.         underTitle = title
  727.  
  728.         if not title and not desc:
  729.             title = item.GetItemName()
  730.             desc = item.GetItemDescription()
  731.  
  732.             tempDesc = desc
  733.             desc = ""
  734.  
  735.             import grpText
  736.             lineCount = grpText.GetSplitingTextLineCount(tempDesc, 25)
  737.             for i in xrange(lineCount):
  738.                 desc += grpText.GetSplitingTextLine(tempDesc, 25, i) + "/"
  739.  
  740.             desc = desc[:-1]
  741.  
  742.         self.OnInsertImage(filename, underTitle, title, desc, index, total)
  743.  
  744.     def OnInsertImage(self, filename, underTitle, title, desc, index=0, total=1):
  745.        
  746.         if index == 0:
  747.             event.AddEventSetLocalYPosition(self.descIndex, 24)
  748.            
  749.         y = event.GetEventSetLocalYPosition(self.descIndex)
  750.         xBoard, yBoard = self.board.GetGlobalPosition()
  751.  
  752.         try:
  753.             img = ToolTipImageBox()
  754.             img.SetParent(self.board)
  755.             img.LoadImage(filename)
  756.             pos_x = (self.board.GetWidth() * (index + 1) / (total + 1)) - (img.GetWidth() / 2)
  757.             img.SetPosition(pos_x, y)
  758.             #img.SetWindowHorizontalAlignCenter()
  759.             img.DestroyToolTip()
  760.             if title and desc:
  761.                 img.CreateToolTip(self.board, title, desc, 0, yBoard + y + img.GetHeight())
  762.             img.Show()
  763.             self.images.append(img)
  764.         except RuntimeError:
  765.             pass
  766.  
  767.         event.AddEventSetLocalYPosition(self.descIndex, img.GetHeight() - 20)
  768.  
  769.         if underTitle:
  770.             event.AddEventSetLocalYPosition(self.descIndex, 3)
  771.             event.InsertTextInline(self.descIndex, underTitle, (self.board.GetWidth() * (index + 1) / (total + 1)))
  772.             if index != total - 1:
  773.                 event.AddEventSetLocalYPosition(self.descIndex, -( 3 + 16 ))
  774.         else:
  775.             if index == total - 1:
  776.                 event.AddEventSetLocalYPosition(self.descIndex, 4)
  777.        
  778.         if index != total - 1:
  779.             event.AddEventSetLocalYPosition(self.descIndex, -(img.GetHeight() - 20))
  780.            
  781.                
  782.     # END_OF_QUEST_IMAGE
  783.  
  784.     def OnSize(self, width, height):
  785.         self.board.SetSize(width, height)
  786.  
  787.     def OnTitleImage(self, filename):
  788.         img = ui.ImageBox("TOP_MOST")
  789.  
  790.         try:
  791.             img.SetWindowHorizontalAlignCenter()
  792.             img.LoadImage(filename)
  793.             img.SetPosition(0, wndMgr.GetScreenHeight() - (75/2) - (32/2))
  794.             img.SetAlpha(0.0)
  795.             img.Show()
  796.         except RuntimeError:
  797.             dbg.TraceError("QuestDialog.OnTitleImage(%s)" % filename)
  798.             img.Hide()
  799.  
  800.         self.imgTitle = img
  801.         self.titleState = self.TITLE_STATE_APPEAR
  802.         self.titleShowTime = app.GetTime()
  803.  
  804.     def OnLeftImage(self, imgfile):
  805.         imgfile = self.__GetQuestImageFileName(imgfile)
  806.         if not self.imgLeft:
  807.             self.imgLeft = ui.ExpandedImageBox("TOP_MOST")
  808.             self.imgLeft.SetParent(self)
  809.             self.imgLeft.SetPosition(0,0)
  810.             bd = self.board
  811.             bx, by = bd.GetLocalPosition()
  812.             bd.SetPosition(160,by)
  813.             if self.imgTop:
  814.                 tx, ty = self.imgTop.GetLocalPosition()
  815.                 self.imgTop.SetPosition(160,ty)
  816.  
  817.         try:
  818.             self.imgLeft.LoadImage(imgfile)
  819.             self.imgLeft.SetSize(400,450)
  820.             self.imgLeft.SetOrigin(self.imgLeft.GetWidth()/2,self.imgLeft.GetHeight()/2)
  821.             self.imgLeft.Show()
  822.         except RuntimeError:
  823.             import dbg
  824.             dbg.TraceError("QuestDialog.OnLeftImage(%s)" % imgfile)
  825.             self.imgLeft.Hide()
  826.  
  827.     def OnTopImage(self, imgfile):
  828.         imgfile = self.__GetQuestImageFileName(imgfile)
  829.  
  830.         bd = self.board
  831.         bx, by = bd.GetLocalPosition()
  832.         if not self.imgTop:
  833.             self.imgTop = ui.ExpandedImageBox("TOP_MOST")
  834.             self.imgTop.SetParent(self)
  835.             bd.SetPosition(bx,190)
  836.             self.imgTop.SetPosition(bx,10)
  837.  
  838.         try:
  839.             self.imgTop.LoadImage(imgfile)
  840.             h = self.imgTop.GetHeight()
  841.             if h>170:
  842.                 # need adjust board size
  843.                 bd.SetPosition(bx,20+h)
  844.                 bd.SetSize(350,420-h)
  845.                 self.imgTop.SetSize(350,h)
  846.             else:
  847.                 self.imgTop.SetSize(350,170)
  848.                 bd.SetPosition(bx,190)
  849.                 bd.SetSize(350,250)
  850.             self.imgTop.SetOrigin(self.imgTop.GetWidth()/2,self.imgTop.GetHeight()/2)
  851.             self.imgTop.Show()
  852.         except RuntimeError:
  853.             dbg.TraceError("QuestDialog.OnTopImage(%s)" % imgfile)
  854.             self.imgTop.Hide()
  855.  
  856.     def OnBackgroundImage(self, imgfile):
  857.         imgfile = self.__GetQuestImageFileName(imgfile)
  858.         c = self.board
  859.         w = c.GetWidth()
  860.         h = c.GetHeight()
  861.         px, py = c.GetLocalPosition()
  862.         moved = 0
  863.         if not self.imgBackground:
  864.             self.imgBackground = ui.ExpandedImageBox("TOP_MOST")
  865.             self.imgBackground.SetParent(c)
  866.             self.imgBackground.SetPosition(0,0)
  867.         self.imgBackground.LoadImage(imgfile)
  868.         iw = self.imgBackground.GetWidth()
  869.         ih = self.imgBackground.GetHeight()
  870.         if self.skin==3:
  871.             iw = 256
  872.             ih = 333
  873.             self.imgBackground.SetSize(iw,ih)
  874.         if w < iw:
  875.             px -= (iw-w)/2
  876.             c.SetPosition(px,py)
  877.             w = iw
  878.         if h < ih:
  879.             py -= (ih-h)/2
  880.             c.SetPosition(px,py)
  881.             h = ih
  882.         if self.skin == 3:
  883.             w=256
  884.             h = 333
  885.             self.sx = 0
  886.             self.sy = 100
  887.  
  888.         c.SetSize(w,h)
  889.         c.HideInternal()
  890.  
  891.         c.SetWindowHorizontalAlignCenter()
  892.         c.SetWindowVerticalAlignCenter()
  893.  
  894.         c.SetPosition(0,0)
  895.         if self.skin==3:
  896.             c.SetPosition(-190,0)
  897.  
  898.         self.imgBackground.SetWindowHorizontalAlignCenter()
  899.         self.imgBackground.SetWindowVerticalAlignCenter()
  900.         self.imgBackground.SetPosition(0,0)
  901.         self.imgBackground.Show()
  902.  
Advertisement
Add Comment
Please, Sign In to add comment