2022-11-20 23:11:54 +02:00
|
|
|
|
import ui
|
|
|
|
|
import grp
|
|
|
|
|
import chat
|
|
|
|
|
import wndMgr
|
|
|
|
|
import net
|
|
|
|
|
import app
|
|
|
|
|
import ime
|
|
|
|
|
import localeInfo
|
|
|
|
|
import colorInfo
|
|
|
|
|
import constInfo
|
|
|
|
|
import systemSetting
|
|
|
|
|
|
2023-07-21 21:55:58 +03:00
|
|
|
|
ENABLE_CHAT_COMMAND = True
|
|
|
|
|
ENABLE_LAST_SENTENCE_STACK = True
|
|
|
|
|
ENABLE_INSULT_CHECK = True
|
2022-11-20 23:11:54 +02:00
|
|
|
|
|
|
|
|
|
if localeInfo.IsHONGKONG():
|
2023-07-21 21:55:58 +03:00
|
|
|
|
ENABLE_LAST_SENTENCE_STACK = True
|
2022-11-20 23:11:54 +02:00
|
|
|
|
|
|
|
|
|
if localeInfo.IsEUROPE():
|
2023-07-21 21:55:58 +03:00
|
|
|
|
ENABLE_CHAT_COMMAND = False
|
2022-11-20 23:11:54 +02:00
|
|
|
|
|
|
|
|
|
if localeInfo.IsCANADA():
|
2023-07-21 21:55:58 +03:00
|
|
|
|
ENABLE_LAST_SENTENCE_STACK = False
|
2022-11-20 23:11:54 +02:00
|
|
|
|
|
|
|
|
|
chatInputSetList = []
|
|
|
|
|
def InsertChatInputSetWindow(wnd):
|
|
|
|
|
global chatInputSetList
|
|
|
|
|
chatInputSetList.append(wnd)
|
|
|
|
|
def RefreshChatMode():
|
|
|
|
|
global chatInputSetList
|
|
|
|
|
map(lambda wnd:wnd.OnRefreshChatMode(), chatInputSetList)
|
|
|
|
|
def DestroyChatInputSetWindow():
|
|
|
|
|
global chatInputSetList
|
|
|
|
|
chatInputSetList = []
|
|
|
|
|
|
|
|
|
|
## ChatModeButton
|
|
|
|
|
class ChatModeButton(ui.Window):
|
|
|
|
|
|
|
|
|
|
OUTLINE_COLOR = grp.GenerateColor(1.0, 1.0, 1.0, 1.0)
|
|
|
|
|
OVER_COLOR = grp.GenerateColor(1.0, 1.0, 1.0, 0.3)
|
|
|
|
|
BUTTON_STATE_UP = 0
|
|
|
|
|
BUTTON_STATE_OVER = 1
|
|
|
|
|
BUTTON_STATE_DOWN = 2
|
|
|
|
|
|
|
|
|
|
def __init__(self):
|
|
|
|
|
ui.Window.__init__(self)
|
|
|
|
|
self.state = None
|
|
|
|
|
self.buttonText = None
|
|
|
|
|
self.event = None
|
|
|
|
|
self.SetWindowName("ChatModeButton")
|
|
|
|
|
|
|
|
|
|
net.EnableChatInsultFilter(ENABLE_INSULT_CHECK)
|
|
|
|
|
|
|
|
|
|
def __del__(self):
|
|
|
|
|
ui.Window.__del__(self)
|
|
|
|
|
|
|
|
|
|
def SAFE_SetEvent(self, event):
|
|
|
|
|
self.event=ui.__mem_func__(event)
|
|
|
|
|
|
|
|
|
|
def SetText(self, text):
|
|
|
|
|
if None == self.buttonText:
|
|
|
|
|
textLine = ui.TextLine()
|
|
|
|
|
textLine.SetParent(self)
|
|
|
|
|
textLine.SetWindowHorizontalAlignCenter()
|
|
|
|
|
textLine.SetWindowVerticalAlignCenter()
|
|
|
|
|
textLine.SetVerticalAlignCenter()
|
|
|
|
|
textLine.SetHorizontalAlignCenter()
|
|
|
|
|
textLine.SetPackedFontColor(self.OUTLINE_COLOR)
|
|
|
|
|
textLine.Show()
|
|
|
|
|
self.buttonText = textLine
|
|
|
|
|
|
|
|
|
|
self.buttonText.SetText(text)
|
|
|
|
|
|
|
|
|
|
def SetSize(self, width, height):
|
|
|
|
|
self.width = width
|
|
|
|
|
self.height = height
|
|
|
|
|
ui.Window.SetSize(self, width, height)
|
|
|
|
|
|
|
|
|
|
def OnMouseOverIn(self):
|
|
|
|
|
self.state = self.BUTTON_STATE_OVER
|
|
|
|
|
|
|
|
|
|
def OnMouseOverOut(self):
|
|
|
|
|
self.state = self.BUTTON_STATE_UP
|
|
|
|
|
|
|
|
|
|
def OnMouseLeftButtonDown(self):
|
|
|
|
|
self.state = self.BUTTON_STATE_DOWN
|
|
|
|
|
|
|
|
|
|
def OnMouseLeftButtonUp(self):
|
|
|
|
|
self.state = self.BUTTON_STATE_UP
|
|
|
|
|
if self.IsIn():
|
|
|
|
|
self.state = self.BUTTON_STATE_OVER
|
|
|
|
|
|
|
|
|
|
if None != self.event:
|
|
|
|
|
self.event()
|
|
|
|
|
|
|
|
|
|
def OnRender(self):
|
|
|
|
|
|
|
|
|
|
(x, y) = self.GetGlobalPosition()
|
|
|
|
|
|
|
|
|
|
grp.SetColor(self.OUTLINE_COLOR)
|
|
|
|
|
grp.RenderRoundBox(x, y, self.width, self.height)
|
|
|
|
|
|
|
|
|
|
if self.state >= self.BUTTON_STATE_OVER:
|
|
|
|
|
grp.RenderRoundBox(x+1, y, self.width-2, self.height)
|
|
|
|
|
grp.RenderRoundBox(x, y+1, self.width, self.height-2)
|
|
|
|
|
|
|
|
|
|
if self.BUTTON_STATE_DOWN == self.state:
|
|
|
|
|
grp.SetColor(self.OVER_COLOR)
|
|
|
|
|
grp.RenderBar(x+1, y+1, self.width-2, self.height-2)
|
|
|
|
|
|
|
|
|
|
## ChatLine
|
|
|
|
|
class ChatLine(ui.EditLine):
|
|
|
|
|
|
|
|
|
|
CHAT_MODE_NAME = { chat.CHAT_TYPE_TALKING : localeInfo.CHAT_NORMAL,
|
|
|
|
|
chat.CHAT_TYPE_PARTY : localeInfo.CHAT_PARTY,
|
|
|
|
|
chat.CHAT_TYPE_GUILD : localeInfo.CHAT_GUILD,
|
|
|
|
|
chat.CHAT_TYPE_SHOUT : localeInfo.CHAT_SHOUT, }
|
|
|
|
|
|
|
|
|
|
def __init__(self):
|
|
|
|
|
ui.EditLine.__init__(self)
|
|
|
|
|
self.SetWindowName("Chat Line")
|
|
|
|
|
self.lastShoutTime = 0
|
|
|
|
|
self.eventEscape = lambda *arg: None
|
|
|
|
|
self.eventReturn = lambda *arg: None
|
|
|
|
|
self.eventTab = None
|
|
|
|
|
self.chatMode = chat.CHAT_TYPE_TALKING
|
2023-07-21 21:55:58 +03:00
|
|
|
|
self.bCodePage = True
|
2022-11-20 23:11:54 +02:00
|
|
|
|
|
|
|
|
|
self.overTextLine = ui.TextLine()
|
|
|
|
|
self.overTextLine.SetParent(self)
|
|
|
|
|
self.overTextLine.SetPosition(-1, 0)
|
|
|
|
|
self.overTextLine.SetFontColor(1.0, 1.0, 0.0)
|
|
|
|
|
self.overTextLine.SetOutline()
|
|
|
|
|
self.overTextLine.Hide()
|
|
|
|
|
|
|
|
|
|
self.lastSentenceStack = []
|
|
|
|
|
self.lastSentencePos = 0
|
|
|
|
|
|
|
|
|
|
def SetChatMode(self, mode):
|
|
|
|
|
self.chatMode = mode
|
|
|
|
|
|
|
|
|
|
def GetChatMode(self):
|
|
|
|
|
return self.chatMode
|
|
|
|
|
|
|
|
|
|
def ChangeChatMode(self):
|
|
|
|
|
if chat.CHAT_TYPE_TALKING == self.GetChatMode():
|
|
|
|
|
self.SetChatMode(chat.CHAT_TYPE_PARTY)
|
|
|
|
|
self.SetText("#")
|
|
|
|
|
self.SetEndPosition()
|
|
|
|
|
|
|
|
|
|
elif chat.CHAT_TYPE_PARTY == self.GetChatMode():
|
|
|
|
|
self.SetChatMode(chat.CHAT_TYPE_GUILD)
|
|
|
|
|
self.SetText("%")
|
|
|
|
|
self.SetEndPosition()
|
|
|
|
|
|
|
|
|
|
elif chat.CHAT_TYPE_GUILD == self.GetChatMode():
|
|
|
|
|
self.SetChatMode(chat.CHAT_TYPE_SHOUT)
|
|
|
|
|
self.SetText("!")
|
|
|
|
|
self.SetEndPosition()
|
|
|
|
|
|
|
|
|
|
elif chat.CHAT_TYPE_SHOUT == self.GetChatMode():
|
|
|
|
|
self.SetChatMode(chat.CHAT_TYPE_TALKING)
|
|
|
|
|
self.SetText("")
|
|
|
|
|
|
|
|
|
|
self.__CheckChatMark()
|
|
|
|
|
|
|
|
|
|
def GetCurrentChatModeName(self):
|
|
|
|
|
try:
|
|
|
|
|
return self.CHAT_MODE_NAME[self.chatMode]
|
|
|
|
|
except:
|
|
|
|
|
import exception
|
|
|
|
|
exception.Abort("ChatLine.GetCurrentChatModeName")
|
|
|
|
|
|
|
|
|
|
def SAFE_SetEscapeEvent(self, event):
|
|
|
|
|
self.eventReturn = ui.__mem_func__(event)
|
|
|
|
|
|
|
|
|
|
def SAFE_SetReturnEvent(self, event):
|
|
|
|
|
self.eventEscape = ui.__mem_func__(event)
|
|
|
|
|
|
|
|
|
|
def SAFE_SetTabEvent(self, event):
|
|
|
|
|
self.eventTab = ui.__mem_func__(event)
|
|
|
|
|
|
|
|
|
|
def SetTabEvent(self, event):
|
|
|
|
|
self.eventTab = event
|
|
|
|
|
|
|
|
|
|
def OpenChat(self):
|
|
|
|
|
self.SetFocus()
|
|
|
|
|
self.__ResetChat()
|
|
|
|
|
|
|
|
|
|
def __ClearChat(self):
|
|
|
|
|
self.SetText("")
|
|
|
|
|
self.lastSentencePos = 0
|
|
|
|
|
|
|
|
|
|
def __ResetChat(self):
|
|
|
|
|
if chat.CHAT_TYPE_PARTY == self.GetChatMode():
|
|
|
|
|
self.SetText("#")
|
|
|
|
|
self.SetEndPosition()
|
|
|
|
|
elif chat.CHAT_TYPE_GUILD == self.GetChatMode():
|
|
|
|
|
self.SetText("%")
|
|
|
|
|
self.SetEndPosition()
|
|
|
|
|
elif chat.CHAT_TYPE_SHOUT == self.GetChatMode():
|
|
|
|
|
self.SetText("!")
|
|
|
|
|
self.SetEndPosition()
|
|
|
|
|
else:
|
|
|
|
|
self.__ClearChat()
|
|
|
|
|
|
|
|
|
|
self.__CheckChatMark()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def __SendChatPacket(self, text, type):
|
|
|
|
|
# if text[0] == '/':
|
|
|
|
|
# if ENABLE_CHAT_COMMAND or constInfo.CONSOLE_ENABLE:
|
|
|
|
|
# pass
|
|
|
|
|
# else:
|
|
|
|
|
# return
|
|
|
|
|
|
|
|
|
|
if net.IsChatInsultIn(text):
|
|
|
|
|
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.CHAT_INSULT_STRING)
|
|
|
|
|
else:
|
|
|
|
|
net.SendChatPacket(text, type)
|
|
|
|
|
|
|
|
|
|
def __SendPartyChatPacket(self, text):
|
|
|
|
|
|
|
|
|
|
if 1 == len(text):
|
|
|
|
|
self.RunCloseEvent()
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
self.__SendChatPacket(text[1:], chat.CHAT_TYPE_PARTY)
|
|
|
|
|
self.__ResetChat()
|
|
|
|
|
|
|
|
|
|
def __SendGuildChatPacket(self, text):
|
|
|
|
|
|
|
|
|
|
if 1 == len(text):
|
|
|
|
|
self.RunCloseEvent()
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
self.__SendChatPacket(text[1:], chat.CHAT_TYPE_GUILD)
|
|
|
|
|
self.__ResetChat()
|
|
|
|
|
|
|
|
|
|
def __SendShoutChatPacket(self, text):
|
|
|
|
|
|
|
|
|
|
if 1 == len(text):
|
|
|
|
|
self.RunCloseEvent()
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
if app.GetTime() < self.lastShoutTime + 15:
|
|
|
|
|
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.CHAT_SHOUT_LIMIT)
|
|
|
|
|
self.__ResetChat()
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
self.__SendChatPacket(text[1:], chat.CHAT_TYPE_SHOUT)
|
|
|
|
|
self.__ResetChat()
|
|
|
|
|
|
|
|
|
|
self.lastShoutTime = app.GetTime()
|
|
|
|
|
|
|
|
|
|
def __SendTalkingChatPacket(self, text):
|
|
|
|
|
self.__SendChatPacket(text, chat.CHAT_TYPE_TALKING)
|
|
|
|
|
self.__ResetChat()
|
|
|
|
|
|
|
|
|
|
def OnIMETab(self):
|
|
|
|
|
#if None != self.eventTab:
|
|
|
|
|
# self.eventTab()
|
2023-07-21 21:55:58 +03:00
|
|
|
|
#return True
|
|
|
|
|
return False
|
2022-11-20 23:11:54 +02:00
|
|
|
|
|
|
|
|
|
def OnIMEUpdate(self):
|
|
|
|
|
ui.EditLine.OnIMEUpdate(self)
|
|
|
|
|
self.__CheckChatMark()
|
|
|
|
|
|
|
|
|
|
def __CheckChatMark(self):
|
|
|
|
|
|
|
|
|
|
self.overTextLine.Hide()
|
|
|
|
|
|
|
|
|
|
text = self.GetText()
|
|
|
|
|
if len(text) > 0:
|
|
|
|
|
if '#' == text[0]:
|
|
|
|
|
self.overTextLine.SetText("#")
|
|
|
|
|
self.overTextLine.Show()
|
|
|
|
|
elif '%' == text[0]:
|
|
|
|
|
self.overTextLine.SetText("%")
|
|
|
|
|
self.overTextLine.Show()
|
|
|
|
|
elif '!' == text[0]:
|
|
|
|
|
self.overTextLine.SetText("!")
|
|
|
|
|
self.overTextLine.Show()
|
|
|
|
|
|
|
|
|
|
def OnIMEKeyDown(self, key):
|
|
|
|
|
# LAST_SENTENCE_STACK
|
|
|
|
|
if app.VK_UP == key:
|
|
|
|
|
self.__PrevLastSentenceStack()
|
2023-07-21 21:55:58 +03:00
|
|
|
|
return True
|
2022-11-20 23:11:54 +02:00
|
|
|
|
|
|
|
|
|
if app.VK_DOWN == key:
|
|
|
|
|
self.__NextLastSentenceStack()
|
2023-07-21 21:55:58 +03:00
|
|
|
|
return True
|
2022-11-20 23:11:54 +02:00
|
|
|
|
# END_OF_LAST_SENTENCE_STACK
|
|
|
|
|
|
|
|
|
|
ui.EditLine.OnIMEKeyDown(self, key)
|
|
|
|
|
|
|
|
|
|
# LAST_SENTENCE_STACK
|
|
|
|
|
def __PrevLastSentenceStack(self):
|
|
|
|
|
global ENABLE_LAST_SENTENCE_STACK
|
|
|
|
|
if not ENABLE_LAST_SENTENCE_STACK:
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
if self.lastSentenceStack and self.lastSentencePos < len(self.lastSentenceStack):
|
|
|
|
|
self.lastSentencePos += 1
|
|
|
|
|
lastSentence = self.lastSentenceStack[-self.lastSentencePos]
|
|
|
|
|
self.SetText(lastSentence)
|
|
|
|
|
self.SetEndPosition()
|
|
|
|
|
|
|
|
|
|
def __NextLastSentenceStack(self):
|
|
|
|
|
global ENABLE_LAST_SENTENCE_STACK
|
|
|
|
|
if not ENABLE_LAST_SENTENCE_STACK:
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
if self.lastSentenceStack and self.lastSentencePos > 1:
|
|
|
|
|
self.lastSentencePos -= 1
|
|
|
|
|
lastSentence = self.lastSentenceStack[-self.lastSentencePos]
|
|
|
|
|
self.SetText(lastSentence)
|
|
|
|
|
self.SetEndPosition()
|
|
|
|
|
|
|
|
|
|
def __PushLastSentenceStack(self, text):
|
|
|
|
|
global ENABLE_LAST_SENTENCE_STACK
|
|
|
|
|
if not ENABLE_LAST_SENTENCE_STACK:
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
if len(text) <= 0:
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
LAST_SENTENCE_STACK_SIZE = 32
|
|
|
|
|
if len(self.lastSentenceStack) > LAST_SENTENCE_STACK_SIZE:
|
|
|
|
|
self.lastSentenceStack.pop(0)
|
|
|
|
|
|
|
|
|
|
self.lastSentenceStack.append(text)
|
|
|
|
|
# END_OF_LAST_SENTENCE_STACK
|
|
|
|
|
|
|
|
|
|
def OnIMEReturn(self):
|
|
|
|
|
text = self.GetText()
|
|
|
|
|
textLen=len(text)
|
|
|
|
|
|
|
|
|
|
# LAST_SENTENCE_STACK
|
|
|
|
|
self.__PushLastSentenceStack(text)
|
|
|
|
|
# END_OF_LAST_SENTENCE_STACK
|
|
|
|
|
|
|
|
|
|
textSpaceCount=text.count(' ')
|
|
|
|
|
|
|
|
|
|
if (textLen > 0) and (textLen != textSpaceCount):
|
|
|
|
|
if '#' == text[0]:
|
|
|
|
|
self.__SendPartyChatPacket(text)
|
|
|
|
|
elif '%' == text[0]:
|
|
|
|
|
self.__SendGuildChatPacket(text)
|
|
|
|
|
elif '!' == text[0]:
|
|
|
|
|
self.__SendShoutChatPacket(text)
|
|
|
|
|
else:
|
|
|
|
|
self.__SendTalkingChatPacket(text)
|
|
|
|
|
else:
|
|
|
|
|
self.__ClearChat()
|
|
|
|
|
self.eventReturn()
|
|
|
|
|
|
2023-07-21 21:55:58 +03:00
|
|
|
|
return True
|
2022-11-20 23:11:54 +02:00
|
|
|
|
|
|
|
|
|
def OnPressEscapeKey(self):
|
|
|
|
|
self.__ClearChat()
|
|
|
|
|
self.eventEscape()
|
2023-07-21 21:55:58 +03:00
|
|
|
|
return True
|
2022-11-20 23:11:54 +02:00
|
|
|
|
|
|
|
|
|
def RunCloseEvent(self):
|
|
|
|
|
self.eventEscape()
|
|
|
|
|
|
|
|
|
|
def BindInterface(self, interface):
|
|
|
|
|
self.interface = interface
|
|
|
|
|
|
|
|
|
|
def OnMouseLeftButtonDown(self):
|
|
|
|
|
hyperlink = ui.GetHyperlink()
|
|
|
|
|
if hyperlink:
|
|
|
|
|
if app.IsPressed(app.DIK_LALT):
|
|
|
|
|
link = chat.GetLinkFromHyperlink(hyperlink)
|
|
|
|
|
ime.PasteString(link)
|
|
|
|
|
else:
|
|
|
|
|
self.interface.MakeHyperlinkTooltip(hyperlink)
|
|
|
|
|
else:
|
|
|
|
|
ui.EditLine.OnMouseLeftButtonDown(self)
|
|
|
|
|
|
|
|
|
|
class ChatInputSet(ui.Window):
|
|
|
|
|
|
|
|
|
|
CHAT_OUTLINE_COLOR = grp.GenerateColor(1.0, 1.0, 1.0, 1.0)
|
|
|
|
|
|
|
|
|
|
def __init__(self):
|
|
|
|
|
ui.Window.__init__(self)
|
|
|
|
|
self.SetWindowName("ChatInputSet")
|
|
|
|
|
|
|
|
|
|
InsertChatInputSetWindow(self)
|
|
|
|
|
self.__Create()
|
|
|
|
|
|
|
|
|
|
def __del__(self):
|
|
|
|
|
ui.Window.__del__(self)
|
|
|
|
|
|
|
|
|
|
def __Create(self):
|
|
|
|
|
chatModeButton = ChatModeButton()
|
|
|
|
|
chatModeButton.SetParent(self)
|
|
|
|
|
chatModeButton.SetSize(40, 17)
|
|
|
|
|
chatModeButton.SetText(localeInfo.CHAT_NORMAL)
|
|
|
|
|
chatModeButton.SetPosition(7, 2)
|
|
|
|
|
chatModeButton.SAFE_SetEvent(self.OnChangeChatMode)
|
|
|
|
|
self.chatModeButton = chatModeButton
|
|
|
|
|
|
|
|
|
|
chatLine = ChatLine()
|
|
|
|
|
chatLine.SetParent(self)
|
|
|
|
|
chatLine.SetMax(512)
|
|
|
|
|
chatLine.SetUserMax(76)
|
|
|
|
|
chatLine.SetText("")
|
|
|
|
|
chatLine.SAFE_SetTabEvent(self.OnChangeChatMode)
|
|
|
|
|
chatLine.x = 0
|
|
|
|
|
chatLine.y = 0
|
|
|
|
|
chatLine.width = 0
|
|
|
|
|
chatLine.height = 0
|
|
|
|
|
self.chatLine = chatLine
|
|
|
|
|
|
|
|
|
|
btnSend = ui.Button()
|
|
|
|
|
btnSend.SetParent(self)
|
|
|
|
|
btnSend.SetUpVisual("d:/ymir work/ui/game/taskbar/Send_Chat_Button_01.sub")
|
|
|
|
|
btnSend.SetOverVisual("d:/ymir work/ui/game/taskbar/Send_Chat_Button_02.sub")
|
|
|
|
|
btnSend.SetDownVisual("d:/ymir work/ui/game/taskbar/Send_Chat_Button_03.sub")
|
|
|
|
|
btnSend.SetToolTipText(localeInfo.CHAT_SEND_CHAT)
|
|
|
|
|
btnSend.SAFE_SetEvent(self.chatLine.OnIMEReturn)
|
|
|
|
|
self.btnSend = btnSend
|
|
|
|
|
|
|
|
|
|
def Destroy(self):
|
|
|
|
|
self.chatModeButton = None
|
|
|
|
|
self.chatLine = None
|
|
|
|
|
self.btnSend = None
|
|
|
|
|
|
|
|
|
|
def Open(self):
|
|
|
|
|
self.chatLine.Show()
|
|
|
|
|
self.chatLine.SetPosition(57, 5)
|
|
|
|
|
self.chatLine.SetFocus()
|
|
|
|
|
self.chatLine.OpenChat()
|
|
|
|
|
|
|
|
|
|
self.chatModeButton.SetPosition(7, 2)
|
|
|
|
|
self.chatModeButton.Show()
|
|
|
|
|
|
|
|
|
|
self.btnSend.Show()
|
|
|
|
|
self.Show()
|
|
|
|
|
|
|
|
|
|
self.RefreshPosition()
|
2023-07-21 21:55:58 +03:00
|
|
|
|
return True
|
2022-11-20 23:11:54 +02:00
|
|
|
|
|
|
|
|
|
def Close(self):
|
|
|
|
|
self.chatLine.KillFocus()
|
|
|
|
|
self.chatLine.Hide()
|
|
|
|
|
self.chatModeButton.Hide()
|
|
|
|
|
self.btnSend.Hide()
|
|
|
|
|
self.Hide()
|
2023-07-21 21:55:58 +03:00
|
|
|
|
return True
|
2022-11-20 23:11:54 +02:00
|
|
|
|
|
|
|
|
|
def SetEscapeEvent(self, event):
|
|
|
|
|
self.chatLine.SetEscapeEvent(event)
|
|
|
|
|
|
|
|
|
|
def SetReturnEvent(self, event):
|
|
|
|
|
self.chatLine.SetReturnEvent(event)
|
|
|
|
|
|
|
|
|
|
def OnChangeChatMode(self):
|
|
|
|
|
RefreshChatMode()
|
|
|
|
|
|
|
|
|
|
def OnRefreshChatMode(self):
|
|
|
|
|
self.chatLine.ChangeChatMode()
|
|
|
|
|
self.chatModeButton.SetText(self.chatLine.GetCurrentChatModeName())
|
|
|
|
|
|
|
|
|
|
def SetChatFocus(self):
|
|
|
|
|
self.chatLine.SetFocus()
|
|
|
|
|
|
|
|
|
|
def KillChatFocus(self):
|
|
|
|
|
self.chatLine.KillFocus()
|
|
|
|
|
|
|
|
|
|
def SetChatMax(self, max):
|
|
|
|
|
self.chatLine.SetUserMax(max)
|
|
|
|
|
|
|
|
|
|
def RefreshPosition(self):
|
|
|
|
|
if localeInfo.IsARABIC():
|
|
|
|
|
self.chatLine.SetSize(self.GetWidth() - 93, 18)
|
|
|
|
|
else:
|
|
|
|
|
self.chatLine.SetSize(self.GetWidth() - 93, 13)
|
|
|
|
|
|
|
|
|
|
self.btnSend.SetPosition(self.GetWidth() - 25, 2)
|
|
|
|
|
|
|
|
|
|
(self.chatLine.x, self.chatLine.y, self.chatLine.width, self.chatLine.height) = self.chatLine.GetRect()
|
|
|
|
|
|
|
|
|
|
def BindInterface(self, interface):
|
|
|
|
|
self.chatLine.BindInterface(interface)
|
|
|
|
|
|
|
|
|
|
def OnRender(self):
|
|
|
|
|
(x, y, width, height) = self.chatLine.GetRect()
|
|
|
|
|
ui.RenderRoundBox(x-4, y-3, width+7, height+4, self.CHAT_OUTLINE_COLOR)
|
|
|
|
|
|
|
|
|
|
## ChatWindow
|
|
|
|
|
class ChatWindow(ui.Window):
|
|
|
|
|
|
|
|
|
|
BOARD_START_COLOR = grp.GenerateColor(0.0, 0.0, 0.0, 0.0)
|
|
|
|
|
BOARD_END_COLOR = grp.GenerateColor(0.0, 0.0, 0.0, 0.8)
|
|
|
|
|
BOARD_MIDDLE_COLOR = grp.GenerateColor(0.0, 0.0, 0.0, 0.5)
|
|
|
|
|
CHAT_OUTLINE_COLOR = grp.GenerateColor(1.0, 1.0, 1.0, 1.0)
|
|
|
|
|
|
|
|
|
|
EDIT_LINE_HEIGHT = 25
|
|
|
|
|
CHAT_WINDOW_WIDTH = 600
|
|
|
|
|
|
|
|
|
|
class ChatBackBoard(ui.Window):
|
|
|
|
|
def __init__(self):
|
|
|
|
|
ui.Window.__init__(self)
|
|
|
|
|
def __del__(self):
|
|
|
|
|
ui.Window.__del__(self)
|
|
|
|
|
|
|
|
|
|
class ChatButton(ui.DragButton):
|
|
|
|
|
|
|
|
|
|
def __init__(self):
|
|
|
|
|
ui.DragButton.__init__(self)
|
|
|
|
|
self.AddFlag("float")
|
|
|
|
|
self.AddFlag("movable")
|
|
|
|
|
self.AddFlag("restrict_x")
|
2023-07-21 21:55:58 +03:00
|
|
|
|
self.topFlag = False
|
2022-11-20 23:11:54 +02:00
|
|
|
|
self.SetWindowName("ChatWindow:ChatButton")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def __del__(self):
|
|
|
|
|
ui.DragButton.__del__(self)
|
|
|
|
|
|
|
|
|
|
def SetOwner(self, owner):
|
|
|
|
|
self.owner = owner
|
|
|
|
|
|
|
|
|
|
def OnMouseOverIn(self):
|
|
|
|
|
app.SetCursor(app.VSIZE)
|
|
|
|
|
|
|
|
|
|
def OnMouseOverOut(self):
|
|
|
|
|
app.SetCursor(app.NORMAL)
|
|
|
|
|
|
|
|
|
|
def OnTop(self):
|
2023-07-21 21:55:58 +03:00
|
|
|
|
if True == self.topFlag:
|
2022-11-20 23:11:54 +02:00
|
|
|
|
return
|
|
|
|
|
|
2023-07-21 21:55:58 +03:00
|
|
|
|
self.topFlag = True
|
2022-11-20 23:11:54 +02:00
|
|
|
|
self.owner.SetTop()
|
2023-07-21 21:55:58 +03:00
|
|
|
|
self.topFlag = False
|
2022-11-20 23:11:54 +02:00
|
|
|
|
|
|
|
|
|
def __init__(self):
|
|
|
|
|
ui.Window.__init__(self)
|
|
|
|
|
self.AddFlag("float")
|
|
|
|
|
|
|
|
|
|
self.SetWindowName("ChatWindow")
|
|
|
|
|
self.__RegisterChatColorDict()
|
|
|
|
|
|
|
|
|
|
self.boardState = chat.BOARD_STATE_VIEW
|
|
|
|
|
self.chatID = chat.CreateChatSet(chat.CHAT_SET_CHAT_WINDOW)
|
|
|
|
|
chat.SetBoardState(self.chatID, chat.BOARD_STATE_VIEW)
|
|
|
|
|
|
|
|
|
|
self.xBar = 0
|
|
|
|
|
self.yBar = 0
|
|
|
|
|
self.widthBar = 0
|
|
|
|
|
self.heightBar = 0
|
|
|
|
|
self.curHeightBar = 0
|
|
|
|
|
self.visibleLineCount = 0
|
|
|
|
|
self.scrollBarPos = 1.0
|
2023-07-21 21:55:58 +03:00
|
|
|
|
self.scrollLock = False
|
2022-11-20 23:11:54 +02:00
|
|
|
|
|
|
|
|
|
chatInputSet = ChatInputSet()
|
|
|
|
|
chatInputSet.SetParent(self)
|
|
|
|
|
chatInputSet.SetEscapeEvent(ui.__mem_func__(self.CloseChat))
|
|
|
|
|
chatInputSet.SetReturnEvent(ui.__mem_func__(self.CloseChat))
|
|
|
|
|
chatInputSet.SetSize(550, 25)
|
|
|
|
|
self.chatInputSet = chatInputSet
|
|
|
|
|
|
|
|
|
|
btnSendWhisper = ui.Button()
|
|
|
|
|
btnSendWhisper.SetParent(self)
|
|
|
|
|
btnSendWhisper.SetUpVisual("d:/ymir work/ui/game/taskbar/Send_Whisper_Button_01.sub")
|
|
|
|
|
btnSendWhisper.SetOverVisual("d:/ymir work/ui/game/taskbar/Send_Whisper_Button_02.sub")
|
|
|
|
|
btnSendWhisper.SetDownVisual("d:/ymir work/ui/game/taskbar/Send_Whisper_Button_03.sub")
|
|
|
|
|
btnSendWhisper.SetToolTipText(localeInfo.CHAT_SEND_MEMO)
|
|
|
|
|
btnSendWhisper.Hide()
|
|
|
|
|
self.btnSendWhisper = btnSendWhisper
|
|
|
|
|
|
|
|
|
|
btnChatLog = ui.Button()
|
|
|
|
|
btnChatLog.SetParent(self)
|
|
|
|
|
btnChatLog.SetUpVisual("d:/ymir work/ui/game/taskbar/Open_Chat_Log_Button_01.sub")
|
|
|
|
|
btnChatLog.SetOverVisual("d:/ymir work/ui/game/taskbar/Open_Chat_Log_Button_02.sub")
|
|
|
|
|
btnChatLog.SetDownVisual("d:/ymir work/ui/game/taskbar/Open_Chat_Log_Button_03.sub")
|
|
|
|
|
btnChatLog.SetToolTipText(localeInfo.CHAT_LOG)
|
|
|
|
|
btnChatLog.Hide()
|
|
|
|
|
self.btnChatLog = btnChatLog
|
|
|
|
|
|
|
|
|
|
btnChatSizing = self.ChatButton()
|
|
|
|
|
btnChatSizing.SetOwner(self)
|
|
|
|
|
btnChatSizing.SetMoveEvent(ui.__mem_func__(self.Refresh))
|
|
|
|
|
btnChatSizing.Hide()
|
|
|
|
|
self.btnChatSizing = btnChatSizing
|
|
|
|
|
|
|
|
|
|
imgChatBarLeft = ui.ImageBox()
|
|
|
|
|
imgChatBarLeft.SetParent(self.btnChatSizing)
|
|
|
|
|
imgChatBarLeft.AddFlag("not_pick")
|
|
|
|
|
imgChatBarLeft.LoadImage("d:/ymir work/ui/pattern/chat_bar_left.tga")
|
|
|
|
|
imgChatBarLeft.Show()
|
|
|
|
|
self.imgChatBarLeft = imgChatBarLeft
|
|
|
|
|
imgChatBarRight = ui.ImageBox()
|
|
|
|
|
imgChatBarRight.SetParent(self.btnChatSizing)
|
|
|
|
|
imgChatBarRight.AddFlag("not_pick")
|
|
|
|
|
imgChatBarRight.LoadImage("d:/ymir work/ui/pattern/chat_bar_right.tga")
|
|
|
|
|
imgChatBarRight.Show()
|
|
|
|
|
self.imgChatBarRight = imgChatBarRight
|
|
|
|
|
imgChatBarMiddle = ui.ExpandedImageBox()
|
|
|
|
|
imgChatBarMiddle.SetParent(self.btnChatSizing)
|
|
|
|
|
imgChatBarMiddle.AddFlag("not_pick")
|
|
|
|
|
imgChatBarMiddle.LoadImage("d:/ymir work/ui/pattern/chat_bar_middle.tga")
|
|
|
|
|
imgChatBarMiddle.Show()
|
|
|
|
|
self.imgChatBarMiddle = imgChatBarMiddle
|
|
|
|
|
|
|
|
|
|
scrollBar = ui.ScrollBar()
|
|
|
|
|
scrollBar.AddFlag("float")
|
|
|
|
|
scrollBar.SetScrollEvent(ui.__mem_func__(self.OnScroll))
|
|
|
|
|
self.scrollBar = scrollBar
|
|
|
|
|
|
|
|
|
|
self.Refresh()
|
|
|
|
|
self.chatInputSet.RefreshPosition() # RTL <20><> <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʿ<EFBFBD><CABF>ϴ<EFBFBD>
|
|
|
|
|
|
|
|
|
|
def __del__(self):
|
|
|
|
|
ui.Window.__del__(self)
|
|
|
|
|
|
|
|
|
|
def __RegisterChatColorDict(self):
|
|
|
|
|
CHAT_COLOR_DICT = {
|
|
|
|
|
chat.CHAT_TYPE_TALKING : colorInfo.CHAT_RGB_TALK,
|
|
|
|
|
chat.CHAT_TYPE_INFO : colorInfo.CHAT_RGB_INFO,
|
|
|
|
|
chat.CHAT_TYPE_NOTICE : colorInfo.CHAT_RGB_NOTICE,
|
|
|
|
|
chat.CHAT_TYPE_PARTY : colorInfo.CHAT_RGB_PARTY,
|
|
|
|
|
chat.CHAT_TYPE_GUILD : colorInfo.CHAT_RGB_GUILD,
|
|
|
|
|
chat.CHAT_TYPE_COMMAND : colorInfo.CHAT_RGB_COMMAND,
|
|
|
|
|
chat.CHAT_TYPE_SHOUT : colorInfo.CHAT_RGB_SHOUT,
|
|
|
|
|
chat.CHAT_TYPE_WHISPER : colorInfo.CHAT_RGB_WHISPER,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for colorItem in CHAT_COLOR_DICT.items():
|
|
|
|
|
type=colorItem[0]
|
|
|
|
|
rgb=colorItem[1]
|
|
|
|
|
chat.SetChatColor(type, rgb[0], rgb[1], rgb[2])
|
|
|
|
|
|
|
|
|
|
def Destroy(self):
|
|
|
|
|
self.chatInputSet.Destroy()
|
|
|
|
|
self.chatInputSet = None
|
|
|
|
|
|
|
|
|
|
self.btnSendWhisper = 0
|
|
|
|
|
self.btnChatLog = 0
|
|
|
|
|
self.btnChatSizing = 0
|
|
|
|
|
|
|
|
|
|
################
|
|
|
|
|
## Open & Close
|
|
|
|
|
def OpenChat(self):
|
|
|
|
|
self.SetSize(self.CHAT_WINDOW_WIDTH, 25)
|
|
|
|
|
chat.SetBoardState(self.chatID, chat.BOARD_STATE_EDIT)
|
|
|
|
|
self.boardState = chat.BOARD_STATE_EDIT
|
|
|
|
|
|
|
|
|
|
(x, y, width, height) = self.GetRect()
|
|
|
|
|
(btnX, btnY) = self.btnChatSizing.GetGlobalPosition()
|
|
|
|
|
|
|
|
|
|
if localeInfo.IsARABIC():
|
|
|
|
|
chat.SetPosition(self.chatID, x + width - 10, y)
|
|
|
|
|
else:
|
|
|
|
|
chat.SetPosition(self.chatID, x + 10, y)
|
|
|
|
|
|
|
|
|
|
chat.SetHeight(self.chatID, y - btnY - self.EDIT_LINE_HEIGHT + 100)
|
|
|
|
|
|
|
|
|
|
if self.IsShow():
|
|
|
|
|
self.btnChatSizing.Show()
|
|
|
|
|
|
|
|
|
|
self.Refresh()
|
|
|
|
|
|
|
|
|
|
self.btnSendWhisper.SetPosition(self.GetWidth() - 50, 2)
|
|
|
|
|
self.btnSendWhisper.Show()
|
|
|
|
|
|
|
|
|
|
self.btnChatLog.SetPosition(self.GetWidth() - 25, 2)
|
|
|
|
|
self.btnChatLog.Show()
|
|
|
|
|
|
|
|
|
|
self.chatInputSet.Open()
|
|
|
|
|
self.chatInputSet.SetTop()
|
|
|
|
|
self.SetTop()
|
|
|
|
|
|
|
|
|
|
def CloseChat(self):
|
|
|
|
|
chat.SetBoardState(self.chatID, chat.BOARD_STATE_VIEW)
|
|
|
|
|
self.boardState = chat.BOARD_STATE_VIEW
|
|
|
|
|
|
|
|
|
|
(x, y, width, height) = self.GetRect()
|
|
|
|
|
|
|
|
|
|
if localeInfo.IsARABIC():
|
|
|
|
|
chat.SetPosition(self.chatID, x + width - 10, y + self.EDIT_LINE_HEIGHT)
|
|
|
|
|
else:
|
|
|
|
|
chat.SetPosition(self.chatID, x + 10, y + self.EDIT_LINE_HEIGHT)
|
|
|
|
|
|
|
|
|
|
self.SetSize(self.CHAT_WINDOW_WIDTH, 0)
|
|
|
|
|
|
|
|
|
|
self.chatInputSet.Close()
|
|
|
|
|
self.btnSendWhisper.Hide()
|
|
|
|
|
self.btnChatLog.Hide()
|
|
|
|
|
self.btnChatSizing.Hide()
|
|
|
|
|
|
|
|
|
|
self.Refresh()
|
|
|
|
|
|
|
|
|
|
def SetSendWhisperEvent(self, event):
|
|
|
|
|
self.btnSendWhisper.SetEvent(event)
|
|
|
|
|
|
|
|
|
|
def SetOpenChatLogEvent(self, event):
|
|
|
|
|
self.btnChatLog.SetEvent(event)
|
|
|
|
|
|
|
|
|
|
def IsEditMode(self):
|
|
|
|
|
if chat.BOARD_STATE_EDIT == self.boardState:
|
2023-07-21 21:55:58 +03:00
|
|
|
|
return True
|
2022-11-20 23:11:54 +02:00
|
|
|
|
|
2023-07-21 21:55:58 +03:00
|
|
|
|
return False
|
2022-11-20 23:11:54 +02:00
|
|
|
|
|
|
|
|
|
def __RefreshSizingBar(self):
|
|
|
|
|
(x, y, width, height) = self.GetRect()
|
|
|
|
|
gxChat, gyChat = self.btnChatSizing.GetGlobalPosition()
|
|
|
|
|
self.btnChatSizing.SetPosition(x, gyChat)
|
|
|
|
|
self.btnChatSizing.SetSize(width, 22)
|
|
|
|
|
self.imgChatBarLeft.SetPosition(0, 0)
|
|
|
|
|
self.imgChatBarRight.SetPosition(width - 64, 0)
|
|
|
|
|
self.imgChatBarMiddle.SetPosition(64, 0)
|
|
|
|
|
self.imgChatBarMiddle.SetRenderingRect(0.0, 0.0, float(width - 128) / 64.0 - 1.0, 0.0)
|
|
|
|
|
|
|
|
|
|
def SetPosition(self, x, y):
|
|
|
|
|
ui.Window.SetPosition(self, x, y)
|
|
|
|
|
self.__RefreshSizingBar()
|
|
|
|
|
|
|
|
|
|
def SetSize(self, width, height):
|
|
|
|
|
ui.Window.SetSize(self, width, height)
|
|
|
|
|
self.__RefreshSizingBar()
|
|
|
|
|
|
|
|
|
|
def SetHeight(self, height):
|
|
|
|
|
gxChat, gyChat = self.btnChatSizing.GetGlobalPosition()
|
|
|
|
|
self.btnChatSizing.SetPosition(gxChat, wndMgr.GetScreenHeight() - height)
|
|
|
|
|
|
|
|
|
|
###########
|
|
|
|
|
## Refresh
|
|
|
|
|
def Refresh(self):
|
|
|
|
|
if self.boardState == chat.BOARD_STATE_EDIT:
|
|
|
|
|
self.RefreshBoardEditState()
|
|
|
|
|
elif self.boardState == chat.BOARD_STATE_VIEW:
|
|
|
|
|
self.RefreshBoardViewState()
|
|
|
|
|
|
|
|
|
|
def RefreshBoardEditState(self):
|
|
|
|
|
|
|
|
|
|
(x, y, width, height) = self.GetRect()
|
|
|
|
|
(btnX, btnY) = self.btnChatSizing.GetGlobalPosition()
|
|
|
|
|
|
|
|
|
|
self.xBar = x
|
|
|
|
|
self.yBar = btnY
|
|
|
|
|
self.widthBar = width
|
|
|
|
|
self.heightBar = y - btnY + self.EDIT_LINE_HEIGHT
|
|
|
|
|
self.curHeightBar = self.heightBar
|
|
|
|
|
|
|
|
|
|
if localeInfo.IsARABIC():
|
|
|
|
|
chat.SetPosition(self.chatID, x + width - 10, y)
|
|
|
|
|
else:
|
|
|
|
|
chat.SetPosition(self.chatID, x + 10, y)
|
|
|
|
|
|
|
|
|
|
chat.SetHeight(self.chatID, y - btnY - self.EDIT_LINE_HEIGHT)
|
|
|
|
|
chat.ArrangeShowingChat(self.chatID)
|
|
|
|
|
|
|
|
|
|
if btnY > y:
|
|
|
|
|
self.btnChatSizing.SetPosition(btnX, y)
|
|
|
|
|
self.heightBar = self.EDIT_LINE_HEIGHT
|
|
|
|
|
|
|
|
|
|
def RefreshBoardViewState(self):
|
|
|
|
|
(x, y, width, height) = self.GetRect()
|
|
|
|
|
(btnX, btnY) = self.btnChatSizing.GetGlobalPosition()
|
|
|
|
|
textAreaHeight = self.visibleLineCount * chat.GetLineStep(self.chatID)
|
|
|
|
|
|
|
|
|
|
if localeInfo.IsARABIC():
|
|
|
|
|
chat.SetPosition(self.chatID, x + width - 10, y + self.EDIT_LINE_HEIGHT)
|
|
|
|
|
else:
|
|
|
|
|
chat.SetPosition(self.chatID, x + 10, y + self.EDIT_LINE_HEIGHT)
|
|
|
|
|
|
|
|
|
|
chat.SetHeight(self.chatID, y - btnY - self.EDIT_LINE_HEIGHT + 100)
|
|
|
|
|
|
|
|
|
|
if self.boardState == chat.BOARD_STATE_EDIT:
|
|
|
|
|
textAreaHeight += 45
|
|
|
|
|
elif self.visibleLineCount != 0:
|
|
|
|
|
textAreaHeight += 10 + 10
|
|
|
|
|
|
|
|
|
|
self.xBar = x
|
|
|
|
|
self.yBar = y + self.EDIT_LINE_HEIGHT - textAreaHeight
|
|
|
|
|
self.widthBar = width
|
|
|
|
|
self.heightBar = textAreaHeight
|
|
|
|
|
|
|
|
|
|
self.scrollBar.Hide()
|
|
|
|
|
|
|
|
|
|
##########
|
|
|
|
|
## Render
|
|
|
|
|
def OnUpdate(self):
|
|
|
|
|
if self.boardState == chat.BOARD_STATE_EDIT:
|
|
|
|
|
chat.Update(self.chatID)
|
|
|
|
|
elif self.boardState == chat.BOARD_STATE_VIEW:
|
|
|
|
|
if systemSetting.IsViewChat():
|
|
|
|
|
chat.Update(self.chatID)
|
|
|
|
|
|
|
|
|
|
def OnRender(self):
|
|
|
|
|
if chat.GetVisibleLineCount(self.chatID) != self.visibleLineCount:
|
|
|
|
|
self.visibleLineCount = chat.GetVisibleLineCount(self.chatID)
|
|
|
|
|
self.Refresh()
|
|
|
|
|
|
|
|
|
|
if self.curHeightBar != self.heightBar:
|
|
|
|
|
self.curHeightBar += (self.heightBar - self.curHeightBar) / 10
|
|
|
|
|
|
|
|
|
|
if self.boardState == chat.BOARD_STATE_EDIT:
|
|
|
|
|
grp.SetColor(self.BOARD_MIDDLE_COLOR)
|
|
|
|
|
grp.RenderBar(self.xBar, self.yBar + (self.heightBar - self.curHeightBar) + 10, self.widthBar, self.curHeightBar)
|
|
|
|
|
chat.Render(self.chatID)
|
|
|
|
|
elif self.boardState == chat.BOARD_STATE_VIEW:
|
|
|
|
|
if systemSetting.IsViewChat():
|
|
|
|
|
grp.RenderGradationBar(self.xBar, self.yBar + (self.heightBar - self.curHeightBar), self.widthBar, self.curHeightBar, self.BOARD_START_COLOR, self.BOARD_END_COLOR)
|
|
|
|
|
chat.Render(self.chatID)
|
|
|
|
|
|
|
|
|
|
##########
|
|
|
|
|
## Event
|
|
|
|
|
def OnTop(self):
|
|
|
|
|
self.btnChatSizing.SetTop()
|
|
|
|
|
self.scrollBar.SetTop()
|
|
|
|
|
|
|
|
|
|
def OnScroll(self):
|
|
|
|
|
if not self.scrollLock:
|
|
|
|
|
self.scrollBarPos = self.scrollBar.GetPos()
|
|
|
|
|
|
|
|
|
|
lineCount = chat.GetLineCount(self.chatID)
|
|
|
|
|
visibleLineCount = chat.GetVisibleLineCount(self.chatID)
|
|
|
|
|
endLine = visibleLineCount + int(float(lineCount - visibleLineCount) * self.scrollBarPos)
|
|
|
|
|
|
|
|
|
|
chat.SetEndPos(self.chatID, self.scrollBarPos)
|
|
|
|
|
|
|
|
|
|
def OnChangeChatMode(self):
|
|
|
|
|
self.chatInputSet.OnChangeChatMode()
|
|
|
|
|
|
|
|
|
|
def SetChatFocus(self):
|
|
|
|
|
self.chatInputSet.SetChatFocus()
|
|
|
|
|
|
|
|
|
|
def BindInterface(self, interface):
|
|
|
|
|
self.chatInputSet.BindInterface(interface)
|
|
|
|
|
|
|
|
|
|
## ChatLogWindow
|
|
|
|
|
class ChatLogWindow(ui.Window):
|
|
|
|
|
|
|
|
|
|
BLOCK_WIDTH = 32
|
|
|
|
|
CHAT_MODE_NAME = ( localeInfo.CHAT_NORMAL, localeInfo.CHAT_PARTY, localeInfo.CHAT_GUILD, localeInfo.CHAT_SHOUT, localeInfo.CHAT_INFORMATION, localeInfo.CHAT_NOTICE, )
|
|
|
|
|
CHAT_MODE_INDEX = ( chat.CHAT_TYPE_TALKING,
|
|
|
|
|
chat.CHAT_TYPE_PARTY,
|
|
|
|
|
chat.CHAT_TYPE_GUILD,
|
|
|
|
|
chat.CHAT_TYPE_SHOUT,
|
|
|
|
|
chat.CHAT_TYPE_INFO,
|
|
|
|
|
chat.CHAT_TYPE_NOTICE, )
|
|
|
|
|
|
|
|
|
|
CHAT_LOG_WINDOW_MINIMUM_WIDTH = 450
|
|
|
|
|
CHAT_LOG_WINDOW_MINIMUM_HEIGHT = 120
|
|
|
|
|
|
|
|
|
|
class ResizeButton(ui.DragButton):
|
|
|
|
|
|
|
|
|
|
def __init__(self):
|
|
|
|
|
ui.DragButton.__init__(self)
|
|
|
|
|
|
|
|
|
|
def __del__(self):
|
|
|
|
|
ui.DragButton.__del__(self)
|
|
|
|
|
|
|
|
|
|
def OnMouseOverIn(self):
|
|
|
|
|
app.SetCursor(app.HVSIZE)
|
|
|
|
|
|
|
|
|
|
def OnMouseOverOut(self):
|
|
|
|
|
app.SetCursor(app.NORMAL)
|
|
|
|
|
|
|
|
|
|
def __init__(self):
|
|
|
|
|
|
2023-07-21 21:55:58 +03:00
|
|
|
|
self.allChatMode = True
|
2022-11-20 23:11:54 +02:00
|
|
|
|
self.chatInputSet = None
|
|
|
|
|
|
|
|
|
|
ui.Window.__init__(self)
|
|
|
|
|
self.AddFlag("float")
|
|
|
|
|
self.AddFlag("movable")
|
|
|
|
|
self.SetWindowName("ChatLogWindow")
|
|
|
|
|
self.__CreateChatInputSet()
|
|
|
|
|
self.__CreateWindow()
|
|
|
|
|
self.__CreateButton()
|
|
|
|
|
self.__CreateScrollBar()
|
|
|
|
|
|
|
|
|
|
self.chatID = chat.CreateChatSet(chat.CHAT_SET_LOG_WINDOW)
|
|
|
|
|
chat.SetBoardState(self.chatID, chat.BOARD_STATE_LOG)
|
|
|
|
|
for i in self.CHAT_MODE_INDEX:
|
|
|
|
|
chat.EnableChatMode(self.chatID, i)
|
|
|
|
|
|
|
|
|
|
self.SetPosition(20, 20)
|
|
|
|
|
self.SetSize(self.CHAT_LOG_WINDOW_MINIMUM_WIDTH, self.CHAT_LOG_WINDOW_MINIMUM_HEIGHT)
|
|
|
|
|
self.btnSizing.SetPosition(self.CHAT_LOG_WINDOW_MINIMUM_WIDTH-self.btnSizing.GetWidth(), self.CHAT_LOG_WINDOW_MINIMUM_HEIGHT-self.btnSizing.GetHeight()+2)
|
|
|
|
|
|
|
|
|
|
self.OnResize()
|
|
|
|
|
|
|
|
|
|
def __CreateChatInputSet(self):
|
|
|
|
|
chatInputSet = ChatInputSet()
|
|
|
|
|
chatInputSet.SetParent(self)
|
|
|
|
|
chatInputSet.SetEscapeEvent(ui.__mem_func__(self.Close))
|
|
|
|
|
chatInputSet.SetWindowVerticalAlignBottom()
|
|
|
|
|
chatInputSet.Open()
|
|
|
|
|
self.chatInputSet = chatInputSet
|
|
|
|
|
|
|
|
|
|
def __CreateWindow(self):
|
|
|
|
|
imgLeft = ui.ImageBox()
|
|
|
|
|
imgLeft.AddFlag("not_pick")
|
|
|
|
|
imgLeft.SetParent(self)
|
|
|
|
|
|
|
|
|
|
imgCenter = ui.ExpandedImageBox()
|
|
|
|
|
imgCenter.AddFlag("not_pick")
|
|
|
|
|
imgCenter.SetParent(self)
|
|
|
|
|
|
|
|
|
|
imgRight = ui.ImageBox()
|
|
|
|
|
imgRight.AddFlag("not_pick")
|
|
|
|
|
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/chatlogwindow_titlebar_left.tga")
|
|
|
|
|
imgCenter.LoadImage("d:/ymir work/ui/pattern/chatlogwindow_titlebar_middle.tga")
|
|
|
|
|
imgRight.LoadImage("d:/ymir work/ui/pattern/chatlogwindow_titlebar_right.tga")
|
|
|
|
|
|
|
|
|
|
imgLeft.Show()
|
|
|
|
|
imgCenter.Show()
|
|
|
|
|
imgRight.Show()
|
|
|
|
|
|
|
|
|
|
btnClose = ui.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.SetEvent(ui.__mem_func__(self.Close))
|
|
|
|
|
btnClose.Show()
|
|
|
|
|
|
|
|
|
|
btnSizing = self.ResizeButton()
|
|
|
|
|
btnSizing.SetParent(self)
|
|
|
|
|
btnSizing.SetMoveEvent(ui.__mem_func__(self.OnResize))
|
|
|
|
|
btnSizing.SetSize(16, 16)
|
|
|
|
|
btnSizing.Show()
|
|
|
|
|
|
|
|
|
|
titleName = ui.TextLine()
|
|
|
|
|
titleName.SetParent(self)
|
|
|
|
|
|
|
|
|
|
if localeInfo.IsARABIC():
|
|
|
|
|
titleName.SetPosition(self.GetWidth()-20, 6)
|
|
|
|
|
else:
|
|
|
|
|
titleName.SetPosition(20, 6)
|
|
|
|
|
|
|
|
|
|
titleName.SetText(localeInfo.CHAT_LOG_TITLE)
|
|
|
|
|
titleName.Show()
|
|
|
|
|
|
|
|
|
|
self.imgLeft = imgLeft
|
|
|
|
|
self.imgCenter = imgCenter
|
|
|
|
|
self.imgRight = imgRight
|
|
|
|
|
self.btnClose = btnClose
|
|
|
|
|
self.btnSizing = btnSizing
|
|
|
|
|
self.titleName = titleName
|
|
|
|
|
|
|
|
|
|
def __CreateButton(self):
|
|
|
|
|
|
|
|
|
|
if localeInfo.IsARABIC():
|
|
|
|
|
bx = 20
|
|
|
|
|
else:
|
|
|
|
|
bx = 13
|
|
|
|
|
|
|
|
|
|
btnAll = ui.RadioButton()
|
|
|
|
|
btnAll.SetParent(self)
|
|
|
|
|
btnAll.SetPosition(bx, 24)
|
|
|
|
|
btnAll.SetUpVisual("d:/ymir work/ui/public/xsmall_button_01.sub")
|
|
|
|
|
btnAll.SetOverVisual("d:/ymir work/ui/public/xsmall_button_02.sub")
|
|
|
|
|
btnAll.SetDownVisual("d:/ymir work/ui/public/xsmall_button_03.sub")
|
|
|
|
|
btnAll.SetText(localeInfo.CHAT_ALL)
|
|
|
|
|
btnAll.SetEvent(ui.__mem_func__(self.ToggleAllChatMode))
|
|
|
|
|
btnAll.Down()
|
|
|
|
|
btnAll.Show()
|
|
|
|
|
self.btnAll = btnAll
|
|
|
|
|
|
|
|
|
|
x = bx + 48
|
|
|
|
|
i = 0
|
|
|
|
|
self.modeButtonList = []
|
|
|
|
|
for name in self.CHAT_MODE_NAME:
|
|
|
|
|
btn = ui.ToggleButton()
|
|
|
|
|
btn.SetParent(self)
|
|
|
|
|
btn.SetPosition(x, 24)
|
|
|
|
|
btn.SetUpVisual("d:/ymir work/ui/public/xsmall_button_01.sub")
|
|
|
|
|
btn.SetOverVisual("d:/ymir work/ui/public/xsmall_button_02.sub")
|
|
|
|
|
btn.SetDownVisual("d:/ymir work/ui/public/xsmall_button_03.sub")
|
|
|
|
|
btn.SetText(name)
|
|
|
|
|
btn.Show()
|
|
|
|
|
|
|
|
|
|
mode = self.CHAT_MODE_INDEX[i]
|
|
|
|
|
btn.SetToggleUpEvent(lambda arg=mode: self.ToggleChatMode(arg))
|
|
|
|
|
btn.SetToggleDownEvent(lambda arg=mode: self.ToggleChatMode(arg))
|
|
|
|
|
self.modeButtonList.append(btn)
|
|
|
|
|
|
|
|
|
|
x += 48
|
|
|
|
|
i += 1
|
|
|
|
|
|
|
|
|
|
def __CreateScrollBar(self):
|
|
|
|
|
scrollBar = ui.SmallThinScrollBar()
|
|
|
|
|
scrollBar.SetParent(self)
|
|
|
|
|
scrollBar.Show()
|
|
|
|
|
scrollBar.SetScrollEvent(ui.__mem_func__(self.OnScroll))
|
|
|
|
|
self.scrollBar = scrollBar
|
|
|
|
|
self.scrollBarPos = 1.0
|
|
|
|
|
|
|
|
|
|
def __del__(self):
|
|
|
|
|
ui.Window.__del__(self)
|
|
|
|
|
|
|
|
|
|
def Destroy(self):
|
|
|
|
|
self.imgLeft = None
|
|
|
|
|
self.imgCenter = None
|
|
|
|
|
self.imgRight = None
|
|
|
|
|
self.btnClose = None
|
|
|
|
|
self.btnSizing = None
|
|
|
|
|
self.modeButtonList = []
|
|
|
|
|
self.scrollBar = None
|
|
|
|
|
self.chatInputSet = None
|
|
|
|
|
|
|
|
|
|
def ToggleAllChatMode(self):
|
|
|
|
|
if self.allChatMode:
|
|
|
|
|
return
|
|
|
|
|
|
2023-07-21 21:55:58 +03:00
|
|
|
|
self.allChatMode = True
|
2022-11-20 23:11:54 +02:00
|
|
|
|
|
|
|
|
|
for i in self.CHAT_MODE_INDEX:
|
|
|
|
|
chat.EnableChatMode(self.chatID, i)
|
|
|
|
|
for btn in self.modeButtonList:
|
|
|
|
|
btn.SetUp()
|
|
|
|
|
|
|
|
|
|
def ToggleChatMode(self, mode):
|
|
|
|
|
if self.allChatMode:
|
2023-07-21 21:55:58 +03:00
|
|
|
|
self.allChatMode = False
|
2022-11-20 23:11:54 +02:00
|
|
|
|
for i in self.CHAT_MODE_INDEX:
|
|
|
|
|
chat.DisableChatMode(self.chatID, i)
|
|
|
|
|
chat.EnableChatMode(self.chatID, mode)
|
|
|
|
|
self.btnAll.SetUp()
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
chat.ToggleChatMode(self.chatID, mode)
|
|
|
|
|
|
|
|
|
|
def SetSize(self, width, height):
|
|
|
|
|
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.titleName.SetPosition(self.GetWidth()-20, 3)
|
|
|
|
|
self.btnClose.SetPosition(3, 3)
|
|
|
|
|
self.scrollBar.SetPosition(1, 45)
|
|
|
|
|
else:
|
|
|
|
|
self.btnClose.SetPosition(width - self.btnClose.GetWidth() - 5, 5)
|
|
|
|
|
self.scrollBar.SetPosition(width - 15, 45)
|
|
|
|
|
|
|
|
|
|
self.scrollBar.SetScrollBarSize(height - 45 - 12)
|
|
|
|
|
self.scrollBar.SetPos(self.scrollBarPos)
|
|
|
|
|
ui.Window.SetSize(self, width, height)
|
|
|
|
|
|
|
|
|
|
def Open(self):
|
|
|
|
|
self.OnResize()
|
|
|
|
|
self.chatInputSet.SetChatFocus()
|
|
|
|
|
self.Show()
|
|
|
|
|
|
|
|
|
|
def Close(self):
|
|
|
|
|
if self.chatInputSet:
|
|
|
|
|
self.chatInputSet.KillChatFocus()
|
|
|
|
|
self.Hide()
|
|
|
|
|
|
|
|
|
|
def OnResize(self):
|
|
|
|
|
x, y = self.btnSizing.GetLocalPosition()
|
|
|
|
|
width = self.btnSizing.GetWidth()
|
|
|
|
|
height = self.btnSizing.GetHeight()
|
|
|
|
|
|
|
|
|
|
if x < self.CHAT_LOG_WINDOW_MINIMUM_WIDTH - width:
|
|
|
|
|
self.btnSizing.SetPosition(self.CHAT_LOG_WINDOW_MINIMUM_WIDTH - width, y)
|
|
|
|
|
return
|
|
|
|
|
if y < self.CHAT_LOG_WINDOW_MINIMUM_HEIGHT - height:
|
|
|
|
|
self.btnSizing.SetPosition(x, self.CHAT_LOG_WINDOW_MINIMUM_HEIGHT - height)
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
self.scrollBar.LockScroll()
|
|
|
|
|
self.SetSize(x + width, y + height)
|
|
|
|
|
self.scrollBar.UnlockScroll()
|
|
|
|
|
|
|
|
|
|
if localeInfo.IsARABIC():
|
|
|
|
|
self.chatInputSet.SetPosition(20, 25)
|
|
|
|
|
else:
|
|
|
|
|
self.chatInputSet.SetPosition(0, 25)
|
|
|
|
|
|
|
|
|
|
self.chatInputSet.SetSize(self.GetWidth() - 20, 20)
|
|
|
|
|
self.chatInputSet.RefreshPosition()
|
|
|
|
|
self.chatInputSet.SetChatMax(self.GetWidth() / 8)
|
|
|
|
|
|
|
|
|
|
def OnScroll(self):
|
|
|
|
|
self.scrollBarPos = self.scrollBar.GetPos()
|
|
|
|
|
|
|
|
|
|
lineCount = chat.GetLineCount(self.chatID)
|
|
|
|
|
visibleLineCount = chat.GetVisibleLineCount(self.chatID)
|
|
|
|
|
endLine = visibleLineCount + int(float(lineCount - visibleLineCount) * self.scrollBarPos)
|
|
|
|
|
|
|
|
|
|
chat.SetEndPos(self.chatID, self.scrollBarPos)
|
|
|
|
|
|
|
|
|
|
def OnRender(self):
|
|
|
|
|
(x, y, width, height) = self.GetRect()
|
|
|
|
|
|
|
|
|
|
if localeInfo.IsARABIC():
|
|
|
|
|
grp.SetColor(0x77000000)
|
|
|
|
|
grp.RenderBar(x+2, y+45, 13, height-45)
|
|
|
|
|
|
|
|
|
|
grp.SetColor(0x77000000)
|
|
|
|
|
grp.RenderBar(x, y, width, height)
|
2023-07-21 21:55:58 +03:00
|
|
|
|
grp.SetColor(0x77000000)
|
2022-11-20 23:11:54 +02:00
|
|
|
|
grp.RenderBox(x, y, width-2, height)
|
2023-07-21 21:55:58 +03:00
|
|
|
|
grp.SetColor(0x77000000)
|
2022-11-20 23:11:54 +02:00
|
|
|
|
grp.RenderBox(x+1, y+1, width-2, height)
|
|
|
|
|
|
|
|
|
|
grp.SetColor(0xff989898)
|
|
|
|
|
grp.RenderLine(x+width-13, y+height-1, 11, -11)
|
|
|
|
|
grp.RenderLine(x+width-9, y+height-1, 7, -7)
|
|
|
|
|
grp.RenderLine(x+width-5, y+height-1, 3, -3)
|
2023-07-21 21:55:58 +03:00
|
|
|
|
else:
|
2022-11-20 23:11:54 +02:00
|
|
|
|
grp.SetColor(0x77000000)
|
|
|
|
|
grp.RenderBar(x+width-15, y+45, 13, height-45)
|
|
|
|
|
|
|
|
|
|
grp.SetColor(0x77000000)
|
|
|
|
|
grp.RenderBar(x, y, width, height)
|
2023-07-21 21:55:58 +03:00
|
|
|
|
grp.SetColor(0x77000000)
|
2022-11-20 23:11:54 +02:00
|
|
|
|
grp.RenderBox(x, y, width-2, height)
|
2023-07-21 21:55:58 +03:00
|
|
|
|
grp.SetColor(0x77000000)
|
2022-11-20 23:11:54 +02:00
|
|
|
|
grp.RenderBox(x+1, y+1, width-2, height)
|
|
|
|
|
|
|
|
|
|
grp.SetColor(0xff989898)
|
|
|
|
|
grp.RenderLine(x+width-13, y+height-1, 11, -11)
|
|
|
|
|
grp.RenderLine(x+width-9, y+height-1, 7, -7)
|
|
|
|
|
grp.RenderLine(x+width-5, y+height-1, 3, -3)
|
|
|
|
|
|
|
|
|
|
#####
|
|
|
|
|
|
|
|
|
|
chat.ArrangeShowingChat(self.chatID)
|
|
|
|
|
|
|
|
|
|
if localeInfo.IsARABIC():
|
|
|
|
|
chat.SetPosition(self.chatID, x + width - 10, y + height - 25)
|
|
|
|
|
else:
|
|
|
|
|
chat.SetPosition(self.chatID, x + 10, y + height - 25)
|
|
|
|
|
|
|
|
|
|
chat.SetHeight(self.chatID, height - 45 - 25)
|
|
|
|
|
chat.Update(self.chatID)
|
|
|
|
|
chat.Render(self.chatID)
|
|
|
|
|
|
|
|
|
|
def OnPressEscapeKey(self):
|
|
|
|
|
self.Close()
|
2023-07-21 21:55:58 +03:00
|
|
|
|
return True
|
2022-11-20 23:11:54 +02:00
|
|
|
|
|
|
|
|
|
def BindInterface(self, interface):
|
|
|
|
|
self.interface = interface
|
|
|
|
|
|
|
|
|
|
def OnMouseLeftButtonDown(self):
|
|
|
|
|
hyperlink = ui.GetHyperlink()
|
|
|
|
|
if hyperlink:
|
|
|
|
|
if app.IsPressed(app.DIK_LALT):
|
|
|
|
|
link = chat.GetLinkFromHyperlink(hyperlink)
|
|
|
|
|
ime.PasteString(link)
|
|
|
|
|
else:
|
|
|
|
|
self.interface.MakeHyperlinkTooltip(hyperlink)
|
|
|
|
|
|