Fix possible bug with AboutDialog on Maemo 5
[gpodder.git] / src / gpodder / gtkui / frmntl / about.py
blob3c719be3096b35b40ab97bcd5bdf2a1b721348ff
1 # -*- coding: utf-8 -*-
3 # gPodder - A media aggregator and podcast client
4 # Copyright (c) 2005-2010 Thomas Perl and the gPodder Team
6 # gPodder is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 3 of the License, or
9 # (at your option) any later version.
11 # gPodder is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License
17 # along with this program. If not, see <http://www.gnu.org/licenses/>.
20 # Python implementation of HeAboutDialog from hildon-extras
21 # Copyright (c) 2010-04-11 Thomas Perl <thp@thpinfo.com>
23 import hildon
24 import gtk
25 import dbus
27 import gpodder
29 _ = gpodder.gettext
31 class HeAboutDialog(gtk.Dialog):
32 RESPONSE_WEBSITE, \
33 RESPONSE_BUGTRACKER, \
34 RESPONSE_DONATE = range(3)
36 def __init__(self):
37 gtk.Dialog.__init__(self)
39 self.website_url = None
40 self.bugtracker_url = None
41 self.donate_url = None
43 self.set_title(_('About'))
45 self.image_icon = gtk.Image()
46 self.label_app_name = gtk.Label(app_name)
47 self.label_version = gtk.Label()
48 self.label_description = gtk.Label()
49 self.label_copyright = gtk.Label()
50 self.table_layout = gtk.Table(3, 3, False)
52 hildon.hildon_helper_set_logical_font(self.label_app_name, 'X-LargeSystemFont')
53 hildon.hildon_helper_set_logical_font(self.label_version, 'LargeSystemFont')
54 hildon.hildon_helper_set_logical_font(self.label_copyright, 'SmallSystemFont')
55 hildon.hildon_helper_set_logical_color(self.label_copyright, gtk.RC_FG, gtk.STATE_NORMAL, 'SecondaryTextColor')
57 self.label_app_name.set_alignment(0, 1)
58 self.label_version.set_alignment(0, 1)
59 self.label_description.set_alignment(0, 0)
60 self.label_copyright.set_alignment(0, 1)
61 self.label_version.set_padding(10, 0)
62 self.label_copyright.set_padding(0, 5)
63 self.image_icon.set_padding(5, 5)
65 #content_area = self.get_content_area() # Starting with PyGTK 2.14
66 content_area = self.vbox
68 self.table_layout.attach(self.image_icon, 0, 1, 0, 2, 0, gtk.EXPAND, 0, 0)
69 self.table_layout.attach(self.label_app_name, 1, 2, 0, 1, 0, gtk.EXPAND | gtk.FILL, 0, 0)
70 self.table_layout.attach(self.label_version, 2, 3, 0, 1, gtk.EXPAND | gtk.FILL, gtk.EXPAND | gtk.FILL, 0, 0)
71 self.table_layout.attach(self.label_description, 1, 3, 1, 2, gtk.EXPAND | gtk.FILL, gtk.EXPAND | gtk.FILL, 0, 0)
72 self.table_layout.attach(self.label_copyright, 0, 3, 2, 3, gtk.EXPAND | gtk.FILL, gtk.EXPAND | gtk.FILL, 0, 0)
73 content_area.add(self.table_layout)
74 self.connect('response', self._on_response)
75 self.show_all()
77 def _on_response(self, dialog, response_id):
78 if response_id == HeAboutDialog.RESPONSE_WEBSITE:
79 self.open_webbrowser(self.website_url)
80 elif response_id == HeAboutDialog.RESPONSE_BUGTRACKER:
81 self.open_webbrowser(self.bugtracker_url)
82 elif response_id == HeAboutDialog.RESPONSE_DONATE:
83 self.open_webbrowser(self.donate_url)
85 def set_app_name(self, app_name):
86 self.label_app_name.set_text(app_name)
87 self.set_title(_('About %s') % app_name)
89 def set_icon_name(self, icon_name):
90 self.image_icon.set_from_icon_name(icon_name, gtk.ICON_SIZE_DIALOG)
92 def set_version(self, version):
93 self.label_version.set_text(version)
95 def set_description(self, description):
96 self.label_description.set_text(description)
98 def set_copyright(self, copyright):
99 self.label_copyright.set_text(copyright)
101 def set_website(self, url):
102 if self.website_url is None:
103 self.add_button(_('Visit website'), HeAboutDialog.RESPONSE_WEBSITE)
104 self.website_url = url
106 def set_bugtracker(self, url):
107 if self.bugtracker_url is None:
108 self.add_button(_('Report bug'), HeAboutDialog.RESPONSE_BUGTRACKER)
109 self.bugtracker_url = url
111 def set_donate_url(self, url):
112 if self.donate_url is None:
113 self.add_button(_('Donate'), HeAboutDialog.RESPONSE_DONATE)
114 self.donate_url = url
116 def open_webbrowser(self, url):
117 bus = dbus.SessionBus()
118 proxy = bus.get_object('com.nokia.osso_browser', '/com/nokia/osso_browser/request', 'com.nokia.osso_browser')
119 proxy.load_url(url, dbus_interface='com.nokia.osso_browser')
121 @classmethod
122 def present(cls, parent=None, app_name=None, icon_name=None, \
123 version=None, description=None, copyright=None, \
124 website_url=None, bugtracker_url=None, donate_url=None):
125 ad = cls()
127 if parent is not None:
128 ad.set_transient_for(parent)
129 ad.set_destroy_with_parent(True)
131 if app_name is not None:
132 ad.set_app_name(app_name)
134 ad.set_icon_name(icon_name)
135 ad.set_version(version)
136 ad.set_description(description)
137 ad.set_copyright(copyright)
139 if website_url is not None:
140 ad.set_website(website_url)
142 if bugtracker_url is not None:
143 ad.set_bugtracker(bugtracker_url)
145 if donate_url is not None:
146 ad.set_donate_url(donate_url)
148 ad.run()
149 ad.destroy()