Esempio n. 1
0
class FaceMap(QtGui.QMainWindow):    
    def __init__(self, directory, deckName):
        super(FaceMap, self).__init__()
        self.dir = directory
        self.deckName = deckName
        self.statusBar()
        self.ankiWriteSignal = None
        # Use seconds since 1970 to uniquely identify image folder and images
        self.imageSetId = str(int(time.time()))
        self.initUI()
    
    # Make a drop-enabled window with a custom toolbar
    # along the left hand side   
    def initUI(self):
        self.setGeometry(100, 100, 600, 400)
        self.setWindowTitle('FaceMap - Deck: ' + self.deckName)
        self.addCustomToolBar()
        self.addCentralWidget()
        self.statusBar().showMessage("Ready")
        self.show()
        

    # Add a left-hand-side toolbar for the face_map actions
    def addCustomToolBar(self):
        iconsDir = os.path.join(self.dir, 'icons')
        newPersonIcon = os.path.join(iconsDir, 'new_person.jpg')
        newPerson = QtGui.QAction(QtGui.QIcon(newPersonIcon), 'New', self)
        newPerson.setShortcut('Ctrl+N')
        newPerson.triggered.connect(self.chooseFiles)
        
        saveImageIcon = os.path.join(iconsDir, 'save_pictures.jpg')
        saveImage = QtGui.QAction(QtGui.QIcon(saveImageIcon), 'Save', self)
        saveImage.setShortcut('Ctrl+S')
        saveImage.triggered.connect(self.saveImage)
        
        self.toolbar = QtGui.QToolBar()
        self.toolbar.addAction(newPerson)
        self.toolbar.addAction(saveImage)
        self.addToolBar(QtCore.Qt.LeftToolBarArea, self.toolbar)
    
    # Add a central widget with no (default absolute) layout
    def addCentralWidget(self):
        self.centralWidget = CentralWidget(self, self.imageSetId)
        self.setCentralWidget(self.centralWidget)
        
    
    # Create a file-chooser dialog to pick images
    def chooseFiles(self):
        self.statusBar().showMessage("Processing...")
        fnames = QtGui.QFileDialog.getOpenFileNames(self, 'Open file', 
                '/home', 'Image Files (*.png *.jpg *.bmp, *gif)')
        for fname in fnames:
            if fname:
                self.centralWidget.addDraggableFrame(fname)
        self.statusBar().showMessage("Ready")
                
    # Save images to the media folder
    # If we are running within Anki, signal to AnkiWriter
    # to create cards from the images
    def saveImage(self):
        self.statusBar().showMessage("Processing...")
        self.centralWidget.createQuestionAnswerImages(self.dir)
        self.statusBar().showMessage("Finished")
        if self.ankiWriteSignal:
            self.ankiWriteSignal.emit()
        self.popupGoodbyeDialog()
                  
    # Set the signal to be called once writing of images finishes
    def setAnkiWriteSignal(self, signal):
        self.ankiWriteSignal = signal
        
    # Get the imageSetId - the number identifying the folder and the images created
    def getImageSetId(self):
        return self.imageSetId
    
    # Popup a dialog to say the window will close
    def popupGoodbyeDialog(self):
        reply = QtGui.QMessageBox.question(self, 'Success',
    "FaceMap has successfully\ncompleted. Goodbye!", QtGui.QMessageBox.Ok, QtGui.QMessageBox.Ok)
        self.close()