示例#1
0
class PageListEditor(QWidget):

    firstFrontCoverChanged = pyqtSignal(int)
    listOrderChanged = pyqtSignal()
    modified = pyqtSignal()

    pageTypeNames = {
        PageType.FrontCover: "Front Cover",
        PageType.InnerCover: "Inner Cover",
        PageType.Advertisement: "Advertisement",
        PageType.Roundup: "Roundup",
        PageType.Story: "Story",
        PageType.Editorial: "Editorial",
        PageType.Letters: "Letters",
        PageType.Preview: "Preview",
        PageType.BackCover: "Back Cover",
        PageType.Other: "Other",
        PageType.Deleted: "Deleted",
    }

    def __init__(self, parent):
        super(PageListEditor, self).__init__(parent)

        uic.loadUi(ComicTaggerSettings.getUIFile('pagelisteditor.ui'), self)

        self.pageWidget = CoverImageWidget(self.pageContainer,
                                           CoverImageWidget.ArchiveMode)
        gridlayout = QGridLayout(self.pageContainer)
        gridlayout.addWidget(self.pageWidget)
        gridlayout.setContentsMargins(0, 0, 0, 0)
        self.pageWidget.showControls = False

        self.resetPage()

        # Add the entries to the manga combobox
        self.comboBox.addItem("", "")
        self.comboBox.addItem(self.pageTypeNames[PageType.FrontCover],
                              PageType.FrontCover)
        self.comboBox.addItem(self.pageTypeNames[PageType.InnerCover],
                              PageType.InnerCover)
        self.comboBox.addItem(self.pageTypeNames[PageType.Advertisement],
                              PageType.Advertisement)
        self.comboBox.addItem(self.pageTypeNames[PageType.Roundup],
                              PageType.Roundup)
        self.comboBox.addItem(self.pageTypeNames[PageType.Story],
                              PageType.Story)
        self.comboBox.addItem(self.pageTypeNames[PageType.Editorial],
                              PageType.Editorial)
        self.comboBox.addItem(self.pageTypeNames[PageType.Letters],
                              PageType.Letters)
        self.comboBox.addItem(self.pageTypeNames[PageType.Preview],
                              PageType.Preview)
        self.comboBox.addItem(self.pageTypeNames[PageType.BackCover],
                              PageType.BackCover)
        self.comboBox.addItem(self.pageTypeNames[PageType.Other],
                              PageType.Other)
        self.comboBox.addItem(self.pageTypeNames[PageType.Deleted],
                              PageType.Deleted)

        self.listWidget.itemSelectionChanged.connect(self.changePage)
        itemMoveEvents(self.listWidget).connect(self.itemMoveEvent)
        self.comboBox.activated.connect(self.changePageType)
        self.btnUp.clicked.connect(self.moveCurrentUp)
        self.btnDown.clicked.connect(self.moveCurrentDown)
        self.pre_move_row = -1
        self.first_front_page = None

    def resetPage(self):
        self.pageWidget.clear()
        self.comboBox.setDisabled(True)
        self.comic_archive = None
        self.pages_list = None

    def moveCurrentUp(self):
        row = self.listWidget.currentRow()
        if row > 0:
            item = self.listWidget.takeItem(row)
            self.listWidget.insertItem(row - 1, item)
            self.listWidget.setCurrentRow(row - 1)
            self.listOrderChanged.emit()
            self.emitFrontCoverChange()
            self.modified.emit()

    def moveCurrentDown(self):
        row = self.listWidget.currentRow()
        if row < self.listWidget.count() - 1:
            item = self.listWidget.takeItem(row)
            self.listWidget.insertItem(row + 1, item)
            self.listWidget.setCurrentRow(row + 1)
            self.listOrderChanged.emit()
            self.emitFrontCoverChange()
            self.modified.emit()

    def itemMoveEvent(self, s):
        #print "move event: ", s, self.listWidget.currentRow()
        if s == "start":
            self.pre_move_row = self.listWidget.currentRow()
        if s == "finish":
            if self.pre_move_row != self.listWidget.currentRow():
                self.listOrderChanged.emit()
                self.emitFrontCoverChange()
                self.modified.emit()

    def changePageType(self, i):
        new_type = self.comboBox.itemData(i).toString()
        if self.getCurrentPageType() != new_type:
            self.setCurrentPageType(new_type)
            self.emitFrontCoverChange()
            self.modified.emit()

    def changePage(self):
        row = self.listWidget.currentRow()
        pagetype = self.getCurrentPageType()

        i = self.comboBox.findData(pagetype)
        self.comboBox.setCurrentIndex(i)

        #idx = int(str (self.listWidget.item( row ).text()))
        idx = int(
            self.listWidget.item(row).data(
                Qt.UserRole).toPyObject()[0]['Image'])

        if self.comic_archive is not None:
            self.pageWidget.setArchive(self.comic_archive, idx)

    def getFirstFrontCover(self):
        frontCover = 0
        for i in range(self.listWidget.count()):
            item = self.listWidget.item(i)
            page_dict = item.data(Qt.UserRole).toPyObject()[0]
            if 'Type' in page_dict and page_dict['Type'] == PageType.FrontCover:
                frontCover = int(page_dict['Image'])
                break
        return frontCover

    def getCurrentPageType(self):
        row = self.listWidget.currentRow()
        page_dict = self.listWidget.item(row).data(Qt.UserRole).toPyObject()[0]
        if 'Type' in page_dict:
            return page_dict['Type']
        else:
            return ""

    def setCurrentPageType(self, t):
        row = self.listWidget.currentRow()
        page_dict = self.listWidget.item(row).data(Qt.UserRole).toPyObject()[0]

        if t == "":
            if 'Type' in page_dict:
                del (page_dict['Type'])
        else:
            page_dict['Type'] = str(t)

        item = self.listWidget.item(row)
        # wrap the dict in a tuple to keep from being converted to QStrings
        item.setData(Qt.UserRole, (page_dict, ))
        item.setText(self.listEntryText(page_dict))

    def setData(self, comic_archive, pages_list):
        self.comic_archive = comic_archive
        self.pages_list = pages_list
        if pages_list is not None and len(pages_list) > 0:
            self.comboBox.setDisabled(False)

        self.listWidget.itemSelectionChanged.disconnect(self.changePage)

        self.listWidget.clear()
        for p in pages_list:
            item = QListWidgetItem(self.listEntryText(p))
            # wrap the dict in a tuple to keep from being converted to QStrings
            item.setData(Qt.UserRole, (p, ))

            self.listWidget.addItem(item)
        self.first_front_page = self.getFirstFrontCover()
        self.listWidget.itemSelectionChanged.connect(self.changePage)
        self.listWidget.setCurrentRow(0)

    def listEntryText(self, page_dict):
        text = str(int(page_dict['Image']) + 1)
        if 'Type' in page_dict:
            text += " (" + self.pageTypeNames[page_dict['Type']] + ")"
        return text

    def getPageList(self):
        page_list = []
        for i in range(self.listWidget.count()):
            item = self.listWidget.item(i)
            page_list.append(item.data(Qt.UserRole).toPyObject()[0])
        return page_list

    def emitFrontCoverChange(self):
        if self.first_front_page != self.getFirstFrontCover():
            self.first_front_page = self.getFirstFrontCover()
            self.firstFrontCoverChanged.emit(self.first_front_page)

    def setMetadataStyle(self, data_style):

        # depending on the current data style, certain fields are disabled

        inactive_color = QColor(255, 170, 150)
        active_palette = self.comboBox.palette()

        inactive_palette3 = self.comboBox.palette()
        inactive_palette3.setColor(QPalette.Base, inactive_color)

        if data_style == MetaDataStyle.CIX:
            self.btnUp.setEnabled(True)
            self.btnDown.setEnabled(True)
            self.comboBox.setEnabled(True)
            self.listWidget.setEnabled(True)

            self.listWidget.setPalette(active_palette)

        elif data_style == MetaDataStyle.CBI:
            self.btnUp.setEnabled(False)
            self.btnDown.setEnabled(False)
            self.comboBox.setEnabled(False)
            self.listWidget.setEnabled(False)

            self.listWidget.setPalette(inactive_palette3)

        elif data_style == MetaDataStyle.CoMet:
            pass

        # make sure combo is disabled when no list
        if self.comic_archive is None:
            self.comboBox.setEnabled(False)
