# -*- coding: utf-8 -*-
"""
Boîte de dialogue pour sélection des chansons.

$Id$
$URL$
"""

from pgu.gui import FileDialog
import os
from xml.etree import ElementTree

class FileOpenDialog(FileDialog):
    
    
    
    def __init__(self, path):
        FileDialog.__init__(self, 
                            title_txt="Ouvrir une chanson",
                            button_txt="Ouvrir",
                            path=path,
                            )
    
    def _list_dir_(self):
        self.input_dir.value = self.curdir
        self.input_dir.pos = len(self.curdir)
        self.input_dir.vpos = 0
        dirs = []
        files = []
        try:
            for i in os.listdir(self.curdir):
                if i.startswith('.') : continue
                if os.path.isdir(os.path.join(self.curdir, i)): dirs.append(i)
                else: files.append(i)
        except:
            self.input_file.value = "Dossier innacessible !"

        dirs.sort()
        dirs.insert(0, '..')

        files.sort()
        for i in dirs:
            self.list.add(i, image=self.dir_img, value=i)

        for i in files:
            if not i.endswith('.xml') : 
                continue
            filepath = os.path.join(self.curdir, i)
            self.list.add(FileOpenDialog.getSongTitle(filepath), value=i)
 
        self.list.set_vertical_scroll(0)
    
    @staticmethod
    def getSongTitle(file) :
        it = ElementTree.iterparse(file, ['start', 'end'])
        creditFound = False
        
        for evt, el in it :
            if el.tag == 'credit' :
                creditFound = True
            if el.tag == 'credit-words' and creditFound:
                return el.text.encode('iso-8859-1')
            if el.tag == 'part-list' :
                # plus de chance de trouver un titre
                return os.path.basename(file)