#!/usr/bin/python
# M3U Reordering with a TreeView, Demo for gPodder development
# 2008-08-05; Thomas Perl <thpinfo.com>
#

import gtk
import os

class Reorder(gtk.Window):
    def __init__(self):
        gtk.Window.__init__(self, gtk.WINDOW_TOPLEVEL)
        self.set_title('gPodder M3U Reordering Demo')
        self.connect('destroy', gtk.main_quit)

        self.model = gtk.ListStore(bool, str)
        
        self.set_border_width(12)
        self.vbox = gtk.VBox(False, 6)
        self.add(self.vbox)

        self.treeview = gtk.TreeView(self.model)
        self.treeview.set_reorderable(True)
        self.vbox.pack_start(self.treeview)

        check_cell = gtk.CellRendererToggle()
        check_cell.set_property('activatable', True)
        check_cell.connect('toggled', self.cell_toggled)
        check_column = gtk.TreeViewColumn('Use', check_cell, active=0)
        self.treeview.append_column(check_column)

        filename_cell = gtk.CellRendererText()
        filename_column = gtk.TreeViewColumn('Filename', filename_cell, text=1)
        self.treeview.append_column(filename_column)

        self.buttonbox = gtk.HButtonBox()
        self.vbox.pack_start(self.buttonbox, expand=False)

        self.read_button = gtk.Button('Read M3U')
        self.read_button.connect('clicked', self.read_m3u)
        self.buttonbox.pack_start(self.read_button)

        self.write_button = gtk.Button('Write M3U')
        self.write_button.connect('clicked', self.write_m3u)
        self.buttonbox.pack_start(self.write_button)

        self.resize(400, 400)

    def cell_toggled(self, cellrenderertoggle, path):
        (treeview, model) = (self.treeview, self.model)
        it = model.get_iter(path)
        model.set_value(it, 0, not model.get_value(it, 0))

    def create_example(self, filename):
        fp = open(filename, 'w')
        fp.write('\n'.join(['one', 'two', 'three', 'four',
            'five', 'six', 'seven', 'eight']))
        fp.close()

    def read_m3u(self, widget=None, filename='~/reorder.m3u'):
        filename = os.path.expanduser(filename)
        if not os.path.exists(filename):
            self.create_example(filename)
        self.model.clear()
        for line in open(filename):
            if line.startswith('#'):
                self.model.append([False, line[1:].strip()])
            else:
                self.model.append([True, line.strip()])

    def write_m3u(self, widget=None, filename='~/reorder.m3u'):
        filename = os.path.expanduser(filename)
        fp = open(filename, 'w')
        for checked, filename in self.model:
            if checked:
                fp.write(filename+'\n')
            else:
                fp.write('#'+filename+'\n')
        fp.close()

if __name__ == '__main__':
    reorder = Reorder()
    reorder.show_all()
    gtk.main()


