2 changed files with 146 additions and 1 deletions
@ -0,0 +1,136 @@ |
|||||
|
# Copyright (C) 2009 www.stani.be |
||||
|
# |
||||
|
# This program is free software: you can redistribute it and/or modify |
||||
|
# it under the terms of the GNU General Public License as published by |
||||
|
# the Free Software Foundation, either version 3 of the License, or |
||||
|
# (at your option) any later version. |
||||
|
# |
||||
|
# This program is distributed in the hope that it will be useful, |
||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
# GNU General Public License for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU General Public License |
||||
|
# along with this program. If not, see http://www.gnu.org/licenses/ |
||||
|
|
||||
|
# Follows PEP8 |
||||
|
|
||||
|
APP_NAME = 'notify.py' |
||||
|
|
||||
|
from sys import stderr |
||||
|
|
||||
|
# Notify (linux) |
||||
|
try: |
||||
|
# import Notify |
||||
|
# import gobject |
||||
|
# gobject.threads_init() |
||||
|
import gi |
||||
|
gi.require_version('Notify', '0.7') |
||||
|
from gi.repository import Notify |
||||
|
except (ImportError, ValueError): |
||||
|
Notify = None |
||||
|
|
||||
|
# Growl (Mac Os X) |
||||
|
if Notify: |
||||
|
Growl = None |
||||
|
else: |
||||
|
try: |
||||
|
import Growl |
||||
|
except ImportError: |
||||
|
Growl = None |
||||
|
|
||||
|
# Toasterbox (Windows) |
||||
|
if Notify or Growl: |
||||
|
TB = None |
||||
|
else: |
||||
|
try: |
||||
|
import wx |
||||
|
import other.pyWx.toasterbox as TB |
||||
|
except ImportError: |
||||
|
TB = None |
||||
|
|
||||
|
|
||||
|
def register(app_name): |
||||
|
global APP_NAME |
||||
|
APP_NAME = app_name |
||||
|
|
||||
|
|
||||
|
def init(app_name, icon=None): |
||||
|
print("Warning: couldn't find any notification API", file=stderr) |
||||
|
register(app_name) |
||||
|
|
||||
|
if Notify: |
||||
|
|
||||
|
def init(app_name, icon=None): |
||||
|
register(app_name) |
||||
|
Notify.init(app_name) |
||||
|
|
||||
|
def send(title, message, icon='gtk-dialog-info', wxicon=None, |
||||
|
urgent=False, timeout=None): |
||||
|
n = Notify.Notification.new(title, message, icon) |
||||
|
if urgent: |
||||
|
n.set_urgency(2) |
||||
|
if timeout: |
||||
|
n.set_timeout(timeout) |
||||
|
n.show() |
||||
|
|
||||
|
elif Growl: |
||||
|
|
||||
|
def init(app_name, icon=None): |
||||
|
"""Create a growl notifier with appropriate icon if specified. |
||||
|
The notification classes default to [APP_NAME]. The user can |
||||
|
enable/disable notifications based on this class name.""" |
||||
|
global growl |
||||
|
register(app_name) |
||||
|
if icon is None: |
||||
|
icon = {} |
||||
|
else: |
||||
|
icon = {'applicationIcon': Growl.Image.imageFromPath(icon)} |
||||
|
growl = Growl.GrowlNotifier(APP_NAME, [APP_NAME], **icon) |
||||
|
|
||||
|
def send(title, message, icon='gtk-dialog-info', wxicon=None, |
||||
|
urgent=False, timeout=None): |
||||
|
global growl |
||||
|
growl.notify(APP_NAME, title, message) |
||||
|
|
||||
|
elif TB: |
||||
|
|
||||
|
def send(title, message, icon='gtk-dialog-info', |
||||
|
wxicon=None, urgent=False, timeout=None): |
||||
|
if wxicon == None: |
||||
|
wxicon = wx.ArtProvider_GetBitmap(wx.ART_INFORMATION, |
||||
|
wx.ART_OTHER, (48, 48)) |
||||
|
tb = TB.ToasterBox(wx.GetApp().GetTopWindow(), |
||||
|
TB.TB_COMPLEX, TB.DEFAULT_TB_STYLE, TB.TB_ONTIME) |
||||
|
tb.SetPopupSize((300, 80)) |
||||
|
tb.SetPopupPauseTime(5000) |
||||
|
tb.SetPopupScrollSpeed(8) |
||||
|
tb.SetPopupPositionByInt(3) |
||||
|
|
||||
|
#wx controls |
||||
|
tbpanel = tb.GetToasterBoxWindow() |
||||
|
panel = wx.Panel(tbpanel, -1) |
||||
|
panel.SetBackgroundColour(wx.WHITE) |
||||
|
wxicon = wx.StaticBitmap(panel, -1, wxicon) |
||||
|
title = wx.StaticText(panel, -1, title) |
||||
|
message = wx.StaticText(panel, -1, message) |
||||
|
|
||||
|
# wx layout controls |
||||
|
ver_sizer = wx.BoxSizer(wx.VERTICAL) |
||||
|
ver_sizer.Add(title, 0, wx.ALL, 4) |
||||
|
ver_sizer.Add(message, 0, wx.ALL, 4) |
||||
|
|
||||
|
hor_sizer = wx.BoxSizer(wx.HORIZONTAL) |
||||
|
hor_sizer.Add(wxicon, 0, wx.EXPAND | wx.ALIGN_CENTER_VERTICAL \ |
||||
|
| wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 4) |
||||
|
hor_sizer.Add(ver_sizer, 1, wx.EXPAND) |
||||
|
hor_sizer.Layout() |
||||
|
panel.SetSizer(hor_sizer) |
||||
|
|
||||
|
tb.AddPanel(panel) |
||||
|
tb.Play() |
||||
|
|
||||
|
else: |
||||
|
|
||||
|
def send(*args, **keyw): |
||||
|
pass |
||||
Loading…
Reference in new issue