summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--deadbeef.h1
-rw-r--r--junklib.c6
-rw-r--r--playlist.c3
-rw-r--r--playlist.h3
-rw-r--r--plugins.c1
-rw-r--r--plugins/gtkui/callbacks.c1
-rw-r--r--plugins/gtkui/callbacks.h1
-rw-r--r--plugins/gtkui/deadbeef.glade92
-rw-r--r--plugins/gtkui/interface.c45
-rw-r--r--plugins/gtkui/trkproperties.c40
10 files changed, 187 insertions, 6 deletions
diff --git a/deadbeef.h b/deadbeef.h
index 9e4ee7f3..95ff006e 100644
--- a/deadbeef.h
+++ b/deadbeef.h
@@ -412,6 +412,7 @@ typedef struct {
more to come
*/
int (*pl_format_title) (DB_playItem_t *it, int idx, char *s, int size, int id, const char *fmt);
+ void (*pl_format_time) (float t, char *dur, int size);
void (*pl_format_item_display_name) (DB_playItem_t *it, char *str, int len);
// void (*pl_set_next) (DB_playItem_t *it, DB_playItem_t *next, int iter);
// void (*pl_set_prev) (DB_playItem_t *it, DB_playItem_t *prev, int iter);
diff --git a/junklib.c b/junklib.c
index 625bb657..0a54a5c8 100644
--- a/junklib.c
+++ b/junklib.c
@@ -40,8 +40,8 @@
#define UTF8 "utf-8"
-#define trace(...) { fprintf(stderr, __VA_ARGS__); }
-//#define trace(fmt,...)
+//#define trace(...) { fprintf(stderr, __VA_ARGS__); }
+#define trace(fmt,...)
#define min(x,y) ((x)<(y)?(x):(y))
#define max(x,y) ((x)>(y)?(x):(y))
@@ -893,6 +893,8 @@ junk_apev2_read_full (playItem_t *it, DB_apev2_tag_t *tag_store, DB_FILE *fp) {
}
}
+ trace ("apev2 %s=%s\n", key, value);
+
if (!frame_mapping[m]) {
if (!strncasecmp (key, "replaygain_album_gain", 21)) {
it->replaygain_album_gain = atof (value);
diff --git a/playlist.c b/playlist.c
index e0064f28..24a88729 100644
--- a/playlist.c
+++ b/playlist.c
@@ -2218,7 +2218,7 @@ pl_format_item_queue (playItem_t *it, char *s, int size) {
return initsize-size;
}
-static void
+void
pl_format_time (float t, char *dur, int size) {
if (t >= 0) {
int hourdur = t / (60 * 60);
@@ -2863,6 +2863,7 @@ pl_items_copy_junk (playItem_t *from, playItem_t *first, playItem_t *last) {
if (data) {
playItem_t *i;
for (i = first; ; i = i->next[PL_MAIN]) {
+ i->_flags = from->_flags; // stupid
pl_add_meta (i, metainfo[m], data);
if (i == last) {
break;
diff --git a/playlist.h b/playlist.h
index bda1eaa0..abd9fc03 100644
--- a/playlist.h
+++ b/playlist.h
@@ -246,6 +246,9 @@ int
pl_format_title (playItem_t *it, int idx, char *s, int size, int id, const char *fmt);
void
+pl_format_time (float t, char *dur, int size);
+
+void
pl_reset_cursor (void);
float
diff --git a/plugins.c b/plugins.c
index b92e4e18..7183bd59 100644
--- a/plugins.c
+++ b/plugins.c
@@ -159,6 +159,7 @@ static DB_functions_t deadbeef_api = {
.pl_get_next = (DB_playItem_t *(*) (DB_playItem_t *, int))pl_get_next,
.pl_get_prev = (DB_playItem_t *(*) (DB_playItem_t *, int))pl_get_prev,
.pl_format_title = (int (*) (DB_playItem_t *it, int idx, char *s, int size, int id, const char *fmt))pl_format_title,
+ .pl_format_time = pl_format_time,
.pl_move_items = (void (*) (int iter, int plt_from, DB_playItem_t *drop_before, uint32_t *indexes, int count))pl_move_items,
.pl_copy_items = (void (*) (int iter, int plt_from, DB_playItem_t *before, uint32_t *indices, int cnt))pl_copy_items,
.pl_search_reset = pl_search_reset,
diff --git a/plugins/gtkui/callbacks.c b/plugins/gtkui/callbacks.c
index 49281181..7dd8e86f 100644
--- a/plugins/gtkui/callbacks.c
+++ b/plugins/gtkui/callbacks.c
@@ -1164,3 +1164,4 @@ create_seekbar (gchar *widget_name, gchar *string1, gchar *string2,
return GTK_WIDGET (ddb_seekbar_new ());
}
+
diff --git a/plugins/gtkui/callbacks.h b/plugins/gtkui/callbacks.h
index 09dad46d..1c45c10d 100644
--- a/plugins/gtkui/callbacks.h
+++ b/plugins/gtkui/callbacks.h
@@ -933,3 +933,4 @@ on_mainwin_motion_notify_event (GtkWidget *widget,
GtkWidget*
create_seekbar (gchar *widget_name, gchar *string1, gchar *string2,
gint int1, gint int2);
+
diff --git a/plugins/gtkui/deadbeef.glade b/plugins/gtkui/deadbeef.glade
index 958032f5..349879c9 100644
--- a/plugins/gtkui/deadbeef.glade
+++ b/plugins/gtkui/deadbeef.glade
@@ -1506,6 +1506,98 @@
<property name="type">tab</property>
</packing>
</child>
+
+ <child>
+ <widget class="GtkVBox" id="vbox24">
+ <property name="border_width">12</property>
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">8</property>
+
+ <child>
+ <widget class="GtkScrolledWindow" id="scrolledwindow6">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="shadow_type">GTK_SHADOW_IN</property>
+ <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
+
+ <child>
+ <widget class="GtkTreeView" id="properties">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="headers_visible">True</property>
+ <property name="rules_hint">True</property>
+ <property name="reorderable">False</property>
+ <property name="enable_search">True</property>
+ <property name="fixed_height_mode">False</property>
+ <property name="hover_selection">False</property>
+ <property name="hover_expand">False</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkHButtonBox" id="hbuttonbox2">
+ <property name="visible">True</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <widget class="GtkButton" id="button2">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Close</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <signal name="clicked" handler="on_closebtn_clicked" last_modification_time="Sun, 18 Apr 2010 10:49:02 GMT"/>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="tab_expand">False</property>
+ <property name="tab_fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkLabel" id="label80">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Properties</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ </packing>
+ </child>
</widget>
</child>
</widget>
diff --git a/plugins/gtkui/interface.c b/plugins/gtkui/interface.c
index 49030e34..02ea5ec8 100644
--- a/plugins/gtkui/interface.c
+++ b/plugins/gtkui/interface.c
@@ -1125,6 +1125,12 @@ create_trackproperties (void)
GtkWidget *write_tags;
GtkWidget *closebtn;
GtkWidget *label64;
+ GtkWidget *vbox24;
+ GtkWidget *scrolledwindow6;
+ GtkWidget *properties;
+ GtkWidget *hbuttonbox2;
+ GtkWidget *button2;
+ GtkWidget *label80;
trackproperties = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_widget_set_size_request (trackproperties, 400, 400);
@@ -1187,6 +1193,36 @@ create_trackproperties (void)
gtk_widget_show (label64);
gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook3), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook3), 0), label64);
+ vbox24 = gtk_vbox_new (FALSE, 8);
+ gtk_widget_show (vbox24);
+ gtk_container_add (GTK_CONTAINER (notebook3), vbox24);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox24), 12);
+
+ scrolledwindow6 = gtk_scrolled_window_new (NULL, NULL);
+ gtk_widget_show (scrolledwindow6);
+ gtk_box_pack_start (GTK_BOX (vbox24), scrolledwindow6, TRUE, TRUE, 0);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow6), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+ gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow6), GTK_SHADOW_IN);
+
+ properties = gtk_tree_view_new ();
+ gtk_widget_show (properties);
+ gtk_container_add (GTK_CONTAINER (scrolledwindow6), properties);
+ gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (properties), TRUE);
+
+ hbuttonbox2 = gtk_hbutton_box_new ();
+ gtk_widget_show (hbuttonbox2);
+ gtk_box_pack_start (GTK_BOX (vbox24), hbuttonbox2, FALSE, FALSE, 0);
+ gtk_button_box_set_layout (GTK_BUTTON_BOX (hbuttonbox2), GTK_BUTTONBOX_END);
+
+ button2 = gtk_button_new_with_mnemonic ("Close");
+ gtk_widget_show (button2);
+ gtk_container_add (GTK_CONTAINER (hbuttonbox2), button2);
+ GTK_WIDGET_SET_FLAGS (button2, GTK_CAN_DEFAULT);
+
+ label80 = gtk_label_new ("Properties");
+ gtk_widget_show (label80);
+ gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook3), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook3), 1), label80);
+
g_signal_connect ((gpointer) trackproperties, "key_press_event",
G_CALLBACK (on_trackproperties_key_press_event),
NULL);
@@ -1199,6 +1235,9 @@ create_trackproperties (void)
g_signal_connect ((gpointer) closebtn, "clicked",
G_CALLBACK (on_closebtn_clicked),
NULL);
+ g_signal_connect ((gpointer) button2, "clicked",
+ G_CALLBACK (on_closebtn_clicked),
+ NULL);
/* Store pointers to all widgets, for use by lookup_widget(). */
GLADE_HOOKUP_OBJECT_NO_REF (trackproperties, trackproperties, "trackproperties");
@@ -1213,6 +1252,12 @@ create_trackproperties (void)
GLADE_HOOKUP_OBJECT (trackproperties, write_tags, "write_tags");
GLADE_HOOKUP_OBJECT (trackproperties, closebtn, "closebtn");
GLADE_HOOKUP_OBJECT (trackproperties, label64, "label64");
+ GLADE_HOOKUP_OBJECT (trackproperties, vbox24, "vbox24");
+ GLADE_HOOKUP_OBJECT (trackproperties, scrolledwindow6, "scrolledwindow6");
+ GLADE_HOOKUP_OBJECT (trackproperties, properties, "properties");
+ GLADE_HOOKUP_OBJECT (trackproperties, hbuttonbox2, "hbuttonbox2");
+ GLADE_HOOKUP_OBJECT (trackproperties, button2, "button2");
+ GLADE_HOOKUP_OBJECT (trackproperties, label80, "label80");
return trackproperties;
}
diff --git a/plugins/gtkui/trkproperties.c b/plugins/gtkui/trkproperties.c
index f4ce782f..68db8def 100644
--- a/plugins/gtkui/trkproperties.c
+++ b/plugins/gtkui/trkproperties.c
@@ -132,11 +132,16 @@ show_track_properties_dlg (DB_playItem_t *it) {
GtkTreeView *tree;
GtkListStore *store;
+ GtkTreeView *proptree;
+ GtkListStore *propstore;
if (!trackproperties) {
trackproperties = create_trackproperties ();
gtk_window_set_transient_for (GTK_WINDOW (trackproperties), GTK_WINDOW (mainwin));
+
+ // metadata tree
tree = GTK_TREE_VIEW (lookup_widget (trackproperties, "metalist"));
store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING);
+ gtk_tree_view_set_model (tree, GTK_TREE_MODEL (store));
GtkCellRenderer *rend_text = gtk_cell_renderer_text_new ();
rend_text2 = gtk_cell_renderer_text_new ();
g_signal_connect ((gpointer)rend_text2, "edited",
@@ -146,13 +151,26 @@ show_track_properties_dlg (DB_playItem_t *it) {
GtkTreeViewColumn *col2 = gtk_tree_view_column_new_with_attributes ("Value", rend_text2, "text", 1, NULL);
gtk_tree_view_append_column (tree, col1);
gtk_tree_view_append_column (tree, col2);
+
+ // properties tree
+ proptree = GTK_TREE_VIEW (lookup_widget (trackproperties, "properties"));
+ propstore = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING);
+ gtk_tree_view_set_model (proptree, GTK_TREE_MODEL (propstore));
+ GtkCellRenderer *rend_propkey = gtk_cell_renderer_text_new ();
+ GtkCellRenderer *rend_propvalue = gtk_cell_renderer_text_new ();
+ g_object_set (G_OBJECT (rend_propvalue), "editable", TRUE, NULL);
+ col1 = gtk_tree_view_column_new_with_attributes ("Key", rend_propkey, "text", 0, NULL);
+ col2 = gtk_tree_view_column_new_with_attributes ("Value", rend_propvalue, "text", 1, NULL);
+ gtk_tree_view_append_column (proptree, col1);
+ gtk_tree_view_append_column (proptree, col2);
}
else {
tree = GTK_TREE_VIEW (lookup_widget (trackproperties, "metalist"));
store = GTK_LIST_STORE (gtk_tree_view_get_model (tree));
-
- // remove everything from store
gtk_list_store_clear (store);
+ proptree = GTK_TREE_VIEW (lookup_widget (trackproperties, "properties"));
+ propstore = GTK_LIST_STORE (gtk_tree_view_get_model (proptree));
+ gtk_list_store_clear (propstore);
}
if (allow_editing) {
@@ -179,7 +197,6 @@ show_track_properties_dlg (DB_playItem_t *it) {
value = "";
}
gtk_list_store_set (store, &iter, 0, types[i+1], 1, value, -1);
- gtk_tree_view_set_model (tree, GTK_TREE_MODEL (store));
i += 2;
}
deadbeef->pl_unlock ();
@@ -191,6 +208,23 @@ show_track_properties_dlg (DB_playItem_t *it) {
gtk_widget_set_sensitive (lookup_widget (widget, "write_tags"), FALSE);
}
+ // properties
+ char temp[200];
+ GtkTreeIter iter;
+ gtk_list_store_append (propstore, &iter);
+ gtk_list_store_set (propstore, &iter, 0, "Location", 1, it->fname, -1);
+ gtk_list_store_append (propstore, &iter);
+ snprintf (temp, sizeof (temp), "%d", it->tracknum);
+ gtk_list_store_set (propstore, &iter, 0, "Subtrack Index", 1, temp, -1);
+ gtk_list_store_append (propstore, &iter);
+ deadbeef->pl_format_time (deadbeef->pl_get_item_duration (it), temp, sizeof (temp));
+ gtk_list_store_set (propstore, &iter, 0, "Duration", 1, temp, -1);
+ gtk_list_store_append (propstore, &iter);
+ deadbeef->pl_format_title (it, -1, temp, sizeof (temp), -1, "%T");
+ gtk_list_store_set (propstore, &iter, 0, "Tag Type(s)", 1, temp, -1);
+ gtk_list_store_append (propstore, &iter);
+ gtk_list_store_set (propstore, &iter, 0, "Embedded Cuesheet", 1, (deadbeef->pl_get_item_flags (it) & DDB_HAS_EMBEDDED_CUESHEET) ? "Yes" : "No", -1);
+
gtk_widget_show (widget);
gtk_window_present (GTK_WINDOW (widget));
}