예제 #1
0
 def __cssLinkClass(self, icon, size=32):
     """
     Private method to generate a link class with an icon.
     
     @param icon icon to be included (QIcon)
     @param size size of the icon to be generated (integer)
     @return CSS class string (string)
     """
     cssString = \
         """a.{{0}} {{{{\n"""\
         """  padding-left: {0}px;\n"""\
         """  background: transparent url(data:image/png;base64,{1})"""\
         """ no-repeat center left;\n"""\
         """  font-weight: bold;\n"""\
         """}}}}\n"""
     pixmap = icon.pixmap(size, size)
     imageBuffer = QBuffer()
     imageBuffer.open(QIODevice.ReadWrite)
     if not pixmap.save(imageBuffer, "PNG"):
         # write a blank pixmap on error
         pixmap = QPixmap(size, size)
         pixmap.fill(Qt.transparent)
         imageBuffer.buffer().clear()
         pixmap.save(imageBuffer, "PNG")
     return cssString.format(
         size + 4, str(imageBuffer.buffer().toBase64(), encoding="ascii"))
예제 #2
0
파일: FtpReply.py 프로젝트: pycom/EricShort
 def __cssLinkClass(self, icon, size=32):
     """
     Private method to generate a link class with an icon.
     
     @param icon icon to be included (QIcon)
     @param size size of the icon to be generated (integer)
     @return CSS class string (string)
     """
     cssString = \
         """a.{{0}} {{{{\n"""\
         """  padding-left: {0}px;\n"""\
         """  background: transparent url(data:image/png;base64,{1})"""\
         """ no-repeat center left;\n"""\
         """  font-weight: bold;\n"""\
         """}}}}\n"""
     pixmap = icon.pixmap(size, size)
     imageBuffer = QBuffer()
     imageBuffer.open(QIODevice.ReadWrite)
     if not pixmap.save(imageBuffer, "PNG"):
         # write a blank pixmap on error
         pixmap = QPixmap(size, size)
         pixmap.fill(Qt.transparent)
         imageBuffer.buffer().clear()
         pixmap.save(imageBuffer, "PNG")
     return cssString.format(
         size + 4,
         str(imageBuffer.buffer().toBase64(), encoding="ascii"))
예제 #3
0
    def saveBookInfo(self):
        selected_items = self.treeFileList.selectedItems()
        if len(selected_items) == 1:
            QApplication.setOverrideCursor(Qt.BusyCursor)

            item = selected_items[0]
            meta = EbookMeta(item.text(2))
            meta.get()

            if self.book_cover:
                data = QByteArray()
                buf = QBuffer(data)
                self.book_cover.save(buf, 'JPG')
                meta.coverdata = bytes(buf.buffer())
                if not meta.coverpage:
                    meta.coverpage = 'cover.jpg'
                    meta.coverpage_href = '{http://www.w3.org/1999/xlink}href'
            else:
                meta.coverpage = ''
                meta.coverdata = None

            meta.set_authors(self.editAuthor.text())
            meta.book_title = self.editTitle.text()
            meta.set_series(self.editSeries.text(), self.editSeriesNumber.text())
            meta.lang = self.editBookLanguage.text()
            meta.write()

            item.setText(0, meta.book_title)
            item.setText(1, meta.get_autors())

            QApplication.restoreOverrideCursor()
        elif len(selected_items) > 1:
            msg = QMessageBox(self)
            msg.setIcon(QMessageBox.Question)
            msg.setWindowTitle(_translate('fb2mobi', 'Save'))
            msg.setText(_translate('fb2mobi', 'Save changes in selected files?'))
            msg.setStandardButtons(QMessageBox.Save | QMessageBox.Cancel)
            if msg.exec_() == QMessageBox.Save:
                QApplication.setOverrideCursor(Qt.BusyCursor)
                
                for item in selected_items:
                    meta = EbookMeta(item.text(2))
                    meta.get()
                    (series, series_number) = meta.get_first_series()
                    authors = meta.get_autors()
                    if self.editAuthor.text():
                        authors = self.editAuthor.text()
                    if self.editSeries.text():
                        series = self.editSeries.text()

                    meta.set_authors(authors)
                    meta.set_series(series, series_number)
                    if self.editBookLanguage.text():
                        meta.lang = self.editBookLanguage.text()
                    meta.write()

                    item.setText(0, meta.book_title)
                    item.setText(1, meta.get_autors())

                QApplication.restoreOverrideCursor()
