home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyo (Python 2.5)
-
- from __future__ import with_statement
- import actionIDs
- from gui.taskbar import DigsbyTaskBarIcon
- from traceback import print_exc
- from wx import EXPAND
- import wx
- import logging
- log = logging.getLogger('blist_fr')
- warning = log.warning
- from util import do, Storage, traceguard, try_this
- import gui
- from gui import statuscombo
- from gui.uberwidgets.panelframe import PanelFrame
- from gui.buddylist.accountlist import AccountList
- from gui.uberwidgets.connectionlist import ConnectionsPanel
- from gui.buddylist.accounttray import AccountTrayIcon
- from gui.native import memory_event
- from common import profile, bind
- from gui.toolbox import AddInOrder, calllimit
- from hub import Hub
- hub = Hub.getInstance()
- from gui.toolbox import saveWindowPos
- from gui.statuscombo import StatusCombo
- from common import pref
- from cgui import SimplePanel
- from gui.uberwidgets.umenu import UMenu
- import gui.app.menubar as menubar
- from config import platformName, newMenubar
-
- class BuddyListFrame(wx.Frame):
-
- def __init__(self, *args, **kwargs):
- wx.Frame.__init__(self, *args, **kwargs)
- traceguard.__enter__()
-
- try:
- skin = skin
- import gui
- self.SetFrameIcon(skin.get('AppDefaults.TaskbarIcon'))
- finally:
- pass
-
- self.Bind(wx.EVT_ERASE_BACKGROUND, (lambda e: pass))
- self.SetBackgroundStyle(wx.BG_STYLE_CUSTOM)
- snap_pref = snap_pref
- loadWindowPos = loadWindowPos
- import gui.toolbox
- snap_pref(self)
- defaultRect = get_default_blist_rect()
- loadWindowPos(self, defaultPos = defaultRect.Position, defaultSize = defaultRect.Size)
- Docker = Docker
- import gui.native.docking
-
- docker.ShouldShowInTaskbar = lambda : pref('buddylist.show_in_taskbar', default = True, type = bool)
- docker.ShouldAlwaysStayOnTop = self.SetAlwaysOnTop
- docker.LinkedWindows += [
- panel.infobox]
- docker.OnHide += panel.infobox.Hide
- Bind = self.Bind
- Bind((wx.EVT_SET_FOCUS,), (lambda e: panel.buddylist.SetFocus()))
- Bind(wx.EVT_CLOSE, self.on_close)
-
- def on_show(e):
- e.Skip()
- if not e.GetShow():
- memory_event()
-
-
- Bind(wx.EVT_SHOW, on_show)
-
-
- def SetAlwaysOnTop(self, val = None):
- stayOnTop = None if val is not None else pref('buddylist.always_on_top', False)
- style = self.GetWindowStyle()
- if stayOnTop:
- self.SetWindowStyle(wx.STAY_ON_TOP | style)
- else:
- self.SetWindowStyle(~(wx.STAY_ON_TOP) & style)
-
-
- def on_iconize(self, e):
- if e.Iconized():
- memory_event()
- if not self.OnTaskbar:
- self.maybe_undock()
- self.Hide()
-
-
-
-
- def on_destroy(self):
- log.info('BuddylistFrame.OnDestroy()')
- self.buddyListPanel.on_destroy()
-
-
- def on_close(self, e = None, exiting = False):
- log.info('BuddylistFrame.on_close')
- autohidden = False
- if not exiting:
- traceguard.__enter__()
-
- try:
- autohidden = self.maybe_undock()
- finally:
- pass
-
-
- if not autohidden:
- saveWindowPos(self)
- if not exiting and pref('buddylist.close_button_exits', False):
- wx.GetApp().DigsbyCleanupAndQuit()
- else:
- self.Show(False)
-
- memory_event()
-
-
- def maybe_undock(self):
- docker = self.docker
- if docker.Enabled and docker.docked:
- autohidden = docker.autohidden
- if docker.AutoHide and not autohidden:
- docker.GoAway()
- autohidden = True
- elif not docker.AutoHide:
- docker.wasDocked = True
- docker.Undock(setFrameStyle = False)
-
- return autohidden
-
-
-
-
- class BuddyListPanel(SimplePanel):
-
- def __init__(self, parent = None):
- SimplePanel.__init__(self, parent)
- self.Sizer = wx.BoxSizer(wx.VERTICAL)
- link = profile.prefs.link
- self.tray_icons = []
- self.gui_construct()
- rebuild = self.rebuild_panels
- rebuild()
-
- def ontop_changed(val):
- docker = wx.GetTopLevelParent(self).docker
- if docker.docked and docker.AutoHide:
- return None
-
- p = wx.GetTopLevelParent(self)
- if val:
- p.WindowStyle = p.WindowStyle | wx.STAY_ON_TOP
- else:
- p.WindowStyle = p.WindowStyle & ~(wx.STAY_ON_TOP)
-
- self.unlinkers = [ link(*a) for a in [
- ('buddylist.always_on_top', ontop_changed, True, self),
- (('buddylist.order',), (lambda v: self.gui_layout()), False, self),
- ('buddylist.show_status', rebuild, False),
- ('buddylist.show_email_as', rebuild, False),
- ('buddylist.show_social_as', rebuild, False),
- (('buddylist.show_menubar',), (lambda v: self.gui_layout()), False, self),
- ('social.display_attr', rebuild, False),
- ('email.display_attr', rebuild, False),
- (('buddylist.show_in_taskbar',), (lambda val: (None, wx.CallAfter)((lambda : setattr(self.Top, 'OnTaskbar', val)))
- ), True, self)] ]
- link = profile.localprefs.link
- docker = wx.GetTopLevelParent(self).docker
- [] += [ link(*a) for a in [
- (('buddylist.dock.autohide',), (lambda v: docker.SetAutoHide(bool(v))), True, docker),
- (('buddylist.dock.enabled',), (lambda v: docker.SetEnabled(bool(v))), True, docker),
- (('buddylist.dock.revealms',), (lambda v: setattr(docker, 'RevealDurationMs', (try_this,)((lambda : int(v)), 300))
- ), True, docker)] ]
- self.unlinkers.append(profile.prefs.link(('buddylist.dock.slide_velocity',), (lambda v: wx.CallAfter(docker.SetVelocity, int(v))), obj = docker))
- self.unlinkers.append(Storage(unlink = profile.emailaccounts.add_list_observer(rebuild, rebuild, 'enabled').disconnect))
- self.unlinkers.append(Storage(unlink = profile.socialaccounts.add_list_observer(rebuild, rebuild, 'enabled').disconnect))
-
-
- def UpdateSkin(self):
- wx.CallAfter(self.Layout)
-
-
- def SelectNext(self):
- self.blist.RotateContact(forward = True)
-
- SelectNext = bind('buddylist.infobox.selectnext')(SelectNext)
-
- def SelectPrev(self):
- self.blist.RotateContact(forward = False)
-
- SelectPrev = bind('buddylist.infobox.selectprev')(SelectPrev)
-
- def gui_construct(self):
- BuddyList = BuddyList
- import gui.buddylist.buddylist
- self.status = PanelFrame(self, StatusCombo(self, profile.statuses), 'statuspanel')
- InfoBox = InfoBox
- import gui.infobox.infobox
- self.infobox = InfoBox(self)
- self.buddylist = BuddyList(self, self.infobox)
- self.blist = PanelFrame(self, self.buddylist, 'buddiespanel')
-
- def labelcall(_a):
- dname = _a.display_name
- if _a.state != _a.Statuses.CHECKING:
- pass
- elif not None:
- pass
- return '%s (%s)' % (dname, _a.count)
-
- self.elist = PanelFrame(self, AccountList(self, profile.emailaccounts, self.infobox, skinkey = 'emailpanel', onDoubleClick = (lambda a: a.OnClickInboxURL()), labelCallback = labelcall), 'emailpanel')
-
- def foo(a):
- if a.state != a.Statuses.CHECKING:
- bar = profile.account_manager.state_desc(a)
- else:
- bar = a.count
- return '%s (%s)' % (a.display_name, bar)
-
-
- def networklabelCallback(a):
- out = '%s' % a.display_name
- if a.state != a.Statuses.CHECKING and profile.account_manager.state_desc(a):
- return out + ' (%s)' % profile.account_manager.state_desc(a)
- elif hasattr(a, 'count') and a.count is not None:
- return out + ' (%s)' % a.count
- else:
- return out
-
-
- def launch_home_url(a):
- url = a.OpenHomeURL()
- if url is not None:
- wx.LaunchDefaultBrowser(url)
-
-
- self.slist = PanelFrame(self, AccountList(self, profile.socialaccounts, self.infobox, skinkey = 'socialpanel', onDoubleClick = launch_home_url, labelCallback = networklabelCallback), 'socialpanel')
- self.clist = ConnectionsPanel(self)
- self.infobox.Befriend(self.blist)
- self.infobox.Befriend(self.elist)
- self.infobox.Befriend(self.slist)
- if not newMenubar:
- buddylistmenu = buddylistmenu
- import gui.buddylist
- self.menubar = buddylistmenu.create_main_menu(self)
- if self.menubar.native:
- self.Top.SetMenuBar(self.menubar)
-
- else:
- asumenu = False
- parent = self.Parent
- if platformName != 'mac':
- asumenu = True
- parent = self
-
- self.menubar = menus.set_menubar(parent, menubar.digsbyWxMenuBar(), umenu = asumenu)
-
-
- def ToggleConnPanel(self):
- self.clist.ToggleState()
-
- ToggleConnPanel = bind('BuddyList.Accounts.ToggleShow')(ToggleConnPanel)
-
- def gui_layout(self, layoutNow = True):
- elems = [
- 'status',
- 'blist',
- 'clist',
- 'slist',
- 'elist']
- panel_order = pref('buddylist.order', elems)
- if pref('buddylist.show_email_as', 'panel') in ('panel', 'both'):
- pass
- email_view = len(self.elist.active)
- if pref('buddylist.show_social_as', 'panel') in ('panel', 'both'):
- pass
- social_view = len(self.slist.active)
- status_view = pref('buddylist.show_status', True)
- viewable = Storage()
- self.Frozen().__enter__()
-
- try:
- self.Sizer.Clear()
- show_menu = pref('buddylist.show_menubar', True)
- if hasattr(self, 'status') and status_view:
- viewable.status = (self.status, 0, EXPAND)
-
- viewable.blist = (self.blist, 1, EXPAND)
- viewable.clist = (self.clist, 0, EXPAND)
- if email_view:
- viewable.elist = (self.elist, 0, EXPAND)
-
- if social_view:
- viewable.slist = (self.slist, 0, EXPAND)
-
- AddInOrder(self.Sizer, *panel_order, **viewable)
- self.status.Show(status_view)
- self.elist.Show(email_view)
- self.slist.Show(social_view)
- if layoutNow:
- self.Layout()
- finally:
- pass
-
-
-
- def rebuild_panels(self, *a):
- wx.CallAfter(self._rebuild_panels)
-
-
- def _rebuild_panels(self):
- trayaccts = []
- self.Frozen().__enter__()
-
- try:
- wx.CallAfter(self.gui_layout)
- finally:
- pass
-
-
- _rebuild_panels = calllimit(1)(_rebuild_panels)
-
- def on_destroy(self):
- log.info('BuddylistPanel.on_destroy')
- for linker in self.unlinkers:
- linker.unlink()
-
- self.elist.OnClose()
- self.slist.OnClose()
- log.info('destroying account tray icons')
- for acct, icon in self.tray_icons:
-
- try:
- log.info('destroying account tray icon %r...', icon)
- icon.Destroy()
- log.info('ok')
- continue
- except Exception:
- print_exc()
- continue
-
-
-
-
-
-
- class BuddyListEventHandler:
-
- def __init__(self):
- wx.GetApp().Bind(wx.EVT_MENU, wx.GetApp().OnShowHideBuddylist, id = actionIDs.ShowBuddyList)
- wx.GetApp().Bind(wx.EVT_MENU, self.OnMenubarPref, id = actionIDs.ShowMenuBar)
- wx.GetApp().Bind(wx.EVT_MENU, self.OnStatusCustom, id = actionIDs.SetStatusCustom)
-
-
- def SetupStatusHandlers(self):
- for id in statuscombo.status_dict.values():
- wx.GetApp().Bind(wx.EVT_MENU, self.OnStatus, id = id)
-
-
-
- def OnMenubarPref(self, event):
- prefs = profile.prefs
- pref = 'buddylist.show_menubar'
- prefs[pref] = not prefs[pref]
-
-
- def OnStatus(self, event):
- status_dict = statuscombo.status_dict
- for status in status_dict:
- if status_dict[status] == event.GetId():
- profile.set_status(status)
- continue
-
-
-
- def OnStatusCustom(self, event):
- statuscombo.edit_custom_status(None)
-
-
-
- class BuddyListTaskBarIcon(DigsbyTaskBarIcon, BuddyListEventHandler):
-
- def __init__(self, *args, **kwargs):
- DigsbyTaskBarIcon.__init__(self, *args, **kwargs)
- BuddyListEventHandler.__init__(self)
-
-
- def CreatePopupMenu(self):
- wxMac = 'wxMac' in wx.PlatformInfo
- buddy_frame = wx.FindWindowByName('Buddy List')
- umenu = UMenu(buddy_frame, onshow = None, windowless = True)
- show_hide = umenu.AddItem(_('Show &Buddy List'), id = actionIDs.ShowBuddyList)
- if buddy_frame:
- docker = getattr(buddy_frame, 'docker', None)
- if docker:
- if docker.Enabled and docker.docked:
- pass
- disable_hide = docker.AutoHide
- show_hide.label = None if buddy_frame.Shown else _('Show &Buddy List')
- show_hide.Enable(not disable_hide)
-
-
- if platformName != 'mac':
- umenu.AddPrefCheck('buddylist.show_menubar', _('Show Menu Bar'))
-
- statmenu = UMenu(buddy_frame, onshow = None)
- statuscombo.status_menu(statmenu, add_custom = True)
- umenu.AddSubMenu(statmenu, _('&Status'))
- umenu.AddSep()
- umenu.AddItem(_('&Preferences...'), id = wx.ID_PREFERENCES)
- if platformName != 'mac':
- umenu.AddSep()
- umenu.AddItem(_('E&xit Digsby'), id = wx.ID_EXIT)
-
- self.SetupStatusHandlers()
- return umenu
-
-
-
- def get_default_blist_rect():
- r = wx.Display(0).GetClientArea()
- DEF_WIDTH = 220
- r.x = r.Right - DEF_WIDTH
- r.width = DEF_WIDTH
- return r
-
- gui.input.add_class_context(_('Buddy List'), 'BuddyList', cls = BuddyListPanel)
-