示例#2
0
class PageBrowserWindow(QtGui.QDialog):
    def __init__(self, parent, metadata):
        super(PageBrowserWindow, self).__init__(parent)

        uic.loadUi(ComicTaggerSettings.getUIFile('pagebrowser.ui'), self)

        self.pageWidget = CoverImageWidget(self.pageContainer,
                                           CoverImageWidget.ArchiveMode)
        gridlayout = QtGui.QGridLayout(self.pageContainer)
        gridlayout.addWidget(self.pageWidget)
        gridlayout.setContentsMargins(0, 0, 0, 0)
        self.pageWidget.showControls = False

        self.setWindowFlags(self.windowFlags() | QtCore.Qt.WindowSystemMenuHint
                            | QtCore.Qt.WindowMaximizeButtonHint)

        self.comic_archive = None
        self.page_count = 0
        self.current_page_num = 0
        self.metadata = metadata

        self.buttonBox.button(QtGui.QDialogButtonBox.Close).setDefault(True)
        if platform.system() == "Darwin":
            self.btnPrev.setText("<<")
            self.btnNext.setText(">>")
        else:
            self.btnPrev.setIcon(
                QtGui.QIcon(ComicTaggerSettings.getGraphic('left.png')))
            self.btnNext.setIcon(
                QtGui.QIcon(ComicTaggerSettings.getGraphic('right.png')))

        self.btnNext.clicked.connect(self.nextPage)
        self.btnPrev.clicked.connect(self.prevPage)
        self.show()

        self.btnNext.setEnabled(False)
        self.btnPrev.setEnabled(False)

    def reset(self):
        self.comic_archive = None
        self.page_count = 0
        self.current_page_num = 0
        self.metadata = None

        self.btnNext.setEnabled(False)
        self.btnPrev.setEnabled(False)
        self.pageWidget.clear()

    def setComicArchive(self, ca):

        self.comic_archive = ca
        self.page_count = ca.getNumberOfPages()
        self.current_page_num = 0
        self.pageWidget.setArchive(self.comic_archive)
        self.setPage()

        if self.page_count > 1:
            self.btnNext.setEnabled(True)
            self.btnPrev.setEnabled(True)

    def nextPage(self):

        if self.current_page_num + 1 < self.page_count:
            self.current_page_num += 1
        else:
            self.current_page_num = 0
        self.setPage()

    def prevPage(self):

        if self.current_page_num - 1 >= 0:
            self.current_page_num -= 1
        else:
            self.current_page_num = self.page_count - 1
        self.setPage()

    def setPage(self):
        if self.metadata is not None:
            archive_page_index = self.metadata.getArchivePageIndex(
                self.current_page_num)
        else:
            archive_page_index = self.current_page_num

        self.pageWidget.setPage(archive_page_index)
        self.setWindowTitle("Page Browser - Page {0} (of {1}) ".format(
            self.current_page_num + 1, self.page_count))
