2313
|
1 /* Audacious - Cross-platform multimedia player
|
|
2 * Copyright (C) 2005-2007 Audacious Team
|
|
3 *
|
|
4 * Based on BMP:
|
|
5 * Copyright (C) 2003-2004 BMP development team
|
|
6 *
|
|
7 * Based on XMMS:
|
|
8 * Copyright (C) 1998-2003 XMMS development team
|
|
9 *
|
|
10 * This program is free software; you can redistribute it and/or modify
|
|
11 * it under the terms of the GNU General Public License as published by
|
|
12 * the Free Software Foundation; under version 2 of the License.
|
|
13 *
|
|
14 * This program is distributed in the hope that it will be useful,
|
|
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
17 * GNU General Public License for more details.
|
|
18 *
|
|
19 * You should have received a copy of the GNU General Public License
|
|
20 * along with this program; if not, write to the Free Software
|
|
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
22 */
|
|
23
|
|
24 #ifdef HAVE_CONFIG_H
|
|
25 # include "config.h"
|
|
26 #endif
|
|
27
|
|
28 #include "ui_credits.h"
|
|
29
|
|
30 #include <glib.h>
|
|
31 #include <glib/gi18n.h>
|
|
32 #include <gtk/gtk.h>
|
|
33
|
|
34 #include "audacious_logo.xpm"
|
|
35
|
|
36
|
|
37 enum {
|
|
38 COL_LEFT,
|
|
39 COL_RIGHT,
|
|
40 N_COLS
|
|
41 };
|
|
42
|
|
43
|
|
44 static const gchar *bmp_brief =
|
|
45 N_("<big><b>Audacious %s</b></big>\n"
|
|
46 "The future of UNIX multimedia.\n"
|
|
47 "\n"
|
|
48 "Copyright (C) 2005-2007 Audacious Development Team\n");
|
|
49
|
|
50 static const gchar *credit_text[] = {
|
|
51 N_("Audacious core developers:"),
|
|
52 "George Averill",
|
|
53 "Daniel Bradshaw",
|
|
54 "Adam Cecile",
|
|
55 "Troels Bang Jensen",
|
|
56 "Giacomo Lozito",
|
|
57 "William Pitcock",
|
|
58 "Derek Pomery",
|
|
59 "Jonathan Schleifer",
|
|
60 "Tony Vroon",
|
|
61 "Yoshiki Yazawa",
|
|
62 NULL,
|
|
63
|
|
64 N_("Graphics:"),
|
|
65 "George Averill",
|
|
66 "Stephan Sokolow",
|
|
67 NULL,
|
|
68
|
|
69 N_("Default skin:"),
|
|
70 "George Averill",
|
|
71 "William Pitcock",
|
|
72 NULL,
|
|
73
|
|
74 N_("Plugin development:"),
|
|
75 "Kiyoshi Aman",
|
|
76 "Luca Barbato",
|
|
77 "Shay Green",
|
|
78 "Giacomo Lozito",
|
|
79 "William Pitcock",
|
|
80 "Derek Pomery",
|
|
81 "Jonathan Schleifer",
|
|
82 "Tony Vroon",
|
|
83 NULL,
|
|
84
|
|
85 N_("Patch authors:"),
|
|
86 "Laszlo Dvornik",
|
|
87 "Ralf Ertzinger",
|
|
88 "Mike Frysinger",
|
|
89 "Chris Kehler",
|
|
90 "Michael Hanselmann",
|
|
91 "Henrik Johansson",
|
|
92 "Rodrigo Martins de Matos Ventura",
|
|
93 "Diego Pettenò",
|
|
94 "Kazuki Shimura",
|
|
95 "Valentine Sinitsyn",
|
|
96 "Johan Tavelin",
|
|
97 "Tim Yamin",
|
|
98 NULL,
|
|
99
|
|
100 N_("0.1.x developers:"),
|
|
101 "William Pitcock",
|
|
102 "Mohammed Sameer",
|
|
103 "Tony Vroon",
|
|
104 NULL,
|
|
105
|
|
106 N_("BMP Developers:"),
|
|
107 "Artem Baguinski",
|
|
108 "Edward Brocklesby",
|
|
109 "Chong Kai Xiong",
|
|
110 "Milosz Derezynski",
|
|
111 "David Lau",
|
|
112 "Ole Andre Vadla Ravnaas",
|
|
113 "Michiel Sikkes",
|
|
114 "Andrei Badea",
|
|
115 "Peter Behroozi",
|
|
116 "Bernard Blackham",
|
|
117 "Oliver Blin",
|
|
118 "Tomas Bzatek",
|
|
119 "Liviu Danicel",
|
|
120 "Jon Dowland",
|
|
121 "Artur Frysiak",
|
|
122 "Sebastian Kapfer",
|
|
123 "Lukas Koberstein",
|
|
124 "Dan Korostelev",
|
|
125 "Jolan Luff",
|
|
126 "Michael Marineau",
|
|
127 "Tim-Philipp Muller",
|
|
128 "Julien Portalier",
|
|
129 "Andrew Ruder",
|
|
130 "Olivier Samyn",
|
|
131 "Martijn Vernooij",
|
|
132 NULL,
|
|
133
|
|
134 NULL
|
|
135 };
|
|
136
|
|
137 static const gchar *translators[] = {
|
|
138 N_("Brazilian Portuguese:"),
|
|
139 "Philipi Pinto",
|
|
140 NULL,
|
|
141 N_("Breton:"),
|
|
142 "Thierry Vignaud",
|
|
143 NULL,
|
|
144 N_("Bulgarian:"),
|
|
145 "Andrew Ivanov",
|
|
146 NULL,
|
|
147 N_("Czech:"),
|
|
148 "Jan Narovec",
|
|
149 NULL,
|
|
150 N_("Dutch:"),
|
|
151 "Laurens Buhler",
|
|
152 "Tony Vroon",
|
|
153 NULL,
|
|
154 N_("Finnish:"),
|
|
155 "Pauli Virtanen",
|
|
156 NULL,
|
|
157 N_("French:"),
|
|
158 "Adam Cecile",
|
|
159 NULL,
|
|
160 N_("German:"),
|
|
161 "Michael Hanselmann",
|
|
162 "Matthias Debus",
|
|
163 NULL,
|
|
164 N_("Georgian:"),
|
|
165 "George Machitidze",
|
|
166 NULL,
|
|
167 N_("Greek:"),
|
|
168 "Kouzinopoulos Haris",
|
|
169 "Stavros Giannouris",
|
|
170 "Stathis Kamperis",
|
|
171 NULL,
|
|
172 N_("Hindi:"),
|
|
173 "Dhananjaya Sharma",
|
|
174 NULL,
|
|
175 N_("Hungarian:"),
|
|
176 "Laszlo Dvornik",
|
|
177 NULL,
|
|
178 N_("Italian:"),
|
|
179 "Alessio D'Ascanio",
|
|
180 "Diego Pettenò",
|
|
181 NULL,
|
|
182 N_("Japanese:"),
|
|
183 "Dai",
|
|
184 NULL,
|
|
185 N_("Korean:"),
|
|
186 "DongCheon Park",
|
|
187 NULL,
|
|
188 N_("Lithuanian:"),
|
|
189 "Rimas Kudelis",
|
|
190 NULL,
|
|
191 N_("Macedonian:"),
|
|
192 "Arangel Angov",
|
|
193 NULL,
|
|
194 N_("Polish:"),
|
|
195 "Wojciech Myrda",
|
|
196 NULL,
|
|
197 N_("Romanian:"),
|
|
198 "Daniel Patriche",
|
|
199 NULL,
|
|
200 N_("Russian:"),
|
|
201 "Alexandr Orlov",
|
|
202 NULL,
|
|
203 N_("Serbian (Latin):"),
|
|
204 "Strahinja Kustudić",
|
|
205 NULL,
|
|
206 N_("Serbian (Cyrillic):"),
|
|
207 "Strahinja Kustudić",
|
|
208 NULL,
|
|
209 N_("Simplified Chinese:"),
|
|
210 "Yang Zhang",
|
|
211 NULL,
|
|
212 N_("Slovak:"),
|
|
213 "Pavel Kanzelsberger",
|
|
214 NULL,
|
|
215 N_("Spanish:"),
|
|
216 "Gustavo D. Vranjes",
|
|
217 NULL,
|
|
218 N_("Swedish:"),
|
|
219 "Martin Persenius",
|
|
220 NULL,
|
|
221 N_("Traditional Chinese:"),
|
|
222 "Cheng-Wei Chien",
|
|
223 NULL,
|
|
224 N_("Ukrainian:"),
|
|
225 "Mykola Lynnyk",
|
|
226 NULL,
|
|
227 N_("Welsh:"),
|
|
228 "Edward Brocklesby",
|
|
229 "William Pitcock",
|
|
230 NULL,
|
|
231
|
|
232 NULL
|
|
233 };
|
|
234
|
|
235
|
|
236 static GtkWidget *
|
|
237 generate_credit_list(const gchar * text[], gboolean sec_space)
|
|
238 {
|
|
239 GtkWidget *scrollwin;
|
|
240 GtkWidget *treeview;
|
|
241 GtkListStore *list_store;
|
|
242 GtkTreeIter iter;
|
|
243 GtkTreeViewColumn *column;
|
|
244 GtkCellRenderer *renderer;
|
|
245 const gchar *const *item;
|
|
246
|
|
247 list_store = gtk_list_store_new(N_COLS, G_TYPE_STRING, G_TYPE_STRING);
|
|
248
|
|
249 item = text;
|
|
250
|
|
251 while (*item) {
|
|
252 gtk_list_store_append(list_store, &iter);
|
|
253 gtk_list_store_set(list_store, &iter,
|
|
254 COL_LEFT, _(item[0]), COL_RIGHT, _(item[1]), -1);
|
|
255 item += 2;
|
|
256
|
|
257 while (*item) {
|
|
258 gtk_list_store_append(list_store, &iter);
|
|
259 gtk_list_store_set(list_store, &iter,
|
|
260 COL_LEFT, "", COL_RIGHT, _(*item++), -1);
|
|
261 }
|
|
262
|
|
263 ++item;
|
|
264
|
|
265 if (*item && sec_space) {
|
|
266 gtk_list_store_append(list_store, &iter);
|
|
267 gtk_list_store_set(list_store, &iter,
|
|
268 COL_LEFT, "", COL_RIGHT, "", -1);
|
|
269 }
|
|
270 }
|
|
271
|
|
272 treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(list_store));
|
|
273 gtk_tree_view_set_headers_clickable(GTK_TREE_VIEW(treeview), FALSE);
|
|
274 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(treeview), FALSE);
|
|
275 gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview)),
|
|
276 GTK_SELECTION_NONE);
|
|
277
|
|
278 renderer = gtk_cell_renderer_text_new();
|
|
279 g_object_set(renderer, "xalign", 1.0, NULL);
|
|
280 column = gtk_tree_view_column_new_with_attributes("Left", renderer,
|
|
281 "text", COL_LEFT, NULL);
|
|
282 gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
|
|
283
|
|
284 renderer = gtk_cell_renderer_text_new();
|
|
285 g_object_set(renderer, "xalign", 0.0, NULL);
|
|
286 column = gtk_tree_view_column_new_with_attributes("Right", renderer,
|
|
287 "text", COL_RIGHT,
|
|
288 NULL);
|
|
289 gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
|
|
290
|
|
291 scrollwin = gtk_scrolled_window_new(NULL, NULL);
|
|
292 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin),
|
|
293 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
|
|
294 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrollwin), GTK_SHADOW_IN);
|
|
295 gtk_container_add(GTK_CONTAINER(scrollwin), treeview);
|
|
296 gtk_container_set_border_width(GTK_CONTAINER(scrollwin), 10);
|
|
297
|
|
298 gtk_widget_show_all(scrollwin);
|
|
299
|
|
300 return scrollwin;
|
|
301 }
|
|
302
|
|
303 void
|
|
304 show_credits_window(void)
|
|
305 {
|
|
306 static GtkWidget *about_window = NULL;
|
|
307
|
|
308 GdkPixmap *beep_logo_pmap = NULL, *beep_logo_mask = NULL;
|
|
309 GtkWidget *about_vbox;
|
|
310 GtkWidget *about_credits_logo_box, *about_credits_logo_frame;
|
|
311 GtkWidget *about_credits_logo;
|
|
312 GtkWidget *about_notebook;
|
|
313 GtkWidget *list;
|
|
314 GtkWidget *bbox, *close_btn;
|
|
315 GtkWidget *label;
|
|
316 gchar *text;
|
|
317
|
|
318 if (about_window)
|
|
319 return;
|
|
320
|
|
321 about_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
|
322 gtk_window_set_type_hint(GTK_WINDOW(about_window),
|
|
323 GDK_WINDOW_TYPE_HINT_DIALOG);
|
|
324
|
|
325 gtk_window_set_default_size(GTK_WINDOW(about_window), -1, 512);
|
|
326 gtk_window_set_title(GTK_WINDOW(about_window), _("About Audacious"));
|
|
327 gtk_window_set_position(GTK_WINDOW(about_window), GTK_WIN_POS_CENTER);
|
|
328 gtk_window_set_resizable(GTK_WINDOW(about_window), TRUE);
|
|
329 gtk_container_set_border_width(GTK_CONTAINER(about_window), 10);
|
|
330
|
|
331 g_signal_connect(about_window, "destroy",
|
|
332 G_CALLBACK(gtk_widget_destroyed), &about_window);
|
|
333
|
|
334 gtk_widget_realize(about_window);
|
|
335
|
|
336 about_vbox = gtk_vbox_new(FALSE, 5);
|
|
337 gtk_container_add(GTK_CONTAINER(about_window), about_vbox);
|
|
338
|
|
339 if (!beep_logo_pmap)
|
|
340 beep_logo_pmap =
|
|
341 gdk_pixmap_create_from_xpm_d(about_window->window,
|
|
342 &beep_logo_mask, NULL, audacious_logo_xpm);
|
|
343
|
|
344 about_credits_logo_box = gtk_hbox_new(TRUE, 0);
|
|
345 gtk_box_pack_start(GTK_BOX(about_vbox), about_credits_logo_box,
|
|
346 FALSE, FALSE, 0);
|
|
347
|
|
348 about_credits_logo_frame = gtk_frame_new(NULL);
|
|
349 gtk_frame_set_shadow_type(GTK_FRAME(about_credits_logo_frame),
|
|
350 GTK_SHADOW_ETCHED_OUT);
|
|
351 gtk_box_pack_start(GTK_BOX(about_credits_logo_box),
|
|
352 about_credits_logo_frame, FALSE, FALSE, 0);
|
|
353
|
|
354 about_credits_logo = gtk_pixmap_new(beep_logo_pmap, beep_logo_mask);
|
|
355 gtk_container_add(GTK_CONTAINER(about_credits_logo_frame),
|
|
356 about_credits_logo);
|
|
357
|
|
358 label = gtk_label_new(NULL);
|
|
359 text = g_strdup_printf(_(bmp_brief), VERSION);
|
|
360 gtk_label_set_markup(GTK_LABEL(label), text);
|
|
361 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_CENTER);
|
|
362 g_free(text);
|
|
363
|
|
364 gtk_box_pack_start(GTK_BOX(about_vbox), label, FALSE, FALSE, 0);
|
|
365
|
|
366 about_notebook = gtk_notebook_new();
|
|
367 gtk_box_pack_start(GTK_BOX(about_vbox), about_notebook, TRUE, TRUE, 0);
|
|
368
|
|
369 list = generate_credit_list(credit_text, TRUE);
|
|
370 gtk_notebook_append_page(GTK_NOTEBOOK(about_notebook), list,
|
|
371 gtk_label_new(_("Credits")));
|
|
372
|
|
373 list = generate_credit_list(translators, FALSE);
|
|
374 gtk_notebook_append_page(GTK_NOTEBOOK(about_notebook), list,
|
|
375 gtk_label_new(_("Translators")));
|
|
376
|
|
377 bbox = gtk_hbutton_box_new();
|
|
378 gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);
|
|
379 gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5);
|
|
380 gtk_box_pack_start(GTK_BOX(about_vbox), bbox, FALSE, FALSE, 0);
|
|
381
|
|
382 close_btn = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
|
|
383 g_signal_connect_swapped(close_btn, "clicked",
|
|
384 G_CALLBACK(gtk_widget_destroy), about_window);
|
|
385 GTK_WIDGET_SET_FLAGS(close_btn, GTK_CAN_DEFAULT);
|
|
386 gtk_box_pack_start(GTK_BOX(bbox), close_btn, TRUE, TRUE, 0);
|
|
387 gtk_widget_grab_default(close_btn);
|
|
388
|
|
389 gtk_widget_show_all(about_window);
|
|
390 }
|