commit a32a54114c2c947ed58693dc0e92161efb074c99 Author: phantomjinx <p.g.richard...@phantomjinx.co.uk> Date: Tue Feb 23 22:32:38 2010 +0000
Delete tracks actions added to track plugin - Delete Selected Tracks from Playlist - Delete Selected Tracks from Database - Delete Selected Tracks from Device - All added to Edit->Delete submenu - Signal emitted when a track is removed using gp_remove_track libgtkpod/gtkpod_app_iface.c | 3 + libgtkpod/gtkpod_app_iface.h | 2 + libgtkpod/misc_playlist.h | 1 + .../playlist_display/playlist_display_actions.c | 1 - plugins/track_display/display_tracks.h | 1 + plugins/track_display/plugin.c | 28 ++++++++++++- plugins/track_display/track_display.ui | 9 ++++ plugins/track_display/track_display_actions.c | 44 ++++++++++++++++++++ plugins/track_display/track_display_actions.h | 6 +++ src/display_itdb.c | 2 + src/display_tracks.c | 6 +++ 11 files changed, 101 insertions(+), 2 deletions(-) --- diff --git a/libgtkpod/gtkpod_app_iface.c b/libgtkpod/gtkpod_app_iface.c index 2ec88b9..26863f1 100644 --- a/libgtkpod/gtkpod_app_iface.c +++ b/libgtkpod/gtkpod_app_iface.c @@ -54,6 +54,9 @@ static void gtkpod_app_base_init(GtkPodAppInterface* klass) { gtkpod_app_signals[TRACKS_SELECTED] = g_signal_new(SIGNAL_TRACKS_SELECTED, G_OBJECT_CLASS_TYPE (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER); + gtkpod_app_signals[TRACK_REMOVED] + = g_signal_new(SIGNAL_TRACK_REMOVED, G_OBJECT_CLASS_TYPE (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER); + gtkpod_app_signals[SORT_ENABLEMENT] = g_signal_new(SIGNAL_SORT_ENABLEMENT, G_OBJECT_CLASS_TYPE (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__BOOLEAN, G_TYPE_NONE, 1, G_TYPE_BOOLEAN); diff --git a/libgtkpod/gtkpod_app_iface.h b/libgtkpod/gtkpod_app_iface.h index cbb31e5..966c12b 100644 --- a/libgtkpod/gtkpod_app_iface.h +++ b/libgtkpod/gtkpod_app_iface.h @@ -44,6 +44,7 @@ #define SIGNAL_TRACKS_DISPLAYED "signal_tracks_displayed" #define SIGNAL_TRACKS_SELECTED "signal_tracks_selected" +#define SIGNAL_TRACK_REMOVED "signal_track_removed" #define SIGNAL_PLAYLIST_SELECTED "signal_playlist_selected" #define SIGNAL_PLAYLIST_ADDED "signal_playlist_added" #define SIGNAL_PLAYLIST_REMOVED "signal_playlist_removed" @@ -76,6 +77,7 @@ enum { TRACKS_DISPLAYED, TRACKS_SELECTED, + TRACK_REMOVED, PLAYLIST_SELECTED, PLAYLIST_ADDED, PLAYLIST_REMOVED, diff --git a/libgtkpod/misc_playlist.h b/libgtkpod/misc_playlist.h index 4117335..1db554b 100644 --- a/libgtkpod/misc_playlist.h +++ b/libgtkpod/misc_playlist.h @@ -36,6 +36,7 @@ #include <gtk/gtk.h> #include "itdb.h" #include "gp_itdb.h" +#include "misc_conversion.h" Playlist *add_new_pl_user_name(iTunesDB *itdb, gchar *dflt, gint32 position); void add_new_pl_or_spl_user_name(iTunesDB *itdb, gchar *dflt, gint32 position); diff --git a/plugins/playlist_display/playlist_display_actions.c b/plugins/playlist_display/playlist_display_actions.c index f4142db..613e5d0 100644 --- a/plugins/playlist_display/playlist_display_actions.c +++ b/plugins/playlist_display/playlist_display_actions.c @@ -38,7 +38,6 @@ #include "libgtkpod/gp_itdb.h" #include "libgtkpod/prefs.h" #include "libgtkpod/misc.h" -#include "libgtkpod/misc_track.h" #include "libgtkpod/misc_playlist.h" #include "libgtkpod/gp_spl.h" #include <gdk/gdk.h> diff --git a/plugins/track_display/display_tracks.h b/plugins/track_display/display_tracks.h index e802d5b..b570d05 100644 --- a/plugins/track_display/display_tracks.h +++ b/plugins/track_display/display_tracks.h @@ -46,5 +46,6 @@ void display_show_hide_searchbar(void); void track_display_set_tracks_cb(GtkPodApp *app, gpointer tks, gpointer data); void track_display_set_playlist_cb(GtkPodApp *app, gpointer pl, gpointer data); void track_display_set_sort_enablement(GtkPodApp *app, gboolean flag, gpointer data); +void track_display_track_removed_cb(GtkPodApp *app, gpointer tk, gint32 pos, gpointer data); #endif /* DISPLAY_TRACKS_H_ */ diff --git a/plugins/track_display/plugin.c b/plugins/track_display/plugin.c index 703fc49..8268e43 100644 --- a/plugins/track_display/plugin.c +++ b/plugins/track_display/plugin.c @@ -40,7 +40,32 @@ static gpointer parent_class; static GtkActionEntry track_actions[] = - { }; + { + { + "ActionDeleteSelectedTracksFromPlaylist", + GTK_STOCK_DELETE, + N_("Selected Tracks from Playlist"), + NULL, + NULL, + G_CALLBACK (on_delete_selected_tracks_from_playlist) + }, + { + "ActionDeleteSelectedTracksFromDatabase", + GTK_STOCK_DELETE, + N_("Selected Tracks from Database"), + NULL, + NULL, + G_CALLBACK (on_delete_selected_tracks_from_database) + }, + { + "ActionDeleteSelectedTracksFromDevice", + GTK_STOCK_DELETE, + N_("Selected Tracks from Device"), + NULL, + NULL, + G_CALLBACK (on_delete_selected_tracks_from_device) + } + }; static gboolean activate_track_display_plugin(AnjutaPlugin *plugin) { AnjutaUI *ui; @@ -69,6 +94,7 @@ static gboolean activate_track_display_plugin(AnjutaPlugin *plugin) { g_signal_connect (gtkpod_app, SIGNAL_TRACKS_DISPLAYED, G_CALLBACK (track_display_set_tracks_cb), NULL); g_signal_connect (gtkpod_app, SIGNAL_PLAYLIST_SELECTED, G_CALLBACK (track_display_set_playlist_cb), NULL); g_signal_connect (gtkpod_app, SIGNAL_SORT_ENABLEMENT, G_CALLBACK (track_display_set_sort_enablement), NULL); + g_signal_connect (gtkpod_app, SIGNAL_TRACK_REMOVED, G_CALLBACK (track_display_track_removed_cb), NULL); gtk_widget_show_all(track_display_plugin->track_window); anjuta_shell_add_widget(plugin->shell, track_display_plugin->track_window, "TrackDisplayPlugin", "Playlist Tracks", NULL, ANJUTA_SHELL_PLACEMENT_TOP, NULL); diff --git a/plugins/track_display/track_display.ui b/plugins/track_display/track_display.ui index b141558..a44fcce 100644 --- a/plugins/track_display/track_display.ui +++ b/plugins/track_display/track_display.ui @@ -1,6 +1,15 @@ <!--*- xml -*--> <ui> <menubar name="MenuMain"> + <menu name="MenuEdit" action="ActionMenuEdit"> + <placeholder name="PlaceholderEditMenus"> + <menu name="Delete" action="ActionEditDeleteMenu"> + <menuitem name="Selected Tracks from Playlist" action="ActionDeleteSelectedTracksFromPlaylist" /> + <menuitem name="Selected Tracks from Database" action="ActionDeleteSelectedTracksFromDatabase" /> + <menuitem name="Selected Tracks from Device" action="ActionDeleteSelectedTracksFromDevice" /> + </menu> + </placeholder> + </menu> </menubar> <toolbar name="ToolbarMain"> </toolbar> diff --git a/plugins/track_display/track_display_actions.c b/plugins/track_display/track_display_actions.c index 8e5d24f..52f9fa3 100644 --- a/plugins/track_display/track_display_actions.c +++ b/plugins/track_display/track_display_actions.c @@ -33,3 +33,47 @@ #include "track_display_actions.h" #include "display_tracks.h" +#include "libgtkpod/misc.h" +#include "libgtkpod/misc_track.h" + +static void delete_selected_tracks(DeleteAction deleteaction) { + GList *tracks = gtkpod_get_selected_tracks(); + + if (tracks) { + delete_track_head(deleteaction); + g_list_free(tracks); + } + else { + message_sb_no_tracks_selected(); + } +} + +void on_delete_selected_tracks_from_playlist(GtkAction *action, TrackDisplayPlugin* plugin) { + delete_selected_tracks(DELETE_ACTION_PLAYLIST); +} + +void on_delete_selected_tracks_from_database(GtkAction *action, TrackDisplayPlugin* plugin) { + delete_selected_tracks(DELETE_ACTION_DATABASE); +} + +void on_delete_selected_tracks_from_harddisk(GtkAction *action, TrackDisplayPlugin* plugin) { + delete_selected_tracks(DELETE_ACTION_LOCAL); +} + +void on_delete_selected_tracks_from_ipod(GtkAction *action, TrackDisplayPlugin* plugin) { + delete_selected_tracks(DELETE_ACTION_IPOD); +} + +void on_delete_selected_tracks_from_device(GtkAction *action, TrackDisplayPlugin* plugin) { + iTunesDB *itdb = gtkpod_get_current_itdb(); + if (!itdb) + return; + + if (itdb->usertype & GP_ITDB_TYPE_IPOD) { + on_delete_selected_tracks_from_ipod(action, plugin); + } + else if (itdb->usertype & GP_ITDB_TYPE_LOCAL) { + on_delete_selected_tracks_from_harddisk(action, plugin); + } +} + diff --git a/plugins/track_display/track_display_actions.h b/plugins/track_display/track_display_actions.h index 3a73da8..bd8fb1c 100644 --- a/plugins/track_display/track_display_actions.h +++ b/plugins/track_display/track_display_actions.h @@ -36,4 +36,10 @@ #include <gtk/gtk.h> #include "plugin.h" +void on_delete_selected_tracks_from_playlist(GtkAction *action, TrackDisplayPlugin* plugin); +void on_delete_selected_tracks_from_database(GtkAction *action, TrackDisplayPlugin* plugin); +void on_delete_selected_tracks_from_harddisk(GtkAction *action, TrackDisplayPlugin* plugin); +void on_delete_selected_tracks_from_ipod(GtkAction *action, TrackDisplayPlugin* plugin); +void on_delete_selected_tracks_from_device(GtkAction *action, TrackDisplayPlugin* plugin); + #endif diff --git a/src/display_itdb.c b/src/display_itdb.c index 2bef3e5..7fa59fb 100644 --- a/src/display_itdb.c +++ b/src/display_itdb.c @@ -548,6 +548,8 @@ void gp_playlist_remove_track(Playlist *plitem, Track *track, DeleteAction delet g_return_if_fail (plitem); + g_signal_emit(gtkpod_app, gtkpod_app_signals[TRACK_REMOVED], 0, track); + /* remove track from playlist */ itdb_playlist_remove_track(plitem, track); diff --git a/src/display_tracks.c b/src/display_tracks.c index f445010..eb3695d 100644 --- a/src/display_tracks.c +++ b/src/display_tracks.c @@ -2723,3 +2723,9 @@ void track_display_set_playlist_cb(GtkPodApp *app, gpointer pl, gpointer data) { void track_display_set_sort_enablement(GtkPodApp *app, gboolean flag, gpointer data) { tm_enable_disable_view_sort(flag); } + +void track_display_track_removed_cb(GtkPodApp *app, gpointer tk, gint32 pos, gpointer data) { + Track *old_track = tk; + + tm_remove_track(old_track); +} ------------------------------------------------------------------------------ Download Intel® Parallel Studio Eval Try the new software tools for yourself. Speed compiling, find bugs proactively, and fine-tune applications for parallel performance. See why Intel Parallel Studio got high marks during beta. http://p.sf.net/sfu/intel-sw-dev _______________________________________________ gtkpod-cvs2 mailing list gtkpod-cvs2@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gtkpod-cvs2