/* vim: set ai et ts=4 sw=4: */ #ifdef HAVE_CONFIG_H #include #endif #include #include "liteamp.h" #include "decoder.h" #include "playlist.h" #include "uiinfo.h" #include "util.h" #include "effect/effect.h" /*-----------------------------------------------------------------*/ // // menu callbacks // /** file -> new playlist */ void file_new_playlist_activate_cb( GtkMenuItem* menuitem, gpointer data) { Sidebar* sidebar; SidebarItem* item; sidebar = liteamp_get_sidebar(); item = SIDEBAR_ITEM(sidebar_item_new( "", find_pixmap_file("playlist.png"), "", SIDEBAR_ITEM_STOCK_NONE)); if(sidebar_item_show_dialog(item)) { sidebar_add_item(sidebar, item); sidebar_write(sidebar); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(item), TRUE); } } /** file -> remove playlist */ void file_remove_playlist_activate_cb( GtkMenuItem* menuitem, gpointer data) { Sidebar* sidebar; SidebarItem* item; gchar* message; int result; sidebar = liteamp_get_sidebar(); item = sidebar_get_active_item(sidebar); if(item == NULL) return; // can't remove all item g_assert(!sidebar_item_is_stock(item)); // confirm message = g_strdup_printf( _("Remove \"%s\"?\nNo files in playlist will be deleted."), item->title); result = show_message_box( liteamp_get_app_window(), GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, message); g_free(message); // remove it! if(result == GTK_RESPONSE_YES) { sidebar_remove_item(sidebar, item); sidebar_write(sidebar); } } /** file -> add files */ void file_add_file_activate_cb( GtkMenuItem* menuitem, gpointer data) { GtkWidget* fs; int response; gchar** files; Playlist* pl; fs = gtk_file_selection_new(_("Add Files")); gtk_file_selection_set_select_multiple( GTK_FILE_SELECTION(fs), TRUE); gtk_widget_show_all(GTK_WIDGET(fs)); response = gtk_dialog_run(GTK_DIALOG(fs)); if(response == GTK_RESPONSE_OK) { files = gtk_file_selection_get_selections( GTK_FILE_SELECTION(fs)); pl = liteamp_get_playlist(); while(*files) { if(g_file_test(*files, G_FILE_TEST_EXISTS)) { if(!g_file_test(*files, G_FILE_TEST_IS_DIR)) playlist_add_file(pl, *files, TRUE); } files++; } playlist_write(pl); liteamp_update_ui_status(); } gtk_widget_destroy(GTK_WIDGET(fs)); } /** file -> add directories */ void file_add_dir_activate_cb( GtkMenuItem* menuitem, gpointer data) { GtkWidget* fs; int response; gchar** files; Playlist* pl; fs = gtk_file_selection_new(_("Add Directories")); gtk_file_selection_set_select_multiple( GTK_FILE_SELECTION(fs), TRUE); gtk_widget_show_all(GTK_WIDGET(fs)); // hide file list gtk_widget_hide(gtk_widget_get_parent(GTK_FILE_SELECTION(fs)->file_list)); //gtk_widget_set_sensitive(GTK_FILE_SELECTION(fs)->file_list, FALSE); response = gtk_dialog_run(GTK_DIALOG(fs)); if(response == GTK_RESPONSE_OK) { files = gtk_file_selection_get_selections( GTK_FILE_SELECTION(fs)); pl = liteamp_get_playlist(); while(*files) { if(g_file_test(*files, G_FILE_TEST_EXISTS)) { if(g_file_test(*files, G_FILE_TEST_IS_DIR)) playlist_add_dir(pl, *files, TRUE); } files++; } playlist_write(pl); liteamp_update_ui_status(); } gtk_widget_destroy(GTK_WIDGET(fs)); } /** file -> quit */ void file_quit_activate_cb( GtkMenuItem* menuitem, gpointer data) { gtk_main_quit(); } /** edit -> cut */ void edit_cut_activate_cb( GtkMenuItem* menuitem, gpointer data) { playlist_cut(liteamp_get_playlist()); liteamp_update_ui_menu(); liteamp_update_ui_status(); } /** edit -> copy */ void edit_copy_activate_cb( GtkMenuItem* menuitem, gpointer data) { playlist_copy(liteamp_get_playlist()); liteamp_update_ui_menu(); liteamp_update_ui_status(); } /** edit -> paste */ void edit_paste_activate_cb( GtkMenuItem* menuitem, gpointer data) { playlist_paste(liteamp_get_playlist()); liteamp_update_ui_menu(); liteamp_update_ui_status(); } /** edit -> clear(delete?) */ void edit_clear_activate_cb( GtkMenuItem* menuitem, gpointer data) { playlist_clear(liteamp_get_playlist()); liteamp_update_ui_menu(); liteamp_update_ui_status(); } /** edit -> select all */ void edit_select_all_activate_cb(GtkMenuItem* menuitem, gpointer data) { playlist_select_all(liteamp_get_playlist()); } /** edit -> select none */ void edit_select_none_activate_cb(GtkMenuItem* menuitem, gpointer data) { playlist_select_none(liteamp_get_playlist()); } /** edit -> invert selection */ void edit_invert_selection_activate_cb(GtkMenuItem* menuitem, gpointer data) { playlist_invert_selection(liteamp_get_playlist()); } /** edit -> properties */ void edit_props_activate_cb( GtkMenuItem* menuitem, gpointer data) { if(!playlist_show_dialog(liteamp_get_playlist())) { sidebar_show_dialog(liteamp_get_sidebar()); } } /** edit -> preferences */ void edit_prefs_activate_cb( GtkMenuItem* menuitem, gpointer data) { prefs_show_dialog(); } /** edit -> effect */ void edit_effect_activate_cb( GtkMenuItem* menuitem, gpointer data) { effect_show_dialog(); } /** play -> previous */ void play_prev_activate_cb( GtkMenuItem* menuitem, gpointer data) { playlist_prev(liteamp_get_playlist()); } /** play -> start */ void play_start_activate_cb( GtkMenuItem* menuitem, gpointer data) { playlist_start(liteamp_get_playlist()); } /** play -> stop */ void play_stop_activate_cb( GtkMenuItem* menuitem, gpointer data) { playlist_stop(liteamp_get_playlist()); } /** play -> pause */ void play_pause_activate_cb( GtkCheckMenuItem* menuitem, gpointer data) { // to sync with other pause widgets gboolean pausing = gtk_check_menu_item_get_active(menuitem); if(liteamp.play_status == PLAY_STATUS_PAUSE && pausing) return; if(liteamp.play_status != PLAY_STATUS_PAUSE && !pausing) return; playlist_pause(liteamp_get_playlist()); } /** play -> next */ void play_next_activate_cb( GtkMenuItem* menuitem, gpointer data) { // TODO: make a delay in between tracks // sleep(prefs.DelayInBetweenTracks); playlist_next(liteamp_get_playlist()); } /** play -> shuffle */ void play_shuffle_activate_cb( GtkCheckMenuItem* menuitem, gpointer data) { gboolean shuffle = gtk_check_menu_item_get_active(menuitem); if(prefs.play_shuffle == shuffle) return; prefs.play_shuffle = shuffle; playlist_shuffle(liteamp_get_playlist()); liteamp_update_ui_play_shuffle(); } /** play -> loop */ void play_loop_activate_cb( GtkCheckMenuItem* menuitem, gpointer data) { gboolean loop = gtk_check_menu_item_get_active(menuitem); if(prefs.play_loop == loop) return; prefs.play_loop = loop; liteamp_update_ui_play_loop(); } void play_keyseek_activate_cb( GtkMenuItem* menuitem, gpointer data) { gint sec = GPOINTER_TO_INT(data); gint curtime = decoder_get_cur_time(); if(curtime == -1) return; g_print("sec : %d curtime %d\n",sec,curtime); decoder_seek(sec + curtime); } /** play -> volume up */ void play_vol_up_activate_cb( GtkMenuItem* menuitem, gpointer data) { mixer_volume_up(liteamp.mixer); liteamp_update_ui_volume(); } /** play -> volume down */ void play_vol_down_activate_cb( GtkMenuItem* menuitem, gpointer data) { mixer_volume_down(liteamp.mixer); liteamp_update_ui_volume(); } /** play -> mute */ void play_mute_activate_cb( GtkCheckMenuItem* menuitem, gpointer data) { prefs.play_mute = gtk_check_menu_item_get_active(menuitem); liteamp_update_ui_play_mute(); } /** play -> effect */ void play_effect_activate_cb( GtkCheckMenuItem* menuitem, gpointer data) { prefs.play_effect = gtk_check_menu_item_get_active(menuitem); playback_effect_set_active(prefs.play_effect); liteamp_update_ui_play_effect(); } /** view -> toolbar */ void view_toolbar_activate_cb( GtkCheckMenuItem* menuitem, gpointer data) { prefs.view_toolbar = gtk_check_menu_item_get_active(menuitem); liteamp_update_ui_layout(); } /** view -> statusbar */ void view_statusbar_activate_cb( GtkCheckMenuItem* menuitem, gpointer data) { prefs.view_statusbar = gtk_check_menu_item_get_active(menuitem); liteamp_update_ui_layout(); } /** view -> sidebar */ void view_sidebar_activate_cb( GtkCheckMenuItem* menuitem, gpointer data) { prefs.view_sidebar = gtk_check_menu_item_get_active(menuitem); liteamp_update_ui_layout(); } /** view -> play info */ void view_play_info_activate_cb( GtkCheckMenuItem* menuitem, gpointer data) { prefs.view_play_info = gtk_check_menu_item_get_active(menuitem); liteamp_update_ui_layout(); } /** view -> play pos */ void view_play_pos_activate_cb( GtkCheckMenuItem* menuitem, gpointer data) { prefs.view_play_pos = gtk_check_menu_item_get_active(menuitem); liteamp_update_ui_layout(); } /** view -> refresh playlist */ void view_refresh_playlist_activate_cb( GtkMenuItem* menuitem, gpointer data) { playlist_refresh(liteamp_get_playlist()); } /** help -> about */ void help_about_activate_cb( GtkMenuItem* menuitem, gpointer data) { about_dlg_show(); } /*-----------------------------------------------------------------*/ // // toolbar callbacks // /** toolbar -> previous */ void toolbar_prev_activate_cb( GtkButton* button, gpointer data) { playlist_prev(liteamp_get_playlist()); } /** toolbar -> start */ void toolbar_start_activate_cb( GtkButton* button, gpointer data) { playlist_start(liteamp_get_playlist()); } /** toolbar -> stop */ void toolbar_stop_activate_cb( GtkButton* button, gpointer data) { playlist_stop(liteamp_get_playlist()); } /** toolbar -> pause */ void toolbar_pause_activate_cb( GtkToggleButton* togglebutton, gpointer data) { // to sync with other pause widgets gboolean pausing = gtk_toggle_button_get_active(togglebutton); if(liteamp.play_status == PLAY_STATUS_PAUSE && pausing) return; if(liteamp.play_status != PLAY_STATUS_PAUSE && !pausing) return; playlist_pause(liteamp_get_playlist()); } /** toolbar -> next */ void toolbar_next_activate_cb( GtkButton* button, gpointer data) { playlist_next(liteamp_get_playlist()); } /** toolbar -> shuffle */ void toolbar_shuffle_activate_cb( GtkToggleButton* togglebutton, gpointer data) { gboolean shuffle = gtk_toggle_button_get_active(togglebutton); if(prefs.play_shuffle == shuffle) return; prefs.play_shuffle = shuffle; playlist_shuffle(liteamp_get_playlist()); liteamp_update_ui_play_shuffle(); } /** toolbar -> loop */ void toolbar_loop_activate_cb( GtkToggleButton* togglebutton, gpointer data) { gboolean loop = gtk_toggle_button_get_active(togglebutton); if(prefs.play_loop == loop) return; prefs.play_loop = loop; liteamp_update_ui_play_loop(); } /*-----------------------------------------------------------------*/ // // sidebar popup callbacks // /* sidebar -> properties */ void sidebar_props_activate_cb( GtkMenuItem* menuitem, gpointer data) { sidebar_show_dialog(liteamp_get_sidebar()); } /*-----------------------------------------------------------------*/ // // playlist popup callbacks // /* playlist -> properties */ void playlist_props_activate_cb( GtkMenuItem* menuitem, gpointer data) { playlist_show_dialog(liteamp_get_playlist()); } /*callbacks.c*/