1
# -*- coding: utf-8 -*-
2
# Copyright 2004-2005 Joe Wreschnig, Michael Urman, Iñigo Serna
4
# This program is free software; you can redistribute it and/or modify
5
# it under the terms of the GNU General Public License version 2 as
6
# published by the Free Software Foundation
8
# $Id: info.py 3634 2006-07-14 19:38:41Z piman $
18
from parse import XMLFromPattern
19
from qltk.textedit import PatternEdit
21
class SongInfo(gtk.Label):
23
\\<span weight='bold' size='large'\\><title>\\</span\\>\
24
<~length| (<~length>)><version|
25
\\<small\\>\\<b\\><version>\\</b\\>\\</small\\>><~people|
27
\\<b\\><album>\\</b\\><discnumber| - %(disc)s>\
28
<part| - \\<b\\><part>\\</b\\>><tracknumber| - %(track)s>>""" % {
29
# Translators: As in "by Artist Name"
30
"people": _("by %s") % "<~people>",
31
"disc": _("Disc %s") % "<discnumber>",
32
"track": _("Track %s") % "<tracknumber>"
35
__PATTERN_FILENAME = os.path.join(const.USERDIR, "songinfo")
37
def __init__(self, library, player):
38
super(SongInfo, self).__init__()
39
self.set_ellipsize(pango.ELLIPSIZE_END)
40
self.set_selectable(True)
41
self.set_alignment(0.0, 0.0)
42
library.connect_object('changed', self.__check_change, player)
43
player.connect('song-started', self.__check_started)
45
self.connect_object('populate-popup', self.__menu, player)
47
try: self._pattern = file(self.__PATTERN_FILENAME).read().rstrip()
48
except EnvironmentError: pass
49
self._compiled = XMLFromPattern(self._pattern)
51
def __menu(self, player, menu):
52
item = qltk.MenuItem(_("_Edit Display..."), gtk.STOCK_EDIT)
54
item.connect_object('activate', self.__edit, player)
57
def __edit(self, player):
58
editor = PatternEdit(self, SongInfo._pattern)
59
editor.text = self._pattern
60
editor.apply.connect_object('clicked', self.__set, editor, player)
62
def __set(self, edit, player):
63
self._pattern = edit.text.rstrip()
64
if (self._pattern == SongInfo._pattern):
65
try: os.unlink(self.__PATTERN_FILENAME)
68
pattern_file = file(os.path.join(const.USERDIR, "songinfo"), "w")
69
pattern_file.write(self._pattern + "\n")
71
self._compiled = XMLFromPattern(self._pattern)
72
self.__update_info(player)
74
def __check_change(self, player, songs):
75
if player.info in songs:
76
self.__update_info(player)
78
def __check_started(self, player, song):
79
if player.song is None:
80
self.__update_info(player)
82
def __update_info(self, player):
83
if player.info is not None:
84
text = self._compiled % player.info
86
text = "<span size='xx-large'>%s</span>" % _("Not playing")