예제 #1
0
class DBRestore(QDialog):

    update_signal = pyqtSignal(object, object)

    def __init__(self, parent, library_path, wait_time=2):
        QDialog.__init__(self, parent)
        self.l = QVBoxLayout()
        self.setLayout(self.l)
        self.l1 = QLabel('<b>'+_('Restoring database from backups, do not'
            ' interrupt, this will happen in three stages')+'...')
        self.setWindowTitle(_('Restoring database'))
        self.l.addWidget(self.l1)
        self.pb = QProgressBar(self)
        self.l.addWidget(self.pb)
        self.pb.setMaximum(0)
        self.pb.setMinimum(0)
        self.msg = QLabel('')
        self.l.addWidget(self.msg)
        self.msg.setWordWrap(True)
        self.bb = QDialogButtonBox(QDialogButtonBox.Cancel)
        self.l.addWidget(self.bb)
        self.bb.rejected.connect(self.reject)
        self.resize(self.sizeHint() + QSize(100, 50))
        self.error = None
        self.rejected = False
        self.library_path = library_path
        self.update_signal.connect(self.do_update, type=Qt.QueuedConnection)

        from calibre.db.restore import Restore
        self.restorer = Restore(library_path, self)
        self.restorer.daemon = True

        # Give the metadata backup thread time to stop
        QTimer.singleShot(wait_time * 1000, self.start)

    def start(self):
        self.restorer.start()
        QTimer.singleShot(10, self.update)

    def reject(self):
        self.rejected = True
        self.restorer.progress_callback = lambda x, y: x
        QDialog.reject(self)

    def update(self):
        if self.restorer.is_alive():
            QTimer.singleShot(10, self.update)
        else:
            self.restorer.progress_callback = lambda x, y: x
            self.accept()

    def __call__(self, msg, step):
        self.update_signal.emit(msg, step)

    def do_update(self, msg, step):
        if msg is None:
            self.pb.setMaximum(step)
        else:
            self.msg.setText(msg)
            self.pb.setValue(step)
예제 #2
0
class DBRestore(QDialog):

    update_signal = pyqtSignal(object, object)

    def __init__(self, parent, library_path, wait_time=2):
        QDialog.__init__(self, parent)
        self.l = QVBoxLayout()
        self.setLayout(self.l)
        self.l1 = QLabel('<b>'+_('Restoring database from backups, do not'
            ' interrupt, this will happen in three stages')+'...')
        self.setWindowTitle(_('Restoring database'))
        self.l.addWidget(self.l1)
        self.pb = QProgressBar(self)
        self.l.addWidget(self.pb)
        self.pb.setMaximum(0)
        self.pb.setMinimum(0)
        self.msg = QLabel('')
        self.l.addWidget(self.msg)
        self.msg.setWordWrap(True)
        self.bb = QDialogButtonBox(QDialogButtonBox.Cancel)
        self.l.addWidget(self.bb)
        self.bb.rejected.connect(self.reject)
        self.resize(self.sizeHint() + QSize(100, 50))
        self.error = None
        self.rejected = False
        self.library_path = library_path
        self.update_signal.connect(self.do_update, type=Qt.QueuedConnection)

        from calibre.db.restore import Restore
        self.restorer = Restore(library_path, self)
        self.restorer.daemon = True

        # Give the metadata backup thread time to stop
        QTimer.singleShot(wait_time * 1000, self.start)

    def start(self):
        self.restorer.start()
        QTimer.singleShot(10, self.update)

    def reject(self):
        self.rejected = True
        self.restorer.progress_callback = lambda x, y: x
        QDialog.reject(self)

    def update(self):
        if self.restorer.is_alive():
            QTimer.singleShot(10, self.update)
        else:
            self.restorer.progress_callback = lambda x, y: x
            self.accept()

    def __call__(self, msg, step):
        self.update_signal.emit(msg, step)

    def do_update(self, msg, step):
        if msg is None:
            self.pb.setMaximum(step)
        else:
            self.msg.setText(msg)
            self.pb.setValue(step)
