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>
31 class HeAboutDialog(gtk
.Dialog
):
33 RESPONSE_BUGTRACKER
, \
34 RESPONSE_DONATE
= range(3)
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
)
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')
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):
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
)