comparison src/audacious/ui_credits.c @ 2313:3149d4b1a9a9 trunk

[svn] - objective-make autodepend fixes - move all sourcecode into src/ and adjust Makefiles accordingly
author nenolod
date Fri, 12 Jan 2007 11:43:40 -0800
parents
children 716975bb5b65
comparison
equal deleted inserted replaced
2312:e1a5a66fb9cc 2313:3149d4b1a9a9
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 }