class ResizableImage(QLabel):
    def __init__(self, filename, height, min_scale, max_scale):
        super(ResizableImage, self).__init__()
        self.setAlignment(Qt.AlignCenter)
        self.full_pixmap = None
        self.scaled_pixmap = None
        self.aspect = None
        self.set_file(filename)
        self.set_height(height)
        self.min_height = self.full_pixmap.height() * min_scale * self.aspect
        self.min_width = self.full_pixmap.width() * min_scale / self.aspect
        self.max_height = self.full_pixmap.height() * max_scale * self.aspect
        self.max_width = self.full_pixmap.width() * max_scale / self.aspect

    def set_file(self, filename):
        self.full_pixmap = QPixmap(filename)
        self.aspect = float(self.full_pixmap.height()) / self.full_pixmap.width()
        if self.scaled_pixmap is not None:
            self.set_height(self.scaled_pixmap.height())

    def set_height(self, height):
        self.scaled_pixmap = self.full_pixmap.scaledToHeight(height, Qt.SmoothTransformation)
        self.setPixmap(self.scaled_pixmap)

    def set_width(self, width):
        self.scaled_pixmap = self.full_pixmap.scaledToWidth(width, Qt.SmoothTransformation)
        self.setPixmap(self.scaled_pixmap)

    def resizeEvent(self, ev):
        width, height = ev.size().width(), ev.size().height()
        label_aspect = height / width
        if label_aspect > self.aspect:
            self.set_width(min(max(.9 * width, self.min_width), self.max_width))
        else:
            self.set_height(min(max(.9 * height, self.min_height), self.max_height))
Esempio n. 2
0
    def updateScreen(self,
                     filename,
                     xmlPath,
                     x=0,
                     y=0,
                     w=0,
                     h=0,
                     reloadMode=False):
        """
        Update the screen
        """
        self.imagePath = filename

        if not reloadMode:
            self.tableModel.mylist = []
            self.tableModel.beginResetModel()
            self.tableModel.endResetModel()

        pixmap = QPixmap(filename)
        if pixmap is not None:
            self.origWidth = pixmap.width()
            self.origHeight = pixmap.height()

            self.screenResolutionLabel.setText(
                "Resolution=%sx%s" % (self.origWidth, self.origHeight))

            #portrait
            if self.origWidth < self.origHeight:
                pixmap = pixmap.scaledToHeight(Settings.getInt(
                    'MobileAndroid', 'resolution-screen-height'),
                                               mode=Qt.SmoothTransformation)
                self.mobileImageLabel.setPixmap(pixmap)
            else:
                pixmap = pixmap.scaledToWidth(Settings.getInt(
                    'MobileAndroid', 'resolution-screen-width'),
                                              mode=Qt.SmoothTransformation)
                self.mobileImageLabel.setPixmap(pixmap)

            self.drawRectangle(x=x, y=y, w=w, h=h)

        self.resize(pixmap.width(), pixmap.height())

        # convert xml to dict
        if len(xmlPath):
            f = QFile(xmlPath)
            if f.open(QIODevice.ReadOnly):
                document = QDomDocument()
                if document.setContent(f):
                    newModel = DomModel(document, self)
                    self.mobileTreeView.setModel(newModel)
                    self.mobileTreeView.expandAll()
                    self.mobileTreeView.resizeColumnToContents(0)
                f.close()
class FieldItemGraphicsPixmapItem(QGraphicsPixmapItem):
    """this class provides a pixmap item with a preset image for the item"""

    #constructor
    def __init__(self, graphics_list):
        super().__init__()
        self.available_graphics = graphics_list
        self.current_graphic = QPixmap(self.available_graphics[0])
        self.setPixmap(self.current_graphic.scaledToWidth(25,1))
        self.setFlag(QGraphicsItem.ItemIsMovable) #allow us to move the graphic in the scene

    def update_status(self):
        pass
