Esempio n. 1
0
 def __init__(self):
     super().__init__()
     self.ui = Ui_MainWindow()
     self.ui.setupUi(self)
     self.ui.TryPromodoro.triggered.connect(self.call_Promodoro)
     self.ui.actionChoose_Epub_File.triggered.connect(self.call_epub_converter)
     self.ui.actionChoose_Epub_File.triggered.connect(self.call_epub_converter)
     self.ui.actionHelp_Book.triggered.connect(self.call_qtAbout)
Esempio n. 2
0
 def __init__(self):
     super(mywindow, self).__init__()
     self.ui = Ui_MainWindow()
     self.ui.setupUi(self)
     self.ui.D0_text.setText('0')
     self.ui.D90_text.setText('0')
     self.ui.D180_text.setText('0')
     self.ui.D270_text.setText('0')
     self.ui.operation.clicked.connect(self.operation)
Esempio n. 3
0
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        
        # This is always the same
        self.ui=Ui_MainWindow()
        self.ui.setupUi(self)

        self.mediaObject=None

        # Enable-disable buttons as needed
        self.timer=QtCore.QTimer()
        self.ui.centralwidget.adjustSize()
        self.curClip=None

	self.message=QtGui.QLabel()

	self.progress=QtGui.QProgressBar()
	self.progress.setMaximum(100)
	#self.progress.setPercentageVisible(True)
	self.statusBar().addWidget(self.message,1)
	self.statusBar().addWidget(self.progress,0)
        self.progress.hide()
        
        self.projectName=None
        self.setWindowFilePath('None')
        
        self.ui.assets.addAction(self.ui.actionRemove_Asset)
        self.ui.output.addAction(self.ui.actionRemove_Asset)
                
        # Restore window state
        settings=QtCore.QSettings("ralsina","dieschere")
        self.restoreGeometry(settings.value("geometry").toByteArray());
        self.restoreState(settings.value("state").toByteArray(),UI_VERSION);
Esempio n. 4
0
class AppWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.TryPromodoro.triggered.connect(self.call_Promodoro)
        self.ui.actionChoose_Epub_File.triggered.connect(self.call_epub_converter)
        self.ui.actionChoose_Epub_File.triggered.connect(self.call_epub_converter)
        self.ui.actionHelp_Book.triggered.connect(self.call_qtAbout)


    def call_Promodoro(self):
        self.promo = Promodoro.MyTimer()


    def call_epub_converter(self):
        self.converter = DragDrop.dropArea()

    def call_qtAbout(self):
        print('about QT')
        app.aboutQt()
