summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--deadbeef.h10
-rw-r--r--playlist.c27
-rw-r--r--playlist.h11
-rw-r--r--plugins.c1
-rw-r--r--plugins/gtkui/deadbeef.glade1046
-rw-r--r--plugins/gtkui/interface.c120
-rw-r--r--plugins/gtkui/trkproperties.c59
7 files changed, 859 insertions, 415 deletions
diff --git a/deadbeef.h b/deadbeef.h
index 95445cca..c637abaa 100644
--- a/deadbeef.h
+++ b/deadbeef.h
@@ -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);
diff --git a/playlist.c b/playlist.c
index b5ab14f1..5b3f1fe4 100644
--- a/playlist.c
+++ b/playlist.c
@@ -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
diff --git a/playlist.h b/playlist.h
index 37bd17b6..5d33d7a4 100644
--- a/playlist.h
+++ b/playlist.h
@@ -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
diff --git a/plugins.c b/plugins.c
index 19ea0a20..247d4055 100644
--- a/plugins.c
+++ b/plugins.c
@@ -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));
}