#!/usr/bin/python
# -*- coding: Utf-8 -*-

from PyQt4.QtCore import *
from PyQt4.QtGui import *
from gui_modules_animation.animation_base import Base
from moteur_modules_animation.mplayer import Mplayer

class Base_EncodageFiltre(QWidget):
	# -------------------------------------------------------------------
	# Cadre accueillant les widgets de : Animation >> Encodage
	# -------------------------------------------------------------------
	def __init__(self, parent):
		QWidget.__init__(self)
		
		# -------------------------------
		# Parametres généraux du widget
		# -------------------------------
		self.base = Base(self) # module de animation
		self.base.printSection()
		# tout sera mis dans une boîte verticale
		vbox=QVBoxLayout(self)
		
		# -------------------------------------------------------------------
		# Boîte de groupe : "Fichier vidéo source"
		# -------------------------------------------------------------------
		self.base.widgetSource(vbox)
		
		# -------------------------------------------------------------------
		# Boîte de groupe "Réglage de sortie de l'encodage"
		# -------------------------------------------------------------------
		
		#=== Création de la boite de groupe de réglage (contenant la boite self.layoutReglage) ===#
		self.base.widgetReglage(vbox, boite='vbox')
		
		#=== Widget qui seront inclus dans la boite de réglage ===#
		# Boite de combo
		self.combo=QComboBox() 	# Le self est nécessaire pour récupérer l'identifiant
					# de l'entrée de la boite de combo
		
		# Insertion des codecs de compression dans la combo box
		# Rq: listeCombo est de la forme: [(clé QVariant, texte à afficher,...), ...]
		for i in self.listeCombo: # self obligatoire pour le module séquentiel
                	self.combo.addItem(i[1],QVariant(i[0]))
		
		self.connect(self.combo,SIGNAL("currentIndexChanged(int)"),self.changerItemQStacked)
		
		# Ajout des widget dans la boite de groupe
		# self.layoutCombo étant la boite appartenant à la boite de groupe
		self.layoutReglage.addWidget(self.combo)
		#self.layoutReglage.addSpacing(10)
		
		# Widgets intégrés à la boîte de groupe "Réglage de sortie de l'encodage".
		# La boîte de combo définie ci-dessus 'sélectionne' ceux qui vont s'afficher
		# -> utilisation d'un stacked
		self.layoutReglage.addWidget(self.stacked)
		
		# Chargement du paramètre de configuration de choix codec
		idCombo = self.config.get(self.idSection,'codec')
		self.chargerItemCombo(idCombo)
		
		# ----------------------------
		# Boite de groupe de mplayer
		# ----------------------------
		group=QGroupBox("")
		vboxMplayer = QVBoxLayout(group)
		self.mplayer=Mplayer(taille=self.base.tailleMplayer)
		self.mplayer.listeVideos = [self.ligneEditionSource.text()]
		self.mplayer.setEnabled(False)
		hbox = QHBoxLayout()
		hbox.addStretch()
		hbox.addWidget(self.mplayer)
		hbox.addStretch()
		vboxMplayer.addLayout(hbox)
		
		self.radioSource = QRadioButton(_(u"vidéo(s) source(s)"))
		self.radioSource.setChecked(True)
		self.radioSource.setEnabled(False)
		self.connect(self.radioSource, SIGNAL("toggled(bool)"), self.fctRadioSource)
		self.radioConvert = QRadioButton(_(u"vidéo convertie"))
		self.radioConvert.setEnabled(False)
		self.connect(self.radioConvert, SIGNAL("toggled(bool)"), self.fctRadioConvert)
		self.boutCompare = QPushButton(_(u"Comparateur de vidéos"))
		self.boutCompare.setEnabled(False)
		self.connect(self.boutCompare, SIGNAL("clicked()"), self.base.widget2Mplayer)
		hbox = QHBoxLayout()
		hbox.addWidget(self.radioSource)
		hbox.addWidget(self.radioConvert)
		hbox.addWidget(self.boutCompare)
		hbox.setAlignment(Qt.AlignHCenter)
		vboxMplayer.addLayout(hbox)
		
		group.setAlignment(Qt.AlignHCenter)
		vbox.addWidget(group)
		
		# -------------------------------------------------------------------
		# widgets du bas : ligne + boutons Aide et Appliquer
		# -------------------------------------------------------------------
		self.base.widgetBas(vbox)
		
		# affichage de la boîte principale
		self.setLayout(vbox)
	
	
	def chargerItemCombo(self, idCombo):
		"""Charger un item particulier de la boite de combo"""
		try:
			indice = 0 # indice de la ligne de listeCombo correspondant au type d'ordre
			for i in self.listeCombo:
				if i[0]!=idCombo:
					indice += 1
				else:
					break
			self.combo.setCurrentIndex(indice)
		except:
			self.combo.setCurrentIndex(0)
	
	
	def changerItemQStacked(self, i):
		""" L'entrée sélectionnée de la boîte de combo modifie le QWidget de réglage du codec associée """
		idCodec=str(self.combo.itemData(i).toStringList()[0])
		print "idCodec", idCodec, type(idCodec)
		
		for k in self.listeCombo:
			if k[0]==idCodec:
				self.stacked.setCurrentIndex(k[2])
		
		self.config.set(self.idSection,'codec', idCodec)
	
	
	def fctRadioSource(self, bool=None):
		""""Communique la vidéo appropriée à mplayer"""
		if bool: self.mplayer.listeVideos = [self.ligneEditionSource.text()]
	
	
	def fctRadioConvert(self, bool=None):
		""""Communique la vidéo appropriée à mplayer"""
		if bool: self.mplayer.listeVideos = self.lstFichiersSortie
	
	
	def ouvrirSource(self, nomEntree=None):
		"""Récupération du chemin de la vidéo sélectionnée et activation de certains widgets"""
		
		# Récupération du chemin de la vidéo
		chemin = self.base.recupSource(nomEntree)
		if not chemin: return
		print "chemin vidéo d'entrée:", chemin, type(chemin)
		
		# Affichage du chemin + nom de fichier dans la ligne d'édition
		self.ligneEditionSource.setText(chemin)
		
		self.boutApp.setEnabled(True)
		
		self.mplayer.setEnabled(True)
		self.mplayer.listeVideos = [chemin]
		
		self.radioSource.setChecked(True)
		self.radioSource.setEnabled(False)
		self.radioConvert.setEnabled(False)
		self.boutCompare.setEnabled(False)
	
	
	def sequentiel(self, entree, sortie, clef=None, ouvert=0):
		"""Utile dans le module du même nom. Applique les opérations associées à l'identifiant donné en 3ème argument. Retourne le vrai nom du fichier de sortie"""
		self.chargerItemCombo(clef)
		self.ouvrirSource(entree)
		return self.appliquer(sortie, ouvert)
	
	
	def sequentielReglage(self, clef):
		"""Utile dans le module du même nom. Récupère le widget de réglage associé à l'identifiant donné en 1er argument. Retourne l'instance du widget de réglage (avec quelques modifications)"""
		for k in self.listeCombo:
			if k[0]==clef:
				self.stacked.setCurrentIndex(k[2])
				titrePartielReglage = k[1]
		self.combo.hide()
		txt = _(u"Réglage")
		self.groupReglage.setTitle(txt+' : '+titrePartielReglage)
		return self.groupReglage