
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4 import QtDesigner
import os, shutil

from Ui_fileSelectorWidget import *

class fileSelectorWidget(QWidget, Ui_fileSelectorWidget):

    __pyqtSignals__ = ("fileChanged(QString)", "DescriptionChanged(QString)", "LongFiletypeChanged(QString)", "ShortFiletypeChanged(QString)")

    def __init__(self,  parent = None):
        super(fileSelectorWidget,  self).__init__(parent)
        self.setupUi(self)
        self.settings=None
        self.settingsvar=None
        self.filename=None
        self.LongFiletype=""
        self.Description=""
        self.ShortFiletype=""
    
    def setDescription(self, descr):
        if descr != self.Description:
            self.Description=descr
            self.descriptionLabel.setText(self.Description)
            self.emit(QtCore.SIGNAL("DescriptionChanged(QString)"), self.Description)
            self.update()
        
    def setLongFiletype(self, long):
        if long != self.LongFiletype:
            self.LongFiletype=long
            self.emit(QtCore.SIGNAL("LongFiletypeChanged(QString)"), self.LongFiletype)
        
    def setShortFiletype(self, short):
        if short != self.ShortFiletype:
            self.ShortFiletype=short
            self.emit(QtCore.SIGNAL("ShortFiletypeChanged(QString)"), self.ShortFiletype)
    
    def getDescription(self):
        return self.Description
    def getLongFiletype(self):
        return self.LongFiletype
    def getShortFiletype(self):
        return self.ShortFiletype
    
    def resetDescription(self):
        if self.Description!="":
            self.setDescription("")
    
    def resetLongFiletype(self):
        if self.LongFiletype!="":
            self.setLongFiletype("")
            
    def resetShortFiletype(self):
        if self.ShortFiletype!="":
            self.setShortFiletype("")
        
    def setSettings(self, settings, variable):
        self.settings = settings
        self.settingsvar = variable
        
    @pyqtSignature("")
    def on_browsePushButton_clicked(self):
        if self.filename==None and self.settings != None:
            lastdir=self.settings.value(self.settingsvar).toString()
        elif self.filename==None:
            lastdir=""
        else:
            lastdir=self.filename
        fname=QFileDialog.getOpenFileName(\
            None,
            self.trUtf8("Select %s File"%self.longFiletype),
            lastdir,
            self.trUtf8("*.%s"%shortFiletype),
            None)
        
        self.fileLineEdit.setText(filename)
    
    @pyqtSignature("")
    def on_fileLineEdit_editingFinished(self):
        self.checkFileInLineEdit()
        
    def checkFileInLineEdit(self):
        print "Checking File"
        fname=str(self.fileLineEdit.text())
        if fname == "":
            return
        if checkIfFileOrSymlink(fname):
            self.filename=fname
            pathname = os.path.dirname(str(filename))
            if self.settings!=None:
                self.settings.setValue(self.settingsvar, QVariant(QString(pathname)))
            self.emit(QtCore.SIGNAL("fileChanged(QString)"), QString(self.filename))
                
            return
        
        QMessageBox.warning(None,
            self.trUtf8("File Error"),
            self.trUtf8("""This is not a file or symlink or it is not readable by this user."""),
            QMessageBox.StandardButtons(\
            QMessageBox.Ok))
        
        self.fileLineEdit.setText("")
        
    description = QtCore.pyqtProperty("QString", getDescription, setDescription, resetDescription)
    longFiletype = QtCore.pyqtProperty("QString", getLongFiletype, setLongFiletype, resetLongFiletype)
    shortFiletype = QtCore.pyqtProperty("QString", getShortFiletype, setShortFiletype, resetShortFiletype)
    

def checkIfFileOrSymlink(filename):
    if os.path.isfile(filename) or os.path.islink(filename):
        return True
    return False
    
