Ejemplo n.º 1
0
    def __init__(self, parent=None, images=[]):
        QtGui.QWidget.__init__(self, parent)
        self.parent = parent
        self.title = _("images")

        ### model to store images ###
        self.modImgList = QtGui.QStandardItemModel(0, 1)
        self.add_images(images)

        ### listview to display images ###
        self.imgList = DragDropListWidget()
        self.imgList.setModel(self.modImgList)
        self.imgList.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
        self.imgList.selectionModel().selectionChanged.connect(self.insert_thumbnail)
        self.imgList.dropped.connect(self.add_images)

        ### preview thumbnail are stored in a dic ###
        self.thumbnailDic = {}
        self.previewW = QtGui.QLabel()
        self.checkPreviewW = QtGui.QCheckBox(_("preview"))
        self.checkPreviewW.clicked.connect(self.check_preview)
        self.insert_thumbnail()

        ### adding and deleting images ###
        self.imgAdd = QtGui.QPushButton(_("add"))
        self.imgAdd.clicked.connect(self.add_images_clicked)
        self.imgRemove = QtGui.QPushButton(_("remove"))
        self.imgRemove.clicked.connect(self.remove_images_clicked)

        ### layout ###
        imgBox = QtGui.QHBoxLayout()
        imgBox.addWidget(self.imgList)
        imgBox.addWidget(self.previewW)
        toolBox = QtGui.QHBoxLayout()
        toolBox.addWidget(self.imgAdd)
        toolBox.addWidget(self.imgRemove)
        toolBox.addWidget(self.checkPreviewW)
        toolBox.addStretch(0)
        layout = QtGui.QVBoxLayout(self)
        layout.addLayout(imgBox)
        layout.addLayout(toolBox)
Ejemplo n.º 2
0
class ImgTab(QtGui.QWidget):
    """ manages the images to be processed
        can take a list of url as argument """

    def __init__(self, parent=None, images=[]):
        QtGui.QWidget.__init__(self, parent)
        self.parent = parent
        self.title = _("images")

        ### model to store images ###
        self.modImgList = QtGui.QStandardItemModel(0, 1)
        self.add_images(images)

        ### listview to display images ###
        self.imgList = DragDropListWidget()
        self.imgList.setModel(self.modImgList)
        self.imgList.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
        self.imgList.selectionModel().selectionChanged.connect(self.insert_thumbnail)
        self.imgList.dropped.connect(self.add_images)

        ### preview thumbnail are stored in a dic ###
        self.thumbnailDic = {}
        self.previewW = QtGui.QLabel()
        self.checkPreviewW = QtGui.QCheckBox(_("preview"))
        self.checkPreviewW.clicked.connect(self.check_preview)
        self.insert_thumbnail()

        ### adding and deleting images ###
        self.imgAdd = QtGui.QPushButton(_("add"))
        self.imgAdd.clicked.connect(self.add_images_clicked)
        self.imgRemove = QtGui.QPushButton(_("remove"))
        self.imgRemove.clicked.connect(self.remove_images_clicked)

        ### layout ###
        imgBox = QtGui.QHBoxLayout()
        imgBox.addWidget(self.imgList)
        imgBox.addWidget(self.previewW)
        toolBox = QtGui.QHBoxLayout()
        toolBox.addWidget(self.imgAdd)
        toolBox.addWidget(self.imgRemove)
        toolBox.addWidget(self.checkPreviewW)
        toolBox.addStretch(0)
        layout = QtGui.QVBoxLayout(self)
        layout.addLayout(imgBox)
        layout.addLayout(toolBox)

    def add_images_clicked(self):
        """ dialog for adding images """
        url = QtGui.QFileDialog.getOpenFileNames(
            self,
            _("add images"),
            "",
            _(
                """Images (*.png *.jpeg *.jpg *.gif *.tiff *.tif
                                 *.PNG *.JPEG *.JPG *.GIF *.TIFF *.TIF)
                                 ;;All files (*)"""
            ),
        )
        self.add_images(url)

    def remove_images_clicked(self):
        """ delete selected images from the model
            and the thumbnail from dic """
        sel = self.imgList.selectionModel().selectedIndexes()
        for i in sel:
            self.delete_thumbnail(i.data())
            self.modImgList.removeRow(i.row())

    def add_images(self, url=[]):
        """ add an image in the model """
        li = []
        for i in url:
            li.append(str(i))
        img = verif_images(li)
        for i in img:
            self.modImgList.appendRow(Item(i))

    def return_imgs(self):
        """ return a list containning all images's url """
        nb = self.modImgList.rowCount()
        images = []
        for i in range(nb):
            images.append(str(self.modImgList.item(i).text()))
        return images

    def check_preview(self):
        """ show or hide thumdnail """
        if self.checkPreviewW.isChecked():
            self.insert_thumbnail()
        else:
            self.previewW.clear()

    def insert_thumbnail(self):
        """ insert the first selected image thumbnail """
        if self.checkPreviewW.isChecked():
            sel = self.imgList.selectionModel().selectedIndexes()
            if sel:
                img = sel[0].data()
                self.previewW.setPixmap(self.create_thumbnail(img))
            else:
                self.previewW.setPixmap(self.create_thumbnail("alpha"))

    def create_thumbnail(self, url="alpha"):
        """ return or create thumbnail from url
            thumbnail are stored in self.thumbnailDic """
        if url in self.thumbnailDic:
            return self.thumbnailDic[url]
        else:
            if url == "alpha":
                img = QtGui.QPixmap(200, 200)
                img.fill(QtGui.QColor(0, 0, 0, 0))
            else:
                img = QtGui.QPixmap(url).scaledToWidth(200)
            self.thumbnailDic[url] = img
            return img

    def delete_thumbnail(self, image):
        """ delete thumbnail from self.thumbnailDic """
        if image in self.thumbnailDic:
            del self.thumbnailDic[image]