comparison audacious/ui_credits.c @ 2241:a6010343e979 trunk

[svn] - about.c -> ui_about.c, credits.c -> ui_credits.c
author nenolod
date Tue, 02 Jan 2007 22:09:10 -0800
parents audacious/credits.c@86f0443d0de2
children 9d8430979580
comparison
equal deleted inserted replaced
2240:9711bc859ea6 2241:a6010343e979
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-2006 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_("Czech:"),
145 "Jan Narovec",
146 NULL,
147 N_("Dutch:"),
148 "Laurens Buhler",
149 "Tony Vroon",
150 NULL,
151 N_("Finnish:"),
152 "Pauli Virtanen",
153 NULL,
154 N_("French:"),
155 "Adam Cecile",
156 NULL,
157 N_("German:"),
158 "Michael Hanselmann",
159 "Matthias Debus",
160 NULL,
161 N_("Georgian:"),
162 "George Machitidze",
163 NULL,
164 N_("Greek:"),
165 "Kouzinopoulos Haris",
166 "Stavros Giannouris",
167 "Stathis Kamperis",
168 NULL,
169 N_("Hindi:"),
170 "Dhananjaya Sharma",
171 NULL,
172 N_("Hungarian:"),
173 "Laszlo Dvornik",
174 NULL,
175 N_("Italian:"),
176 "Alessio D'Ascanio",
177 "Diego Pettenò",
178 NULL,
179 N_("Japanese:"),
180 "Dai",
181 NULL,
182 N_("Korean:"),
183 "DongCheon Park",
184 NULL,
185 N_("Lithuanian:"),
186 "Rimas Kudelis",
187 NULL,
188 N_("Macedonian:"),
189 "Arangel Angov",
190 NULL,
191 N_("Polish:"),
192 "Wojciech Myrda",
193 NULL,
194 N_("Romanian:"),
195 "Daniel Patriche",
196 NULL,
197 N_("Russian:"),
198 "Alexandr Orlov",
199 NULL,
200 N_("Serbian (Latin):"),
201 "Strahinja Kustudić",
202 NULL,
203 N_("Serbian (Cyrillic):"),
204 "Strahinja Kustudić",
205 NULL,
206 N_("Simplified Chinese:"),
207 "Yang Zhang",
208 NULL,
209 N_("Slovak:"),
210 "Pavel Kanzelsberger",
211 NULL,
212 N_("Spanish:"),
213 "Gustavo D. Vranjes",
214 NULL,
215 N_("Swedish:"),
216 "Martin Persenius",
217 NULL,
218 N_("Traditional Chinese:"),
219 "Cheng-Wei Chien",
220 NULL,
221 N_("Ukrainian:"),
222 "Mykola Lynnyk",
223 NULL,
224 N_("Welsh:"),
225 "Edward Brocklesby",
226 "William Pitcock",
227 NULL,
228
229 NULL
230 };
231
232
233 static GtkWidget *
234 generate_credit_list(const gchar * text[], gboolean sec_space)
235 {
236 GtkWidget *scrollwin;
237 GtkWidget *treeview;
238 GtkListStore *list_store;
239 GtkTreeIter iter;
240 GtkTreeViewColumn *column;
241 GtkCellRenderer *renderer;
242 const gchar *const *item;
243
244 list_store = gtk_list_store_new(N_COLS, G_TYPE_STRING, G_TYPE_STRING);
245
246 item = text;
247
248 while (*item) {
249 gtk_list_store_append(list_store, &iter);
250 gtk_list_store_set(list_store, &iter,
251 COL_LEFT, _(item[0]), COL_RIGHT, _(item[1]), -1);
252 item += 2;
253
254 while (*item) {
255 gtk_list_store_append(list_store, &iter);
256 gtk_list_store_set(list_store, &iter,
257 COL_LEFT, "", COL_RIGHT, _(*item++), -1);
258 }
259
260 ++item;
261
262 if (*item && sec_space) {
263 gtk_list_store_append(list_store, &iter);
264 gtk_list_store_set(list_store, &iter,
265 COL_LEFT, "", COL_RIGHT, "", -1);
266 }
267 }
268
269 treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(list_store));
270 gtk_tree_view_set_headers_clickable(GTK_TREE_VIEW(treeview), FALSE);
271 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(treeview), FALSE);
272 gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview)),
273 GTK_SELECTION_NONE);
274
275 renderer = gtk_cell_renderer_text_new();
276 g_object_set(renderer, "xalign", 1.0, NULL);
277 column = gtk_tree_view_column_new_with_attributes("Left", renderer,
278 "text", COL_LEFT, NULL);
279 gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
280
281 renderer = gtk_cell_renderer_text_new();
282 g_object_set(renderer, "xalign", 0.0, NULL);
283 column = gtk_tree_view_column_new_with_attributes("Right", renderer,
284 "text", COL_RIGHT,
285 NULL);
286 gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
287
288 scrollwin = gtk_scrolled_window_new(NULL, NULL);
289 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin),
290 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
291 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrollwin), GTK_SHADOW_IN);
292 gtk_container_add(GTK_CONTAINER(scrollwin), treeview);
293 gtk_container_set_border_width(GTK_CONTAINER(scrollwin), 10);
294
295 gtk_widget_show_all(scrollwin);
296
297 return scrollwin;
298 }
299
300 void
301 show_credits_window(void)
302 {
303 static GtkWidget *about_window = NULL;
304
305 GdkPixmap *beep_logo_pmap = NULL, *beep_logo_mask = NULL;
306 GtkWidget *about_vbox;
307 GtkWidget *about_credits_logo_box, *about_credits_logo_frame;
308 GtkWidget *about_credits_logo;
309 GtkWidget *about_notebook;
310 GtkWidget *list;
311 GtkWidget *bbox, *close_btn;
312 GtkWidget *label;
313 gchar *text;
314
315 if (about_window)
316 return;
317
318 about_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
319 gtk_window_set_type_hint(GTK_WINDOW(about_window),
320 GDK_WINDOW_TYPE_HINT_DIALOG);
321
322 gtk_window_set_default_size(GTK_WINDOW(about_window), -1, 512);
323 gtk_window_set_title(GTK_WINDOW(about_window), _("About Audacious"));
324 gtk_window_set_position(GTK_WINDOW(about_window), GTK_WIN_POS_CENTER);
325 gtk_window_set_resizable(GTK_WINDOW(about_window), TRUE);
326 gtk_container_set_border_width(GTK_CONTAINER(about_window), 10);
327
328 g_signal_connect(about_window, "destroy",
329 G_CALLBACK(gtk_widget_destroyed), &about_window);
330
331 gtk_widget_realize(about_window);
332
333 about_vbox = gtk_vbox_new(FALSE, 5);
334 gtk_container_add(GTK_CONTAINER(about_window), about_vbox);
335
336 if (!beep_logo_pmap)
337 beep_logo_pmap =
338 gdk_pixmap_create_from_xpm_d(about_window->window,
339 &beep_logo_mask, NULL, audacious_logo_xpm);
340
341 about_credits_logo_box = gtk_hbox_new(TRUE, 0);
342 gtk_box_pack_start(GTK_BOX(about_vbox), about_credits_logo_box,
343 FALSE, FALSE, 0);
344
345 about_credits_logo_frame = gtk_frame_new(NULL);
346 gtk_frame_set_shadow_type(GTK_FRAME(about_credits_logo_frame),
347 GTK_SHADOW_ETCHED_OUT);
348 gtk_box_pack_start(GTK_BOX(about_credits_logo_box),
349 about_credits_logo_frame, FALSE, FALSE, 0);
350
351 about_credits_logo = gtk_pixmap_new(beep_logo_pmap, beep_logo_mask);
352 gtk_container_add(GTK_CONTAINER(about_credits_logo_frame),
353 about_credits_logo);
354
355 label = gtk_label_new(NULL);
356 text = g_strdup_printf(_(bmp_brief), VERSION);
357 gtk_label_set_markup(GTK_LABEL(label), text);
358 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_CENTER);
359 g_free(text);
360
361 gtk_box_pack_start(GTK_BOX(about_vbox), label, FALSE, FALSE, 0);
362
363 about_notebook = gtk_notebook_new();
364 gtk_box_pack_start(GTK_BOX(about_vbox), about_notebook, TRUE, TRUE, 0);
365
366 list = generate_credit_list(credit_text, TRUE);
367 gtk_notebook_append_page(GTK_NOTEBOOK(about_notebook), list,
368 gtk_label_new(_("Credits")));
369
370 list = generate_credit_list(translators, FALSE);
371 gtk_notebook_append_page(GTK_NOTEBOOK(about_notebook), list,
372 gtk_label_new(_("Translators")));
373
374 bbox = gtk_hbutton_box_new();
375 gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);
376 gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5);
377 gtk_box_pack_start(GTK_BOX(about_vbox), bbox, FALSE, FALSE, 0);
378
379 close_btn = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
380 g_signal_connect_swapped(close_btn, "clicked",
381 G_CALLBACK(gtk_widget_destroy), about_window);
382 GTK_WIDGET_SET_FLAGS(close_btn, GTK_CAN_DEFAULT);
383 gtk_box_pack_start(GTK_BOX(bbox), close_btn, TRUE, TRUE, 0);
384 gtk_widget_grab_default(close_btn);
385
386 gtk_widget_show_all(about_window);
387 }