home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyo (Python 2.5)
-
- import sys
- 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
- from util import try_this
- import social
- from traceback import print_exc
- from operator import itemgetter
- from gui.toolbox import Monitor
-
- def should_grey(acct):
- return not isinstance(acct, social.network)
-
-
- GetDoubleClickTime = lambda : 600
- if 'wxMSW' in wx.PlatformInfo:
-
- try:
- from ctypes import windll
- GetDoubleClickTime = windll.user32.GetDoubleClickTime
- except Exception:
- print_exc()
- except:
- None<EXCEPTION MATCH>Exception
-
-
- None<EXCEPTION MATCH>Exception
- baseAccountTrayClass = DigsbyTaskBarIcon
- if sys.platform.startswith('darwin'):
- from gui.native.mac import macmenuicon
- baseAccountTrayClass = macmenuicon.MenuBarIconDelegate
-
-
- class AccountTrayIcon(baseAccountTrayClass):
-
- def create(cls, acct, infobox):
- EmailAccount = EmailAccount
- import common.emailaccount
- import social.facebook.facebook as facebook
- Facebook = facebook.Facebook
- MySpace = protocol
- import social.myspace
- Twitter = Twitter
- import social.twitter
- trayClass = None
- if isinstance(acct, EmailAccount):
- trayClass = EmailTrayIcon
- elif isinstance(acct, Facebook):
- trayClass = FacebookTrayIcon
- elif isinstance(acct, MySpace):
- trayClass = MyspaceTrayIcon
- elif isinstance(acct, Twitter):
- trayClass = TwitterTrayIcon
- elif isinstance(acct, social.network):
- trayClass = SocialAccountTrayIcon
-
- if sys.platform.startswith('darwin'):
- object = trayClass.alloc().init()
- object.initWithAccount(acct, infobox)
- return object
- else:
- 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)
- baseAccountTrayClass.__init__(self, acct.icon, menu = self._menu)
- 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, *a):
- 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.OnClickHomeURL()
- 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.Display(pt, pt, self.acct, force_corner = pt)
- 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 sys.platform.startswith('darwin'):
- self.unregister_observers(self.acct, self.on_account_updated)
-
- return baseAccountTrayClass.Destroy(self)
-
-
- def count_string(self):
- acct = self.acct
- if acct.offline_reason != acct.Reasons.NONE:
- count = 'X'
- else:
- count = acct.count
- return count
-
- count_string = property(count_string)
-
- def on_account_updated(self, *a):
- if not self or getattr(self, '_destroyed', False):
- return None
-
- acct = self.acct
- count = self.count_string
- if acct.enabled:
- icon = acct.icon.PIL.Resized(self._IconSize)
- if pref('trayicons.email.show_count', True) and count:
- icon = draw_tiny_text(icon, str(count)).WX
-
- if pref('trayicons.email.gray_on_empty', True) and count in (0, 'X') and should_grey(acct):
- icon = icon.WXB.Greyed
-
- self.SetIcon(icon, self.Tooltip)
-
-
-
- def Tooltip(self):
- return ''
-
- Tooltip = property(Tooltip)
-
-
- class EmailTrayIcon(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')
-
-
- def update_menu(self, *a):
- 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)
- else:
-
- try:
- count = int(c)
- except ValueError:
- count = 0
-
- return None % (_('%s unread message%s (%s)'), c if count != 1 else '', self.acct.email_address)
-
- Tooltip = property(Tooltip)
-
-
- class SocialAccountTrayIcon(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')
-
-
- def Tooltip(self):
- c = self.count_string
- if c == 'X':
- return _('%s (%s)' % (self.acct.offline_reason, self.acct.name))
- else:
- return (None, try_this)((lambda : _('%s new alerts (%s)') % (c, self.acct.name)), '')
-
- Tooltip = property(Tooltip)
-
-
- class FacebookTrayIcon(SocialAccountTrayIcon):
-
- def register_observers(self, acct, callback):
- SocialAccountTrayIcon.register_observers(self, acct, callback)
- acct.newsfeed.add_observer(callback)
-
-
- def unregister_observers(self, acct, callback):
- SocialAccountTrayIcon.unregister_observers(self, acct, callback)
- acct.newsfeed.remove_observer(callback)
-
-
-
- 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')
-
-
-
- class TwitterTrayIcon(SocialAccountTrayIcon):
-
- def __init__(self, *a, **k):
- SocialAccountTrayIcon.__init__(self, *a, **k)
- self.tray_refresh_timer = wx.PyTimer(self.on_refresh_timer)
- self.tray_refresh_timer.StartRepeating(300000)
-
-
- def on_refresh_timer(self):
- if wx.IsDestroyed(self):
- import sys
- print >>sys.stderr, 'WARNING: TwitterTrayIcon.on_refresh_timer being called but is destroyed.'
- else:
- self.SetIcon(self.acct.icon)
-
-
- def register_observers(self, acct, callback):
- SocialAccountTrayIcon.register_observers(self, acct, callback)
- acct.add_observer(callback, 'user_timeline')
-
-
- def unregister_observers(self, acct, callback):
- SocialAccountTrayIcon.unregister_observers(self, acct, callback)
- acct.remove_observer(callback, 'user_timeline')
-
-
- def Tooltip(self):
- return 'Twitter (%s)' % self.acct.name
-
- Tooltip = property(Tooltip)
-
-