home *** CD-ROM | disk | FTP | other *** search
Wrap
# Source Generated with Decompyle++ # File: in.pyo (Python 2.6) import sys import wx import wx.lib.flatnotebook as fnb import wx.lib.newevent as wx from wx.lib import pubsub import actionIDs import gui import gui.imwin.imtabs as gui import gui.imwin.imwin_gui as imwin_gui from gui import capabilitiesbar from gui import skin from gui.addcontactdialog import AddContactDialog from gui.filetransfer import FileTransferDialog from gui.uberwidgets.uberbook.OverlayImage import OverlayImage from gui.windowfx import fadein buttonIDs = { 'info': actionIDs.InfoMode, 'im': actionIDs.IMMode, 'email': actionIDs.EmailMode, 'video': actionIDs.CallMode } (FlatNotebookDragStarted, EVT_FNB_DRAG_STARTED) = wx.lib.newevent.NewCommandEvent() class NativeDragTimer(wx.Timer): def __init__(self, source): wx.Timer.__init__(self) self.source = source def Notify(self): if not wx.LeftDown(): self.Stop() self.source.OnDragFinish() else: self.source.OnDragging() class FrameDragManager(wx.EvtHandler): def __init__(self, frame): wx.EvtHandler.__init__(self) self.frame = frame self.dragtimer = NativeDragTimer(self) self.draggedidx = -1 self.dragimage = None self.dragwindow = None self.callback = None self.mousePosOffset = None def StartDrag(self, callback = None, draggedidx = -1, dragwindow = None): self.mousePos = wx.GetMousePosition() self.draggedidx = draggedidx self.dragtimer.Start(1) screendc = wx.ScreenDC() self.mousePosOffset = self.mousePos - self.frame.GetScreenRect().GetPosition() if dragwindow: self.dragwindow = dragwindow self.dragwindow.Move(wx.GetMousePosition() - self.mousePosOffset) else: dragimage = screendc.GetAsBitmap().GetSubBitmap(self.frame.GetScreenRect()) self.dragimage = OverlayImage(self.frame, dragimage, size = (dragimage.GetWidth(), dragimage.GetHeight())) if self.dragimage: self.dragimage.SetTransparent(172) self.dragimage.Move(wx.GetMousePosition() - self.mousePosOffset) self.dragimage.Show() self.callback = callback def OnDragging(self): pos = wx.GetMousePosition() - self.mousePosOffset if self.dragimage: self.dragimage.Move(pos) if self.dragwindow: self.dragwindow.Move(pos) def OnDragFinish(self): if self.dragimage: self.dragimage.Hide() self.dragimage.Destroy() self.dragimage = None self.callback(draggedidx = self.draggedidx) class NativeIMFrameEventHandler(wx.EvtHandler): def __init__(self, frame): wx.EvtHandler.__init__(self) self.frame = frame self.dragManager = FrameDragManager(self.frame) self.frameID = self.frame.GetId() self.potentialNewWin = None self.BuildToolBar() self.BindEventsToFrame() def BindEventsToFrame(self): self.frame.Bind(wx.EVT_ACTIVATE, self.OnActivate) self.frame.Bind(wx.EVT_CLOSE, self.OnClose) self.frame.notebook.Bind(EVT_FNB_DRAG_STARTED, self.OnFNBTabDragStart) publisher = pubsub.Publisher() publisher.subscribe(self.OnPageTitleUpdated, 'tab.title.updated') publisher.subscribe(self.OnPageIconUpdated, 'tab.icon.updated') def OnActivate(self, event): event.Skip() if event.Active: self.ConnectToolBarEvents() else: self.DisconnectToolBarEvents() def OnClose(self, event): if self.frame.CloseAndSaveState(event): publisher = pubsub.Publisher() publisher.unsubscribe(self.OnPageTitleUpdated, 'tab.title.updated') publisher.unsubscribe(self.OnPageIconUpdated, 'tab.icon.updated') self.DisconnectToolBarEvents() self.frame.Destroy() del self else: event.Veto() def OnFNBTabDragStart(self, event): if self.frame.notebook.GetTabCount() > 1: newpos = wx.GetMousePosition() newpos[1] = newpos[1] - self.frame.Size.height newwin = gui.imwin.imtabs.ImFrame(pos = newpos, size = self.frame.Size) newwin.SetTransparent(123) page = self.frame.notebook.GetPage(event.draggedidx) newwin.AddTab(page, False) newwin.ShowNoActivate(True) self.potentialNewWin = newwin else: self.frame.SetTransparent(123) newwin = self.potentialNewWin = self.frame self.dragManager.StartDrag(self.OnDragFinish, event.draggedidx, dragwindow = newwin) def OnDragFinish(self, draggedidx): pos = wx.GetMousePosition() for imframe in gui.imwin.imtabs.all_imframes(): notebook = imframe.notebook localcoords = notebook._pages.ScreenToClient(pos) notebook._pages._isdragging = True where = notebook._pages.HitTest(localcoords)[0] notebook._pages._isdragging = False if not (imframe == self.potentialNewWin) and where == fnb.FNB_TAB: page = self.frame.notebook.GetPage(draggedidx) imframe.AddTab(page, True) self.potentialNewWin.Destroy() break continue else: self.potentialNewWin.Raise() self.frame.notebook.RemovePage(draggedidx) def BuildToolBar(self): toolbar = self.frame.CreateToolBar() s = lambda name, d = None: skin.get('AppDefaults.FormattingBar.%s' % name, d) icons = s('icons').get actionIcons = skin.get('ActionsBar.Icons') iconsize = (24, 24) eicon = icons('emote').Resized(iconsize) toolbar.AddLabelTool(actionIDs.BuddyOptions, 'Buddy', wx.EmptyBitmap(32, 32)) toolbar.AddLabelTool(actionIDs.Files, 'Files', getattr(actionIcons, 'files').Resized(iconsize)) toolbar.AddSeparator() app = wx.GetApp() for attr, title, tooltip in capabilitiesbar.buttons: if attr in ('files', 'sms', 'video'): continue baricon = getattr(actionIcons, attr).Resized(iconsize) buttonID = buttonIDs[attr] toolbar.AddLabelTool(buttonID, title, baricon) app.AddHandlerForID(buttonID, self.OnModeClicked) toolbar.AddSeparator() toolbar.AddLabelTool(actionIDs.SetFont, 'Font', getattr(actionIcons, 'font').Resized(iconsize)) toolbar.AddLabelTool(actionIDs.SetBackgroundColor, 'Bg Color', getattr(actionIcons, 'background').Resized(iconsize)) toolbar.AddLabelTool(actionIDs.ChooseEmoticon, 'Emoticon', eicon) toolbar.AddSeparator() toolbar.AddLabelTool(actionIDs.AddContact, 'Add Contact', getattr(actionIcons, 'addcontact').Resized(iconsize)) toolbar.AddLabelTool(actionIDs.ViewPastChats, 'View Past Chats', getattr(actionIcons, 'viewpastchats').Resized(iconsize)) toolbar.AddLabelTool(actionIDs.AlertMeWhen, 'Alert Me When', getattr(actionIcons, 'alertmewhen').Resized(iconsize)) toolbar.Realize() def ConnectToolBarEvents(self, event = None): app = wx.GetApp() app.AddHandlerForID(actionIDs.SetFont, self.OnFontClicked) app.AddHandlerForID(actionIDs.SetBackgroundColor, self.OnBCToolClicked) app.AddHandlerForID(actionIDs.ChooseEmoticon, self.OnEmoteToolClicked) app.AddHandlerForID(actionIDs.AddContact, self.OnAddContact) app.AddHandlerForID(actionIDs.ViewPastChats, self.OnViewPastChats) app.AddHandlerForID(actionIDs.AlertMeWhen, self.OnAlert) app.AddHandlerForID(actionIDs.Files, self.OnFilesClicked) app.AddHandlerForIDs(buttonIDs.values(), self.OnModeClicked) app.AddHandlerForID(actionIDs.FileTransferHistory, self.OnFileTransferHistory) app.AddHandlerForID(actionIDs.SendFile, self.OnSendFile) def DisconnectToolBarEvents(self, event = None): app = wx.GetApp() app.RemoveHandlerForID(actionIDs.SetFont) app.RemoveHandlerForID(actionIDs.SetBackgroundColor) app.RemoveHandlerForID(actionIDs.ChooseEmoticon) app.RemoveHandlerForID(actionIDs.AddContact) app.RemoveHandlerForID(actionIDs.ViewPastChats) app.RemoveHandlerForID(actionIDs.AlertMeWhen) app.RemoveHandlerForID(actionIDs.Files) app.RemoveHandlerForIDs(buttonIDs.values()) def OnAddContact(self, event): if self.frame.notebook.ActiveTab: buddy = self.frame.notebook.ActiveTab.Buddy AddContactDialog.MakeOrShow(service = buddy.service, name = buddy.name) def OnViewPastChats(self, event): if self.frame.notebook.ActiveTab: im_control = self.frame.notebook.ActiveTab.IMControl im_control.Buddy.view_past_chats(im_control.Account) def OnPageIconUpdated(self, message): page = message.data[0] icon = message.data[1] if self.frame: for pagenum in xrange(self.frame.notebook.GetPageCount()): if self.frame.notebook.GetPage(pagenum) == page: self.frame.notebook.UpdatePageImage(pagenum, icon) self.frame.ToolBar.SetToolNormalBitmap(actionIDs.BuddyOptions, icon.Resized((32, 32))) continue if self.frame.notebook.ActiveTab == page: self.frame.SetFrameIcon(icon) def OnPageTitleUpdated(self, message): page = message.data[0] title = message.data[1] window_title = message.data[2] if self.frame: pageInNotebook = False for pagenum in xrange(self.frame.notebook.GetPageCount()): if self.frame.notebook.GetPage(pagenum) == page: self.frame.notebook.SetPageText(pagenum, title) pageInNotebook = True continue if pageInNotebook: if window_title: self.frame.SetTitle(self.frame.WindowName + ' - ' + window_title) else: self.frame.SetTitle(self.frame.WindowName + ' - ' + title) def OnAlert(self, event): gui.pref.prefsdialog.show('notifications') def OnFilesClicked(self, event): popup = wx.Menu() popup.Append(actionIDs.SendFile, _('Send File')) popup.Append(actionIDs.FileTransferHistory, _('Transfer History')) self.frame.PopupMenu(popup, self.frame.ScreenToClient(wx.GetMousePosition())) def OnSendFile(self, event): if self.frame.notebook.ActiveTab: im_control = self.frame.notebook.ActiveTab.IMControl im_control.Buddy.send_file() def OnFileTransferHistory(self, event): FileTransferDialog.Display() def OnModeClicked(self, event): eventid = event.GetId() for name in buttonIDs: if buttonIDs[name] == eventid: self.frame.notebook.ActiveTab.set_mode(name, toggle_tofrom = True) break continue def OnFontClicked(self, event): self.frame.notebook.ActiveTab.input_area.ShowModalFontDialog() def OnBCToolClicked(self, event): tc = self.frame.notebook.ActiveTab.input_area.tc newcolor = wx.GetColourFromUser(self.frame, tc.BackgroundColour, _('Choose a background color')) if newcolor.IsOk(): attrs = tc.GetDefaultStyle() attrs.SetBackgroundColour(newcolor) tc.SetDefaultStyle(attrs) tc.Refresh() tc.SetFocus() def OnEmoteToolClicked(self, event): wx.MessageBox("Not working yet. (need to decide the best way to share code between this and the formattinb bar) Just type smileys by hand, it won't hurt. ;)") class DigsbyFlatNotebook(fnb.FlatNotebook): def __init__(self, *args, **kwargs): fnb.FlatNotebook.__init__(self, *args, **kwargs) self.imageList = wx.ImageList(16, 16) self.SetImageList(self.imageList) self.isDragging = False self._pages.Bind(wx.EVT_MOTION, self.OnNotebookMouseMove) def OnNotebookMouseMove(self, event): (where, tabidx) = self._pages.HitTest(event.GetPosition()) if event.Dragging() and where == fnb.FNB_TAB: if not self.isDragging: event = FlatNotebookDragStarted(self.GetId(), draggedidx = tabidx) self.ProcessEvent(event) self.isDragging = True elif self.isDragging: self.isDragging = False event.Skip() def Pages(self): pagelist = [] for page in xrange(self.GetPageCount()): pagelist.append(self.GetPage(page)) return pagelist def Add(self, ctrl, focus = None): ctrl.show_actions_bar = False page = self.AddPage(ctrl, 'Chat Name', select = focus) ctrl.update_title() ctrl.update_icon() return page def Insert(self, ctrl): self.Add(ctrl, False) def IndexForPage(self, ctrl): for index in xrange(self.GetPageCount()): if ctrl == self.GetPage(index): return index return -1 def Remove(self, ctrl): index = self.IndexForPage(ctrl) self.RemovePage(index) def GetTabCount(self): return self.GetPageCount() def ActiveTab(self): sel = self.GetSelection() if sel != -1: return self.GetPage(sel) if self.GetPageCount() > 0: return self.GetPage(0) ActiveTab = property(ActiveTab) def UpdatePageImage(self, pagenum, icon): imageList = self.GetImageList() iconnum = pagenum if pagenum >= imageList.GetImageCount(): imageList.Add(icon.Resized((16, 16))) iconnum = imageList.GetImageCount() - 1 else: imageList.Replace(pagenum, icon.Resized((16, 16))) self.SetPageImage(pagenum, iconnum) class NativeNotebookPanel(wx.Panel): def __init__(self, *args, **kwargs): wx.Panel.__init__(self, *args, **kwargs) style = fnb.FNB_X_ON_TAB | fnb.FNB_ALLOW_FOREIGN_DND | fnb.FNB_NODRAG | fnb.FNB_BOTTOM | fnb.FNB_FANCY_TABS | fnb.FNB_NO_X_BUTTON self.notebook = DigsbyFlatNotebook(self, wx.ID_ANY, style = style) self.Sizer = wx.BoxSizer(wx.VERTICAL) self.Sizer.Add(self.notebook, 1, wx.EXPAND) self.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, self.OnNotebookPageChanged) self.Bind(fnb.EVT_FLATNOTEBOOK_PAGE_CLOSED, self.OnNotebookPageClosed) self.Pages = self.notebook.Pages self.ActiveTab = self.notebook.ActiveTab def OnNotebookPageClosed(self, event): if self.notebook.GetPageCount() == 0: tlw = wx.GetTopLevelParent(self.notebook) tlw.Close() return None def OnNotebookPageChanged(self, event): page = self.notebook.GetPage(event.GetSelection()) icon = imwin_gui.icons.get(page.icontype, 'buddy')(page.Buddy) pubsub.Publisher().sendMessage(('tab', 'icon', 'updated'), (page, icon)) pubsub.Publisher().sendMessage(('tab', 'title', 'updated'), (page, page.Buddy.alias, None))