예제 #3
0
class EvalWizardStep2Window(QMainWindow):

    def __init__(self, wav_files, output_directory, network_location):
        QMainWindow.__init__(self)

        self.wav_files = wav_files
        self.output_directory = output_directory
        self.network_location = network_location

        self.setMinimumSize(QSize(900, 500))
        self.setWindowTitle("Diarization - Diarize Files (Step 2 of 2)")

        centralWidget = QWidget(self)
        self.setCentralWidget(centralWidget)

        gridLayout = QGridLayout(self)
        centralWidget.setLayout(gridLayout)

        title = QLabel("Please Wait While The .wav Files Are Annotated", self)
        title.setAlignment(QtCore.Qt.AlignCenter)

        self._all_files_progress = QProgressBar(self)
        self._all_files_progress.setMinimum(1)
        self._all_files_progress.setMaximum(len(wav_files))

        self._file_name_lbl = QLabel("File: ", self)
        self._file_name_lbl.setAlignment(QtCore.Qt.AlignCenter)

        self._file_progress_lbl = QLabel("0%", self)
        self._file_progress_lbl.setAlignment(QtCore.Qt.AlignCenter)

        gridLayout.setRowStretch(0, 0)
        gridLayout.addWidget(title, 1, 0)
        gridLayout.setRowStretch(2, 0)
        gridLayout.addWidget(self._all_files_progress, 3, 0)
        gridLayout.addWidget(self._file_name_lbl, 4, 0)
        gridLayout.addWidget(self._file_progress_lbl, 5, 0)
        gridLayout.setRowStretch(49, 0)
        gridLayout.setRowStretch(50, 0)

        thread = Thread(target=self.exe_controler, args=())
        thread.start()

    def exe_controler(self):
        # net = network.open(self.network_location)
        i = 0
        for file_name in self.wav_files:
            self._file_name_lbl.setText("File: " + file_name)
            # net.annotate_wav_file(file_name, self.output_directory)

            time.sleep(0.1)  # Delete This Line Shortly
            self._all_files_progress.setValue(i)
            self._file_progress_lbl.setText(str(i * 100 / len(self.wav_files)) + "%")
            i += 1
        self._all_files_progress.setValue(len(self.wav_files))
        self._file_progress_lbl.setText("100%; Your files have now been annotated. Please close this window.")
예제 #4
0
파일: dnd.py 프로젝트: zyhong/calibre
class DownloadDialog(QDialog):  # {{{

    def __init__(self, url, fname, parent):
        QDialog.__init__(self, parent)
        self.setWindowTitle(_('Download %s')%fname)
        self.l = QVBoxLayout(self)
        self.purl = urlparse(url)
        self.msg = QLabel(_('Downloading <b>%(fname)s</b> from %(url)s')%dict(
            fname=fname, url=self.purl.netloc))
        self.msg.setWordWrap(True)
        self.l.addWidget(self.msg)
        self.pb = QProgressBar(self)
        self.pb.setMinimum(0)
        self.pb.setMaximum(0)
        self.l.addWidget(self.pb)
        self.bb = QDialogButtonBox(QDialogButtonBox.Cancel, Qt.Horizontal, self)
        self.l.addWidget(self.bb)
        self.bb.rejected.connect(self.reject)
        sz = self.sizeHint()
        self.resize(max(sz.width(), 400), sz.height())

        fpath = PersistentTemporaryFile(os.path.splitext(fname)[1])
        fpath.close()
        self.fpath = fpath.name

        self.worker = Worker(url, self.fpath, Queue())
        self.rejected = False

    def reject(self):
        self.rejected = True
        QDialog.reject(self)

    def start_download(self):
        self.worker.start()
        QTimer.singleShot(50, self.update)
        self.exec_()
        if self.worker.err is not None:
            error_dialog(self.parent(), _('Download failed'),
                _('Failed to download from %(url)r with error: %(err)s')%dict(
                    url=self.worker.url, err=self.worker.err),
                det_msg=self.worker.tb, show=True)

    def update(self):
        if self.rejected:
            return

        try:
            progress = self.worker.rq.get_nowait()
        except Empty:
            pass
        else:
            self.update_pb(progress)

        if not self.worker.is_alive():
            return self.accept()
        QTimer.singleShot(50, self.update)

    def update_pb(self, progress):
        transferred, block_size, total = progress
        if total == -1:
            self.pb.setMaximum(0)
            self.pb.setMinimum(0)
            self.pb.setValue(0)
        else:
            so_far = transferred * block_size
            self.pb.setMaximum(max(total, so_far))
            self.pb.setValue(so_far)

    @property
    def err(self):
        return self.worker.err