Esempio n. 4
0
class FieldItemGraphicsPixmapItem(QGraphicsPixmapItem):
    """this class provides a pixmap item with a preset image for the item"""

    #constructor
    def __init__(self, graphics_list):
        super().__init__()
        self.available_graphics = graphics_list
        self.current_graphic = QPixmap(self.available_graphics[0])
        self.setPixmap(self.current_graphic.scaledToWidth(25, 1))
        self.setFlag(QGraphicsItem.ItemIsMovable
                     )  #allow us to move the graphic in the scene

    def update_status(self):
        pass
    def _createLayout(self):

        l = QVBoxLayout()
        l.setContentsMargins(0, 0, 0, 0)

        l.addWidget(self.warning_label)

        logo = QLabel(self)

        pix = QPixmap(resource_path('images/logo.png'))
        pix = pix.scaledToWidth(400, Qt.SmoothTransformation)
        logo.setPixmap(pix)
        l.addWidget(logo)

        l.addWidget(self.widgets, 1)

        self.setLayout(l)
Esempio n. 6
0
    def __init__(self, owner=None):
        super(ScanWizard, self).__init__(owner)

        self.__document_name = None

        # self.setOption(QWizard.NoBackButtonOnStartPage)
        self.setOptions(QWizard.NoDefaultButton | QWizard.NoBackButtonOnStartPage | QWizard.NoCancelButton)
        self.mode = ScanningMode.SHOW_INTRO
        self.geo = GeometryHelper()
        self.setOption(QWizard.HaveHelpButton, False)

        wavePixmap = QPixmap(":/icons/icons/wave.png")
        self.setPixmap(QWizard.BackgroundPixmap, wavePixmap.scaledToWidth(160, Qt.SmoothTransformation))

        # wizard pages
        self.introPage = InstructionsWidget()
        self.createNewScanPage = CreateNewScanWidget()
        self.firstScanProgressPage = ScanningProgressWizpage(True)
        self.secondScanProgressPage = ScanningProgressWizpage(False)
        self.scanningCompleteInstallNow = ScanningCompleteInstallNowWidget()
        self.listOfExistingScans = ListOfExistingScanFilesWidget()
        self.compareTwoScans = CompareTwoScansWidget()
        self.selectExportType = SelectExportTypeWidget()
        self.exportDataPage = ExportDataWidget()

        self.setPage(WizardPage.INTRO, self.introPage)
        self.setPage(WizardPage.CREATE_NEW, self.createNewScanPage)
        self.setPage(WizardPage.LIST_OF_EXISTING_SCANS, self.listOfExistingScans)
        self.setPage(WizardPage.COMPARE_TWO_SCANS, self.compareTwoScans)
        self.setPage(WizardPage.SELECT_EXPORT_TYPE, self.selectExportType)
        self.setPage(WizardPage.EXPORT_DATA, self.exportDataPage)

        self.introPage.beforeInstalling.connect(self.onNewScan)
        self.introPage.afterInstalling.connect(self.onSelectExistingScan)

        # self.__current_anim = None

        # hook 'next/continue' button, so if its hit on page 1 - we can quit
        self.button(QWizard.NextButton).clicked.connect(self.onNextButtonHit)
        self.currentIdChanged.connect(self.onPageChanged)

        # self.setWizardStyle(QWizard.ModernStyle)
        self.setStartId(WizardPage.INTRO)
