comparison audacious/about.c @ 474:f3b46533da81 trunk

[svn] Experimental about box stuff... doesnt work right yet. Work in progress!
author nenolod
date Wed, 18 Jan 2006 21:21:50 -0800
parents audacious/credits.c@a4ec7dfe5672
children cd5793de075c
comparison
equal deleted inserted replaced
473:c7191cd6ee8e 474:f3b46533da81
1 /* XMMS - Cross-platform multimedia player
2 * Copyright (C) 1998-2003 Peter Alm, Mikael Alm, Olle Hallnas,
3 * Thomas Nilsson and 4Front Technologies
4 * Copyright (C) 2000-2003 Haavard Kvaalen
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public Licensse as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program 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.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19 */
20
21 #ifdef HAVE_CONFIG_H
22 # include "config.h"
23 #endif
24
25 #include "credits.h"
26
27 #include <glib.h>
28 #include <glib/gi18n.h>
29 #include <gdk/gdk.h>
30 #include <gdk/gdkx.h>
31 #include <gdk/gdkkeysyms.h>
32 #include <gtk/gtk.h>
33
34 #include "audacious_logo.xpm"
35
36 static GtkWidget *about_window = NULL;
37 static GdkPixbuf *about_pixbuf = NULL;
38
39 enum {
40 COL_LEFT,
41 COL_RIGHT,
42 N_COLS
43 };
44
45 static const gchar *bmp_brief =
46 N_("<big><b>Audacious %s</b></big>\n"
47 "The future of UNIX multimedia.\n"
48 "\n"
49 "Copyright (C) 2005-2006 Audacious Development Team\n");
50
51 static const gchar *credit_text[] = {
52 N_("Developers:"),
53 N_("Giacomo Lozito"),
54 N_("William Pitcock"),
55 N_("Tony Vroon"),
56 NULL,
57
58 N_("0.1.x developers:"),
59 N_("William Pitcock"),
60 N_("Mohammed Sameer"),
61 N_("Tony Vroon"),
62 NULL,
63
64 N_("BMP Developers:"),
65 N_("Artem Baguinski"),
66 N_("Edward Brocklesby"),
67 N_("Chong Kai Xiong"),
68 N_("Milosz Derezynski"),
69 N_("David Lau"),
70 N_("Ole Andre Vadla Ravnaas"),
71 N_("Michiel Sikkes"),
72 N_("Andrei Badea"),
73 N_("Peter Behroozi"),
74 N_("Bernard Blackham"),
75 N_("Oliver Blin"),
76 N_("Tomas Bzatek"),
77 N_("Liviu Danicel"),
78 N_("Jon Dowland"),
79 N_("Artur Frysiak"),
80 N_("Sebastian Kapfer"),
81 N_("Lukas Koberstein"),
82 N_("Dan Korostelev"),
83 N_("Jolan Luff"),
84 N_("Michael Marineau"),
85 N_("Tim-Philipp Muller"),
86 N_("Julien Portalier"),
87 N_("Andrew Ruder"),
88 N_("Olivier Samyn"),
89 N_("Martijn Vernooij"),
90 NULL,
91
92 NULL
93 };
94
95 static const gchar *translators[] = {
96 N_("Brazilian Portuguese:"),
97 N_("Philipi Pinto"),
98 NULL,
99 N_("Breton:"),
100 N_("Thierry Vignaud"),
101 NULL,
102 N_("Chinese:"),
103 N_("Chong Kai Xiong"),
104 N_("Chao-Hsiung Liao"),
105 NULL,
106 N_("Czech:"),
107 N_("Jan Narovec"),
108 NULL,
109 N_("Dutch:"),
110 N_("Laurens Buhler"),
111 NULL,
112 N_("Finnish:"),
113 N_("Pauli Virtanen"),
114 NULL,
115 N_("French:"),
116 N_("David Le Brun"),
117 NULL,
118 N_("German:"),
119 N_("Matthias Debus"),
120 NULL,
121 N_("Georgian: "),
122 N_("George Machitidze"),
123 NULL,
124 N_("Greek:"),
125 N_("Kouzinopoulos Haris"),
126 N_("Stavros Giannouris"),
127 NULL,
128 N_("Hindi:"),
129 N_("Dhananjaya Sharma"),
130 NULL,
131 N_("Hungarian:"),
132 N_("Laszlo Dvornik"),
133 NULL,
134 N_("Italian:"),
135 N_("Alessio D'Ascanio"),
136 NULL,
137 N_("Japanese:"),
138 N_("Dai"),
139 NULL,
140 N_("Korean:"),
141 N_("DongCheon Park"),
142 NULL,
143 N_("Lithuanian:"),
144 N_("Rimas Kudelis"),
145 NULL,
146 N_("Macedonian:"),
147 N_("Arangel Angov"),
148 NULL,
149 N_("Polish:"),
150 N_("Jacek Wolszczak"),
151 NULL,
152 N_("Romanian:"),
153 N_("Liviu Danicel"),
154 NULL,
155 N_("Russian:"),
156 N_("Pavlo Bohmat"),
157 N_("Dan Korostelev"),
158 N_("Vitaly Lipatov"),
159 NULL,
160 N_("Slovak:"),
161 N_("Pavel Kanzelsberger"),
162 NULL,
163 N_("Spanish:"),
164 N_("Francisco Javier F. Serrador"),
165 NULL,
166 N_("Swedish:"),
167 N_("Martin Persenius"),
168 NULL,
169 N_("Ukrainian:"),
170 N_("Mykola Lynnyk"),
171 NULL,
172 N_("Welsh:"),
173 N_("Edward Brocklesby"),
174 NULL,
175
176 NULL
177 };
178
179 static gboolean
180 on_about_window_key_press (GtkWidget *widget, GdkEventKey *event, gpointer data)
181 {
182 g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
183
184 if (event->keyval == GDK_Escape)
185 {
186 gtk_widget_hide (widget);
187 }
188
189 return FALSE;
190 }
191
192 static GtkWidget *
193 generate_credit_list(const gchar * text[], gboolean sec_space)
194 {
195 GtkWidget *scrollwin;
196 GtkWidget *treeview;
197 GtkListStore *list_store;
198 GtkTreeIter iter;
199 GtkTreeViewColumn *column;
200 GtkCellRenderer *renderer;
201 const gchar *const *item;
202
203 list_store = gtk_list_store_new(N_COLS, G_TYPE_STRING, G_TYPE_STRING);
204
205 item = text;
206
207 while (*item) {
208 gtk_list_store_append(list_store, &iter);
209 gtk_list_store_set(list_store, &iter,
210 COL_LEFT, _(item[0]), COL_RIGHT, _(item[1]), -1);
211 item += 2;
212
213 while (*item) {
214 gtk_list_store_append(list_store, &iter);
215 gtk_list_store_set(list_store, &iter,
216 COL_LEFT, "", COL_RIGHT, _(*item++), -1);
217 }
218
219 ++item;
220
221 if (*item && sec_space) {
222 gtk_list_store_append(list_store, &iter);
223 gtk_list_store_set(list_store, &iter,
224 COL_LEFT, "", COL_RIGHT, "", -1);
225 }
226 }
227
228 treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(list_store));
229 gtk_tree_view_set_headers_clickable(GTK_TREE_VIEW(treeview), FALSE);
230 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(treeview), FALSE);
231 gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview)),
232 GTK_SELECTION_NONE);
233
234 renderer = gtk_cell_renderer_text_new();
235 g_object_set(renderer, "xalign", 1.0, NULL);
236 column = gtk_tree_view_column_new_with_attributes("Left", renderer,
237 "text", COL_LEFT, NULL);
238 gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
239
240 renderer = gtk_cell_renderer_text_new();
241 g_object_set(renderer, "xalign", 0.0, NULL);
242 column = gtk_tree_view_column_new_with_attributes("Right", renderer,
243 "text", COL_RIGHT,
244 NULL);
245 gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
246
247 scrollwin = gtk_scrolled_window_new(NULL, NULL);
248 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin),
249 GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
250 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrollwin), GTK_SHADOW_IN);
251 gtk_container_add(GTK_CONTAINER(scrollwin), treeview);
252 gtk_container_set_border_width(GTK_CONTAINER(scrollwin), 10);
253
254 gtk_widget_show_all(scrollwin);
255
256 return scrollwin;
257 }
258
259 void
260 show_about_window(void)
261 {
262 GdkPixmap *mask_pixmap_window1 = NULL,
263 *mask_pixmap_window2 = NULL;
264 GdkBitmap *mask_bitmap_window1 = NULL,
265 *mask_bitmap_window2 = NULL;
266
267 gchar *filename = DATA_DIR G_DIR_SEPARATOR_S "images" G_DIR_SEPARATOR_S "about-logo.png";
268
269 if (about_window != NULL)
270 return;
271
272 about_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
273 gtk_window_set_type_hint(GTK_WINDOW(about_window),
274 GDK_WINDOW_TYPE_HINT_DIALOG);
275
276 g_signal_connect(about_window, "destroy",
277 G_CALLBACK(gtk_widget_destroyed), &about_window);
278
279 // gtk_widget_realize(about_window);
280
281 about_pixbuf = gdk_pixbuf_new_from_file(filename, NULL);
282
283 gtk_widget_set_size_request (GTK_WIDGET (about_window),
284 gdk_pixbuf_get_width (about_pixbuf),
285 gdk_pixbuf_get_height (about_pixbuf));
286
287 gtk_window_set_title(GTK_WINDOW(about_window), _("About Audacious"));
288 gtk_window_set_position(GTK_WINDOW(about_window), GTK_WIN_POS_CENTER);
289 gtk_window_set_resizable(GTK_WINDOW(about_window), FALSE);
290
291 gdk_pixbuf_render_pixmap_and_mask(about_pixbuf,
292 &mask_pixmap_window1,
293 &mask_bitmap_window1,
294 0);
295
296 gdk_pixbuf_render_pixmap_and_mask(about_pixbuf,
297 &mask_pixmap_window2,
298 &mask_bitmap_window2,
299 128);
300
301 gtk_widget_add_events(about_window, GDK_ALL_EVENTS_MASK);
302
303 g_signal_connect(about_window, "key-press-event",
304 G_CALLBACK(on_about_window_key_press), &about_window);
305
306 #if 0
307 GdkPixmap *beep_logo_pmap = NULL, *beep_logo_mask = NULL;
308 GtkWidget *about_vbox;
309 GtkWidget *about_credits_logo_box, *about_credits_logo_frame;
310 GtkWidget *about_credits_logo;
311 GtkWidget *about_notebook;
312 GtkWidget *list;
313 GtkWidget *bbox, *close_btn;
314 GtkWidget *label;
315 gchar *text;
316
317 if (about_window)
318 return;
319
320 gtk_container_set_border_width(GTK_CONTAINER(about_window), 10);
321
322
323 about_vbox = gtk_vbox_new(FALSE, 5);
324 gtk_container_add(GTK_CONTAINER(about_window), about_vbox);
325
326 if (!beep_logo_pmap)
327 beep_logo_pmap =
328 gdk_pixmap_create_from_xpm_d(about_window->window,
329 &beep_logo_mask, NULL, audacious_logo_xpm);
330
331 about_credits_logo_box = gtk_hbox_new(TRUE, 0);
332 gtk_box_pack_start(GTK_BOX(about_vbox), about_credits_logo_box,
333 FALSE, FALSE, 0);
334
335 about_credits_logo_frame = gtk_frame_new(NULL);
336 gtk_frame_set_shadow_type(GTK_FRAME(about_credits_logo_frame),
337 GTK_SHADOW_ETCHED_OUT);
338 gtk_box_pack_start(GTK_BOX(about_credits_logo_box),
339 about_credits_logo_frame, FALSE, FALSE, 0);
340
341 about_credits_logo = gtk_pixmap_new(beep_logo_pmap, beep_logo_mask);
342 gtk_container_add(GTK_CONTAINER(about_credits_logo_frame),
343 about_credits_logo);
344
345 label = gtk_label_new(NULL);
346 text = g_strdup_printf(_(bmp_brief), VERSION);
347 gtk_label_set_markup(GTK_LABEL(label), text);
348 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_CENTER);
349 g_free(text);
350
351 gtk_box_pack_start(GTK_BOX(about_vbox), label, FALSE, FALSE, 0);
352
353 about_notebook = gtk_notebook_new();
354 gtk_box_pack_start(GTK_BOX(about_vbox), about_notebook, TRUE, TRUE, 0);
355
356 list = generate_credit_list(credit_text, TRUE);
357 gtk_notebook_append_page(GTK_NOTEBOOK(about_notebook), list,
358 gtk_label_new(_("Credits")));
359
360 list = generate_credit_list(translators, FALSE);
361 gtk_notebook_append_page(GTK_NOTEBOOK(about_notebook), list,
362 gtk_label_new(_("Translators")));
363
364 bbox = gtk_hbutton_box_new();
365 gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);
366 gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5);
367 gtk_box_pack_start(GTK_BOX(about_vbox), bbox, FALSE, FALSE, 0);
368
369 close_btn = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
370 g_signal_connect_swapped(close_btn, "clicked",
371 G_CALLBACK(gtk_widget_destroy), about_window);
372 GTK_WIDGET_SET_FLAGS(close_btn, GTK_CAN_DEFAULT);
373 gtk_box_pack_start(GTK_BOX(bbox), close_btn, TRUE, TRUE, 0);
374 gtk_widget_grab_default(close_btn);
375 #endif
376
377 gtk_window_present(GTK_WINDOW(about_window));
378
379 gtk_widget_shape_combine_mask(GTK_WIDGET(about_window), mask_bitmap_window2, 0, 0);
380
381 gdk_draw_pixbuf(GDK_DRAWABLE(about_window->window), NULL, about_pixbuf, 0, 0, 0, 0, -1, -1,
382 GDK_RGB_DITHER_NONE, 0, 0);
383 }