[gnome-music] Highlight now playing song
- From: Vadim Rutkovsky <vrutkovsky src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-music] Highlight now playing song
- Date: Wed, 10 Apr 2013 12:39:28 +0000 (UTC)
commit 434b41940888687885e493dce2e32ccfb3f5be21
Author: Vadim Rutkovsky <vrutkovs redhat com>
Date: Wed Apr 10 14:38:46 2013 +0200
Highlight now playing song
src/player.js | 5 ++++
src/widgets.js | 64 ++++++++++++++++++++++++++++++++++++++++++++++++-------
2 files changed, 60 insertions(+), 9 deletions(-)
---
diff --git a/src/player.js b/src/player.js
index 70975d8..1f747b8 100644
--- a/src/player.js
+++ b/src/player.js
@@ -24,6 +24,8 @@ const Gtk = imports.gi.Gtk;
const Gd = imports.gi.Gd;
const Gst = imports.gi.Gst;
const GLib = imports.gi.GLib;
+const GObject = imports.gi.GObject;
+const Signals = imports.signals;
//pkg.initSubmodule('libgd');
@@ -74,6 +76,7 @@ const Player = new Lang.Class({
Name: "Player",
_init: function() {
+ Signals.addSignalMethods(Player.prototype);
this.playlist = [];
this.currentTrack = 0;
this.cache = AlbumArtCache.AlbumArtCache.getDefault();
@@ -107,6 +110,8 @@ const Player = new Lang.Class({
load: function(media) {
var pixbuf;
+ this.emit("song-changed", this.currentTrack);
+
this._setDuration(media.get_duration());
this.song_total_time_lbl.set_label(this.seconds_to_string (media.get_duration()));
this.progress_scale.sensitive = true;
diff --git a/src/widgets.js b/src/widgets.js
index 616942c..352da4f 100644
--- a/src/widgets.js
+++ b/src/widgets.js
@@ -66,6 +66,40 @@ const AlbumWidget = new Lang.Class({
})
);
+
+
+ this.player.connect('song-changed', Lang.bind(this,
+ function(widget, id) {
+ // Highlight currently played song as bold
+ let iter = this.model.get_iter_from_string(id.toString())[1];
+ let item = this.model.get_value(iter, 5);
+ let title = "<b>" + item.get_title() + "</b>";
+ this.model.set_value(iter, 0, title);
+ // Display now playing icon
+ this.model.set_value(iter, 6, true);
+
+ // Make all previous songs shadowed
+ for (let i = 0; i < id; i++){
+ let iter = this.model.get_iter_from_string(i.toString())[1];
+ let item = this.model.get_value(iter, 5);
+ let title = "<span color='grey'>" + item.get_title() + "</span>";
+ this.model.set_value(iter, 0, title);
+ this.model.set_value(iter, 6, false);
+ }
+
+ //Remove markup from the following songs
+ let i = parseInt(id) + 1;
+ while(this.model.get_iter_from_string(i.toString())[0]) {
+ let iter = this.model.get_iter_from_string(i.toString())[1];
+ let item = this.model.get_value(iter, 5);
+ this.model.set_value(iter, 0, item.get_title());
+ this.model.set_value(iter, 6, false);
+ i++;
+ }
+ return true;
+ }
+ ));
+
this.cover = new Gtk.Image();
this.vbox = new Gtk.VBox();
this.title_label = new Gtk.Label({label : ""});
@@ -144,16 +178,28 @@ const AlbumWidget = new Lang.Class({
var cells = cols[0].get_cells()
cells[2].visible = false
+ let nowPlayingSymbolRenderer = new Gtk.CellRendererPixbuf({ xpad: 0 });
+ let path = "/usr/share/icons/gnome/scalable/actions/media-playback-start-symbolic.svg";
+ nowPlayingSymbolRenderer.pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale(path, -1, 16, true);
+ nowPlayingSymbolRenderer.set_property("xalign", 0.0);
+ nowPlayingSymbolRenderer.set_property("expand", true);
+ listWidget.add_renderer(nowPlayingSymbolRenderer, Lang.bind(this,
+ function(col, cell, model, iter) {}
+ ));
+ cols[0].clear_attributes(nowPlayingSymbolRenderer);
+ cols[0].add_attribute(nowPlayingSymbolRenderer, "visible", 6);
+
let typeRenderer =
- new Gd.StyledTextRenderer({ xpad: 0 });
+ new Gd.StyledTextRenderer({ xpad: 16 });
typeRenderer.set_property("ellipsize", 3);
typeRenderer.set_property("xalign", 0.0);
typeRenderer.set_property("expand", true);
+ // This function is not neede, just add the renderer!
listWidget.add_renderer(typeRenderer, Lang.bind(this,
- function(col, cell, model, iter) {
- let item = model.get_value(iter, 5);
- typeRenderer.text = item.get_title();
- }));
+ function(col, cell, model, iter) {}
+ ));
+ cols[0].clear_attributes(typeRenderer);
+ cols[0].add_attribute(typeRenderer, "markup", 0);
let durationRenderer =
new Gd.StyledTextRenderer({ xpad: 16 });
@@ -188,8 +234,8 @@ const AlbumWidget = new Lang.Class({
duration = duration + track.get_duration();
let iter = this.model.append();
this.model.set(iter,
- [0, 1, 2, 3, 4, 5],
- [ "", "", "", "", null, track]);
+ [0, 1, 2, 3, 4, 5, 6],
+ [ track.get_title(), "", "", "", null, track, false]);
this.running_length_label_info.set_text((parseInt(duration/60) + 1) + " min");
}
}));
@@ -221,7 +267,7 @@ const AlbumWidget = new Lang.Class({
const ArtistAlbums = new Lang.Class({
Name: "ArtistAlbumsWidget",
Extends: Gtk.VBox,
-
+
_init: function (artist, albums) {
this.artist = artist
this.albums = albums
@@ -241,7 +287,7 @@ const ArtistAlbums = new Lang.Class({
const ArtistAlbumWidget = new Lang.Class({
Name: "ArtistAlbumWidget",
Extends: Gtk.HBox,
-
+
_init: function (artist, album) {
this.parent();
this.album = album;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]