Esempio n. 5
0
class mywindow(QtWidgets.QMainWindow):
    def __init__(self):
        super(mywindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.D0_text.setText('0')
        self.ui.D90_text.setText('0')
        self.ui.D180_text.setText('0')
        self.ui.D270_text.setText('0')
        self.ui.operation.clicked.connect(self.operation)
    def operation(self):
        I0 = float(self.ui.D0_text.toPlainText())
        I90 =float(self.ui.D90_text.toPlainText())
        I180 =float(self.ui.D180_text.toPlainText())
        I270 =float(self.ui.D270_text.toPlainText())
        
        sample = four_step(I0,I90,I180,I270)
        delta = str(round(sample.delta(),2))+'°'
        psi = str(round(sample.psi(),2))+'°'
        self.ui.deltaValue.setText(delta)
        self.ui.psiValue.setText(psi)
Esempio n. 6
0
    def __init__(self):
        super(MainWindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.lineEdit_roy1.setValidator(QtGui.QDoubleValidator())
        self.ui.lineEdit_roy2.setValidator(QtGui.QDoubleValidator())
        self.ui.lineEdit_roy3.setValidator(QtGui.QDoubleValidator())

        self.ui.lineEdit_bookname.editingFinished.connect(
            lambda: contract.setbookname(self.ui.lineEdit_bookname.text()))
        self.ui.lineEdit_unit.editingFinished.connect(
            lambda: contract.setunit(self.ui.lineEdit_unit.text()))
        self.ui.lineEdit_area.editingFinished.connect(
            lambda: contract.setauthorizedarea(self.ui.lineEdit_area.text()))
        self.ui.lineEdit_agent.editingFinished.connect(
            lambda: contract.setagent(self.ui.lineEdit_agent.text()))
        self.ui.lineEdit_author.editingFinished.connect(
            lambda: contract.setauthor(self.ui.lineEdit_author.text()))
        self.ui.comboBox_interval.activated.connect(
            lambda: contract.setclacinterval(self.ui.comboBox_interval.
                                             currentIndex()))
        self.ui.dateEdit_startdate.dateChanged.connect(
            lambda: contract.setstartdate(self.ui.dateEdit_startdate.date().
                                          toString("yyyy-MM-dd")))
        self.ui.dateEdit_enddate.dateChanged.connect(
            lambda: contract.setenddate(self.ui.dateEdit_enddate.date().
                                        toString("yyyy-MM-dd")))
        self.ui.lineEdit_roy1.editingFinished.connect(
            lambda: contract.setroalty1(float(self.ui.lineEdit_roy1.text())))
        self.ui.lineEdit_roy2.editingFinished.connect(
            lambda: contract.setroalty2(float(self.ui.lineEdit_roy2.text())))
        self.ui.lineEdit_roy3.editingFinished.connect(
            lambda: contract.setroalty3(float(self.ui.lineEdit_roy3.text())))
        self.ui.lineEdit_roy4.editingFinished.connect(
            lambda: contract.setroalty4(self.ui.lineEdit_roy4.text()))

        self.ui.pushButton_insert.clicked.connect(
            lambda: contract.sql_insert())
        self.ui.pushButton_search.clicked.connect(self.loadData)
Esempio n. 7
0
class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.lineEdit_roy1.setValidator(QtGui.QDoubleValidator())
        self.ui.lineEdit_roy2.setValidator(QtGui.QDoubleValidator())
        self.ui.lineEdit_roy3.setValidator(QtGui.QDoubleValidator())

        self.ui.lineEdit_bookname.editingFinished.connect(
            lambda: contract.setbookname(self.ui.lineEdit_bookname.text()))
        self.ui.lineEdit_unit.editingFinished.connect(
            lambda: contract.setunit(self.ui.lineEdit_unit.text()))
        self.ui.lineEdit_area.editingFinished.connect(
            lambda: contract.setauthorizedarea(self.ui.lineEdit_area.text()))
        self.ui.lineEdit_agent.editingFinished.connect(
            lambda: contract.setagent(self.ui.lineEdit_agent.text()))
        self.ui.lineEdit_author.editingFinished.connect(
            lambda: contract.setauthor(self.ui.lineEdit_author.text()))
        self.ui.comboBox_interval.activated.connect(
            lambda: contract.setclacinterval(self.ui.comboBox_interval.
                                             currentIndex()))
        self.ui.dateEdit_startdate.dateChanged.connect(
            lambda: contract.setstartdate(self.ui.dateEdit_startdate.date().
                                          toString("yyyy-MM-dd")))
        self.ui.dateEdit_enddate.dateChanged.connect(
            lambda: contract.setenddate(self.ui.dateEdit_enddate.date().
                                        toString("yyyy-MM-dd")))
        self.ui.lineEdit_roy1.editingFinished.connect(
            lambda: contract.setroalty1(float(self.ui.lineEdit_roy1.text())))
        self.ui.lineEdit_roy2.editingFinished.connect(
            lambda: contract.setroalty2(float(self.ui.lineEdit_roy2.text())))
        self.ui.lineEdit_roy3.editingFinished.connect(
            lambda: contract.setroalty3(float(self.ui.lineEdit_roy3.text())))
        self.ui.lineEdit_roy4.editingFinished.connect(
            lambda: contract.setroalty4(self.ui.lineEdit_roy4.text()))

        self.ui.pushButton_insert.clicked.connect(
            lambda: contract.sql_insert())
        self.ui.pushButton_search.clicked.connect(self.loadData)
        #self.ui.pushButton_insert.clicked.connect(self.sorttable)

        #self.ui.tableWidget.horizontalHeader().sectionClicked.connect(your_callable)
        #self.ui.tableWidget.cellClicked(0,1).connect(lambda:print("{} {}".format(self.ui.tableWidget.currentRow(),self.ui.tableWidget.currentColumn())))
        #self.ui.tableWidget.horizontalHeaderItem.cellClicked().connect(self.sorttable)

    def loadData(self):
        sql_search = contract.makesql()
        sql = "SELECT * FROM `contract` WHERE `bookname` LIKE '{}' and `unit` LIKE '{}' and `authorized_area` LIKE  '{}'\
            and `agent` LIKE '{}' and `author` LIKE '{}' and `calc_interval` LIKE '{}' and `start_date` LIKE '{}'\
            and `end_date` LIKE '{}' and `royalty1` LIKE '{}' and `royalty2` LIKE '{}' and `royalty3` LIKE '{}' and `royalty4` LIKE '{}'"\
            .format(sql_search[0],sql_search[1],sql_search[2],sql_search[3],sql_search[4],sql_search[5],sql_search[6],sql_search[7],sql_search[8],sql_search[9],sql_search[10],sql_search[11])
        print(sql)
        data, col_title = sqlsearch(sql)
        if (data == False and col_title == False):
            return
        for i in range(len(data)):
            data[i] = data[i][1:]
        collist = []
        for i in range(1, len(col_title)):
            collist.append(col_title[i][0])
        self.ui.tableWidget.setHorizontalHeaderLabels(collist)
        self.ui.tableWidget.setColumnCount(len(collist))
        self.ui.tableWidget.setRowCount(0)

        for row in data:
            rowPosition = self.ui.tableWidget.rowCount()
            self.ui.tableWidget.insertRow(rowPosition)
            for i, column in enumerate(row):
                self.ui.tableWidget.setItem(
                    rowPosition, i, QtWidgets.QTableWidgetItem(str(column)))
        self.ui.tableWidget.resizeColumnsToContents()

    def clearlineedit(self):
        self.ui.lineEdit_bookname.setText('')
        self.ui.lineEdit_unit.setText('')
        self.ui.lineEdit_area.setText('')
        self.ui.lineEdit_agent.setText('')
        self.ui.lineEdit_author.setText('')
        self.ui.comboBox_interval.setCurrentIndex(0)
        self.ui.dateEdit_startdate.setDate(QtCore.QDate.currentDate())
        self.ui.dateEdit_enddate.setDate(QtCore.QDate.currentDate())
        self.ui.lineEdit_roy1.setText('')
        self.ui.lineEdit_roy2.setText('')
        self.ui.lineEdit_roy3.setText('')
        self.ui.lineEdit_roy4.setText('')

    def sorttable(self):
        self.ui.tableWidget.setSortingEnabled(True)
        self.ui.tableWidget.sortByColumn(0, QtCore.Qt.AscendingOrder)
Esempio n. 8
0
    def __init__(self):
        QtGui.QMainWindow.__init__(self)

        self.doctree=None
        self.lineMarks={}

        # We put things we want rendered here
        self.render_queue = Queue()
        # We get things rendered back
        self.pdf_queue = Queue()
        # We get doctrees for the outline viewer
        self.doctree_queue = Queue()

        print('Starting background renderer...', end=' ')
        self.renderProcess=Process(target = renderQueue,
            args=(self.render_queue, self.pdf_queue, self.doctree_queue))
        self.renderProcess.daemon=True
        self.renderProcess.start()
        print('DONE')

        # This is always the same
        self.ui=Ui_MainWindow()
        self.ui.setupUi(self)

        # Adjust column widths in the structure tree
        self.ui.tree.header().setStretchLastSection(False)
        self.ui.tree.header().setResizeMode(0, QtGui.QHeaderView.Stretch)
        self.ui.tree.header().setResizeMode(1, QtGui.QHeaderView.ResizeToContents)

        self.pdf=PDFWidget()

        self.ui.pageNum = QtGui.QSpinBox()
        self.ui.pageNum.setMinimum(1)
        self.ui.pageNum.setValue(1)
        self.connect(self.pdf,QtCore.SIGNAL('pageCount'),
            self.ui.pageNum.setMaximum)
        self.connect(self.pdf,QtCore.SIGNAL('pageChanged'),
            self.ui.pageNum.setValue)
        self.connect(self.ui.pageNum,QtCore.SIGNAL('valueChanged(int)'),
            self.pdf.gotoPage)

        self.ui.actionShow_ToolBar=self.ui.toolBar.toggleViewAction()
        self.ui.actionShow_ToolBar.setText("Show Main Toolbar")
        self.ui.menuView.addAction(self.ui.actionShow_ToolBar)

        self.ui.pdfbar.addAction(self.pdf.ui.previous)
        self.ui.pdfbar.addWidget(self.ui.pageNum)
        self.ui.pdfbar.addAction(self.pdf.ui.__next__)
        self.ui.pdfbar.addSeparator()
        self.ui.pdfbar.addAction(self.pdf.ui.zoomin)
        self.ui.pdfbar.addAction(self.pdf.ui.zoomout)
        self.ui.actionShow_PDFBar=self.ui.pdfbar.toggleViewAction()
        self.ui.actionShow_PDFBar.setText("Show PDF Toolbar")
        self.ui.menuView.addAction(self.ui.actionShow_PDFBar)

        self.ui.dockLayout.addWidget(self.ui.pdfbar)
        self.ui.dockLayout.addWidget(self.pdf)
        self.ui.dock.hide()
        self.ui.actionShow_PDF=self.ui.dock.toggleViewAction()
        self.ui.actionShow_PDF.setText('Show Preview')
        self.ui.menuView.addAction(self.ui.actionShow_PDF)
        self.ui.actionShow_Structure=self.ui.structure.toggleViewAction()
        self.ui.actionShow_Structure.setText('Show Document Outline')
        self.ui.menuView.addAction(self.ui.actionShow_Structure)

        self.text_md5=''
        self.style_md5=''

        self.hl1 = Highlighter(self.ui.text.document(),'rest')
        self.hl2 = Highlighter(self.ui.style.document(),'javascript')

        self.editorPos=QtGui.QLabel()
        self.ui.statusBar.addWidget(self.editorPos)
        self.editorPos.show()

        self.statusMessage=QtGui.QLabel()
        self.ui.statusBar.addWidget(self.statusMessage)
        self.statusMessage.show()

        self.on_text_cursorPositionChanged()
        self.on_actionRender_triggered()

        # Connect editing actions to the editors
        self.ui.text.undoAvailable.connect(self.ui.actionUndo1.setEnabled)
        self.ui.actionUndo1.triggered.connect(self.ui.text.undo)
        self.ui.text.redoAvailable.connect(self.ui.actionRedo1.setEnabled)
        self.ui.actionRedo1.triggered.connect(self.ui.text.redo)

        self.ui.text.copyAvailable.connect(self.ui.actionCopy1.setEnabled)
        self.ui.actionCopy1.triggered.connect(self.ui.text.copy)
        self.ui.text.copyAvailable.connect(self.ui.actionCut1.setEnabled)
        self.ui.actionCut1.triggered.connect(self.ui.text.cut)
        self.ui.actionPaste1.triggered.connect(self.ui.text.paste)


        self.ui.style.undoAvailable.connect(self.ui.actionUndo2.setEnabled)
        self.ui.actionUndo2.triggered.connect(self.ui.style.undo)
        self.ui.style.redoAvailable.connect(self.ui.actionRedo2.setEnabled)
        self.ui.actionRedo2.triggered.connect(self.ui.style.redo)

        self.ui.style.copyAvailable.connect(self.ui.actionCopy2.setEnabled)
        self.ui.actionCopy2.triggered.connect(self.ui.style.copy)
        self.ui.style.copyAvailable.connect(self.ui.actionCut2.setEnabled)
        self.ui.actionCut2.triggered.connect(self.ui.style.cut)
        self.ui.actionPaste2.triggered.connect(self.ui.style.paste)

        self.clipBoard=QtGui.QApplication.clipboard()
        self.clipBoard.changed.connect(self.clipChanged)

        self.hookEditToolbar(self.ui.text)
        self.clipChanged(QtGui.QClipboard.Clipboard)

        self.text_fname=None
        self.style_fname=None
        self.pdf_fname=None

        self.ui.searchbar.setVisible(False)
        self.ui.searchWidget=SearchWidget()
        self.ui.searchbar.addWidget(self.ui.searchWidget)
        self.ui.actionFind.triggered.connect(self.ui.searchbar.show)
        self.ui.actionFind.triggered.connect(self.ui.searchWidget.ui.text.setFocus)
        self.ui.searchWidget.ui.close.clicked.connect(self.ui.searchbar.hide)
        self.ui.searchWidget.ui.close.clicked.connect(self.returnFocus)
        self.ui.searchWidget.ui.next.clicked.connect(self.doFind)
        self.ui.searchWidget.ui.previous.clicked.connect(self.doFindBackwards)

        self.updatePdf()

        self.renderTimer=QtCore.QTimer()
        self.renderTimer.timeout.connect(self.on_actionRender_triggered)
        self.renderTimer.start(5000)
Esempio n. 9
0
class Main(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)

        self.doctree=None
        self.lineMarks={}

        # We put things we want rendered here
        self.render_queue = Queue()
        # We get things rendered back
        self.pdf_queue = Queue()
        # We get doctrees for the outline viewer
        self.doctree_queue = Queue()

        print('Starting background renderer...', end=' ')
        self.renderProcess=Process(target = renderQueue,
            args=(self.render_queue, self.pdf_queue, self.doctree_queue))
        self.renderProcess.daemon=True
        self.renderProcess.start()
        print('DONE')

        # This is always the same
        self.ui=Ui_MainWindow()
        self.ui.setupUi(self)

        # Adjust column widths in the structure tree
        self.ui.tree.header().setStretchLastSection(False)
        self.ui.tree.header().setResizeMode(0, QtGui.QHeaderView.Stretch)
        self.ui.tree.header().setResizeMode(1, QtGui.QHeaderView.ResizeToContents)

        self.pdf=PDFWidget()

        self.ui.pageNum = QtGui.QSpinBox()
        self.ui.pageNum.setMinimum(1)
        self.ui.pageNum.setValue(1)
        self.connect(self.pdf,QtCore.SIGNAL('pageCount'),
            self.ui.pageNum.setMaximum)
        self.connect(self.pdf,QtCore.SIGNAL('pageChanged'),
            self.ui.pageNum.setValue)
        self.connect(self.ui.pageNum,QtCore.SIGNAL('valueChanged(int)'),
            self.pdf.gotoPage)

        self.ui.actionShow_ToolBar=self.ui.toolBar.toggleViewAction()
        self.ui.actionShow_ToolBar.setText("Show Main Toolbar")
        self.ui.menuView.addAction(self.ui.actionShow_ToolBar)

        self.ui.pdfbar.addAction(self.pdf.ui.previous)
        self.ui.pdfbar.addWidget(self.ui.pageNum)
        self.ui.pdfbar.addAction(self.pdf.ui.__next__)
        self.ui.pdfbar.addSeparator()
        self.ui.pdfbar.addAction(self.pdf.ui.zoomin)
        self.ui.pdfbar.addAction(self.pdf.ui.zoomout)
        self.ui.actionShow_PDFBar=self.ui.pdfbar.toggleViewAction()
        self.ui.actionShow_PDFBar.setText("Show PDF Toolbar")
        self.ui.menuView.addAction(self.ui.actionShow_PDFBar)

        self.ui.dockLayout.addWidget(self.ui.pdfbar)
        self.ui.dockLayout.addWidget(self.pdf)
        self.ui.dock.hide()
        self.ui.actionShow_PDF=self.ui.dock.toggleViewAction()
        self.ui.actionShow_PDF.setText('Show Preview')
        self.ui.menuView.addAction(self.ui.actionShow_PDF)
        self.ui.actionShow_Structure=self.ui.structure.toggleViewAction()
        self.ui.actionShow_Structure.setText('Show Document Outline')
        self.ui.menuView.addAction(self.ui.actionShow_Structure)

        self.text_md5=''
        self.style_md5=''

        self.hl1 = Highlighter(self.ui.text.document(),'rest')
        self.hl2 = Highlighter(self.ui.style.document(),'javascript')

        self.editorPos=QtGui.QLabel()
        self.ui.statusBar.addWidget(self.editorPos)
        self.editorPos.show()

        self.statusMessage=QtGui.QLabel()
        self.ui.statusBar.addWidget(self.statusMessage)
        self.statusMessage.show()

        self.on_text_cursorPositionChanged()
        self.on_actionRender_triggered()

        # Connect editing actions to the editors
        self.ui.text.undoAvailable.connect(self.ui.actionUndo1.setEnabled)
        self.ui.actionUndo1.triggered.connect(self.ui.text.undo)
        self.ui.text.redoAvailable.connect(self.ui.actionRedo1.setEnabled)
        self.ui.actionRedo1.triggered.connect(self.ui.text.redo)

        self.ui.text.copyAvailable.connect(self.ui.actionCopy1.setEnabled)
        self.ui.actionCopy1.triggered.connect(self.ui.text.copy)
        self.ui.text.copyAvailable.connect(self.ui.actionCut1.setEnabled)
        self.ui.actionCut1.triggered.connect(self.ui.text.cut)
        self.ui.actionPaste1.triggered.connect(self.ui.text.paste)


        self.ui.style.undoAvailable.connect(self.ui.actionUndo2.setEnabled)
        self.ui.actionUndo2.triggered.connect(self.ui.style.undo)
        self.ui.style.redoAvailable.connect(self.ui.actionRedo2.setEnabled)
        self.ui.actionRedo2.triggered.connect(self.ui.style.redo)

        self.ui.style.copyAvailable.connect(self.ui.actionCopy2.setEnabled)
        self.ui.actionCopy2.triggered.connect(self.ui.style.copy)
        self.ui.style.copyAvailable.connect(self.ui.actionCut2.setEnabled)
        self.ui.actionCut2.triggered.connect(self.ui.style.cut)
        self.ui.actionPaste2.triggered.connect(self.ui.style.paste)

        self.clipBoard=QtGui.QApplication.clipboard()
        self.clipBoard.changed.connect(self.clipChanged)

        self.hookEditToolbar(self.ui.text)
        self.clipChanged(QtGui.QClipboard.Clipboard)

        self.text_fname=None
        self.style_fname=None
        self.pdf_fname=None

        self.ui.searchbar.setVisible(False)
        self.ui.searchWidget=SearchWidget()
        self.ui.searchbar.addWidget(self.ui.searchWidget)
        self.ui.actionFind.triggered.connect(self.ui.searchbar.show)
        self.ui.actionFind.triggered.connect(self.ui.searchWidget.ui.text.setFocus)
        self.ui.searchWidget.ui.close.clicked.connect(self.ui.searchbar.hide)
        self.ui.searchWidget.ui.close.clicked.connect(self.returnFocus)
        self.ui.searchWidget.ui.next.clicked.connect(self.doFind)
        self.ui.searchWidget.ui.previous.clicked.connect(self.doFindBackwards)

        self.updatePdf()

        self.renderTimer=QtCore.QTimer()
        self.renderTimer.timeout.connect(self.on_actionRender_triggered)
        self.renderTimer.start(5000)

    def returnFocus(self):
        """after the search bar closes, focus on the editing widget"""
        print('RF:', self.ui.tabs.currentIndex())
        if self.ui.tabs.currentIndex()==0:
            self.ui.text.setFocus()
        else:
            self.ui.style.setFocus()

    def doFindBackwards (self):
        return self.doFind(backwards=True)

    def doFind(self, backwards=False):

        flags=QtGui.QTextDocument.FindFlags()
        print(flags)
        if backwards:
            flags=QtGui.QTextDocument.FindBackward
        if self.ui.searchWidget.ui.matchCase.isChecked():
            flags=flags|QtGui.QTextDocument.FindCaseSensitively

        text=str(self.ui.searchWidget.ui.text.text())

        print('Serching for:',text)

        if self.ui.tabs.currentIndex()==0:
            r=self.ui.text.find(text,flags)
        else:
            r=self.ui.style.find(text,flags)
        if r:
            self.statusMessage.setText('')
        else:
            self.statusMessage.setText('%s not found'%text)

    def clipChanged(self, mode=None):
        if mode is None: return
        if mode == QtGui.QClipboard.Clipboard:
            if str(self.clipBoard.text()):
                self.ui.actionPaste1.setEnabled(True)
                self.ui.actionPaste2.setEnabled(True)
            else:
                self.ui.actionPaste1.setEnabled(False)
                self.ui.actionPaste2.setEnabled(False)

    def hookEditToolbar(self, editor):
        if editor == self.ui.text:
            self.ui.actionUndo2.setVisible(False)
            self.ui.actionRedo2.setVisible(False)
            self.ui.actionCut2.setVisible(False)
            self.ui.actionPaste2.setVisible(False)
            self.ui.actionCopy2.setVisible(False)
            self.ui.actionUndo1.setVisible(True)
            self.ui.actionRedo1.setVisible(True)
            self.ui.actionCut1.setVisible(True)
            self.ui.actionPaste1.setVisible(True)
            self.ui.actionCopy1.setVisible(True)
        else:
            self.ui.actionUndo1.setVisible(False)
            self.ui.actionRedo1.setVisible(False)
            self.ui.actionCut1.setVisible(False)
            self.ui.actionPaste1.setVisible(False)
            self.ui.actionCopy1.setVisible(False)
            self.ui.actionUndo2.setVisible(True)
            self.ui.actionRedo2.setVisible(True)
            self.ui.actionCut2.setVisible(True)
            self.ui.actionPaste2.setVisible(True)
            self.ui.actionCopy2.setVisible(True)


    def createPopupMenu(self):
        self.popup=QtGui.QMenu()
        self.popup.addAction(self.ui.actionShow_ToolBar)
        self.popup.addAction(self.ui.actionShow_PDFBar)
        self.popup.addAction(self.ui.actionShow_PDF)
        return self.popup

    def enableHL(self):
        self.hl1.enabled=True
        self.hl2.enabled=True
        self.hl1.rehighlight()
        self.hl2.rehighlight()

    def disableHL(self):
        self.hl1.enabled=False
        self.hl2.enabled=False

    def on_actionSettings_triggered(self, b=None):
        if b is not None: return

        # I need to create a stylesheet object so I can parse and merge
        # the current stylesheet

        try:
            data=json.loads(str(self.ui.style.toPlainText()))
        except: # TODO: fail if sheet doesn't validate
            data={}
        config=ConfigDialog(data=copy(data))
        config.exec_()

        # merge the edited stylesheet with current one because the editor
        # is not complete yet. When it is, just replace it.
        data.update(config.data)
        self.ui.style.setPlainText(json.dumps(data, indent=2))

    def on_actionTest_Action_triggered(self, b=None):
        if b is not None: return



        self.testwidget=PageTemplates(self.styles)
        self.testwidget.show()


    def on_tree_itemClicked(self, item=None, column=None):
        if item is None: return

        destline=int(item.text(1))-1
        destblock=self.ui.text.document().findBlockByLineNumber(destline)
        cursor=self.ui.text.textCursor()
        cursor.setPosition(destblock.position())
        self.ui.text.setTextCursor(cursor)
        self.ui.text.ensureCursorVisible()

    def on_actionAbout_Bookrest_triggered(self, b=None):
        if b is None: return
        dlg=AboutDialog()
        dlg.exec_()

    def on_actionSave_Text_triggered(self, b=None):
        if b is not None: return

        if self.text_fname is not None:
            f=codecs.open(self.text_fname,'w+','utf-8')
            f.seek(0)
            f.write(str(self.ui.text.toPlainText()))
            f.close()
        else:
            self.on_actionSaveAs_Text_triggered()


    def on_actionSaveAs_Text_triggered(self, b=None):
        if b is not None: return

        fname=str(QtGui.QFileDialog.getSaveFileName(self,
                            'Save As',
                            os.getcwd(),
                            'reSt files (*.txt *.rst)'
                            ))
        if fname:
            self.text_fname=fname
            self.on_actionSave_Text_triggered()

    def on_actionLoad_Text_triggered(self, b=None):
        if b is None: return
        fname=QtGui.QFileDialog.getOpenFileName(self,
                                                'Open File',
                                                os.getcwd(),
                                                'reSt files (*.txt *.rst)'
                                                )
        self.text_fname=fname
        self.disableHL()
        self.ui.text.setPlainText(codecs.open(self.text_fname,'r','utf-8').read())
        self.enableHL()

    def on_actionSave_Style_triggered(self, b=None):
        if b is not None: return

        if self.style_fname is not None:
            f=codecs.open(self.style_fname,'w+','utf-8')
            f.seek(0)
            f.write(str(self.ui.style.toPlainText()))
            f.close()
        else:
            self.on_actionSaveAs_Style_triggered()


    def on_actionSaveAs_Style_triggered(self, b=None):
        if b is not None: return

        fname=str(QtGui.QFileDialog.getSaveFileName(self,
                            'Save As',
                            os.getcwd(),
                            'style files (*.json *.style)'
                            ))
        if fname:
            self.style_fname=fname
            self.on_actionSave_Style_triggered()


    def on_actionLoad_Style_triggered(self, b=None):
        if b is None: return

        fname=QtGui.QFileDialog.getOpenFileName(self,
                                                'Open File',
                                                os.getcwd(),
                                                'style files (*.json *.style)'
                                                )
        self.style_fname=fname
        self.disableHL()
        self.ui.style.setPlainText(codecs.open(self.style_fname,'rb', 'utf-8').read())
        self.enableHL()

    def on_actionSave_PDF_triggered(self, b=None):
        if b is not None: return

        # render it without line numbers in the toc
        self.on_actionRender_triggered(preview=False)

        if self.pdf_fname is not None:
            f=open(self.pdf_fname,'wb+')
            f.seek(0)
            f.write(self.goodPDF)
            f.close()
        else:
            self.on_actionSaveAs_PDF_triggered()


    def on_actionSaveAs_PDF_triggered(self, b=None):
        if b is not None: return

        fname=str(QtGui.QFileDialog.getSaveFileName(self,
                            'Save As',
                            os.getcwd(),
                            'PDF files (*.pdf)'
                            ))
        if fname:
            self.pdf_fname=fname
            self.on_actionSave_PDF_triggered()

    def on_tabs_currentChanged(self, i=None):
        print('IDX:',self.ui.tabs.currentIndex())
        if self.ui.tabs.currentIndex() == 0:
            self.on_text_cursorPositionChanged()
            print('hooking text editor')
            self.hookEditToolbar(self.ui.text)
        else:
            self.on_style_cursorPositionChanged()
            print('hooking style editor')
            self.hookEditToolbar(self.ui.style)

    def on_style_cursorPositionChanged(self):
        cursor=self.ui.style.textCursor()
        self.editorPos.setText('Line: %d Col: %d'%(cursor.blockNumber(),cursor.columnNumber()))

    def on_text_cursorPositionChanged(self):
        cursor=self.ui.text.textCursor()
        row=cursor.blockNumber()
        column=cursor.columnNumber()
        self.editorPos.setText('Line: %d Col: %d'%(row,column))
        l='line-%s'%(row+1)
        m=self.lineMarks.get(l,None)
        if m:
            self.pdf.gotoPosition(*m)
    def validateStyle(self):
        style=str(self.ui.style.toPlainText())
        if not style.strip(): #no point in validating an empty string
            self.statusMessage.setText('')
            return
        pos=None
        try:
            json.loads(style)
            self.statusMessage.setText('')
        except ValueError as e:
            s=str(e)
            if s == 'No JSON object could be decoded':
                pos=0
            elif s.startswith('Expecting '):
                pos=int(s.split(' ')[-1][:-1])
            elif s.startswith('Extra data'):
                pos=int(s.split(' ')[-3])
            else:
                pass
            self.statusMessage.setText('Stylesheet error: %s'%s)

        # This makes a red bar appear in the line
        # containing position pos
        self.ui.style.highlightError(pos)

    on_style_textChanged = validateStyle

    def on_actionRender_triggered(self, b=None, preview=True):
        if b is not None: return
        text=str(self.ui.text.toPlainText())
        style=str(self.ui.style.toPlainText())
        self.hl1.rehighlight()
        m1=md5()
        m1.update(text.encode('utf-8'))
        m1=m1.digest()
        m2=md5()
        m2.update(style.encode('utf-8'))
        m2=m2.digest()

        flag = m1 != self.text_md5
        style_file=None
        if m2 != self.style_md5 and style:
            fd, style_file=tempfile.mkstemp()
            os.write(fd,style)
            os.close(fd)
            print('Loading styles from style_file')
            flag = True
        if flag:
            if not preview:
                pass
                # Send text to the renderer in foreground
                # FIXME: render is no longer accessible from the parent
                # process
                #doctree = docutils.core.publish_doctree(text)
                #self.goodPDF=render(doctree, preview=False)
            else:
                # Que to render in background
                self.render_queue.put([style_file, text, preview])
                self.text_md5=m1
                self.style_md5=m2

    def updatePdf(self):

        # See if there is something in the doctree Queue
        try:
            self.doctree, self.warnings = self.doctree_queue.get(False)
            self.doctree.reporter=log
            class Visitor(docutils.nodes.SparseNodeVisitor):

                def __init__(self, document, treeWidget):
                    self.treeWidget=treeWidget
                    self.treeWidget.clear()
                    self.doctree=document
                    self.nodeDict={}
                    docutils.nodes.SparseNodeVisitor.__init__(self, document)

                def visit_section(self, node):
                    print('SECTION:',node.line, end=' ')
                    item=QtGui.QTreeWidgetItem(["",str(node.line)])
                    if node.parent==self.doctree:
                        # Top level section
                        self.treeWidget.addTopLevelItem(item)
                        self.nodeDict[id(node)]=item
                    else:
                        self.nodeDict[id(node.parent)].addChild(item)
                        self.nodeDict[id(node)]=item

                def visit_title(self, node):
                    if id(node.parent) in self.nodeDict:
                        self.nodeDict[id(node.parent)].setText(0,node.astext())

                def visit_document(self,node):
                    print('DOC:',node.line)

            print(self.doctree.__class__)
            self.visitor=Visitor(self.doctree, self.ui.tree)
            self.doctree.walkabout(self.visitor)
            print(self.visitor.nodeDict)

        except Empty:
            pass

        # See if there is something in the PDF Queue
        try:
            self.lastPDF=self.pdf_queue.get(False)
            self.pdf.loadDocument(self.lastPDF)
            toc=self.pdf.document.toc()
            if toc:
                tempMarks=[]
                def traverse(node):
                    children=node.childNodes()
                    for i in range(children.length()):
                        n=children.item(i)
                        e=n.toElement()
                        if e:
                            tag=str(e.tagName())
                            if tag.startswith('LINE'):
                                dest=str(e.attribute('Destination'))
                                dest=QtPoppler.Poppler.LinkDestination(dest)
                                tempMarks.append([int(tag.split('-')[1]),
                                    [dest.pageNumber(), dest.top(), dest.left(),1.]])
                        traverse(n)
                traverse(toc)
                tempMarks.sort()

                self.lineMarks={}
                lastMark=None
                lastKey=0
                for key,dest in tempMarks:
                    # Fix height of the previous mark, unless we changed pages
                    if lastMark and self.lineMarks[lastMark][0]==dest[0]:
                        self.lineMarks[lastMark][3]=dest[1]
                    # Fill missing lines

                    if lastMark:
                        ldest=self.lineMarks[lastMark]
                    else:
                        ldest=[1,0,0,0]
                    for n in range(lastKey,key):
                        self.lineMarks['line-%s'%n]=ldest
                    k='line-%s'%key
                    self.lineMarks[k]=dest
                    lastMark = k
                    lastKey = key

            self.on_text_cursorPositionChanged()
        except Empty: #Nothing there
            pass

        # Schedule to run again
        QtCore.QTimer.singleShot(500,self.updatePdf)
Esempio n. 10
0
 def abrir_main(self):
     self.MainWindow = QtWidgets.QMainWindow()
     self.ui = Ui_MainWindow()
     self.ui.setupUi(self.MainWindow)
     self.MainWindow.show()
Esempio n. 11
0
class Ui_SplashScreen(object):
    def setupUi(self, SplashScreen):
        SplashScreen.setObjectName("SplashScreen")
        SplashScreen.resize(680, 400)
        self.centralwidget = QtWidgets.QWidget(SplashScreen)
        self.centralwidget.setObjectName("centralwidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
        self.verticalLayout.setContentsMargins(10, 10, 10, 10)
        self.verticalLayout.setSpacing(0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.dropShadowFrame = QtWidgets.QFrame(self.centralwidget)
        self.dropShadowFrame.setStyleSheet(
            "QFrame {    \n"
            "    background-color: rgb(56, 58, 89);    \n"
            "    color: rgb(220, 220, 220);\n"
            "    border-radius: 10px;\n"
            "}")
        self.dropShadowFrame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.dropShadowFrame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.dropShadowFrame.setObjectName("dropShadowFrame")
        self.label_title = QtWidgets.QLabel(self.dropShadowFrame)
        self.label_title.setGeometry(QtCore.QRect(0, 90, 661, 61))
        font = QtGui.QFont()
        font.setFamily("Segoe UI")
        font.setPointSize(40)
        self.label_title.setFont(font)
        self.label_title.setStyleSheet("color: rgb(254, 121, 199);")
        self.label_title.setAlignment(QtCore.Qt.AlignCenter)
        self.label_title.setObjectName("label_title")
        self.label_description = QtWidgets.QLabel(self.dropShadowFrame)
        self.label_description.setGeometry(QtCore.QRect(0, 150, 661, 31))
        font = QtGui.QFont()
        font.setFamily("Segoe UI")
        font.setPointSize(14)
        self.label_description.setFont(font)
        self.label_description.setStyleSheet("color: rgb(98, 114, 164);")
        self.label_description.setAlignment(QtCore.Qt.AlignCenter)
        self.label_description.setObjectName("label_description")
        self.progressBar = QtWidgets.QProgressBar(self.dropShadowFrame)
        self.progressBar.setGeometry(QtCore.QRect(50, 280, 561, 23))
        self.progressBar.setStyleSheet(
            "QProgressBar {\n"
            "    \n"
            "    background-color: rgb(98, 114, 164);\n"
            "    color: rgb(200, 200, 200);\n"
            "    border-style: none;\n"
            "    border-radius: 10px;\n"
            "    text-align: center;\n"
            "}\n"
            "QProgressBar::chunk{\n"
            "    border-radius: 10px;\n"
            "    background-color: qlineargradient(spread:pad, x1:0, y1:0.511364, x2:1, y2:0.523, stop:0 rgba(254, 121, 199, 255), stop:1 rgba(170, 85, 255, 255));\n"
            "}")
        self.progressBar.setProperty("value", 0)
        self.progressBar.setObjectName("progressBar")
        self.label_loading = QtWidgets.QLabel(self.dropShadowFrame)
        self.label_loading.setGeometry(QtCore.QRect(0, 320, 661, 21))
        font = QtGui.QFont()
        font.setFamily("Segoe UI")
        font.setPointSize(12)
        self.label_loading.setFont(font)
        self.label_loading.setStyleSheet("color: rgb(98, 114, 164);")
        self.label_loading.setAlignment(QtCore.Qt.AlignCenter)
        self.label_loading.setObjectName("label_loading")
        self.label_credits = QtWidgets.QLabel(self.dropShadowFrame)
        self.label_credits.setGeometry(QtCore.QRect(20, 350, 621, 21))
        font = QtGui.QFont()
        font.setFamily("Segoe UI")
        font.setPointSize(10)
        self.label_credits.setFont(font)
        self.label_credits.setStyleSheet("color: rgb(98, 114, 164);")
        self.label_credits.setAlignment(QtCore.Qt.AlignRight
                                        | QtCore.Qt.AlignTrailing
                                        | QtCore.Qt.AlignVCenter)
        self.label_credits.setObjectName("label_credits")
        self.verticalLayout.addWidget(self.dropShadowFrame)
        SplashScreen.setCentralWidget(self.centralwidget)

        self.retranslateUi(SplashScreen)
        QtCore.QMetaObject.connectSlotsByName(SplashScreen)

    def retranslateUi(self, SplashScreen):
        _translate = QtCore.QCoreApplication.translate
        SplashScreen.setWindowTitle(_translate("SplashScreen", "MainWindow"))
        self.label_title.setText(
            _translate("SplashScreen",
                       "<html><head/><body><p>PLUS-TI</p></body></html>"))
        self.label_description.setText(
            _translate("SplashScreen",
                       "<html><head/><body><p>Models App</p></body></html>"))
        self.label_loading.setText(_translate("SplashScreen", "loading..."))
        self.label_credits.setText(
            _translate(
                "SplashScreen",
                "<html><head/><body><p><span style=\" font-weight:600;\">Created</span>: Sandro Bispo</p></body></html>"
            ))
        self.carregar_janela(SplashScreen)

    def carregar_janela(self, SplashScreen):
        self.janela = SplashScreen
        self.conf_janela()
        self.carregar_loader()

    def conf_janela(self):
        self.janela.setAttribute(QtCore.Qt.WA_TranslucentBackground)
        self.janela.setWindowFlags(QtCore.Qt.FramelessWindowHint)

    def carregar_loader(self):
        self.timer = QtCore.QTimer()
        self.timer.timeout.connect(self.load_progress_bar)
        self.timer.start(100)

    cont_label_title = [121, 114]

    def load_progress_bar(self):
        self.progressBar.setValue(self.progressBar.value() + 1)
        self.label_title.setStyleSheet(
            f"color: rgb(254, {self.cont_label_title[0]}, 199);")
        self.label_description.setStyleSheet(
            f"color: rgb(98, {self.cont_label_title[1]}, 164);")
        self.cont_label_title[0] += 1
        self.cont_label_title[1] += 1
        if self.progressBar.value() >= 100:
            self.janela.close()
            self.abrir_main()
            self.timer.stop()

    def abrir_main(self):
        self.MainWindow = QtWidgets.QMainWindow()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self.MainWindow)
        self.MainWindow.show()
Esempio n. 12
0
class Main(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        
        # This is always the same
        self.ui=Ui_MainWindow()
        self.ui.setupUi(self)

        self.mediaObject=None

        # Enable-disable buttons as needed
        self.timer=QtCore.QTimer()
        self.ui.centralwidget.adjustSize()
        self.curClip=None

	self.message=QtGui.QLabel()

	self.progress=QtGui.QProgressBar()
	self.progress.setMaximum(100)
	#self.progress.setPercentageVisible(True)
	self.statusBar().addWidget(self.message,1)
	self.statusBar().addWidget(self.progress,0)
        self.progress.hide()
        
        self.projectName=None
        self.setWindowFilePath('None')
        
        self.ui.assets.addAction(self.ui.actionRemove_Asset)
        self.ui.output.addAction(self.ui.actionRemove_Asset)
                
        # Restore window state
        settings=QtCore.QSettings("ralsina","dieschere")
        self.restoreGeometry(settings.value("geometry").toByteArray());
        self.restoreState(settings.value("state").toByteArray(),UI_VERSION);

    def closeEvent(self, ev):
        # Save window state
        self.on_actionNew_Project_triggered()
        if not self.isWindowModified():
            settings=QtCore.QSettings("ralsina","dieschere")
            settings.setValue("geometry", self.saveGeometry());
            settings.setValue("state", self.saveState(UI_VERSION));
            ev.accept()
        else:
            ev.ignore()

    def tick(self):
        t1=self.mediaObject.currentTime()
        t=t1/1000
        if not self.ui.markFrom.isChecked():
            h=t/3600
            m=(t-h*3600)/60
            s=t-h*3600-m*60
            msec=t1-t*1000
            self.ui.cutFrom.setText('%d:%d:%d.%d'%(h,m,s,msec))
        if not self.ui.markTo.isChecked():
            h=t/3600
            m=(t-h*3600)/60
            s=t-h*3600-m*60
            msec=t1-t*1000
            self.ui.cutTo.setText('%d:%d:%d.%d'%(h,m,s,msec))


    def stateChanged(self, state=None):
        if state is None: return
        
        if state == Phonon.StoppedState:
            self.ui.play.setEnabled(True)
            self.ui.play.setChecked(False)
        elif state == Phonon.PlayingState:
            self.ui.play.setEnabled(True)
            self.ui.play.setChecked(True)
        elif state == Phonon.PausedState:
            self.ui.play.setEnabled(True)
            self.ui.play.setChecked(False)

    def on_actionQuit_triggered(self, b=None):
        if b is not None: return
        self.on_actionNew_Project_triggered()
        if not self.isWindowModified():
            self.close()

    def on_actionAbout_Die_Schere_triggered(self, b=None):
        if b is not None: return
        PAYPAL=r'https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=Q6R5YDDPM2RL6&lc=AR&item_name=Roberto%20Alsina&item_number=dieschere&currency_code=USD&bn=PP%2dDonationsBF%3abtn_donate_SM%2egif%3aNonHosted'
        QtGui.QMessageBox.about(self,r'About Die Schere',
        '<h3>Die Schere: a simple video editor</h3><br>'\
        'Version: %s<br>'
        'Author: <a href="mailto:[email protected]">Roberto Alsina &lt;[email protected]&gt;.<br></a>'\
        'Home Page: http://nothereyet<br>'\
        'If you liked Die Schere, please consider donating money <a href="%s">here</a><br>'\
        '<h4>License</h4>Die Schere is free software licensed under the GPL version 2. <a href="%s">LICENSING TERMS</a>'%(VERSION,PAYPAL,LICENSEFILE)
        )
        
        

    def on_actionNew_Project_triggered(self, b=None):
        if b is not None: return
        
        if self.isWindowModified():
            # Make sure we are not losing data
            r=QtGui.QMessageBox.question(self,"Close Document", 
                "The current project has been modified. Do you want to save your changes or discard them?", 
                QtGui.QMessageBox.Save | QtGui.QMessageBox.Discard | QtGui.QMessageBox.Cancel
                )
            if r==QtGui.QMessageBox.Cancel:
                return
            elif r==QtGui.QMessageBox.Save:
                self.on_actionSave_Project_triggered()
                
        self.ui.assets.clear()
        self.ui.output.clear()
        self.setWindowModified(False)

    def on_actionOpen_Project_triggered(self, b=None):
        if b is not None: return
        fname=QtGui.QFileDialog.getOpenFileName(self,"Open Project",os.getcwd(),"Project Files (*.schere)")
        if fname:
            self.loadProject(fname)
                
    def loadProject(self,fname):
        self.on_actionNew_Project_triggered()
            
        self.projectName=fname
        self.setWindowFilePath(self.projectName)
        proj=json.loads(codecs.open(fname,'r','utf-8').read())
        for fname in proj['assets']:
            self.addAsset(fname)
        for fname in proj['output']:
            self.addAsset(fname,output=True)
        self.setWindowModified(False)
        
    def on_actionSaveProject_As_triggered(self, b=None):
        if b is not None: return
        fname=QtGui.QFileDialog.getSaveFileName(self,"Save Project",os.getcwd(),"Project Files (*.schere)")
        if fname:
            self.projectName=fname
            self.on_actionSave_Project_triggered()    
        else:
            return
            
    def on_actionSave_Project_triggered(self, b=None):
        if b is not None: return
        if not self.projectName:
            self.on_actionSaveProject_As_triggered()

        # A project is the current state of the program.
        # So far, that means:
        # * List of assets
        # * List of output clips
        
        proj={}
        proj['assets']=[]
        proj['output']=[]
        
        for i in range (self.ui.assets.count()):
            proj['assets'].append(self.ui.assets.item(i).asset.fname)
        for i in range (self.ui.output.count()):
            proj['output'].append(self.ui.output.item(i).asset.fname)
        
        codecs.open(self.projectName,'w+','utf-8').write(json.dumps(proj))
        self.setWindowModified(False)
                  
    def on_assets_itemDoubleClicked(self, item=None):
        if item is None: return
        asset = item.asset
        self.ui.output.addItem(asset.createItem())

    def selectClip(self, fname):
        '''Select which clip the player shows'''
        self.curClip=fname
        self.mediaSource=Phonon.MediaSource(fname)
        self.ui.player.load(self.mediaSource)
        self.ui.player.seek(0)
        self.ui.play.setChecked(False)
        self.mediaObject=self.ui.player.mediaObject()
        self.mediaObject.stateChanged.connect(self.stateChanged)
        self.mediaObject.setTickInterval(25)
        self.mediaObject.tick.connect(self.tick)
        #self.ui.seekplaceholder.deleteLater()
        self.ui.seekslider.deleteLater()
        self.ui.volslider.deleteLater()
        self.ui.seekslider=Phonon.SeekSlider(self.mediaObject)
        self.ui.volslider=Phonon.VolumeSlider(self.ui.player.audioOutput())
        self.ui.controls.addWidget(self.ui.seekslider)
        self.ui.controls.addWidget(self.ui.volslider)

    def on_assets_itemClicked(self, item=None):
        if item is None: return
        asset = item.asset
        self.selectClip(asset.fname)
        for i in self.ui.output.selectedItems():
            i.setSelected(False)
            
    def on_output_itemClicked(self, item=None):
        if item is None: return
        asset = item.asset
        self.selectClip(asset.fname)
        for i in self.ui.assets.selectedItems():
            i.setSelected(False)
            
    def on_cut_clicked(self, b=None):
        if b is not None: return
        if not self.curClip: return
        # Cut the current asset's section as selected.
        fname=QtGui.QFileDialog.getSaveFileName()
        if fname:
            # Do the cutting
            
            # mplayer shifts endpos by ss, so if you want a clip from 5 seconds
            # to 10 seconds, it's -ss 5 -endpos 5
            
            if self.ui.markFrom.isChecked():
                h1,m1,s1=map(float,str(self.ui.cutFrom.text()).split(':'))
                t1=h1*3600+m1*60+s1
            else: 
                t1=0
            
            if self.ui.markTo.isChecked():
                h2,m2,s2=map(float,str(self.ui.cutTo.text()).split(':'))
                t2=h2*3600+m2*60+s2
            else:
                t2=99999999
            
            t2=t2-t1            
            
            cmd='mencoder -ovc copy -oac copy %s -ss %s -endpos %s -o %s'%\
                (self.curClip,t1,t2,fname)
            print 'CMD:',cmd
            # TODO: error handling
	    self.proc = QtCore.QProcess(self)
	    self.proc.setProcessChannelMode(QtCore.QProcess.MergedChannels)
	    self.proc.readyRead.connect(self.mencoderProgress)
	    self.proc.finished.connect(self.mencoderDone)
	    self.message.setText('Encoding '+ fname)
	    self.proc.start('mencoder',['-ovc','copy','-oac','copy',self.curClip,
	    '-ss',str(t1),'-endpos',str(t2),'-o',fname])
            # Add asset of the cutted clip
            self.addAsset(fname)

    def mencoderDone(self):
	self.message.setText('Job finished')
	self.progress.hide()

    def mencoderProgress(self):
	self.progress.show()
	l=str(self.proc.readLine())[2:].strip()
	print l
	if 'Pos:' not in l: return 
	pos=int(l.split('(')[1].split('%')[0])
	self.progress.setValue(pos)
            
    def addAsset(self,fname,output=False):
        asset=Asset(fname)
        if asset.thumb is None: #Unrecognized formart
            QtGui.QMessageBox.critical(self,"Error opening %s"%fname, "File format not recognized. It doesn't look like a video to me")
            return
        if output:
            self.ui.output.addItem(asset.createItem())
        else:
            self.ui.assets.addItem(asset.createItem())
            
        self.setWindowModified(True)
        return
            
    def on_play_toggled(self, b):
        if b: #play pressed
            self.ui.player.play()
            self.ui.play.setIcon(QtGui.QIcon(':/icons/pause.svg'))
        else: #pause pressed
            self.ui.player.pause()
            self.ui.play.setIcon(QtGui.QIcon(':/icons/player_play.svg'))

    def on_addAsset_triggered(self, b = None):
        if b is None: return
        
        fname=QtGui.QFileDialog.getOpenFileName()
        if fname:
            self.addAsset(fname)
           
    def on_actionRemove_Asset_triggered(self, b = None):
        if b is None: return
        
        item=self.ui.assets.selectedItems()[0]
        if item:
            self.ui.assets.takeItem(self.ui.assets.row(item))
        self.setWindowModified(True)
           
    def on_actionRender_triggered(self,b=None):
        if b is not None: return
        fname=QtGui.QFileDialog.getSaveFileName()
        if fname:
            inputs=[]
            i=0
            while True:
                item=self.ui.output.item(i)
                if item is None: break
                inputs.append(item.asset.fname)
                i+=1
	    self.proc = QtCore.QProcess(self)
	    self.proc.setProcessChannelMode(QtCore.QProcess.MergedChannels)
	    self.proc.readyRead.connect(self.mencoderProgress)
	    self.proc.finished.connect(self.mencoderDone)
	    self.message.setText('Encoding '+ fname)
	    self.proc.start('/usr/bin/mencoder',['-ovc','lavc','-oac','mp3lame']+inputs+
						 ['-o',fname])