示例#3
0
class PageListEditor(QWidget):

    firstFrontCoverChanged = pyqtSignal(int)
    listOrderChanged = pyqtSignal()
    modified = pyqtSignal()

    pageTypeNames = {
        PageType.FrontCover: "Front Cover",
        PageType.InnerCover: "Inner Cover",
        PageType.Advertisement: "Advertisement",
        PageType.Roundup: "Roundup",
        PageType.Story: "Story",
        PageType.Editorial: "Editorial",
        PageType.Letters: "Letters",
        PageType.Preview: "Preview",
        PageType.BackCover: "Back Cover",
        PageType.Other: "Other",
        PageType.Deleted: "Deleted",
    }

    def __init__(self, parent):
        super(PageListEditor, self).__init__(parent)

        uic.loadUi(ComicTaggerSettings.getUIFile('pagelisteditor.ui'), self)

        self.pageWidget = CoverImageWidget(
            self.pageContainer, CoverImageWidget.ArchiveMode)
        gridlayout = QGridLayout(self.pageContainer)
        gridlayout.addWidget(self.pageWidget)
        gridlayout.setContentsMargins(0, 0, 0, 0)
        self.pageWidget.showControls = False

        self.resetPage()

        # Add the entries to the manga combobox
        self.comboBox.addItem("", "")
        self.comboBox.addItem(
            self.pageTypeNames[PageType.FrontCover], PageType.FrontCover)
        self.comboBox.addItem(
            self.pageTypeNames[PageType.InnerCover], PageType.InnerCover)
        self.comboBox.addItem(
            self.pageTypeNames[PageType.Advertisement], PageType.Advertisement)
        self.comboBox.addItem(
            self.pageTypeNames[PageType.Roundup], PageType.Roundup)
        self.comboBox.addItem(
            self.pageTypeNames[PageType.Story], PageType.Story)
        self.comboBox.addItem(
            self.pageTypeNames[PageType.Editorial], PageType.Editorial)
        self.comboBox.addItem(
            self.pageTypeNames[PageType.Letters], PageType.Letters)
        self.comboBox.addItem(
            self.pageTypeNames[PageType.Preview], PageType.Preview)
        self.comboBox.addItem(
            self.pageTypeNames[PageType.BackCover], PageType.BackCover)
        self.comboBox.addItem(
            self.pageTypeNames[PageType.Other], PageType.Other)
        self.comboBox.addItem(
            self.pageTypeNames[PageType.Deleted], PageType.Deleted)

        self.listWidget.itemSelectionChanged.connect(self.changePage)
        itemMoveEvents(self.listWidget).connect(self.itemMoveEvent)
        self.comboBox.activated.connect(self.changePageType)
        self.btnUp.clicked.connect(self.moveCurrentUp)
        self.btnDown.clicked.connect(self.moveCurrentDown)
        self.pre_move_row = -1
        self.first_front_page = None

    def resetPage(self):
        self.pageWidget.clear()
        self.comboBox.setDisabled(True)
        self.comic_archive = None
        self.pages_list = None

    def moveCurrentUp(self):
        row = self.listWidget.currentRow()
        if row > 0:
            item = self.listWidget.takeItem(row)
            self.listWidget.insertItem(row - 1, item)
            self.listWidget.setCurrentRow(row - 1)
            self.listOrderChanged.emit()
            self.emitFrontCoverChange()
            self.modified.emit()

    def moveCurrentDown(self):
        row = self.listWidget.currentRow()
        if row < self.listWidget.count() - 1:
            item = self.listWidget.takeItem(row)
            self.listWidget.insertItem(row + 1, item)
            self.listWidget.setCurrentRow(row + 1)
            self.listOrderChanged.emit()
            self.emitFrontCoverChange()
            self.modified.emit()

    def itemMoveEvent(self, s):
        # print "move event: ", s, self.listWidget.currentRow()
        if s == "start":
            self.pre_move_row = self.listWidget.currentRow()
        if s == "finish":
            if self.pre_move_row != self.listWidget.currentRow():
                self.listOrderChanged.emit()
                self.emitFrontCoverChange()
                self.modified.emit()

    def changePageType(self, i):
        new_type = self.comboBox.itemData(i).toString()
        if self.getCurrentPageType() != new_type:
            self.setCurrentPageType(new_type)
            self.emitFrontCoverChange()
            self.modified.emit()

    def changePage(self):
        row = self.listWidget.currentRow()
        pagetype = self.getCurrentPageType()

        i = self.comboBox.findData(pagetype)
        self.comboBox.setCurrentIndex(i)

        #idx = int(str (self.listWidget.item(row).text()))
        idx = int(self.listWidget.item(row).data(
            Qt.UserRole).toPyObject()[0]['Image'])

        if self.comic_archive is not None:
            self.pageWidget.setArchive(self.comic_archive, idx)

    def getFirstFrontCover(self):
        frontCover = 0
        for i in range(self.listWidget.count()):
            item = self.listWidget.item(i)
            page_dict = item.data(Qt.UserRole).toPyObject()[0]
            if 'Type' in page_dict and page_dict[
                    'Type'] == PageType.FrontCover:
                frontCover = int(page_dict['Image'])
                break
        return frontCover

    def getCurrentPageType(self):
        row = self.listWidget.currentRow()
        page_dict = self.listWidget.item(row).data(Qt.UserRole).toPyObject()[0]
        if 'Type' in page_dict:
            return page_dict['Type']
        else:
            return ""

    def setCurrentPageType(self, t):
        row = self.listWidget.currentRow()
        page_dict = self.listWidget.item(row).data(Qt.UserRole).toPyObject()[0]

        if t == "":
            if 'Type' in page_dict:
                del(page_dict['Type'])
        else:
            page_dict['Type'] = str(t)

        item = self.listWidget.item(row)
        # wrap the dict in a tuple to keep from being converted to QStrings
        item.setData(Qt.UserRole, (page_dict,))
        item.setText(self.listEntryText(page_dict))

    def setData(self, comic_archive, pages_list):
        self.comic_archive = comic_archive
        self.pages_list = pages_list
        if pages_list is not None and len(pages_list) > 0:
            self.comboBox.setDisabled(False)

        self.listWidget.itemSelectionChanged.disconnect(self.changePage)

        self.listWidget.clear()
        for p in pages_list:
            item = QListWidgetItem(self.listEntryText(p))
            # wrap the dict in a tuple to keep from being converted to QStrings
            item.setData(Qt.UserRole, (p,))

            self.listWidget.addItem(item)
        self.first_front_page = self.getFirstFrontCover()
        self.listWidget.itemSelectionChanged.connect(self.changePage)
        self.listWidget.setCurrentRow(0)

    def listEntryText(self, page_dict):
        text = str(int(page_dict['Image']) + 1)
        if 'Type' in page_dict:
            text += " (" + self.pageTypeNames[page_dict['Type']] + ")"
        return text

    def getPageList(self):
        page_list = []
        for i in range(self.listWidget.count()):
            item = self.listWidget.item(i)
            page_list.append(item.data(Qt.UserRole).toPyObject()[0])
        return page_list

    def emitFrontCoverChange(self):
        if self.first_front_page != self.getFirstFrontCover():
            self.first_front_page = self.getFirstFrontCover()
            self.firstFrontCoverChanged.emit(self.first_front_page)

    def setMetadataStyle(self, data_style):

        # depending on the current data style, certain fields are disabled

        inactive_color = QColor(255, 170, 150)
        active_palette = self.comboBox.palette()

        inactive_palette3 = self.comboBox.palette()
        inactive_palette3.setColor(QPalette.Base, inactive_color)

        if data_style == MetaDataStyle.CIX:
            self.btnUp.setEnabled(True)
            self.btnDown.setEnabled(True)
            self.comboBox.setEnabled(True)
            self.listWidget.setEnabled(True)

            self.listWidget.setPalette(active_palette)

        elif data_style == MetaDataStyle.CBI:
            self.btnUp.setEnabled(False)
            self.btnDown.setEnabled(False)
            self.comboBox.setEnabled(False)
            self.listWidget.setEnabled(False)

            self.listWidget.setPalette(inactive_palette3)

        elif data_style == MetaDataStyle.CoMet:
            pass

        # make sure combo is disabled when no list
        if self.comic_archive is None:
            self.comboBox.setEnabled(False)
