#!/usr/bin/python
#####################################################################
#
#	Author : Kushal Das
#	Copyright (c)  2006 Kushal Das
#	kushal@fedoraproject.org
#	
#	Copyright: See COPYING file that comes with this distribution
#
#
#####################################################################
from Kphotobymail.kphotobymailUI import kphotobymailUI
from qt import *
from qttable import QTableItem
from Kphotobymail.kphotobymail_con import kphotobymail_con
from Kphotobymail.aboutui import aboutUI
from Kphotobymail.mail import kdMail
import cPickle as p
import sys
import os
import Kphotobymail.EXIF as EXIF


class kphotobymailApp(QApplication):
	"""The main QApplication class
	"""
	def __init__(self,args):
		QApplication.__init__(self,args)
		self.maindialog=Kphotobymail(None,self)
		self.setMainWidget(self.maindialog)
		self.maindialog.show()
		self.exec_loop()
		

class Kphotobymail(kphotobymailUI):
		""" The widget class
		"""
		def __init__(self,parent,qApp):
			kphotobymailUI.__init__(self,parent)
			self.setFixedSize(680,530)
			#Check if configuration directory exists. If not, create it.
			self.configPrefix = os.path.join(os.path.expanduser('~'), ".kphotobymail")
			if not os.path.exists(self.configPrefix):
				os.mkdir(self.configPrefix)
				tempStr = 'cp /etc/kphotobymail.data ' + self.configPrefix
				os.popen(tempStr)
			self.stB = self.statusBar()
			self.progressBar=QProgressBar()
			self.stB.addWidget(self.progressBar,0,True)
			self.progressBar.setFixedHeight(12)
			self.qApp = qApp
			self.currentPath = os.path.expanduser('~')
			self.fileDialog = QFileDialog(self.currentPath)
			self.fileDialog.setPreviewMode(QFileDialog.Contents)
			

			
		def select(self):
			""" It opens a select Box & selects the files
			"""
			self.fileDialog.setDir(self.currentPath)
			names = self.fileDialog.getOpenFileNames("Images (*.png *.jpg *.JPG)",'',self,"Select pics","Select Pics")
			self.currentPath = str(self.fileDialog.dirPath())
			for name in names:
				i = self.fileTable.numRows()
				self.fileTable.insertRows(i)
				self.fileTable.setItem(i,0,QTableItem(self.fileTable,QTableItem.Never,name))

		def upload(self):
			"""It will create a kdMail object & passes the configuration info along
			with the file names,tiles,descriptions.
			"""
			self.fileTable.setReadOnly(True)
			f = file(self.configPrefix+'/kphotobymail.data')
			data = p.load(f)
			filenumbers = self.fileTable.numRows()
			if filenumbers == 0:
				self.message("Select File(s) first")
				return
			self.uploadBttn.setEnabled(0)
			self.files = []
			for i in range(0,filenumbers):
				entry = []
				entry.append( str(self.fileTable.text(i,0)))
				entry.append( str(self.fileTable.text(i,1)))
				entry.append( str(self.fileTable.text(i,2)))
				self.files.append(entry)
			self.fileTable.setReadOnly(False)
			km = kdMail(self.files,data,self)
			km.start()
				
		def picChange(self):
			""" To change the pictures as the user clicks different rows
			"""
			i = self.fileTable.currentRow()
			self.tagClear()
			if i != -1: 
				qm = QImage(self.fileTable.text(i,0))
				qm = qm.scale(250,190,QImage.ScaleMin)
				qx = QPixmap(qm)
				self.picLabel.setFixedSize(qx.size())
				self.picLabel.setPixmap(qx)
				self.getExif(self.fileTable.text(i,0))
		
		def rowDel(self):
			""" When user double clicks it will delete a row
			"""
			i = self.fileTable.currentRow()
			self.fileTable.removeRow(i)
			self.picLabel.setFixedSize(QSize(250,190))
			self.picLabel.setPixmap(self.image0)
			self.tagClear()
			
		def config(self):
			"""Open configuration dialog
			"""
			self.con = kphotobymail_con()
			self.con.show()

		def about(self):
			"""Open about dialog
			"""
			self.abt = aboutUI()
			self.abt.show()
		
		def clearAll(self):
			"""Clear all Selected files"""
			for i in range(0,self.fileTable.numRows()):
				self.fileTable.removeRow(0)
			self.progressBar.reset()
			self.picLabel.setFixedSize(QSize(250,190))
			self.picLabel.setPixmap(self.image0)
			self.tagClear()
				
		def message(self,mes):
			"""Show error message"""
			self.stB.message(mes,5000)
		
		def progress(self,pro):
			"""Update the progressBar"""
			self.progressBar.setProgress(pro)
			
		def getExif(self,file):
			"""Get EXIF data"""
			try:
				f = open(str(file),'rb')
				tags = EXIF.process_file(f)
				f.close()
				self.makeLabel.setText(str(tags['Image Make']))
				self.modelLabel.setText(str(tags['Image Model']))
				self.xresLabel.setText(str(tags['Image XResolution']))
				self.yresLabel.setText(str(tags['Image YResolution']))
				self.orientationLabel.setText(str(tags['Image Orientation']))
				self.datetimeLabel.setText(str(tags['Image DateTime']))
				self.isoLabel.setText(str(tags['EXIF ISOSpeedRatings']))
				self.exposuretimeLabel.setText(str(tags['EXIF ExposureTime'])+' sec.')
				temp = str(tags['EXIF FNumber'])
				tempAt = temp.find('/')
				num1 = float(temp[:tempAt])
				num2 = float(temp[tempAt+1:])
				s = "%.1f" % (num1/num2)
				self.fnumberLabel.setText('f/'+s)
				self.maxapertureLabel.setText(str(tags['EXIF MaxApertureValue']))
				temp = str(tags['EXIF FocalLength'])
				tempAt = temp.find('/')
				num1 = float(temp[:tempAt])
				num2 = float(temp[tempAt+1:])
				s = "%.1f" % (num1/num2)
				self.focallengthLabel.setText(s+' mm.')
			except:
				print "No problem"
				

		def tagClear(self):
			self.makeLabel.setText('')
			self.modelLabel.setText('')
			self.xresLabel.setText('')
			self.yresLabel.setText('')
			self.orientationLabel.setText('')
			self.datetimeLabel.setText('')
			self.isoLabel.setText('')
			self.exposuretimeLabel.setText('')
			self.fnumberLabel.setText('')
			self.maxapertureLabel.setText('')
			self.focallengthLabel.setText('')

if __name__=="__main__":
	kApp=kphotobymailApp(sys.argv)
