/* vim: set ai et ts=4 sw=4: */ #ifdef HAVE_CONFIG_H #include #endif #include #include "liteamp.h" #include "sidebar-item.h" #include "util.h" /*-----------------------------------------------------------------*/ static gchar* stock_items[][2] = { { NULL, NULL }, { N_("All"), "playlist-all.png" }, { N_("Audio CD"), "playlist-audiocd.png" }, { N_("Radio"), "playlist-radio.png" }, { N_("Favorites"), "playlist-favorites.png"}, { NULL, NULL } }; /*-----------------------------------------------------------------*/ // // boiler plate // static void sidebar_item_class_init(SidebarItemClass* klass); static void sidebar_item_init(SidebarItem* item); static GtkWidgetClass *parent_class = NULL; GType sidebar_item_get_type() { static GType sidebar_item_type = 0; if(!sidebar_item_type) { GTypeInfo sidebar_item_info = { sizeof(SidebarItemClass), NULL, NULL, (GClassInitFunc) sidebar_item_class_init, NULL, NULL, sizeof(SidebarItem), 0, (GInstanceInitFunc) sidebar_item_init }; sidebar_item_type = g_type_register_static(GTK_TYPE_RADIO_BUTTON, "SidebarItem", &sidebar_item_info, 0); } return sidebar_item_type; } static void sidebar_item_class_init(SidebarItemClass* klass) { // nothing to do GtkObjectClass* object_class; GtkWidgetClass* widget_class; object_class = (GtkObjectClass*)klass; widget_class = (GtkWidgetClass*)klass; parent_class = gtk_type_class(gtk_radio_button_get_type()); } static void sidebar_item_init(SidebarItem* item) { // nothing to do } /*-----------------------------------------------------------------*/ GtkWidget* sidebar_item_new(gchar* title, gchar* icon, gchar* filename, gint stock) { static int sidebar_item_count = 0; SidebarItem* item; GtkStyle* style; item = g_object_new(sidebar_item_get_type(), NULL); item->title = (title && title[0]) ? g_strdup(title) : g_strdup_printf(_("Playlist-%d"), ++sidebar_item_count); item->icon = (icon && icon[0]) ? (g_file_test(icon, G_FILE_TEST_EXISTS) ? g_strdup(icon) : find_pixmap_file(icon)) : g_strdup("playlist.png"); item->filename = (filename && filename[0]) ? g_strdup(filename) : g_strdup_printf("%s/.liteamp/%08x-%08x.pls", g_get_home_dir(), time(NULL), clock()); item->stock = stock; gtk_button_set_relief(GTK_BUTTON(item), GTK_RELIEF_NONE); gtk_toggle_button_set_mode(GTK_TOGGLE_BUTTON(item), FALSE); item->icon_img = item->title_lbl = NULL; sidebar_item_refresh(item); // change unselected button background color style = gtk_widget_get_default_style(); gtk_widget_modify_bg(GTK_WIDGET(item), GTK_STATE_ACTIVE, &(style->bg[GTK_STATE_PRELIGHT])); return GTK_WIDGET(item); } GtkWidget* sidebar_item_new_stock(gint stock) { g_return_val_if_fail(stock < SIDEBAR_ITEM_STOCK_END, NULL); return sidebar_item_new( _(stock_items[stock][0]), stock_items[stock][1], NULL, stock); } gboolean sidebar_item_is_stock(SidebarItem* item) { g_return_val_if_fail(IS_SIDEBAR_ITEM(item), FALSE); return item->stock != SIDEBAR_ITEM_STOCK_NONE; } void sidebar_item_refresh( SidebarItem* item) { GtkWidget* icon_img; GtkWidget* title_lbl; GdkPixbuf* pixbuf; g_return_if_fail(IS_SIDEBAR_ITEM(item)); if(item->icon_img == NULL && item->title_lbl == NULL) { item->icon_img = create_pixmap_with_size(item->icon, prefs.sidebar_icon_width, prefs.sidebar_icon_height); item->title_lbl = gtk_label_new(item->title); } else { icon_img = g_object_ref(item->icon_img); title_lbl = g_object_ref(item->title_lbl); gtk_label_set_label(GTK_LABEL(item->title_lbl), item->title); pixbuf = create_pixbuf_with_size(item->icon, prefs.sidebar_icon_width, prefs.sidebar_icon_height); gtk_image_set_from_pixbuf(GTK_IMAGE(item->icon_img), pixbuf); gtk_container_remove(GTK_CONTAINER(item->box), item->icon_img); gtk_container_remove(GTK_CONTAINER(item->box), item->title_lbl); gtk_container_remove(GTK_CONTAINER(item), item->box); } item->box = prefs.sidebar_text_beside_icon ? gtk_hbox_new(FALSE, 2) : gtk_vbox_new(FALSE, 2); gtk_box_pack_start(GTK_BOX(item->box), item->icon_img, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(item->box), item->title_lbl, FALSE, FALSE, 0); gtk_container_add(GTK_CONTAINER(item), item->box); gtk_widget_show_all(GTK_WIDGET(item)); } gboolean sidebar_item_show_dialog(SidebarItem* item) { GtkWidget* dlg; GtkWidget* vb; GtkWidget* tbl; GtkWidget* title_lbl; GtkWidget* title_ent; GtkWidget* icon_lbl; GtkWidget* icon_pe; gint result; g_return_if_fail(IS_SIDEBAR_ITEM(item)); //g_return_val_if_fail(!sidebar_item_is_stock(item), FALSE); dlg = gtk_dialog_new_with_buttons(_("Playlist Properties"), liteamp_get_app_window(), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); gtk_dialog_set_default_response(GTK_DIALOG(dlg), GTK_RESPONSE_OK); vb = GTK_DIALOG(dlg)->vbox; tbl = gtk_table_new(2, 2, FALSE); gtk_box_pack_start(GTK_BOX(vb), tbl, TRUE, TRUE, 0); title_lbl = gtk_label_new(_("Title")); gtk_table_attach(GTK_TABLE(tbl), title_lbl, 0, 1, 0, 1, GTK_FILL, 0, 0, 0); icon_lbl = gtk_label_new (_("Icon")); gtk_table_attach(GTK_TABLE(tbl), icon_lbl, 0, 1, 1, 2, GTK_FILL, 0, 0, 0); title_ent = gtk_entry_new(); gtk_table_attach(GTK_TABLE(tbl), title_ent, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 0, 0); icon_pe = gnome_pixmap_entry_new(NULL, _("Select a playlist icon"), TRUE); gnome_file_entry_set_modal(GNOME_FILE_ENTRY(icon_pe), TRUE); gtk_table_attach(GTK_TABLE(tbl), icon_pe, 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 0, 0); // update widgets from properties gtk_entry_set_text(GTK_ENTRY(title_ent), item->title); gnome_file_entry_set_filename(GNOME_FILE_ENTRY(icon_pe), item->icon); gtk_widget_show_all(dlg); result = gtk_dialog_run(GTK_DIALOG(dlg)); if(result == GTK_RESPONSE_OK) { g_free(item->title); item->title = g_strdup( gtk_entry_get_text(GTK_ENTRY(title_ent))); g_free(item->icon); item->icon = gnome_pixmap_entry_get_filename( GNOME_PIXMAP_ENTRY(icon_pe)); // update properties from widgets sidebar_item_refresh(item); } gtk_widget_destroy(dlg); return result == GTK_RESPONSE_OK; } /*sidebar-item.c*/