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

import os
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from moteur_modules_animation.mplayer import Mplayer, MetaMPlayer
import ConfigParser # pour relever les erreurs

class Base(object):
	"""#---------------------------------------
	# Module des cadres de l'onglet animation
	#---------------------------------------"""
	def __init__(self, parent):
		# Référence à la classe parente
		self.parent = parent
		# Taille du widget mplayer
		self.tailleMplayer = (240,216)
	
	#----------------
	# Meta-widgets
	#----------------
	
	def widgetSource(self, vboxParent, nomSource=u"Fichier vidéo source"):
		""" Boîte de groupe : "Fichier vidéo source" """
		self.parent.ligneEditionSource=QLineEdit()
		self.parent.ligneEditionSource.setReadOnly(True)
		
		self.parent.boutParcourir=QPushButton(_(u'Parcourir...'))
		self.parent.connect(self.parent.boutParcourir, SIGNAL("clicked()"), self.parent.ouvrirSource)
		
		self.parent.groupSource=QGroupBox(nomSource)
		hbox=QHBoxLayout(self.parent.groupSource)
		hbox.addWidget(self.parent.ligneEditionSource)
		hbox.addWidget(self.parent.boutParcourir)
		vboxParent.addWidget(self.parent.groupSource)
	
	
	def widgetReglage(self, vboxParent, nomReglage=u"Réglages", boite='vbox'):
		""" Boîte de groupe de réglage """
		self.parent.groupReglage=QGroupBox(nomReglage)
		
		if boite=='vbox':
			self.parent.layoutReglage = QVBoxLayout(self.parent.groupReglage)
		elif boite=='hbox':
			self.parent.layoutReglage = QHBoxLayout(self.parent.groupReglage)
		elif boite=='grid':
			self.parent.layoutReglage = QGridLayout(self.parent.groupReglage)
		
		vboxParent.addWidget(self.parent.groupReglage)
	
	
	def widgetBas(self, vboxParent):
		"""widgets du bas : ligne + boutons Aide et Appliquer"""
		if self.parent.idSection not in ['Animation - Convertir des Images en Video',"Animation - Convertir Une Video en Images"]:
			vboxParent.addStretch()
		
		# boutons
		txt = _(u"Aide")
		boutAide=QPushButton("  %s" %txt)
		boutAide.setIcon(QIcon("Icones/icone_aide_128.png"))
		self.parent.connect(boutAide, SIGNAL("clicked()"), self.parent.afficherAide)
		txt = _(u"Appliquer")
		self.parent.boutApp=QPushButton("  %s" %txt)
		self.parent.boutApp.setIcon(QIcon("Icones/icone_appliquer_128.png"))
		if str(self.parent.ligneEditionSource.text())=="":
			self.parent.boutApp.setEnabled(False)
		self.parent.connect(self.parent.boutApp, SIGNAL("clicked()"), self.parent.appliquer)
		
		# ligne de séparation juste au dessus des boutons
		ligne = QFrame()
		ligne.setFrameShape(QFrame.HLine)
		ligne.setFrameShadow(QFrame.Sunken)
		vboxParent.addWidget(ligne)
		vboxParent.addSpacing(-5)	# la ligne doit être plus près des boutons
		
		hbox=QHBoxLayout()
		hbox.addWidget(boutAide)
		hbox.addStretch()	# espace entre les 2 boutons
		hbox.addWidget(self.parent.boutApp)
		vboxParent.addLayout(hbox)
	
	
	def widget2Mplayer(self):
		"""Boite de dialogue de comparaison de vidéos"""
		# Dimensions des mplayer
		laTaille=(350,262)
		# Widget-mplayer avant encodage: lecture du fichier source
		chemin = self.parent.ligneEditionSource.text()
		mplayerAvantConv=Mplayer([chemin], taille=laTaille)
		# Widget-mplayer après encodage: lecture du fichier de sortie
		mplayerApresConv=Mplayer(self.parent.lstFichiersSortie, taille=laTaille)
		print "Affichage de la meta-barre mplayer"
		metaMPlayer = MetaMPlayer(mplayerAvantConv,mplayerApresConv)
		metaMPlayer.exec_()
	
	#---------------------
	# Fonctions communes
	#---------------------
	
	def repSortieProv(self):
		"""Répertoire sur lequel s'ouvrira la boite de dialogue de sauvegarde"""
		rep = os.path.dirname(str(self.parent.ligneEditionSource.text()))
		if os.path.exists(rep): return rep
		else: return '~'
	
	
	def recupSources(self, nomEntree=None):
		"""Récupère les fichiers sources vidéo via une boite de dialogue. Utilise et modifie les paramètres de configuration"""
		if self.parent.lstFichiersSource!=[] and\
			os.path.exists(os.path.dirname(self.parent.lstFichiersSource[0])):
			repEntree = os.path.dirname(self.parent.lstFichiersSource[0])
		else: 
			try:
				repEntree = self.parent.config.get('Animation','path')
			except ConfigParser.NoOptionError, e:
				repEntree = '~'
			if not QFileInfo(repEntree).exists():
				repEntree = '~'
				self.parent.config.set('Animation','path', repEntree)
		txt = _(u"Fichiers vidéo")
		if not nomEntree:
			chemin=QFileDialog.getOpenFileNames(None, _(u"Ouvrir"), os.path.expanduser(repEntree),
				"%s (*.avi *.mpg *.mpeg *.mjpeg *.flv *.mp4 *.ogg)\n*" %txt)
		else: # module séquentiel
			chemin = nomEntree
		
		if len(chemin)==0: return
		self.parent.config.set('Animation','path',os.path.dirname(str(chemin[0])))
		return chemin
	
	
	def recupSource(self, nomEntree=None):
		"""Récupère le fichier source vidéo via une boite de dialogue. Utilise et modifie les paramètres de configuration"""
		if self.parent.ligneEditionSource.text() and\
			os.path.exists(os.path.dirname(str(self.parent.ligneEditionSource.text()))):
			repEntree = os.path.dirname(str(self.parent.ligneEditionSource.text()))
		else: 
			try:
				repEntree = self.parent.config.get('Animation','path')
			except ConfigParser.NoOptionError, e:
				repEntree = '~'
			if not QFileInfo(repEntree).exists():
				repEntree = '~'
				self.parent.config.set('Animation','path', repEntree)
		if not nomEntree:
			txt = _(u"Fichiers vidéo")
			chemin=QFileDialog.getOpenFileName(None, _(u"Ouvrir"),os.path.expanduser(repEntree),
				"%s (*.avi *.mpg *.mpeg *.mjpeg *.flv *.mp4 *.ogg)\n*" %txt)
			if not chemin.isEmpty():
				chemin=str(chemin)
			else: chemin = None
		else: # module séquentiel
			chemin = nomEntree
		
		if chemin is not None:
			self.parent.config.set('Animation','path',os.path.dirname(chemin))
		
		return chemin
	
	
	def afficherAide(self,msg=u"Message d'aide"):
		""" Boîte de dialogue de l'aide"""
		message=QMessageBox()
		message.setText(msg)
		message.setWindowTitle(_(u"Aide"))
		message.setIcon(QMessageBox.Information)
		message.exec_()
	
	
	def printSection(self):
		"""Affichage dans le terminal de la section initialisée"""
		print '\n'+'-'*30+'\n| '+self.parent.idSection+'\n'+'-'*30+'\n'