1 /* Gnome Music Player Client (GMPC)
2 * Copyright (C) 2004-2011 Qball Cow <qball@gmpclient.org>
3 * Project homepage: http://gmpclient.org/
4
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 */
19
20 #include <gtk/gtk.h>
21 #include "main.h"
22 #include "title_header.h"
23 #include "playlist3.h"
24
25 /* glue code */
26 extern GmpcBrowsersMetadata *browsers_metadata;
27
28 static GtkWidget *header_labels[5];
29
playlist3_header_song(void)30 static void playlist3_header_song(void)
31 {
32 mpd_Song *song = mpd_playlist_get_current_song(connection);
33 if (song)
34 {
35 GtkTreeView *tree = (GtkTreeView *) gtk_builder_get_object(pl3_xml, "cat_tree");
36 gmpc_browsers_metadata_select_browser(browsers_metadata, tree);
37 gmpc_browsers_metadata_set_song(browsers_metadata, song);
38 }
39 }
40
41
playlist3_header_artist(void)42 static void playlist3_header_artist(void)
43 {
44 mpd_Song *song = mpd_playlist_get_current_song(connection);
45 if (song && song->artist)
46 {
47 GtkTreeView *tree = (GtkTreeView *) gtk_builder_get_object(pl3_xml, "cat_tree");
48 gmpc_browsers_metadata_select_browser(browsers_metadata, tree);
49 gmpc_browsers_metadata_set_artist(browsers_metadata, song->artist);
50 }
51 }
52
53
playlist3_header_album(void)54 static void playlist3_header_album(void)
55 {
56 mpd_Song *song = mpd_playlist_get_current_song(connection);
57 if (song && song->artist && song->album)
58 {
59 GtkTreeView *tree = (GtkTreeView *) gtk_builder_get_object(pl3_xml, "cat_tree");
60 gmpc_browsers_metadata_select_browser(browsers_metadata, tree);
61 gmpc_browsers_metadata_set_album(browsers_metadata, song->artist, song->album);
62 }
63 }
playlist3_header_update_style(GtkWidget * widget,GtkStyle * prev,gpointer data)64 static void playlist3_header_update_style(GtkWidget *widget, GtkStyle *prev, gpointer data)
65 {
66 gtk_widget_modify_text(header_labels[1], GTK_STATE_NORMAL, &(widget->style->text[GTK_STATE_INSENSITIVE]));
67 gtk_widget_modify_fg(header_labels[1], GTK_STATE_NORMAL, &(widget->style->text[GTK_STATE_INSENSITIVE]));
68
69 gtk_widget_modify_text(header_labels[3], GTK_STATE_NORMAL, &(widget->style->text[GTK_STATE_INSENSITIVE]));
70 gtk_widget_modify_fg(header_labels[3], GTK_STATE_NORMAL, &(widget->style->text[GTK_STATE_INSENSITIVE]));
71 }
72
playlist3_new_header(void)73 void playlist3_new_header(void)
74 {
75 GtkWidget *hbox10 = GTK_WIDGET(gtk_builder_get_object(pl3_xml, "hbox10"));
76 if (hbox10)
77 {
78 GtkWidget *hbox = gtk_hbox_new(FALSE, 6);
79 GtkWidget *vbox = gtk_vbox_new(FALSE, 0);
80 // expand in width, align in middle
81 GtkAlignment *title_header_top_alignment = gtk_alignment_new(0,0.5,1.0,0);
82 // set a 3 px top/bottom border (looks better then 6)
83 gtk_alignment_set_padding(title_header_top_alignment, 3,3,0,0);
84
85 // set minimum width 300 pixels.
86 gtk_widget_set_size_request(title_header_top_alignment, 300, -1);
87 /** Title */
88 header_labels[0] = (GtkWidget *)gmpc_clicklabel_new("");
89 gmpc_clicklabel_font_size(GMPC_CLICKLABEL(header_labels[0]), 12);
90 gmpc_clicklabel_set_do_bold(GMPC_CLICKLABEL(header_labels[0]), TRUE);
91 gmpc_clicklabel_set_ellipsize(GMPC_CLICKLABEL(header_labels[0]), PANGO_ELLIPSIZE_END);
92
93 header_labels[1] = gtk_label_new(_("By"));
94 /** Artist */
95 header_labels[2] = (GtkWidget *)gmpc_clicklabel_new("");
96 gmpc_clicklabel_set_ellipsize(GMPC_CLICKLABEL(header_labels[2]), PANGO_ELLIPSIZE_NONE);
97
98 header_labels[3] = gtk_label_new(_("From"));
99 /** Albumr */
100 header_labels[4] = (GtkWidget *)gmpc_clicklabel_new("");
101 gmpc_clicklabel_set_ellipsize(GMPC_CLICKLABEL(header_labels[4]), PANGO_ELLIPSIZE_END);
102
103
104
105
106 gtk_box_pack_start(GTK_BOX(vbox), header_labels[0], FALSE, TRUE, 0);
107 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0);
108
109 gtk_box_pack_start(GTK_BOX(hbox), header_labels[1], FALSE, TRUE, 0);
110 gtk_box_pack_start(GTK_BOX(hbox), header_labels[2], FALSE, TRUE, 0);
111 gtk_box_pack_start(GTK_BOX(hbox), header_labels[3], FALSE, TRUE, 0);
112 gtk_box_pack_start(GTK_BOX(hbox), header_labels[4], TRUE, TRUE, 0);
113
114 g_signal_connect(G_OBJECT(header_labels[0]), "clicked", G_CALLBACK(playlist3_header_song), NULL);
115 g_signal_connect(G_OBJECT(header_labels[2]), "clicked", G_CALLBACK(playlist3_header_artist), NULL);
116 g_signal_connect(G_OBJECT(header_labels[4]), "clicked", G_CALLBACK(playlist3_header_album), NULL);
117
118 gtk_container_add(GTK_CONTAINER(title_header_top_alignment), vbox);
119 gtk_box_pack_start(GTK_BOX(hbox10), title_header_top_alignment, TRUE, TRUE, 0);
120 gtk_widget_show_all(hbox10);
121
122 g_signal_connect(G_OBJECT(hbox10), "style-set", G_CALLBACK(playlist3_header_update_style), NULL);
123 playlist3_header_update_style(hbox10, NULL, NULL);
124 }
125 }
126
127
playlist3_update_header(void)128 void playlist3_update_header(void)
129 {
130 char buffer[1024];
131 if (header_labels[0] == NULL)
132 return;
133
134 if (mpd_check_connected(connection))
135 {
136 mpd_Song *song = mpd_playlist_get_current_song(connection);
137 /** Set new header */
138 if (mpd_player_get_state(connection) != MPD_STATUS_STATE_STOP && song)
139 {
140 mpd_song_markup(buffer, 1024, "[%title%|%shortfile%][ (%name%)]", song);
141 gmpc_clicklabel_set_text(GMPC_CLICKLABEL(header_labels[0]), buffer);
142 gmpc_clicklabel_set_sensitive(GMPC_CLICKLABEL(header_labels[0]), TRUE);
143 if (song->artist)
144 {
145 gtk_widget_show(header_labels[1]);
146 gtk_widget_show(header_labels[2]);
147 gmpc_clicklabel_set_text(GMPC_CLICKLABEL(header_labels[2]), song->artist);
148 } else
149 {
150 gtk_widget_hide(header_labels[1]);
151 gtk_widget_hide(header_labels[2]);
152 }
153 if (song->album)
154 {
155 gtk_widget_show(header_labels[3]);
156 gtk_widget_show(header_labels[4]);
157 if (song->date)
158 {
159 gchar *text = g_strdup_printf("%s (%s)", song->album, song->date);
160 gmpc_clicklabel_set_text(GMPC_CLICKLABEL(header_labels[4]), text);
161 g_free(text);
162 } else
163 {
164 gmpc_clicklabel_set_text(GMPC_CLICKLABEL(header_labels[4]), song->album);
165 }
166
167 } else
168 {
169 gtk_widget_hide(header_labels[3]);
170 gtk_widget_hide(header_labels[4]);
171 }
172
173 } else
174 {
175 gmpc_clicklabel_set_text(GMPC_CLICKLABEL(header_labels[0]), _("Not Playing"));
176 gmpc_clicklabel_set_sensitive(GMPC_CLICKLABEL(header_labels[0]), FALSE);
177 gtk_widget_hide(header_labels[1]);
178 gtk_widget_hide(header_labels[2]);
179 gtk_widget_hide(header_labels[3]);
180 gtk_widget_hide(header_labels[4]);
181 }
182 } else
183 {
184 gmpc_clicklabel_set_text(GMPC_CLICKLABEL(header_labels[0]), _("Not Connected"));
185 gmpc_clicklabel_set_sensitive(GMPC_CLICKLABEL(header_labels[0]), FALSE);
186 gtk_widget_hide(header_labels[1]);
187 gtk_widget_hide(header_labels[2]);
188 gtk_widget_hide(header_labels[3]);
189 gtk_widget_hide(header_labels[4]);
190
191 }
192 }
193
194