#!/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 from kdecore import * from kdeui import * from dcopext import DCOPClient, DCOPApp from dcopexport import DCOPExObj 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) self.systray = KSystemTray(parent) self.systray.setPixmap(QPixmap(UserIcon(self.icon))) self.connect(self.systray, SIGNAL("quitSelected()"), self.quit) 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)