예제 #5
0
class SplashScreen(QSplashScreen):
    """ Display a Splashscreen """

    signal_done = QtCore.pyqtSignal()

    def __init__(self):
        QSplashScreen.__init__(self, QtGui.QPixmap(),
                               QtCore.Qt.WindowStaysOnTopHint)

        self.rootDir = Path(__file__).parent

        # default values
        self.image = None
        self.version = "Version: 3.x"

        # pixmap.height - ?
        self.progress_y = 68
        # pixmap.width - ?
        self.vx = 24
        # pixmap.height - ?
        self.vy = 32
        # message font size
        self.msize = 12

        self.cv = OpenCVLib()

        self.progressBar = QProgressBar(self)
        self.progressBar.setMinimum(0)
        self.progressBar.setValue(0)
        self.progressBar.setMaximum(100)
        self.progressBar.setTextVisible(False)
        self.setPositionProgressBar()

        self.message = QLabel(self)
        self.message.setFont(QFont("Arial", self.msize))
        self.message.setStyleSheet("QLabel { color : #000000; }")
        self.message.setAlignment(Qt.AlignCenter)

        # Shadow Effekt
        effect = QGraphicsDropShadowEffect(self)
        effect.setBlurRadius(5)
        effect.setColor(QColor("#ffffff"))
        effect.setOffset(1, 1)
        self.message.setGraphicsEffect(effect)
        self.setPositionMessage()
        # self.message.hide()

        # CSS Styling
        self.setStyleSheet("""
            QProgressBar{
              border: 1px solid #eeeeee;
              text-align: center;
              padding: 0;
              margin-top:  10px;
            }
            QProgressBar::chunk{
              background-color: #3daee9;
              width: 0.34em;
              margin:  0 1px;
            }
            """)

    def show(self, *args, **kwargs):
        if self.image == None:
            raise ValueError('Specify an Image via SplashScreen::setImage()')
        return QSplashScreen.show(self, *args, **kwargs)

    def setMessage(self, msg):
        self.message.setText("%s ..." % (msg))
        self.message.show()

    def setPositionMessage(self):
        """ place Message on screen """
        # where is progress?
        p = self.progressBar.geometry()
        self.message.setGeometry(0,
                                 p.y() - self.msize,
                                 self.pixmap().width(), 2 * self.msize)
        self.message.updateGeometry()

    def setPositionProgressBar(self):
        """ place ProgressBar on screen """
        margin = 10
        # x, y, w, h
        self.progressBar.setGeometry(margin,
                                     self.pixmap().height() - self.progress_y,
                                     self.pixmap().width() - 2 * margin, 20)
        self.progressBar.updateGeometry()

    def scale(self, pix):
        gold = 0.618
        h = pix.size().height()
        w = pix.size().width()

        # max width 68% of screen
        screen = QGuiApplication.screens()[0]
        new_w = screen.geometry().width() * gold
        new_h = h * new_w / w

        # python resize
        # return pix.scaled(new_w, new_h, Qt.KeepAspectRatioByExpanding | Qt.SmoothTransformation)
        # resize with opencv
        Qimg = pix.toImage()
        img = self.cv.QImage2MAT(Qimg)
        resized = self.cv.resizeTo(img, new_w, new_h)
        return self.cv.MAT2QPixmap(resized)

    def setVersion(self, version):
        """ adds a Version Number and updates the image """
        self.version = "Version: %s" % version

    def paintEvent(self, *args, **kwargs):
        """ override, important to work """
        return QSplashScreen.paintEvent(self, *args, **kwargs)

    def setImage(self, img):
        """ sets the image and adds a Version Number """

        self.image = self.rootDir.joinpath(img).as_posix()
        splash_pix = QtGui.QPixmap(self.image, format='jpg')
        if splash_pix.isNull():
            raise ValueError('Error loading Image [self.image]')

        # Add version
        painter = QtGui.QPainter(splash_pix)
        painter.setRenderHint(QtGui.QPainter.Antialiasing)
        painter.setFont(QFont("Arial", 18))
        painter.setPen(QColor("#666666"))
        painter.drawText(0, 0,
                         splash_pix.size().width() - self.vx,
                         splash_pix.size().height() - self.vy,
                         QtCore.Qt.AlignBottom | QtCore.Qt.AlignRight,
                         self.version)
        painter.end()

        self.setPixmap(self.scale(splash_pix))
        # ----------------------------------------------
        # other stuff
        self.setPositionProgressBar()
        self.setPositionMessage()

    def step(self):
        """ a preloading step is done """
        self.progressBar.setValue(self.progressBar.value() + 1)
        self.progressBar.repaint()

        if (self.progressBar.value() >= (self.progressBar.maximum() - 1)):
            self.signal_done.emit()

    def setProgressMax(self, maxval):
        self.progressBar.setMaximum(maxval)