# HG changeset patch # User fabien # Date 1076169534 18000 # Node ID 7f61cb2ddb7b1c25f56061b3b3244ac72877924c # Parent 9ac26f2f83e1d65064b327e8e2a93d460eca78cf [svn] Use Python-Gnuplot instead of immsplot. diff -r 9ac26f2f83e1 -r 7f61cb2ddb7b immsview --- a/immsview Sat Feb 07 00:30:40 2004 -0500 +++ b/immsview Sat Feb 07 10:58:54 2004 -0500 @@ -20,9 +20,12 @@ # Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. -_version_ = "$Id: immsview 1709 2004-02-07 05:30:40Z fabien $" +_version_ = "$Id: immsview 1710 2004-02-07 15:58:54Z fabien $" # $Log$ +# Revision 1.28 2004/02/07 15:58:54 fabien +# Use Python-Gnuplot instead of immsplot. +# # Revision 1.27 2004/02/07 05:30:40 fabien # Now three updating function. (see IMMSStore.__init__). # Currently, I'm better to replace everything. But eh, YMMV. @@ -143,6 +146,7 @@ import gettext import xmms.control import time +import Gnuplot gtk.glade.bindtextdomain('immsview', '/usr/share/immsview/LANG') gtk.glade.textdomain('immsview') @@ -285,6 +289,7 @@ COL_SELECT = 4 COL_UID = 5 COL_RATING_COLOR = 6 + COL_PATHS_NUMBER = 7 def __init__(self, db): gtk.ListStore.__init__(self, gobject.TYPE_INT, @@ -294,6 +299,7 @@ gobject.TYPE_BOOLEAN, gobject.TYPE_INT, gobject.TYPE_STRING, + gobject.TYPE_INT, ) self.db = db self.set_default_sort_func(self.default_sort) @@ -325,6 +331,7 @@ IMMSStore.COL_LAST, tune['last'], IMMSStore.COL_LAST_STR, strtime(self.curtime-tune['last']), IMMSStore.COL_RATING_COLOR, rating_to_color(tune['rating']), + IMMSStore.COL_PATHS_NUMBER, len(tune['path']), IMMSStore.COL_SELECT, gtk.FALSE) return giter def update(self): @@ -414,6 +421,15 @@ else: giter = self.update_giter(giter, song) return giter + def get_ratings(self): + res = [] + giter = self.get_iter_first() + while giter: + uid = self.get_value(giter, IMMSStore.COL_UID) + rating = self.get_value(giter, IMMSStore.COL_RATING) + res.append((uid, rating)) + giter = self.iter_next(giter) + return res def update_giter(self, giter, path = None): uid = self.get_value(giter, IMMSStore.COL_UID) tunes = self.db.get_ratings_and_info([uid,]) @@ -428,6 +444,21 @@ ## else: ## return gtk.ListStore.get_value(self, giter, col) +class IMMSPlot(Gnuplot.Gnuplot): + def __init__(self, db): + self.db = db; + Gnuplot.Gnuplot.__init__(self) + def plot_rate(self): + array = [0] * (150-75+1) + for uid, rating in self.db.get_ratings(): + array[rating-75] += 1 + d1 = Gnuplot.Data(range(75,150+1), array, + with='impulses') + d2 = Gnuplot.Data(range(75,150+1), array, + smooth = 'bezier') + self.plot(d1, d2, title='rate frequency') + self.gnuplot.flush() + class IMMSView(gtk.TreeView): def __init__(self, model, xmms): gtk.TreeView.__init__(self, model) @@ -452,6 +483,10 @@ text = IMMSStore.COL_LAST_STR) column.set_sort_column_id(IMMSStore.COL_LAST) self.append_column(column) + column = gtk.TreeViewColumn(_("#"), renderer, + weight_set = IMMSStore.COL_SELECT, + text = IMMSStore.COL_PATHS_NUMBER) + self.append_column(column) column = gtk.TreeViewColumn(_("File"), renderer, weight_set = IMMSStore.COL_SELECT, text = IMMSStore.COL_PATH) @@ -493,19 +528,18 @@ class IMMSToolbar(gtk.Toolbar): - # _IMMSPLOT_COMMAND = 'immsplot &' - _IMMSPLOT_COMMAND = '/home/fabien/bin/immsplot &' _SLEEP_TIME = 5 - def __init__(self, iview, xmms): + def __init__(self, iview, xmms, plotter): gtk.Toolbar.__init__(self) self.iview = iview self.xmms = xmms + self.plot = plotter self.create_widgets() def create_widgets(self): self.append_item(_('Refresh'), _('Refresh list'), None, None, self.do_refresh) self.append_item(_('Plot'), _('Show graph of rates'), - None, None, self.plot) + None, None, self.do_plot) self.append_item(_('Current'), _('Get current song'), None, None, self.do_get_current) self.append_item(_('Previous'), _('Play previous song'), @@ -514,8 +548,8 @@ None, None, self.do_play) self.append_item(_('Next'), _('Play next song'), None, None, self.do_play_next) - def plot(self, dummy): - os.system(self._IMMSPLOT_COMMAND) + def do_plot(self, dummy): + self.plot.plot_rate() def do_refresh(self, dummy): self.iview.get_model().update() def do_get_current(self, dummy): @@ -563,7 +597,8 @@ vbox.pack_end(scroll) iview.show() scroll.show() - toolbar = IMMSToolbar(iview, self.xmms) + plotter = IMMSPlot(self.model) + toolbar = IMMSToolbar(iview, self.xmms, plotter) vbox.pack_start(toolbar, expand = gtk.FALSE) toolbar.show() root.show()