diff options
-rw-r--r-- | deadbeef.h | 10 | ||||
-rw-r--r-- | playlist.c | 27 | ||||
-rw-r--r-- | playlist.h | 11 | ||||
-rw-r--r-- | plugins.c | 1 | ||||
-rw-r--r-- | plugins/gtkui/deadbeef.glade | 1046 | ||||
-rw-r--r-- | plugins/gtkui/interface.c | 120 | ||||
-rw-r--r-- | plugins/gtkui/trkproperties.c | 59 |
7 files changed, 859 insertions, 415 deletions
@@ -96,6 +96,12 @@ typedef struct DB_playItem_s { float replaygain_track_peak; } DB_playItem_t; +typedef struct DB_metaInfo_s { + const char *key; + const char *value; + struct DB_metaInfo_s *next; +} DB_metaInfo_t; + // plugin types enum { DB_PLUGIN_DECODER = 1, @@ -360,12 +366,14 @@ typedef struct { void (*pl_add_meta) (DB_playItem_t *it, const char *key, const char *value); // must be used from within explicit pl_lock/unlock block const char *(*pl_find_meta) (DB_playItem_t *it, const char *key); - void (*pl_delete_all_meta) (DB_playItem_t *it); void (*pl_replace_meta) (DB_playItem_t *it, const char *key, const char *value); + void (*pl_delete_all_meta) (DB_playItem_t *it); + DB_metaInfo_t * (*pl_get_metadata) (DB_playItem_t *it); void (*pl_set_item_duration) (DB_playItem_t *it, float duration); float (*pl_get_item_duration) (DB_playItem_t *it); void (*pl_sort) (int iter, int id, const char *format, int ascending); void (*pl_items_copy_junk)(DB_playItem_t *from, DB_playItem_t *first, DB_playItem_t *last); + // playqueue support int (*pl_playqueue_push) (DB_playItem_t *it); void (*pl_playqueue_clear) (void); @@ -1322,10 +1322,10 @@ pl_item_copy (playItem_t *out, playItem_t *it) { out->prev[PL_SEARCH] = it->prev[PL_SEARCH]; out->_refc = 1; // copy metainfo - metaInfo_t *prev = NULL; - metaInfo_t *meta = it->meta; + DB_metaInfo_t *prev = NULL; + DB_metaInfo_t *meta = it->meta; while (meta) { - metaInfo_t *m = malloc (sizeof (metaInfo_t)); + DB_metaInfo_t *m = malloc (sizeof (DB_metaInfo_t)); m->key = meta->key; m->value = strdup (meta->value); m->next = NULL; @@ -1367,7 +1367,7 @@ pl_item_free (playItem_t *it) { free (it->fname); } while (it->meta) { - metaInfo_t *m = it->meta; + DB_metaInfo_t *m = it->meta; it->meta = m->next; metacache_remove_string (m->value);//free (m->value); free (m); @@ -1395,7 +1395,7 @@ void pl_add_meta (playItem_t *it, const char *key, const char *value) { LOCK; // check if it's already set - metaInfo_t *m = it->meta; + DB_metaInfo_t *m = it->meta; while (m) { if (!strcasecmp (key, m->key)) { // duplicate key @@ -1429,7 +1429,7 @@ pl_add_meta (playItem_t *it, const char *key, const char *value) { return; } } - m = malloc (sizeof (metaInfo_t)); + m = malloc (sizeof (DB_metaInfo_t)); m->key = key; m->value = metacache_add_string (value);//strdup (value); m->next = it->meta; @@ -1441,7 +1441,7 @@ void pl_replace_meta (playItem_t *it, const char *key, const char *value) { LOCK; // check if it's already set - metaInfo_t *m = it->meta; + DB_metaInfo_t *m = it->meta; while (m) { if (!strcasecmp (key, m->key)) { break;; @@ -1477,7 +1477,7 @@ pl_format_item_display_name (playItem_t *it, char *str, int len) { const char * pl_find_meta (playItem_t *it, const char *key) { - metaInfo_t *m = it->meta; + DB_metaInfo_t *m = it->meta; while (m) { if (!strcasecmp (key, m->key)) { return m->value; @@ -1487,6 +1487,11 @@ pl_find_meta (playItem_t *it, const char *key) { return NULL; } +DB_metaInfo_t * +pl_get_metadata (playItem_t *it) { + return it->meta; +} + int pl_delete_selected (void) { GLOBAL_LOCK; @@ -1609,7 +1614,7 @@ pl_save (const char *fname) { } int16_t nm = 0; - metaInfo_t *m; + DB_metaInfo_t *m; for (m = it->meta; m; m = m->next) { nm++; } @@ -1981,7 +1986,7 @@ void pl_delete_all_meta (playItem_t *it) { LOCK; while (it->meta) { - metaInfo_t *m = it->meta; + DB_metaInfo_t *m = it->meta; it->meta = m->next; metacache_remove_string (m->value); free (m); @@ -2498,7 +2503,7 @@ pl_search_process (const char *text) { for (playItem_t *it = playlist->head[PL_MAIN]; it; it = it->next[PL_MAIN]) { it->selected = 0; if (*text) { - for (metaInfo_t *m = it->meta; m; m = m->next) { + for (DB_metaInfo_t *m = it->meta; m; m = m->next) { if (strcasecmp (m->key, "cuesheet") && utfcasestr (m->value, text)) { //fprintf (stderr, "%s -> %s match (%s.%s)\n", text, m->value, it->fname, m->key); // add to list @@ -21,12 +21,6 @@ #include <stdint.h> #include <time.h> -typedef struct metaInfo_s { - const char *key; - const char *value; - struct metaInfo_s *next; -} metaInfo_t; - #define PL_MAX_ITERATORS 2 typedef struct playItem_s { @@ -49,7 +43,7 @@ typedef struct playItem_s { int _refc; struct playItem_s *next[PL_MAX_ITERATORS]; // next item in linked list struct playItem_s *prev[PL_MAX_ITERATORS]; // prev item in linked list - struct metaInfo_s *meta; // linked list storing metainfo + struct DB_metaInfo_s *meta; // linked list storing metainfo unsigned selected : 1; unsigned played : 1; // mark as played in shuffle mode unsigned in_playlist : 1; // 1 if item is in playlist @@ -303,4 +297,7 @@ pl_playqueue_getcount (void); void pl_items_copy_junk (struct playItem_s *from, struct playItem_s *first, struct playItem_s *last); +struct DB_metaInfo_s * +pl_get_metadata (playItem_t *it); + #endif // __PLAYLIST_H @@ -161,6 +161,7 @@ static DB_functions_t deadbeef_api = { .pl_find_meta = (const char *(*) (DB_playItem_t *, const char *))pl_find_meta, .pl_replace_meta = (void (*) (DB_playItem_t *, const char *, const char *))pl_replace_meta, .pl_delete_all_meta = (void (*) (DB_playItem_t *it))pl_delete_all_meta, + .pl_get_metadata = (DB_metaInfo_t *(*)(DB_playItem_t *it))pl_get_metadata, // cuesheet support .pl_insert_cue_from_buffer = (DB_playItem_t *(*) (DB_playItem_t *after, DB_playItem_t *origin, const uint8_t *buffer, int buffersize, int numsamples, int samplerate))pl_insert_cue_from_buffer, .pl_insert_cue = (DB_playItem_t *(*)(DB_playItem_t *after, DB_playItem_t *origin, int numsamples, int samplerate))pl_insert_cue, diff --git a/plugins/gtkui/deadbeef.glade b/plugins/gtkui/deadbeef.glade index 37e9e71e..532a6462 100644 --- a/plugins/gtkui/deadbeef.glade +++ b/plugins/gtkui/deadbeef.glade @@ -1267,35 +1267,71 @@ <signal name="delete_event" handler="on_trackproperties_delete_event" last_modification_time="Sat, 02 Jan 2010 21:38:32 GMT"/> <child> - <widget class="GtkVBox" id="vbox13"> - <property name="border_width">12</property> + <widget class="GtkNotebook" id="notebook3"> <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">8</property> + <property name="can_focus">True</property> + <property name="show_tabs">True</property> + <property name="show_border">True</property> + <property name="tab_pos">GTK_POS_TOP</property> + <property name="scrollable">False</property> + <property name="enable_popup">False</property> <child> - <widget class="GtkHBox" id="hbox23"> + <widget class="GtkVBox" id="vbox13"> + <property name="border_width">12</property> <property name="visible">True</property> <property name="homogeneous">False</property> <property name="spacing">8</property> <child> - <widget class="GtkLabel" id="label27"> + <widget class="GtkHBox" id="hbox23"> <property name="visible">True</property> - <property name="label" translatable="yes">Location:</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</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> + <property name="homogeneous">False</property> + <property name="spacing">8</property> + + <child> + <widget class="GtkLabel" id="label27"> + <property name="visible">True</property> + <property name="label" translatable="yes">Location:</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</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="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + + <child> + <widget class="GtkEntry" id="location"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="editable">False</property> + <property name="visibility">True</property> + <property name="max_length">0</property> + <property name="text" translatable="yes"></property> + <property name="has_frame">True</property> + <property name="invisible_char">•</property> + <property name="activates_default">False</property> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> </widget> <packing> <property name="padding">0</property> @@ -1305,54 +1341,54 @@ </child> <child> - <widget class="GtkEntry" id="location"> + <widget class="GtkHBox" id="hbox24"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="editable">False</property> - <property name="visibility">True</property> - <property name="max_length">0</property> - <property name="text" translatable="yes"></property> - <property name="has_frame">True</property> - <property name="invisible_char">•</property> - <property name="activates_default">False</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> + <property name="homogeneous">False</property> + <property name="spacing">8</property> - <child> - <widget class="GtkHBox" id="hbox24"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">8</property> + <child> + <widget class="GtkLabel" id="label28"> + <property name="visible">True</property> + <property name="label" translatable="yes">Title:</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</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="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> - <child> - <widget class="GtkLabel" id="label28"> - <property name="visible">True</property> - <property name="label" translatable="yes">Title:</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</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> + <child> + <widget class="GtkEntry" id="title"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="editable">False</property> + <property name="visibility">True</property> + <property name="max_length">0</property> + <property name="text" translatable="yes"></property> + <property name="has_frame">True</property> + <property name="invisible_char">•</property> + <property name="activates_default">False</property> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> </widget> <packing> <property name="padding">0</property> @@ -1362,54 +1398,54 @@ </child> <child> - <widget class="GtkEntry" id="title"> + <widget class="GtkHBox" id="hbox25"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="editable">False</property> - <property name="visibility">True</property> - <property name="max_length">0</property> - <property name="text" translatable="yes"></property> - <property name="has_frame">True</property> - <property name="invisible_char">•</property> - <property name="activates_default">False</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> + <property name="homogeneous">False</property> + <property name="spacing">8</property> - <child> - <widget class="GtkHBox" id="hbox25"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">8</property> + <child> + <widget class="GtkLabel" id="label29"> + <property name="visible">True</property> + <property name="label" translatable="yes">Track Artist:</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</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="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> - <child> - <widget class="GtkLabel" id="label29"> - <property name="visible">True</property> - <property name="label" translatable="yes">Track Artist:</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</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> + <child> + <widget class="GtkEntry" id="artist"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="editable">False</property> + <property name="visibility">True</property> + <property name="max_length">0</property> + <property name="text" translatable="yes"></property> + <property name="has_frame">True</property> + <property name="invisible_char">•</property> + <property name="activates_default">False</property> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> </widget> <packing> <property name="padding">0</property> @@ -1419,16 +1455,54 @@ </child> <child> - <widget class="GtkEntry" id="artist"> + <widget class="GtkHBox" id="hbox35"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="editable">False</property> - <property name="visibility">True</property> - <property name="max_length">0</property> - <property name="text" translatable="yes"></property> - <property name="has_frame">True</property> - <property name="invisible_char">•</property> - <property name="activates_default">False</property> + <property name="homogeneous">False</property> + <property name="spacing">8</property> + + <child> + <widget class="GtkLabel" id="label63"> + <property name="visible">True</property> + <property name="label" translatable="yes">Band/Album Artist:</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</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="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + + <child> + <widget class="GtkEntry" id="band"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="editable">False</property> + <property name="visibility">True</property> + <property name="max_length">0</property> + <property name="text" translatable="yes"></property> + <property name="has_frame">True</property> + <property name="invisible_char">•</property> + <property name="activates_default">False</property> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> </widget> <packing> <property name="padding">0</property> @@ -1436,37 +1510,56 @@ <property name="fill">True</property> </packing> </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkHBox" id="hbox35"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">8</property> <child> - <widget class="GtkLabel" id="label63"> + <widget class="GtkHBox" id="hbox26"> <property name="visible">True</property> - <property name="label" translatable="yes">Band/Album Artist:</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</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> + <property name="homogeneous">False</property> + <property name="spacing">8</property> + + <child> + <widget class="GtkLabel" id="label30"> + <property name="visible">True</property> + <property name="label" translatable="yes">Album:</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</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="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + + <child> + <widget class="GtkEntry" id="album"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="editable">False</property> + <property name="visibility">True</property> + <property name="max_length">0</property> + <property name="text" translatable="yes"></property> + <property name="has_frame">True</property> + <property name="invisible_char">•</property> + <property name="activates_default">False</property> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> </widget> <packing> <property name="padding">0</property> @@ -1476,54 +1569,168 @@ </child> <child> - <widget class="GtkEntry" id="band"> + <widget class="GtkHBox" id="hbox27"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="editable">False</property> - <property name="visibility">True</property> - <property name="max_length">0</property> - <property name="text" translatable="yes"></property> - <property name="has_frame">True</property> - <property name="invisible_char">•</property> - <property name="activates_default">False</property> + <property name="homogeneous">False</property> + <property name="spacing">8</property> + + <child> + <widget class="GtkLabel" id="label35"> + <property name="visible">True</property> + <property name="label" translatable="yes">Genre:</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</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="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + + <child> + <widget class="GtkEntry" id="genre"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="editable">False</property> + <property name="visibility">True</property> + <property name="max_length">0</property> + <property name="text" translatable="yes"></property> + <property name="has_frame">True</property> + <property name="invisible_char">•</property> + <property name="activates_default">False</property> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> </widget> <packing> <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> + <property name="expand">False</property> + <property name="fill">False</property> </packing> </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - - <child> - <widget class="GtkHBox" id="hbox26"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">8</property> <child> - <widget class="GtkLabel" id="label30"> + <widget class="GtkTable" id="table8"> <property name="visible">True</property> - <property name="label" translatable="yes">Album:</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</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> + <property name="n_rows">2</property> + <property name="n_columns">2</property> + <property name="homogeneous">False</property> + <property name="row_spacing">8</property> + <property name="column_spacing">8</property> + + <child> + <widget class="GtkLabel" id="label31"> + <property name="visible">True</property> + <property name="label" translatable="yes">Year:</property> + <property name="use_underline">False</property> + <property name="use_markup">False</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">True</property> + <property name="selectable">False</property> + <property name="xalign">0</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="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + <property name="x_options">fill</property> + <property name="y_options"></property> + </packing> + </child> + + <child> + <widget class="GtkLabel" id="label33"> + <property name="visible">True</property> + <property name="label" translatable="yes">Track:</property> + <property name="use_underline">False</property> + <property name="use_markup">True</property> + <property name="justify">GTK_JUSTIFY_LEFT</property> + <property name="wrap">False</property> + <property name="selectable">False</property> + <property name="xalign">0</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="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">0</property> + <property name="bottom_attach">1</property> + <property name="x_options">fill</property> + <property name="y_options"></property> + </packing> + </child> + + <child> + <widget class="GtkEntry" id="year"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="editable">False</property> + <property name="visibility">True</property> + <property name="max_length">0</property> + <property name="text" translatable="yes"></property> + <property name="has_frame">True</property> + <property name="invisible_char">•</property> + <property name="activates_default">False</property> + </widget> + <packing> + <property name="left_attach">0</property> + <property name="right_attach">1</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="y_options"></property> + </packing> + </child> + + <child> + <widget class="GtkEntry" id="track"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="editable">False</property> + <property name="visibility">True</property> + <property name="max_length">0</property> + <property name="text" translatable="yes"></property> + <property name="has_frame">True</property> + <property name="invisible_char">•</property> + <property name="activates_default">False</property> + </widget> + <packing> + <property name="left_attach">1</property> + <property name="right_attach">2</property> + <property name="top_attach">1</property> + <property name="bottom_attach">2</property> + <property name="y_options"></property> + </packing> + </child> </widget> <packing> <property name="padding">0</property> @@ -1533,16 +1740,71 @@ </child> <child> - <widget class="GtkEntry" id="album"> + <widget class="GtkHBox" id="hbox28"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="editable">False</property> - <property name="visibility">True</property> - <property name="max_length">0</property> - <property name="text" translatable="yes"></property> - <property name="has_frame">True</property> - <property name="invisible_char">•</property> - <property name="activates_default">False</property> + <property name="homogeneous">False</property> + <property name="spacing">8</property> + + <child> + <widget class="GtkLabel" id="label36"> + <property name="visible">True</property> + <property name="label" translatable="yes">Comment:</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</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="padding">0</property> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + + <child> + <widget class="GtkScrolledWindow" id="scrolledwindow4"> + <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="GtkTextView" id="comment"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="editable">False</property> + <property name="overwrite">False</property> + <property name="accepts_tab">True</property> + <property name="justification">GTK_JUSTIFY_LEFT</property> + <property name="wrap_mode">GTK_WRAP_NONE</property> + <property name="cursor_visible">True</property> + <property name="pixels_above_lines">0</property> + <property name="pixels_below_lines">0</property> + <property name="pixels_inside_wrap">0</property> + <property name="left_margin">0</property> + <property name="right_margin">0</property> + <property name="indent">0</property> + <property name="text" translatable="yes"></property> + </widget> + </child> + </widget> + <packing> + <property name="padding">0</property> + <property name="expand">True</property> + <property name="fill">True</property> + </packing> + </child> </widget> <packing> <property name="padding">0</property> @@ -1550,56 +1812,24 @@ <property name="fill">True</property> </packing> </child> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - - <child> - <widget class="GtkHBox" id="hbox27"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">8</property> <child> - <widget class="GtkLabel" id="label35"> + <widget class="GtkHButtonBox" id="hbuttonbox2"> <property name="visible">True</property> - <property name="label" translatable="yes">Genre:</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</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="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> + <property name="layout_style">GTK_BUTTONBOX_END</property> + <property name="spacing">0</property> - <child> - <widget class="GtkEntry" id="genre"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="editable">False</property> - <property name="visibility">True</property> - <property name="max_length">0</property> - <property name="text" translatable="yes"></property> - <property name="has_frame">True</property> - <property name="invisible_char">•</property> - <property name="activates_default">False</property> + <child> + <widget class="GtkButton" id="button3"> + <property name="visible">True</property> + <property name="can_default">True</property> + <property name="can_focus">True</property> + <property name="label" translatable="yes">Write</property> + <property name="use_underline">True</property> + <property name="relief">GTK_RELIEF_NORMAL</property> + <property name="focus_on_click">True</property> + </widget> + </child> </widget> <packing> <property name="padding">0</property> @@ -1609,197 +1839,122 @@ </child> </widget> <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> + <property name="tab_expand">False</property> + <property name="tab_fill">True</property> </packing> </child> <child> - <widget class="GtkTable" id="table8"> + <widget class="GtkLabel" id="label65"> <property name="visible">True</property> - <property name="n_rows">2</property> - <property name="n_columns">2</property> - <property name="homogeneous">False</property> - <property name="row_spacing">8</property> - <property name="column_spacing">8</property> - - <child> - <widget class="GtkLabel" id="label31"> - <property name="visible">True</property> - <property name="label" translatable="yes">Year:</property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">True</property> - <property name="selectable">False</property> - <property name="xalign">0</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="left_attach">0</property> - <property name="right_attach">1</property> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - <property name="x_options">fill</property> - <property name="y_options"></property> - </packing> - </child> - - <child> - <widget class="GtkLabel" id="label33"> - <property name="visible">True</property> - <property name="label" translatable="yes">Track:</property> - <property name="use_underline">False</property> - <property name="use_markup">True</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0</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="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - <property name="x_options">fill</property> - <property name="y_options"></property> - </packing> - </child> - - <child> - <widget class="GtkEntry" id="year"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="editable">False</property> - <property name="visibility">True</property> - <property name="max_length">0</property> - <property name="text" translatable="yes"></property> - <property name="has_frame">True</property> - <property name="invisible_char">•</property> - <property name="activates_default">False</property> - </widget> - <packing> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="y_options"></property> - </packing> - </child> - - <child> - <widget class="GtkEntry" id="track"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="editable">False</property> - <property name="visibility">True</property> - <property name="max_length">0</property> - <property name="text" translatable="yes"></property> - <property name="has_frame">True</property> - <property name="invisible_char">•</property> - <property name="activates_default">False</property> - </widget> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="y_options"></property> - </packing> - </child> + <property name="label" translatable="yes">Summary</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="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> + <property name="type">tab</property> </packing> </child> <child> - <widget class="GtkHBox" id="hbox28"> + <widget class="GtkVBox" id="vbox16"> + <property name="border_width">12</property> <property name="visible">True</property> <property name="homogeneous">False</property> <property name="spacing">8</property> <child> - <widget class="GtkLabel" id="label36"> + <widget class="GtkScrolledWindow" id="scrolledwindow5"> <property name="visible">True</property> - <property name="label" translatable="yes">Comment:</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</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> + <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="metalist"> + <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">False</property> - <property name="fill">False</property> + <property name="expand">True</property> + <property name="fill">True</property> </packing> </child> <child> - <widget class="GtkScrolledWindow" id="scrolledwindow4"> + <widget class="GtkHButtonBox" id="hbuttonbox1"> <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> + <property name="layout_style">GTK_BUTTONBOX_END</property> + <property name="spacing">0</property> <child> - <widget class="GtkTextView" id="comment"> + <widget class="GtkButton" id="button2"> <property name="visible">True</property> + <property name="can_default">True</property> <property name="can_focus">True</property> - <property name="editable">False</property> - <property name="overwrite">False</property> - <property name="accepts_tab">True</property> - <property name="justification">GTK_JUSTIFY_LEFT</property> - <property name="wrap_mode">GTK_WRAP_NONE</property> - <property name="cursor_visible">True</property> - <property name="pixels_above_lines">0</property> - <property name="pixels_below_lines">0</property> - <property name="pixels_inside_wrap">0</property> - <property name="left_margin">0</property> - <property name="right_margin">0</property> - <property name="indent">0</property> - <property name="text" translatable="yes"></property> + <property name="label" translatable="yes">Write</property> + <property name="use_underline">True</property> + <property name="relief">GTK_RELIEF_NORMAL</property> + <property name="focus_on_click">True</property> </widget> </child> </widget> <packing> <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> + <property name="expand">False</property> + <property name="fill">False</property> </packing> </child> </widget> <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> + <property name="tab_expand">False</property> + <property name="tab_fill">True</property> + </packing> + </child> + + <child> + <widget class="GtkLabel" id="label64"> + <property name="visible">True</property> + <property name="label" translatable="yes">Full</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> @@ -3720,6 +3875,109 @@ SOCKS5_HOSTNAME</property> <property name="justify">GTK_JUSTIFY_LEFT</property> <property name="wrap">False</property> <property name="selectable">False</property> + <property name="xalign">0.479999989271</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> + + <child> + <widget class="GtkVBox" id="vbox17"> + <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="treeview1"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="headers_visible">True</property> + <property name="rules_hint">False</property> + <property name="reorderable">False</property> + <property name="enable_search">False</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="hbuttonbox3"> + <property name="visible">True</property> + <property name="layout_style">GTK_BUTTONBOX_END</property> + <property name="spacing">0</property> + + <child> + <widget class="GtkButton" id="button4"> + <property name="visible">True</property> + <property name="can_default">True</property> + <property name="can_focus">True</property> + <property name="label" translatable="yes">Add</property> + <property name="use_underline">True</property> + <property name="relief">GTK_RELIEF_NORMAL</property> + <property name="focus_on_click">True</property> + </widget> + </child> + + <child> + <widget class="GtkButton" id="button5"> + <property name="visible">True</property> + <property name="can_default">True</property> + <property name="can_focus">True</property> + <property name="label" translatable="yes">Remove</property> + <property name="use_underline">True</property> + <property name="relief">GTK_RELIEF_NORMAL</property> + <property name="focus_on_click">True</property> + </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="label66"> + <property name="visible">True</property> + <property name="label" translatable="yes">Global Hotkeys</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> diff --git a/plugins/gtkui/interface.c b/plugins/gtkui/interface.c index e0fbac31..770bf32d 100644 --- a/plugins/gtkui/interface.c +++ b/plugins/gtkui/interface.c @@ -1060,6 +1060,7 @@ GtkWidget* create_trackproperties (void) { GtkWidget *trackproperties; + GtkWidget *notebook3; GtkWidget *vbox13; GtkWidget *hbox23; GtkWidget *label27; @@ -1088,6 +1089,15 @@ create_trackproperties (void) GtkWidget *label36; GtkWidget *scrolledwindow4; GtkWidget *comment; + GtkWidget *hbuttonbox2; + GtkWidget *button3; + GtkWidget *label65; + GtkWidget *vbox16; + GtkWidget *scrolledwindow5; + GtkWidget *metalist; + GtkWidget *hbuttonbox1; + GtkWidget *button2; + GtkWidget *label64; trackproperties = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (trackproperties), "Track Properties"); @@ -1095,9 +1105,13 @@ create_trackproperties (void) gtk_window_set_skip_taskbar_hint (GTK_WINDOW (trackproperties), TRUE); gtk_window_set_skip_pager_hint (GTK_WINDOW (trackproperties), TRUE); + notebook3 = gtk_notebook_new (); + gtk_widget_show (notebook3); + gtk_container_add (GTK_CONTAINER (trackproperties), notebook3); + vbox13 = gtk_vbox_new (FALSE, 8); gtk_widget_show (vbox13); - gtk_container_add (GTK_CONTAINER (trackproperties), vbox13); + gtk_container_add (GTK_CONTAINER (notebook3), vbox13); gtk_container_set_border_width (GTK_CONTAINER (vbox13), 12); hbox23 = gtk_hbox_new (FALSE, 8); @@ -1248,6 +1262,50 @@ create_trackproperties (void) gtk_container_add (GTK_CONTAINER (scrolledwindow4), comment); gtk_text_view_set_editable (GTK_TEXT_VIEW (comment), FALSE); + hbuttonbox2 = gtk_hbutton_box_new (); + gtk_widget_show (hbuttonbox2); + gtk_box_pack_start (GTK_BOX (vbox13), hbuttonbox2, TRUE, TRUE, 0); + gtk_button_box_set_layout (GTK_BUTTON_BOX (hbuttonbox2), GTK_BUTTONBOX_END); + + button3 = gtk_button_new_with_mnemonic ("Write"); + gtk_widget_show (button3); + gtk_container_add (GTK_CONTAINER (hbuttonbox2), button3); + GTK_WIDGET_SET_FLAGS (button3, GTK_CAN_DEFAULT); + + label65 = gtk_label_new ("Summary"); + gtk_widget_show (label65); + gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook3), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook3), 0), label65); + + vbox16 = gtk_vbox_new (FALSE, 8); + gtk_widget_show (vbox16); + gtk_container_add (GTK_CONTAINER (notebook3), vbox16); + gtk_container_set_border_width (GTK_CONTAINER (vbox16), 12); + + scrolledwindow5 = gtk_scrolled_window_new (NULL, NULL); + gtk_widget_show (scrolledwindow5); + gtk_box_pack_start (GTK_BOX (vbox16), scrolledwindow5, TRUE, TRUE, 0); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow5), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow5), GTK_SHADOW_IN); + + metalist = gtk_tree_view_new (); + gtk_widget_show (metalist); + gtk_container_add (GTK_CONTAINER (scrolledwindow5), metalist); + gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (metalist), TRUE); + + hbuttonbox1 = gtk_hbutton_box_new (); + gtk_widget_show (hbuttonbox1); + gtk_box_pack_start (GTK_BOX (vbox16), hbuttonbox1, FALSE, FALSE, 0); + gtk_button_box_set_layout (GTK_BUTTON_BOX (hbuttonbox1), GTK_BUTTONBOX_END); + + button2 = gtk_button_new_with_mnemonic ("Write"); + gtk_widget_show (button2); + gtk_container_add (GTK_CONTAINER (hbuttonbox1), button2); + GTK_WIDGET_SET_FLAGS (button2, GTK_CAN_DEFAULT); + + label64 = gtk_label_new ("Full"); + gtk_widget_show (label64); + gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook3), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook3), 1), label64); + g_signal_connect ((gpointer) trackproperties, "key_press_event", G_CALLBACK (on_trackproperties_key_press_event), NULL); @@ -1257,6 +1315,7 @@ create_trackproperties (void) /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (trackproperties, trackproperties, "trackproperties"); + GLADE_HOOKUP_OBJECT (trackproperties, notebook3, "notebook3"); GLADE_HOOKUP_OBJECT (trackproperties, vbox13, "vbox13"); GLADE_HOOKUP_OBJECT (trackproperties, hbox23, "hbox23"); GLADE_HOOKUP_OBJECT (trackproperties, label27, "label27"); @@ -1285,6 +1344,15 @@ create_trackproperties (void) GLADE_HOOKUP_OBJECT (trackproperties, label36, "label36"); GLADE_HOOKUP_OBJECT (trackproperties, scrolledwindow4, "scrolledwindow4"); GLADE_HOOKUP_OBJECT (trackproperties, comment, "comment"); + GLADE_HOOKUP_OBJECT (trackproperties, hbuttonbox2, "hbuttonbox2"); + GLADE_HOOKUP_OBJECT (trackproperties, button3, "button3"); + GLADE_HOOKUP_OBJECT (trackproperties, label65, "label65"); + GLADE_HOOKUP_OBJECT (trackproperties, vbox16, "vbox16"); + GLADE_HOOKUP_OBJECT (trackproperties, scrolledwindow5, "scrolledwindow5"); + GLADE_HOOKUP_OBJECT (trackproperties, metalist, "metalist"); + GLADE_HOOKUP_OBJECT (trackproperties, hbuttonbox1, "hbuttonbox1"); + GLADE_HOOKUP_OBJECT (trackproperties, button2, "button2"); + GLADE_HOOKUP_OBJECT (trackproperties, label64, "label64"); return trackproperties; } @@ -1530,6 +1598,13 @@ create_prefwin (void) GtkWidget *hbox20; GtkWidget *configure_plugin; GtkWidget *label3; + GtkWidget *vbox17; + GtkWidget *scrolledwindow6; + GtkWidget *treeview1; + GtkWidget *hbuttonbox3; + GtkWidget *button4; + GtkWidget *button5; + GtkWidget *label66; GtkWidget *dialog_action_area2; GtkWidget *closebutton1; @@ -1972,6 +2047,42 @@ create_prefwin (void) label3 = gtk_label_new ("Plugins"); gtk_widget_show (label3); gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook2), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook2), 4), label3); + gtk_misc_set_alignment (GTK_MISC (label3), 0.48, 0.5); + + vbox17 = gtk_vbox_new (FALSE, 8); + gtk_widget_show (vbox17); + gtk_container_add (GTK_CONTAINER (notebook2), vbox17); + gtk_container_set_border_width (GTK_CONTAINER (vbox17), 12); + + scrolledwindow6 = gtk_scrolled_window_new (NULL, NULL); + gtk_widget_show (scrolledwindow6); + gtk_box_pack_start (GTK_BOX (vbox17), 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); + + treeview1 = gtk_tree_view_new (); + gtk_widget_show (treeview1); + gtk_container_add (GTK_CONTAINER (scrolledwindow6), treeview1); + gtk_tree_view_set_enable_search (GTK_TREE_VIEW (treeview1), FALSE); + + hbuttonbox3 = gtk_hbutton_box_new (); + gtk_widget_show (hbuttonbox3); + gtk_box_pack_start (GTK_BOX (vbox17), hbuttonbox3, FALSE, FALSE, 0); + gtk_button_box_set_layout (GTK_BUTTON_BOX (hbuttonbox3), GTK_BUTTONBOX_END); + + button4 = gtk_button_new_with_mnemonic ("Add"); + gtk_widget_show (button4); + gtk_container_add (GTK_CONTAINER (hbuttonbox3), button4); + GTK_WIDGET_SET_FLAGS (button4, GTK_CAN_DEFAULT); + + button5 = gtk_button_new_with_mnemonic ("Remove"); + gtk_widget_show (button5); + gtk_container_add (GTK_CONTAINER (hbuttonbox3), button5); + GTK_WIDGET_SET_FLAGS (button5, GTK_CAN_DEFAULT); + + label66 = gtk_label_new ("Global Hotkeys"); + gtk_widget_show (label66); + gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook2), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook2), 5), label66); dialog_action_area2 = GTK_DIALOG (prefwin)->action_area; gtk_widget_show (dialog_action_area2); @@ -2133,6 +2244,13 @@ create_prefwin (void) GLADE_HOOKUP_OBJECT (prefwin, hbox20, "hbox20"); GLADE_HOOKUP_OBJECT (prefwin, configure_plugin, "configure_plugin"); GLADE_HOOKUP_OBJECT (prefwin, label3, "label3"); + GLADE_HOOKUP_OBJECT (prefwin, vbox17, "vbox17"); + GLADE_HOOKUP_OBJECT (prefwin, scrolledwindow6, "scrolledwindow6"); + GLADE_HOOKUP_OBJECT (prefwin, treeview1, "treeview1"); + GLADE_HOOKUP_OBJECT (prefwin, hbuttonbox3, "hbuttonbox3"); + GLADE_HOOKUP_OBJECT (prefwin, button4, "button4"); + GLADE_HOOKUP_OBJECT (prefwin, button5, "button5"); + GLADE_HOOKUP_OBJECT (prefwin, label66, "label66"); GLADE_HOOKUP_OBJECT_NO_REF (prefwin, dialog_action_area2, "dialog_action_area2"); GLADE_HOOKUP_OBJECT (prefwin, closebutton1, "closebutton1"); diff --git a/plugins/gtkui/trkproperties.c b/plugins/gtkui/trkproperties.c index 9f196671..2d3f59f5 100644 --- a/plugins/gtkui/trkproperties.c +++ b/plugins/gtkui/trkproperties.c @@ -25,7 +25,9 @@ #include "../../deadbeef.h" #include "gtkui.h" -GtkWidget *trackproperties; +#pragma GCC optimize("O0") + +static GtkWidget *trackproperties; gboolean on_trackproperties_delete_event (GtkWidget *widget, @@ -49,6 +51,16 @@ on_trackproperties_key_press_event (GtkWidget *widget, } void +on_metadata_edited (GtkCellRendererText *renderer, gchar *path, gchar *new_text, gpointer user_data) { + GtkListStore *store = GTK_LIST_STORE (user_data); + GtkTreePath *treepath = gtk_tree_path_new_from_string (path); + GtkTreeIter iter; + gtk_tree_model_get_iter (GTK_TREE_MODEL (store), &iter, treepath); + gtk_tree_path_free (treepath); + gtk_list_store_set (store, &iter, 1, new_text, -1); +} + +void show_track_properties_dlg (DB_playItem_t *it) { if (!trackproperties) { trackproperties = create_trackproperties (); @@ -121,6 +133,51 @@ show_track_properties_dlg (DB_playItem_t *it) { gtk_text_view_set_buffer (GTK_TEXT_VIEW (w), buffer); g_object_unref (buffer); + // full metadata + const char *types[] = { + "artist", "Artist", + "band", "Band / Album Artist", + "title", "Track Title", + "track", "Track Number", + "album", "Album", + "genre", "Genre", + "year", "Date", + "performer", "Performer", + "composer", "Composer", + "numtracks", "Total Tracks", + "disc", "Disc Number", + "comment", "Comment", + NULL + }; + + GtkTreeView *tree = GTK_TREE_VIEW (lookup_widget (widget, "metalist")); + GtkListStore *store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING); + GtkCellRenderer *rend_text = gtk_cell_renderer_text_new (); + GtkCellRenderer *rend_text2 = gtk_cell_renderer_text_new (); + g_object_set (G_OBJECT (rend_text2), "editable", TRUE, NULL); + g_signal_connect ((gpointer)rend_text2, "edited", + G_CALLBACK (on_metadata_edited), + store); + GtkTreeViewColumn *col1 = gtk_tree_view_column_new_with_attributes ("Key", rend_text, "text", 0, NULL); + 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); + + deadbeef->pl_lock (); + int i = 0; + while (types[i]) { + GtkTreeIter iter; + gtk_list_store_append (store, &iter); + const char *value = deadbeef->pl_find_meta (it, types[i]); + if (!value) { + 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 (); + gtk_widget_show (widget); gtk_window_present (GTK_WINDOW (widget)); } |