Esempio n. 7
0
	def __init__(self, owner = None):
		super(ScanWizard, self).__init__(owner)

		self.__document_name = None

		#self.setOption(QWizard.NoBackButtonOnStartPage)
		self.setOptions(QWizard.NoDefaultButton | QWizard.NoBackButtonOnStartPage | QWizard.NoCancelButton)
		self.mode = ScanningMode.SHOW_INTRO
		self.geo = GeometryHelper()
		self.setOption(QWizard.HaveHelpButton, False)

		wavePixmap = QPixmap(":/icons/icons/wave.png")
		self.setPixmap(QWizard.BackgroundPixmap, wavePixmap.scaledToWidth(160, Qt.SmoothTransformation))

		# wizard pages
		self.introPage = InstructionsWidget()
		self.createNewScanPage = CreateNewScanWidget()
		self.firstScanProgressPage = ScanningProgressWizpage(True)
		self.secondScanProgressPage = ScanningProgressWizpage(False)
		self.scanningCompleteInstallNow = ScanningCompleteInstallNowWidget()
		self.listOfExistingScans = ListOfExistingScanFilesWidget()
		self.compareTwoScans = CompareTwoScansWidget()
		self.selectExportType = SelectExportTypeWidget()
		self.exportDataPage = ExportDataWidget()

		self.setPage(WizardPage.INTRO, self.introPage)
		self.setPage(WizardPage.CREATE_NEW, self.createNewScanPage)
		self.setPage(WizardPage.LIST_OF_EXISTING_SCANS, self.listOfExistingScans)
		self.setPage(WizardPage.COMPARE_TWO_SCANS, self.compareTwoScans)
		self.setPage(WizardPage.SELECT_EXPORT_TYPE, self.selectExportType)
		self.setPage(WizardPage.EXPORT_DATA, self.exportDataPage)

		self.introPage.beforeInstalling.connect(self.onNewScan)
		self.introPage.afterInstalling.connect(self.onSelectExistingScan)

		#self.__current_anim = None

		# hook 'next/continue' button, so if its hit on page 1 - we can quit
		self.button(QWizard.NextButton).clicked.connect(self.onNextButtonHit)
		self.currentIdChanged.connect(self.onPageChanged)

		#self.setWizardStyle(QWizard.ModernStyle)
		self.setStartId(WizardPage.INTRO)
Esempio n. 8
0
    def paint(self, painter, option, index):
        filePath = self.model.filePath(index)
        fileName = self.model.fileName(index)
        r = option.rect

        img = QPixmap(filePath)
        if img.isNull():
            # If not image file, try to load icon with QFileIconProvider
            # according to file type (extension name).
            # Currently not work as intended.
            fileInfo = self.model.fileInfo(index)
            icon = QFileIconProvider().icon(fileInfo)
            img = icon.pixmap(QSize(32, 32))

        # Scale to height, align center horizontally, align bottom vertically.
        if img.height() > self.thumbHeight:
            img = img.scaledToHeight(self.thumbHeight, Qt.SmoothTransformation)
        if img.width() > self.thumbHeight:
            img = img.scaledToWidth(self.thumbHeight, Qt.SmoothTransformation)
        imgLeft = (self.width - img.width()) / 2
        imgTop = self.thumbHeight - img.height()
        painter.drawPixmap(r.left() + imgLeft, r.top() + imgTop, img)

        rect = QRect(r.left(),
                     r.top() + self.thumbHeight, self.width, self.nameHeight)
        flag = Qt.AlignHCenter | Qt.TextWrapAnywhere
        # get the bounding rectangle of the fileName
        bdRect = painter.boundingRect(rect, flag, fileName)
        if bdRect.height() < rect.height():
            rect = bdRect

        if option.state & QStyle.State_Selected:
            painter.setBrush(self.parent().palette().highlight())
            painter.drawRoundedRect(rect, 5, 5)
            pen = QPen(self.parent().palette().highlightedText(), 1,
                       Qt.SolidLine)
        else:
            pen = QPen(self.parent().palette().text(), 1, Qt.SolidLine)

        painter.setPen(pen)
        painter.drawText(rect, flag, fileName)
