[svn] Use Python-Gnuplot instead of immsplot. immsview
authorfabien
Sat, 07 Feb 2004 10:58:54 -0500
branchimmsview
changeset 28 7f61cb2ddb7b
parent 27 9ac26f2f83e1
child 29 09fc77396ac9
[svn] Use Python-Gnuplot instead of immsplot.
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()