示例#4
0
文件: pagebrowser.py 项目: 2mny/mylar
class PageBrowserWindow(QtGui.QDialog):
	
	def __init__(self, parent, metadata):
		super(PageBrowserWindow, self).__init__(parent)
		
		uic.loadUi(ComicTaggerSettings.getUIFile('pagebrowser.ui' ), self)
		
		self.pageWidget = CoverImageWidget( self.pageContainer, CoverImageWidget.ArchiveMode )
		gridlayout = QtGui.QGridLayout( self.pageContainer )
		gridlayout.addWidget( self.pageWidget )
		gridlayout.setContentsMargins(0,0,0,0)
		self.pageWidget.showControls = False

		self.setWindowFlags(self.windowFlags() |
									  QtCore.Qt.WindowSystemMenuHint |
									  QtCore.Qt.WindowMaximizeButtonHint)
		
		self.comic_archive = None
		self.page_count = 0
		self.current_page_num = 0
		self.metadata = metadata
		
		self.buttonBox.button(QtGui.QDialogButtonBox.Close).setDefault(True)	
		if platform.system() == "Darwin":
			self.btnPrev.setText("<<")
			self.btnNext.setText(">>")
		else:
			self.btnPrev.setIcon(QtGui.QIcon( ComicTaggerSettings.getGraphic('left.png' )))
			self.btnNext.setIcon(QtGui.QIcon( ComicTaggerSettings.getGraphic('right.png')))
		
		self.btnNext.clicked.connect( self.nextPage )
		self.btnPrev.clicked.connect( self.prevPage )
		self.show()
		
		self.btnNext.setEnabled( False )
		self.btnPrev.setEnabled( False )
		
	def reset( self ):
		self.comic_archive = None
		self.page_count = 0
		self.current_page_num = 0
		self.metadata = None
		
		self.btnNext.setEnabled( False )
		self.btnPrev.setEnabled( False )
		self.pageWidget.clear()

	def setComicArchive(self, ca):

		self.comic_archive = ca
		self.page_count = ca.getNumberOfPages()
		self.current_page_num = 0
		self.pageWidget.setArchive( self.comic_archive )
		self.setPage()
	
		if 	self.page_count > 1:
			self.btnNext.setEnabled( True )
			self.btnPrev.setEnabled( True )

	def nextPage(self):
		
		if self.current_page_num + 1 < self.page_count:
			self.current_page_num += 1
		else:
			self.current_page_num = 0
		self.setPage()

	def prevPage(self):
		
		if self.current_page_num - 1 >= 0:
			self.current_page_num -= 1
		else:
			self.current_page_num = self.page_count - 1
		self.setPage()
			
	def setPage( self ):
		if self.metadata is not None:
			archive_page_index = self.metadata.getArchivePageIndex( self.current_page_num )
		else:
			archive_page_index =  self.current_page_num
			
		self.pageWidget.setPage( archive_page_index )
		self.setWindowTitle("Page Browser - Page {0} (of {1}) ".format(self.current_page_num+1, self.page_count ) )