Esempio n. 9
0
    def paint(self, painter, option, index):
        filePath = self.model.filePath(index)
        fileName = self.model.fileName(index)
        r = option.rect

        img = QPixmap(filePath)
        if img.isNull():
            # If not image file, try to load icon with QFileIconProvider
            # according to file type (extension name).
            # Currently not work as intended.
            fileInfo = self.model.fileInfo(index)
            icon = QFileIconProvider().icon(fileInfo)
            img = icon.pixmap(QSize(32, 32))

        # Scale to height, align center horizontally, align bottom vertically.
        if img.height() > self.thumbHeight:
            img = img.scaledToHeight(self.thumbHeight, Qt.SmoothTransformation)
        if img.width() > self.thumbHeight:
            img = img.scaledToWidth(self.thumbHeight, 
                    Qt.SmoothTransformation)
        imgLeft = (self.width - img.width()) / 2
        imgTop = self.thumbHeight - img.height()
        painter.drawPixmap(r.left()+imgLeft, r.top()+imgTop, img)

        rect = QRect(r.left(), r.top()+self.thumbHeight,
                     self.width, self.nameHeight)
        flag = Qt.AlignHCenter | Qt.TextWrapAnywhere
        # get the bounding rectangle of the fileName
        bdRect = painter.boundingRect(rect, flag, fileName)
        if bdRect.height() < rect.height():
            rect = bdRect

        if option.state & QStyle.State_Selected:
            painter.setBrush(self.parent().palette().highlight())
            painter.drawRoundedRect(rect, 5, 5)
            pen = QPen(self.parent().palette().highlightedText(), 1, Qt.SolidLine)
        else:
            pen = QPen(self.parent().palette().text(), 1, Qt.SolidLine)

        painter.setPen(pen)
        painter.drawText(rect, flag, fileName)
Esempio n. 10
0
class View(QGraphicsView):

    fitModes = {'view_fitBest', 'view_fitWidth', 'view_fitHeight', 'view_fitSize'}

    def __init__(self, fileName, fitMode):

        super().__init__()

        self.setFrameShape(QFrame.NoFrame)
        self.fitMode = fitMode
        self.setBackgroundBrush(QBrush(QColor(Config.backgroundColor)))
        self.openFile(fileName)


    def openFile(self, fileName):

        self.oshiri = Oshiri(fileName, 'r')
        self.loadFonts()

        self.page = 0
        self.display(self.oshiri.index[self.page])


    def display(self, page):

        scene = QGraphicsScene()
        self.setScene(scene)

        self.originalImage = QPixmap()
        self.originalImage.loadFromData(self.oshiri.getImage(page['image']))
        self.image = self.scene().addPixmap(self.originalImage)

        self.contents = page['contents']
        self.elements = []
        for item in page['contents']:
            shape = item['style'].get('shape', 'rectangle')
            shapeArgs = (item, self.image.pixmap().width(), self.image.pixmap().height())
            if   shape == 'ellipse':   newItem = shapes.Ellipse(*shapeArgs)
            elif shape == 'rectangle': newItem = shapes.Rectangle(*shapeArgs)
            self.elements.append(newItem)
            self.scene().addItem(newItem)

        self.updateView()


    def resizeEvent(self, sizes):

        super().resizeEvent(sizes)
        self.updateView()


    def setFitMode(self, mode):

        self.fitMode = mode

        self.updateView()

        if self.fitMode == 'view_fitWidth':
            self.centerOn(0, 0)
            self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        else:
            self.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded)

        Config.checkedActions ^= __class__.fitModes
        Config.checkedActions.add(self.fitMode)


    def scaleImage(self):

        self.scaledImage = self.originalImage

        if self.fitMode != 'view_fitSize':
            self.scaledImage = {
                'view_fitBest':   self.originalImage.scaled(self.width(), self.height(), Qt.KeepAspectRatio, Qt.SmoothTransformation),
                'view_fitWidth':  self.originalImage.scaledToWidth(self.width(), Qt.SmoothTransformation),
                'view_fitHeight': self.originalImage.scaledToHeight(self.height(), Qt.SmoothTransformation)
            }[self.fitMode]

        self.image.setPixmap(self.scaledImage)

        self.imageWidth = self.image.pixmap().width()
        self.imageHeight = self.image.pixmap().height()


    def updateView(self):

        self.scaleImage()

        self.scene().setSceneRect(0, 0, self.imageWidth, self.imageHeight)

        for element in self.elements:
            element.resize(self.imageWidth, self.imageHeight)


    def loadFonts(self):

        for font in self.oshiri.getFonts():
            QFontDatabase().addApplicationFontFromData(font)


    def previousPage(self):

        if self.page > 0: self.page -= 1
        self.display(self.oshiri.index[self.page])


    def nextPage(self):

        if self.page < len(self.oshiri.index) - 1: self.page += 1
        self.display(self.oshiri.index[self.page])