commit a32a54114c2c947ed58693dc0e92161efb074c99
Author: phantomjinx <[email protected]>
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/gtkpod-cvs2