예제 #4
0
 def render_to_bytes(self, res):
     """Renders the image into an object of type 'str'"""
     qt_format = self.format  # this may not be constant due to processEvents()
     image = self.render(res)
     q_buffer = QBuffer()
     image.save(q_buffer, qt_format)
     return q_buffer.buffer().data()
예제 #5
0
 def loadCoverFromFile(self, file):
     if os.path.exists(file):
         cover_pixmap = QPixmap()
         if cover_pixmap.load(file):
             data = QByteArray()
             buf = QBuffer(data)
             cover_pixmap.save(buf, 'JPG')
             self.booksMeta[0].cover_image_data = bytes(buf.buffer())
             self.booksMeta[0].cover_image_name = 'cover.jpg'
             self.setBookCover(self.booksMeta[0].cover_image_data)
예제 #6
0
 def render_to_file(self, res, file_object):
     """
     Renders the image into a File resource.
     Returns the size of the data that has been written.
     """
     qt_format = self.format  # this may not be constant due to processEvents()
     image = self.render(res)
     q_buffer = QBuffer()
     image.save(q_buffer, qt_format)
     output = q_buffer.buffer().data()
     if type(file_object) is not _io.BufferedRandom:
         output = str(output)
     file_object.write(output)
     return q_buffer.size()
예제 #7
0
    def setImage(self, image):
        """
        Public method to set the image of the engine.
        
        @param image image to be set (QImage)
        """
        if not self._imageUrl:
            imageBuffer = QBuffer()
            imageBuffer.open(QIODevice.ReadWrite)
            if image.save(imageBuffer, "PNG"):
                self._imageUrl = "data:image/png;base64,{0}".format(
                    bytes(imageBuffer.buffer().toBase64()).decode())

        self.__image = QImage(image)
        self.imageChanged.emit()
예제 #8
0
 def setImage(self, image):
     """
     Public method to set the image of the engine.
     
     @param image image to be set (QImage)
     """
     if not self._imageUrl:
         imageBuffer = QBuffer()
         imageBuffer.open(QIODevice.ReadWrite)
         if image.save(imageBuffer, "PNG"):
             self._imageUrl = "data:image/png;base64,{0}".format(
                 bytes(imageBuffer.buffer().toBase64()).decode())
     
     self.__image = QImage(image)
     self.imageChanged.emit()
예제 #9
0
def grab_svg(scene):
    """
    Return a SVG rendering of the scene contents.

    Parameters
    ----------
    scene : :class:`CanvasScene`

    """
    from PyQt5.QtSvg import QSvgGenerator
    svg_buffer = QBuffer()
    gen = QSvgGenerator()
    gen.setOutputDevice(svg_buffer)

    items_rect = scene.itemsBoundingRect().adjusted(-10, -10, 10, 10)

    if items_rect.isNull():
        items_rect = QRectF(0, 0, 10, 10)

    width, height = items_rect.width(), items_rect.height()
    rect_ratio = float(width) / height

    # Keep a fixed aspect ratio.
    aspect_ratio = 1.618
    if rect_ratio > aspect_ratio:
        height = int(height * rect_ratio / aspect_ratio)
    else:
        width = int(width * aspect_ratio / rect_ratio)

    target_rect = QRectF(0, 0, width, height)
    source_rect = QRectF(0, 0, width, height)
    source_rect.moveCenter(items_rect.center())

    gen.setSize(target_rect.size().toSize())
    gen.setViewBox(target_rect)

    painter = QPainter(gen)

    # Draw background.
    painter.setBrush(QBrush(Qt.white))
    painter.drawRect(target_rect)

    # Render the scene
    scene.render(painter, target_rect, source_rect)
    painter.end()

    buffer_str = bytes(svg_buffer.buffer())
    return buffer_str.decode("utf-8")