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&#174; 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

Reply via email to