home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyo (Python 2.6)
-
- import config
- import wx
- from wx import Point
- from gui.taskbar import DigsbyTaskBarIcon
- import common.actions as actions
- from common import pref
- from gui.toolbox import draw_tiny_text, Monitor, GetDoubleClickTime
- from util import try_this
- import social
- from traceback import print_exc
- from operator import itemgetter
- import common
- import protocols
-
- class ITrayIconProvider(protocols.Interface):
-
- def tray_icon_class():
- pass
-
-
-
- class AccountTrayIconProvider(object):
- protocols.advise(instancesProvide = [
- ITrayIconProvider], asAdapterForTypes = [
- common.AccountBase])
-
- def __init__(self, subject):
- self.subject = subject
-
-
- def tray_icon_class(self):
- EmailAccount = EmailAccount
- import common.emailaccount
- MySpace = MyspaceAccount
- import myspace.MyspaceAccount
- acct = self.subject
- if isinstance(acct, EmailAccount):
- return EmailTrayIcon
- if isinstance(acct, MySpace):
- return MyspaceTrayIcon
- if hasattr(acct, 'tray_icon_class'):
- return acct.tray_icon_class()
- if isinstance(acct, social.network):
- return SocialAccountTrayIcon
-
-
-
- def should_grey(acct):
- return not isinstance(acct, social.network)
-
- baseAccountTrayClass = DigsbyTaskBarIcon
- if config.platform == 'mac':
- from gui.native.mac import macmenuicon
- baseAccountTrayClass = macmenuicon.MenuBarIconDelegate
-
-
- class AccountTrayIcon(baseAccountTrayClass):
-
- def create(cls, acct, infobox):
- trayClass = ITrayIconProvider(acct).tray_icon_class()
- if config.platform == 'mac':
- object = trayClass.alloc().init()
- object.initWithAccount(acct, infobox)
- return object
- return trayClass(acct, infobox)
-
- create = classmethod(create)
-
- def __init__(self, acct, infobox = None):
- self.acct = acct
- self.infobox = infobox
- UMenu = UMenu
- import gui.uberwidgets.umenu
- self._menu = UMenu(wx.FindWindowByName('Buddy List'), onshow = self.update_menu)
- trayid = hash('accounttrayicon_' + acct.protocol + '_' + acct.name)
- super(AccountTrayIcon, self).__init__(acct.icon, menu = self._menu, id = trayid)
- self.Bind(wx.EVT_TASKBAR_LEFT_DOWN, self.on_click)
- self.Bind(wx.EVT_TASKBAR_LEFT_DCLICK, self.on_double_click)
- self.register_observers(acct, self.on_account_updated)
- self.on_account_updated()
-
-
- def update_menu(self, event = None):
- self._menu.RemoveAllItems()
- actions.menu(wx.FindWindowByName('Buddy List'), self.acct, cls = type(self.acct), menu = self._menu)
-
-
- def on_click(self, e = None):
-
- try:
- dclick_timer = self.dclick_timer
- except AttributeError:
- dclick_timer = self.dclick_timer = wx.PyTimer((lambda : pass))
-
- if dclick_timer.IsRunning():
- self.on_double_click()
- dclick_timer.Stop()
- else:
- dclick_timer.StartOneShot(GetDoubleClickTime())
- self.show_infobox()
- e.Skip()
-
-
- def on_double_click(self, e = None):
- if self.infobox.IsShown():
- self.infobox.Hide()
-
- url = self.acct.DefaultAction()
- if url is not None:
- wx.LaunchDefaultBrowser(url)
-
-
-
- def show_infobox(self):
- if not self.infobox:
- return None
- info = self.infobox
- if info.IsShown() and getattr(info, 'account', None) is self.acct:
- info.Hide()
- else:
- pt = self.get_infobox_tray_position()
- info.ShowFromTray(pt, self.acct)
- wx.CallAfter(info.do_focus)
-
-
- def get_infobox_tray_position(self):
-
- try:
- import cgui
- r = cgui.GetTrayRect()
- pt = Point(r.Right - r.Width / 2, r.Bottom - r.Height / 2)
- display = Monitor.GetFromPoint(pt, find_near = True)
- rect = display.GetClientArea()
- distances = []
- for p in ('TopLeft', 'TopRight', 'BottomLeft', 'BottomRight'):
- corner = getattr(rect, p)
- distances.append((corner, corner.DistanceTo(pt), p))
-
- distances.sort(key = itemgetter(1))
- (corner, distance, name) = distances[0]
- return corner
- except Exception:
- print_exc()
- return Monitor.GetFromPointer().ClientArea.BottomRight
-
-
-
- def Destroy(self):
- self._destroyed = True
- if not config.platform == 'mac':
- self.unregister_observers(self.acct, self.on_account_updated)
-
- return super(AccountTrayIcon, self).Destroy()
-
-
- def count_string(self):
- acct = self.acct
- if acct.offline_reason != acct.Reasons.NONE:
- count = 'X'
- else:
- count = getattr(acct, 'count', 0)
- return count
-
- count_string = property(count_string)
-
- def on_account_updated(self, obj = None, attr = None, old = None, new = None):
- obj_or_event = obj
- if not self or getattr(self, '_destroyed', False):
- return None
- acct = self.acct
- count = self.count_string
-
-
- def should_show_count(self):
- return pref('trayicons.email.show_count', True)
-
-
- def Tooltip(self):
- return ''
-
- Tooltip = property(Tooltip)
-
-
- class UpdateMixinAccountTrayIcon(AccountTrayIcon):
-
- def register_observers(self, acct, callback):
- acct.add_observer(callback, 'count', 'state')
-
-
- def unregister_observers(self, acct, callback):
- acct.remove_observer(callback, 'count', 'state')
-
-
-
- class EmailTrayIcon(UpdateMixinAccountTrayIcon):
-
- def update_menu(self, event = None):
- EmailAccount = EmailAccount
- import common.emailaccount
- self._menu.RemoveAllItems()
- actions.menu(wx.FindWindowByName('Buddy List'), self.acct, cls = EmailAccount, search_bases = False, menu = self._menu)
-
-
- def Tooltip(self):
- c = self.count_string
- if c == 'X':
- return _('%s (%s)') % (self.acct.offline_reason, self.acct.email_address)
-
- try:
- count = int(c)
- except ValueError:
- c == 'X'
- c == 'X'
- count = 0
- except:
- c == 'X'
-
- return (c == 'X') % (_('%s unread message%s (%s)'), c if count != 1 else '', self.acct.email_address)
-
- Tooltip = property(Tooltip)
-
-
- class SocialAccountTrayIcon(UpdateMixinAccountTrayIcon):
-
- def Tooltip(self):
- c = self.count_string
- if c == 'X':
- return _('%s (%s)' % (self.acct.offline_reason, self.acct.name))
- return (c == 'X', try_this)((lambda : _('%s new alerts (%s)') % (c, self.acct.name)), '')
-
- Tooltip = property(Tooltip)
-
-
- class MyspaceTrayIcon(SocialAccountTrayIcon):
-
- def register_observers(self, acct, callback):
- SocialAccountTrayIcon.register_observers(self, acct, callback)
- acct.add_observer(callback, 'alerts')
-
-
- def unregister_observers(self, acct, callback):
- SocialAccountTrayIcon.unregister_observers(self, acct, callback)
- acct.remove_observer(callback, 'alerts')
-
-
-