Mercurial > audlegacy
changeset 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 | c7191cd6ee8e |
children | cd5793de075c |
files | audacious/about.c |
diffstat | 1 files changed, 383 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/audacious/about.c Wed Jan 18 21:21:50 2006 -0800 @@ -0,0 +1,383 @@ +/* XMMS - Cross-platform multimedia player + * Copyright (C) 1998-2003 Peter Alm, Mikael Alm, Olle Hallnas, + * Thomas Nilsson and 4Front Technologies + * Copyright (C) 2000-2003 Haavard Kvaalen + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public Licensse as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "credits.h" + +#include <glib.h> +#include <glib/gi18n.h> +#include <gdk/gdk.h> +#include <gdk/gdkx.h> +#include <gdk/gdkkeysyms.h> +#include <gtk/gtk.h> + +#include "audacious_logo.xpm" + +static GtkWidget *about_window = NULL; +static GdkPixbuf *about_pixbuf = NULL; + +enum { + COL_LEFT, + COL_RIGHT, + N_COLS +}; + +static const gchar *bmp_brief = + N_("<big><b>Audacious %s</b></big>\n" + "The future of UNIX multimedia.\n" + "\n" + "Copyright (C) 2005-2006 Audacious Development Team\n"); + +static const gchar *credit_text[] = { + N_("Developers:"), + N_("Giacomo Lozito"), + N_("William Pitcock"), + N_("Tony Vroon"), + NULL, + + N_("0.1.x developers:"), + N_("William Pitcock"), + N_("Mohammed Sameer"), + N_("Tony Vroon"), + NULL, + + N_("BMP Developers:"), + N_("Artem Baguinski"), + N_("Edward Brocklesby"), + N_("Chong Kai Xiong"), + N_("Milosz Derezynski"), + N_("David Lau"), + N_("Ole Andre Vadla Ravnaas"), + N_("Michiel Sikkes"), + N_("Andrei Badea"), + N_("Peter Behroozi"), + N_("Bernard Blackham"), + N_("Oliver Blin"), + N_("Tomas Bzatek"), + N_("Liviu Danicel"), + N_("Jon Dowland"), + N_("Artur Frysiak"), + N_("Sebastian Kapfer"), + N_("Lukas Koberstein"), + N_("Dan Korostelev"), + N_("Jolan Luff"), + N_("Michael Marineau"), + N_("Tim-Philipp Muller"), + N_("Julien Portalier"), + N_("Andrew Ruder"), + N_("Olivier Samyn"), + N_("Martijn Vernooij"), + NULL, + + NULL +}; + +static const gchar *translators[] = { + N_("Brazilian Portuguese:"), + N_("Philipi Pinto"), + NULL, + N_("Breton:"), + N_("Thierry Vignaud"), + NULL, + N_("Chinese:"), + N_("Chong Kai Xiong"), + N_("Chao-Hsiung Liao"), + NULL, + N_("Czech:"), + N_("Jan Narovec"), + NULL, + N_("Dutch:"), + N_("Laurens Buhler"), + NULL, + N_("Finnish:"), + N_("Pauli Virtanen"), + NULL, + N_("French:"), + N_("David Le Brun"), + NULL, + N_("German:"), + N_("Matthias Debus"), + NULL, + N_("Georgian: "), + N_("George Machitidze"), + NULL, + N_("Greek:"), + N_("Kouzinopoulos Haris"), + N_("Stavros Giannouris"), + NULL, + N_("Hindi:"), + N_("Dhananjaya Sharma"), + NULL, + N_("Hungarian:"), + N_("Laszlo Dvornik"), + NULL, + N_("Italian:"), + N_("Alessio D'Ascanio"), + NULL, + N_("Japanese:"), + N_("Dai"), + NULL, + N_("Korean:"), + N_("DongCheon Park"), + NULL, + N_("Lithuanian:"), + N_("Rimas Kudelis"), + NULL, + N_("Macedonian:"), + N_("Arangel Angov"), + NULL, + N_("Polish:"), + N_("Jacek Wolszczak"), + NULL, + N_("Romanian:"), + N_("Liviu Danicel"), + NULL, + N_("Russian:"), + N_("Pavlo Bohmat"), + N_("Dan Korostelev"), + N_("Vitaly Lipatov"), + NULL, + N_("Slovak:"), + N_("Pavel Kanzelsberger"), + NULL, + N_("Spanish:"), + N_("Francisco Javier F. Serrador"), + NULL, + N_("Swedish:"), + N_("Martin Persenius"), + NULL, + N_("Ukrainian:"), + N_("Mykola Lynnyk"), + NULL, + N_("Welsh:"), + N_("Edward Brocklesby"), + NULL, + + NULL +}; + +static gboolean +on_about_window_key_press (GtkWidget *widget, GdkEventKey *event, gpointer data) +{ + g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE); + + if (event->keyval == GDK_Escape) + { + gtk_widget_hide (widget); + } + + return FALSE; +} + +static GtkWidget * +generate_credit_list(const gchar * text[], gboolean sec_space) +{ + GtkWidget *scrollwin; + GtkWidget *treeview; + GtkListStore *list_store; + GtkTreeIter iter; + GtkTreeViewColumn *column; + GtkCellRenderer *renderer; + const gchar *const *item; + + list_store = gtk_list_store_new(N_COLS, G_TYPE_STRING, G_TYPE_STRING); + + item = text; + + while (*item) { + gtk_list_store_append(list_store, &iter); + gtk_list_store_set(list_store, &iter, + COL_LEFT, _(item[0]), COL_RIGHT, _(item[1]), -1); + item += 2; + + while (*item) { + gtk_list_store_append(list_store, &iter); + gtk_list_store_set(list_store, &iter, + COL_LEFT, "", COL_RIGHT, _(*item++), -1); + } + + ++item; + + if (*item && sec_space) { + gtk_list_store_append(list_store, &iter); + gtk_list_store_set(list_store, &iter, + COL_LEFT, "", COL_RIGHT, "", -1); + } + } + + treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(list_store)); + gtk_tree_view_set_headers_clickable(GTK_TREE_VIEW(treeview), FALSE); + gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(treeview), FALSE); + gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview)), + GTK_SELECTION_NONE); + + renderer = gtk_cell_renderer_text_new(); + g_object_set(renderer, "xalign", 1.0, NULL); + column = gtk_tree_view_column_new_with_attributes("Left", renderer, + "text", COL_LEFT, NULL); + gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column); + + renderer = gtk_cell_renderer_text_new(); + g_object_set(renderer, "xalign", 0.0, NULL); + column = gtk_tree_view_column_new_with_attributes("Right", renderer, + "text", COL_RIGHT, + NULL); + gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column); + + scrollwin = gtk_scrolled_window_new(NULL, NULL); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin), + GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); + gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrollwin), GTK_SHADOW_IN); + gtk_container_add(GTK_CONTAINER(scrollwin), treeview); + gtk_container_set_border_width(GTK_CONTAINER(scrollwin), 10); + + gtk_widget_show_all(scrollwin); + + return scrollwin; +} + +void +show_about_window(void) +{ + GdkPixmap *mask_pixmap_window1 = NULL, + *mask_pixmap_window2 = NULL; + GdkBitmap *mask_bitmap_window1 = NULL, + *mask_bitmap_window2 = NULL; + + gchar *filename = DATA_DIR G_DIR_SEPARATOR_S "images" G_DIR_SEPARATOR_S "about-logo.png"; + + if (about_window != NULL) + return; + + about_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_window_set_type_hint(GTK_WINDOW(about_window), + GDK_WINDOW_TYPE_HINT_DIALOG); + + g_signal_connect(about_window, "destroy", + G_CALLBACK(gtk_widget_destroyed), &about_window); + +// gtk_widget_realize(about_window); + + about_pixbuf = gdk_pixbuf_new_from_file(filename, NULL); + + gtk_widget_set_size_request (GTK_WIDGET (about_window), + gdk_pixbuf_get_width (about_pixbuf), + gdk_pixbuf_get_height (about_pixbuf)); + + gtk_window_set_title(GTK_WINDOW(about_window), _("About Audacious")); + gtk_window_set_position(GTK_WINDOW(about_window), GTK_WIN_POS_CENTER); + gtk_window_set_resizable(GTK_WINDOW(about_window), FALSE); + + gdk_pixbuf_render_pixmap_and_mask(about_pixbuf, + &mask_pixmap_window1, + &mask_bitmap_window1, + 0); + + gdk_pixbuf_render_pixmap_and_mask(about_pixbuf, + &mask_pixmap_window2, + &mask_bitmap_window2, + 128); + + gtk_widget_add_events(about_window, GDK_ALL_EVENTS_MASK); + + g_signal_connect(about_window, "key-press-event", + G_CALLBACK(on_about_window_key_press), &about_window); + +#if 0 + GdkPixmap *beep_logo_pmap = NULL, *beep_logo_mask = NULL; + GtkWidget *about_vbox; + GtkWidget *about_credits_logo_box, *about_credits_logo_frame; + GtkWidget *about_credits_logo; + GtkWidget *about_notebook; + GtkWidget *list; + GtkWidget *bbox, *close_btn; + GtkWidget *label; + gchar *text; + + if (about_window) + return; + + gtk_container_set_border_width(GTK_CONTAINER(about_window), 10); + + + about_vbox = gtk_vbox_new(FALSE, 5); + gtk_container_add(GTK_CONTAINER(about_window), about_vbox); + + if (!beep_logo_pmap) + beep_logo_pmap = + gdk_pixmap_create_from_xpm_d(about_window->window, + &beep_logo_mask, NULL, audacious_logo_xpm); + + about_credits_logo_box = gtk_hbox_new(TRUE, 0); + gtk_box_pack_start(GTK_BOX(about_vbox), about_credits_logo_box, + FALSE, FALSE, 0); + + about_credits_logo_frame = gtk_frame_new(NULL); + gtk_frame_set_shadow_type(GTK_FRAME(about_credits_logo_frame), + GTK_SHADOW_ETCHED_OUT); + gtk_box_pack_start(GTK_BOX(about_credits_logo_box), + about_credits_logo_frame, FALSE, FALSE, 0); + + about_credits_logo = gtk_pixmap_new(beep_logo_pmap, beep_logo_mask); + gtk_container_add(GTK_CONTAINER(about_credits_logo_frame), + about_credits_logo); + + label = gtk_label_new(NULL); + text = g_strdup_printf(_(bmp_brief), VERSION); + gtk_label_set_markup(GTK_LABEL(label), text); + gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_CENTER); + g_free(text); + + gtk_box_pack_start(GTK_BOX(about_vbox), label, FALSE, FALSE, 0); + + about_notebook = gtk_notebook_new(); + gtk_box_pack_start(GTK_BOX(about_vbox), about_notebook, TRUE, TRUE, 0); + + list = generate_credit_list(credit_text, TRUE); + gtk_notebook_append_page(GTK_NOTEBOOK(about_notebook), list, + gtk_label_new(_("Credits"))); + + list = generate_credit_list(translators, FALSE); + gtk_notebook_append_page(GTK_NOTEBOOK(about_notebook), list, + gtk_label_new(_("Translators"))); + + bbox = gtk_hbutton_box_new(); + gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END); + gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5); + gtk_box_pack_start(GTK_BOX(about_vbox), bbox, FALSE, FALSE, 0); + + close_btn = gtk_button_new_from_stock(GTK_STOCK_CLOSE); + g_signal_connect_swapped(close_btn, "clicked", + G_CALLBACK(gtk_widget_destroy), about_window); + GTK_WIDGET_SET_FLAGS(close_btn, GTK_CAN_DEFAULT); + gtk_box_pack_start(GTK_BOX(bbox), close_btn, TRUE, TRUE, 0); + gtk_widget_grab_default(close_btn); +#endif + + gtk_window_present(GTK_WINDOW(about_window)); + + gtk_widget_shape_combine_mask(GTK_WIDGET(about_window), mask_bitmap_window2, 0, 0); + + gdk_draw_pixbuf(GDK_DRAWABLE(about_window->window), NULL, about_pixbuf, 0, 0, 0, 0, -1, -1, + GDK_RGB_DITHER_NONE, 0, 0); +}