import ui import net import chat import player import app import locale import ime import chr class WhisperButton(ui.Button): def __init__(self): ui.Button.__init__(self, "TOP_MOST") def __del__(self): ui.Button.__del__(self) def SetToolTipText(self, text, x=0, y = 32): ui.Button.SetToolTipText(self, text, x, y) self.ToolTipText.Show() def SetToolTipTextWithColor(self, text, color, x=0, y = 32): ui.Button.SetToolTipText(self, text, x, y) self.ToolTipText.SetPackedFontColor(color) self.ToolTipText.Show() def ShowToolTip(self): if 0 != self.ToolTipText: self.ToolTipText.Show() def HideToolTip(self): if 0 != self.ToolTipText: self.ToolTipText.Show() class WhisperDialog(ui.ScriptWindow): class TextRenderer(ui.Window): def SetTargetName(self, targetName): self.targetName = targetName def OnRender(self): (x, y) = self.GetGlobalPosition() chat.RenderWhisper(self.targetName, x, y) 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, eventMinimize, eventClose): print "NEW WHISPER DIALOG ----------------------------------------------------------------------------" ui.ScriptWindow.__init__(self) self.targetName = "" self.eventMinimize = eventMinimize self.eventClose = eventClose self.eventAcceptTarget = None def __del__(self): print "---------------------------------------------------------------------------- DELETE WHISPER DIALOG" ui.ScriptWindow.__del__(self) def LoadDialog(self): try: pyScrLoader = ui.PythonScriptLoader() pyScrLoader.LoadScriptFile(self, "UIScript/WhisperDialog.py") except: import exception exception.Abort("WhisperDialog.LoadDialog.LoadScript") try: GetObject=self.GetChild self.titleName = GetObject("titlename") self.titleNameEdit = GetObject("titlename_edit") self.closeButton = GetObject("closebutton") self.scrollBar = GetObject("scrollbar") self.chatLine = GetObject("chatline") self.minimizeButton = GetObject("minimizebutton") self.ignoreButton = GetObject("ignorebutton") self.reportViolentWhisperButton = GetObject("reportviolentwhisperbutton") self.acceptButton = GetObject("acceptbutton") self.sendButton = GetObject("sendbutton") self.board = GetObject("board") self.editBar = GetObject("editbar") self.gamemasterMark = GetObject("gamemastermark") except: import exception exception.Abort("DialogWindow.LoadDialog.BindObject") self.gamemasterMark.Hide() self.titleName.SetText("") self.titleNameEdit.SetText("") self.minimizeButton.SetEvent(ui.__mem_func__(self.Minimize)) self.closeButton.SetEvent(ui.__mem_func__(self.Close)) self.scrollBar.SetPos(1.0) self.scrollBar.SetScrollEvent(ui.__mem_func__(self.OnScroll)) self.chatLine.SetReturnEvent(ui.__mem_func__(self.SendWhisper)) self.chatLine.SetEscapeEvent(ui.__mem_func__(self.Minimize)) self.chatLine.SetMultiLine() self.sendButton.SetEvent(ui.__mem_func__(self.SendWhisper)) self.titleNameEdit.SetReturnEvent(ui.__mem_func__(self.AcceptTarget)) self.titleNameEdit.SetEscapeEvent(ui.__mem_func__(self.Close)) self.ignoreButton.SetToggleDownEvent(ui.__mem_func__(self.IgnoreTarget)) self.ignoreButton.SetToggleUpEvent(ui.__mem_func__(self.IgnoreTarget)) self.reportViolentWhisperButton.SetEvent(ui.__mem_func__(self.ReportViolentWhisper)) self.acceptButton.SetEvent(ui.__mem_func__(self.AcceptTarget)) self.textRenderer = self.TextRenderer() self.textRenderer.SetParent(self) self.textRenderer.SetPosition(20, 28) self.textRenderer.SetTargetName("") self.textRenderer.Show() self.resizeButton = self.ResizeButton() self.resizeButton.SetParent(self) self.resizeButton.SetSize(20, 20) self.resizeButton.SetPosition(280, 180) self.resizeButton.SetMoveEvent(ui.__mem_func__(self.ResizeWhisperDialog)) self.resizeButton.Show() self.ResizeWhisperDialog() def Destroy(self): self.eventMinimize = None self.eventClose = None self.eventAcceptTarget = None self.ClearDictionary() self.scrollBar.Destroy() self.titleName = None self.titleNameEdit = None self.closeButton = None self.scrollBar = None self.chatLine = None self.sendButton = None self.ignoreButton = None self.reportViolentWhisperButton = None self.acceptButton = None self.minimizeButton = None self.textRenderer = None self.board = None self.editBar = None self.resizeButton = None def ResizeWhisperDialog(self): (xPos, yPos) = self.resizeButton.GetLocalPosition() if xPos < 280: self.resizeButton.SetPosition(280, yPos) return if yPos < 150: self.resizeButton.SetPosition(xPos, 150) return self.SetWhisperDialogSize(xPos + 20, yPos + 20) def SetWhisperDialogSize(self, width, height): try: max = int((width-90)/6) * 3 - 6 self.board.SetSize(width, height) self.scrollBar.SetPosition(width-25, 35) self.scrollBar.SetScrollBarSize(height-100) self.scrollBar.SetPos(1.0) self.editBar.SetSize(width-18, 50) self.chatLine.SetSize(width-90, 40) self.chatLine.SetLimitWidth(width-90) self.SetSize(width, height) if 0 != self.targetName: chat.SetWhisperBoxSize(self.targetName, width - 50, height - 90) if locale.IsARABIC(): self.textRenderer.SetPosition(width-20, 28) self.scrollBar.SetPosition(width-25+self.scrollBar.GetWidth(), 35) self.editBar.SetPosition(10 + self.editBar.GetWidth(), height-60) self.sendButton.SetPosition(width - 80 + self.sendButton.GetWidth(), 10) self.minimizeButton.SetPosition(width-42 + self.minimizeButton.GetWidth(), 12) self.closeButton.SetPosition(width-24+self.closeButton.GetWidth(), 12) self.chatLine.SetPosition(5 + self.chatLine.GetWidth(), 5) self.board.SetPosition(self.board.GetWidth(), 0) else: self.textRenderer.SetPosition(20, 28) self.scrollBar.SetPosition(width-25, 35) self.editBar.SetPosition(10, height-60) self.sendButton.SetPosition(width-80, 10) self.minimizeButton.SetPosition(width-42, 12) self.closeButton.SetPosition(width-24, 12) self.SetChatLineMax(max) except: import exception exception.Abort("WhisperDialog.SetWhisperDialogSize.BindObject") def SetChatLineMax(self, max): self.chatLine.SetMax(max) from grpText import GetSplitingTextLine text = self.chatLine.GetText() if text: self.chatLine.SetText(GetSplitingTextLine(text, max, 0)) def OpenWithTarget(self, targetName): chat.CreateWhisper(targetName) chat.SetWhisperBoxSize(targetName, self.GetWidth() - 60, self.GetHeight() - 90) self.chatLine.SetFocus() self.titleName.SetText(targetName) self.targetName = targetName self.textRenderer.SetTargetName(targetName) self.titleNameEdit.Hide() self.ignoreButton.Hide() if app.IsDevStage(): self.reportViolentWhisperButton.Show() else: self.reportViolentWhisperButton.Hide() self.acceptButton.Hide() self.gamemasterMark.Hide() self.minimizeButton.Show() def OpenWithoutTarget(self, event): self.eventAcceptTarget = event self.titleName.SetText("") self.titleNameEdit.SetText("") self.titleNameEdit.SetFocus() self.targetName = 0 self.titleNameEdit.Show() self.ignoreButton.Hide() self.reportViolentWhisperButton.Hide() self.acceptButton.Show() self.minimizeButton.Hide() self.gamemasterMark.Hide() def SetGameMasterLook(self): self.gamemasterMark.Show() self.reportViolentWhisperButton.Hide() def Minimize(self): self.titleNameEdit.KillFocus() self.chatLine.KillFocus() self.Hide() if None != self.eventMinimize: self.eventMinimize(self.targetName) def Close(self): chat.ClearWhisper(self.targetName) self.titleNameEdit.KillFocus() self.chatLine.KillFocus() self.Hide() if None != self.eventClose: self.eventClose(self.targetName) def ReportViolentWhisper(self): net.SendChatPacket("/reportviolentwhisper " + self.targetName) def IgnoreTarget(self): net.SendChatPacket("/ignore " + self.targetName) def AcceptTarget(self): name = self.titleNameEdit.GetText() if len(name) <= 0: self.Close() return if None != self.eventAcceptTarget: self.titleNameEdit.KillFocus() self.eventAcceptTarget(name) def OnScroll(self): chat.SetWhisperPosition(self.targetName, self.scrollBar.GetPos()) def SendWhisper(self): text = self.chatLine.GetText() textLength = len(text) if textLength > 0: if net.IsInsultIn(text): chat.AppendChat(chat.CHAT_TYPE_INFO, locale.CHAT_INSULT_STRING) return net.SendWhisperPacket(self.targetName, text) self.chatLine.SetText("") chat.AppendWhisper(chat.WHISPER_TYPE_CHAT, self.targetName, player.GetName() + " : " + text) def OnTop(self): self.chatLine.SetFocus() 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) if "__main__" == __name__: import uiTest class TestApp(uiTest.App): def OnInit(self): wnd = WhisperDialog(self.OnMax, self.OnMin) wnd.LoadDialog() wnd.OpenWithoutTarget(self.OnNew) wnd.SetPosition(0, 0) wnd.Show() self.wnd = wnd def OnMax(self): pass def OnMin(self): pass def OnNew(self): pass TestApp().MainLoop()