Beispiel #1
0
Datei: scj.py Projekt: Ptaah/SCJ
class QtSCJ(QDialog) :
    """
    QtSCJ est une boite de dialogue contenant l'état de la progression de 
    chaque processus
    """

    def __init__(self, parent=None):
        super(QtSCJ, self).__init__(parent)
        self.dir = None
        self.jobs = { }
        self.log = [ ]
        self.mode = "ogg"
        self.filter = "*.mp3 *.ogg *.wav"
        self.modes = [ "ogg", "mp3", "wav" ]

        self.readSettings()

        self.setupUi()
        self.retranslateUi()
        self.fermer.setEnabled(True)
        
        self.connect(self.fermer,SIGNAL("clicked()"),self.close)
        self.connect(self.convertDir,SIGNAL("clicked()"),self.getDir)
        self.connect(self.convertFile,SIGNAL("clicked()"),self.getFiles)
        self.connect(self.startallbtn,SIGNAL("clicked()"),self.startAll)
        self.connect(self.delallbtn,SIGNAL("clicked()"),self.delAll)
        self.connect(self.output,SIGNAL("currentIndexChanged(const QString)"),
                     self.setMode)

    def setMode(self, mode):
        self.mode = mode
        self.writeSettings()

    def writeSettings(self):
        settings = QSettings("scj", "scj")
        settings.setValue("mode", self.mode)

    def readSettings(self):
        settings = QSettings("scj", "scj")
        self.mode = settings.value("mode", "ogg").toString()

    def setupUi(self):
        self.setObjectName("SCJ")
        self.setFixedSize(600,260)
        #self.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum)
        self.verticalLayout = QVBoxLayout(self)
        self.verticalLayout.setObjectName("verticalLayout")
        #self.infoText = QTextEdit(self)
        self.infoText = QLabel(self)
        palette = QPalette()
        brush = QBrush(QColor(245, 245, 245))
        brush.setStyle(Qt.SolidPattern)
        palette.setBrush(QPalette.Normal, QPalette.Background, brush)
        self.infoText.setPalette(palette)
        self.infoText.setAutoFillBackground(True)
        self.infoText.setFixedHeight(200)
        self.infoText.setObjectName("infoText")
        #self.infoText.setReadOnly(True)
        self.infoText.setWordWrap(True)
        self.verticalLayout.addWidget(self.infoText)
        # Manage Actions buttons
        self.horizontalLayout = QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        spacerItem = QSpacerItem(40, 20, QSizePolicy.Expanding,
                                 QSizePolicy.Minimum)
        self.horizontalLayout.addItem(spacerItem)
        ## Format de sortie
        self.outlabel = QLabel(self.trUtf8("Choix du format de destination"))
        self.horizontalLayout.addWidget(self.outlabel)
        self.output = QComboBox()
        self.output.addItems(self.modes)
        self.output.setCurrentIndex(self.output.findText(self.mode))
        self.horizontalLayout.addWidget(self.output)
        # Buttons
        self.fermer = QPushButton(self)
        self.fermer.setObjectName("fermer")
        self.horizontalLayout.addWidget(self.fermer)
        self.convertDir = QPushButton(self)
        self.convertDir.setObjectName("convertDir")
        self.horizontalLayout.addWidget(self.convertDir)
        self.convertFile = QPushButton(self)
        self.convertFile.setObjectName("convertFile")
        self.horizontalLayout.addWidget(self.convertFile)
        self.verticalLayout.addLayout(self.horizontalLayout)

        # Layout for allButtons
        self.allLayout = QHBoxLayout()
        # Add startAll bouton
        self.startallbtn = QPushButton(self)
        self.allLayout.addWidget(self.startallbtn)
        self.startallbtn.hide()
        self.verticalLayout.addLayout(self.allLayout)
        # Add delAll bouton
        self.delallbtn = QPushButton(self)
        self.allLayout.addWidget(self.delallbtn)
        self.delallbtn.hide()
        # Mode avec scroll
        self.frame = QFrame()
        self.frame.setMinimumSize(520,250)
        self.frame.setMaximumWidth(520)
        self.scroll = QScrollArea()
        self.scroll.setMinimumHeight(180)
        self.jobsLayout = QVBoxLayout(self.frame)
        self.jobsLayout.setSizeConstraint(QLayout.SetMinAndMaxSize)
        #self.jobsLayout.setSizeConstraint(QLayout.SetMinimumSize)
        #self.jobsLayout.setSizeConstraint(QLayout.SetMaximumSize)
        self.scroll.setWidget(self.frame)
        self.scroll.setWidgetResizable(False)
        self.verticalLayout.addWidget(self.scroll)
        self.scroll.hide()

        # Mode sans scroll
        #self.jobsLayout = QVBoxLayout()
        #self.verticalLayout.addLayout(self.jobsLayout)

        # Add a strech to the bottom of the window
        self.verticalLayout.insertStretch(-1)

    def retranslateUi(self):
        self.setWindowTitle(u"SCJ")
        self.infoText.setToolTip(self.trUtf8("Messages"))
        self.fermer.setToolTip(self.trUtf8("Fermer la fenetre"))
        self.fermer.setText(self.trUtf8("Fermer"))
        self.startallbtn.setToolTip(self.trUtf8("Demarrer toutes les taches"))
        self.startallbtn.setText(self.trUtf8("Tout demarrer"))
        self.delallbtn.setToolTip(self.trUtf8("Supprimmer toutes les taches"))
        self.delallbtn.setText(self.trUtf8("Tout supprimer"))
        self.convertDir.setToolTip(self.trUtf8("Convertir un repertoire"))
        self.convertDir.setText(self.trUtf8("Repertoire"))
        self.convertFile.setToolTip(self.trUtf8("Convertir un fichier"))
        self.convertFile.setText(self.trUtf8("Fichier(s)"))
        self.infoText.setText(u"<h1>%s</h1>\
                                \n%s<br/>\
                                \n%s\
                                \n<ul><li>%s</li>\
                                \n    <li>%s</li>\
                                \n    <li><b>%s</b></li>\
                                \n</ul>" %
                (self.trUtf8("BIENVENUE SUR SCJ"),
                 self.trUtf8("SCJ permet de convertir un ou plusieurs fichiers"+
                              " son vers differents formats."),
                 self.trUtf8("Il gere egalement les repertoires en convertissant"+
                              " l'ensemble des fichiers sons presents vers le"+
                              " format voulu."),
                 self.trUtf8("Choisissez le format de destination"),
                 self.trUtf8("Cliquez sur Fichier(s) ou Repertoire en fonction"+
                             " de ve que vous voulez convertir."),
                 self.trUtf8("Demarrez la conversion !")
                ))

    def addFile(self, file, createDir=False):
        file.makeAbsolute()
        if (file.suffix() != self.mode):
            job = SCJProgress( parent=None,
                                     file=file.filePath(),
                                     format=self.mode,
                                     createDir=createDir)
            if not self.jobs.get(job.output):
                self.jobs[job.output] = job
                self.jobsLayout.addLayout(self.jobs[job.output])
                self.connect(self.jobs[job.output], SIGNAL("void removed(QString)"), self.delFile)
        self.addStartAll()

    def delFile(self, job):
        j = self.jobs.pop(job)
        self.addStartAll()
        self.jobsLayout.removeItem(j)

    def getDir(self):
        self.dir = QFileDialog.getExistingDirectory(
                                parent = self,
                                caption = self.trUtf8("Choix du repertoire"),
					            directory = QDir.homePath(),
		                        options = QFileDialog.ShowDirsOnly |
                                QFileDialog.DontResolveSymlinks)
        if self.dir :
            directory = QDir(self.dir, self.filter)
            for file in directory.entryInfoList():
                self.addFile(file, createDir=True)

    def getFiles(self):
        files = QFileDialog.getOpenFileNames(
                                parent = self,
                                caption = self.trUtf8("Choix des fichiers"),
                                directory = QDir.homePath(),
                                filter = u"%s (%s)" % (self.trUtf8("Sons"),
                                                       self.filter))
        for file in files:
            self.addFile(QFileInfo(file), createDir=False)

    def addStartAll(self):
        if (len(self.jobs) > 0 ):
            self.startallbtn.setVisible(True)
            self.delallbtn.setVisible(True)
            self.scroll.setVisible(True)
            self.setFixedSize(600, 480)
        else:
            self.startallbtn.setVisible(False)
            self.delallbtn.setVisible(False)
            self.scroll.setVisible(False)
            self.setFixedSize(600, 260)
        self.updateGeometry()

    def startAll(self):
        for (key, job) in self.jobs.items():
            job.start()

    def delAll(self):
        for (key, job) in self.jobs.items():
            job.stop()
            self.delFile(key)

    def close(self):
        print u"%s" % self.trUtf8("We are stopping running jobs"),
        for (key, job) in self.jobs.items():
            job.stop()
            print ".",
        print u"%s" % self.trUtf8("Done")
        super(QtSCJ, self).close()