class MatchSelectionWindow(QtGui.QDialog): volume_id = 0 def __init__(self, parent, matches, comic_archive): super(MatchSelectionWindow, self).__init__(parent) uic.loadUi(ComicTaggerSettings.getUIFile('matchselectionwindow.ui'), self) self.altCoverWidget = CoverImageWidget(self.altCoverContainer, CoverImageWidget.AltCoverMode) gridlayout = QtGui.QGridLayout(self.altCoverContainer) gridlayout.addWidget(self.altCoverWidget) gridlayout.setContentsMargins(0, 0, 0, 0) self.archiveCoverWidget = CoverImageWidget( self.archiveCoverContainer, CoverImageWidget.ArchiveMode) gridlayout = QtGui.QGridLayout(self.archiveCoverContainer) gridlayout.addWidget(self.archiveCoverWidget) gridlayout.setContentsMargins(0, 0, 0, 0) utils.reduceWidgetFontSize(self.twList) utils.reduceWidgetFontSize(self.teDescription, 1) self.setWindowFlags(self.windowFlags() | QtCore.Qt.WindowSystemMenuHint | QtCore.Qt.WindowMaximizeButtonHint) self.matches = matches self.comic_archive = comic_archive self.twList.currentItemChanged.connect(self.currentItemChanged) self.twList.cellDoubleClicked.connect(self.cellDoubleClicked) self.updateData() def updateData(self): self.setCoverImage() self.populateTable() self.twList.resizeColumnsToContents() self.twList.selectRow(0) path = self.comic_archive.path self.setWindowTitle(u"Select correct match: {0}".format( os.path.split(path)[1])) def populateTable(self): while self.twList.rowCount() > 0: self.twList.removeRow(0) self.twList.setSortingEnabled(False) row = 0 for match in self.matches: self.twList.insertRow(row) item_text = match['series'] item = QtGui.QTableWidgetItem(item_text) item.setData(QtCore.Qt.ToolTipRole, item_text) item.setData(QtCore.Qt.UserRole, (match, )) item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) self.twList.setItem(row, 0, item) if match['publisher'] is not None: item_text = u"{0}".format(match['publisher']) else: item_text = u"Unknown" item = QtGui.QTableWidgetItem(item_text) item.setData(QtCore.Qt.ToolTipRole, item_text) item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) self.twList.setItem(row, 1, item) month_str = u"" year_str = u"????" if match['month'] is not None: month_str = u"-{0:02d}".format(int(match['month'])) if match['year'] is not None: year_str = u"{0}".format(match['year']) item_text = year_str + month_str item = QtGui.QTableWidgetItem(item_text) item.setData(QtCore.Qt.ToolTipRole, item_text) item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) self.twList.setItem(row, 2, item) item_text = match['issue_title'] if item_text is None: item_text = "" item = QtGui.QTableWidgetItem(item_text) item.setData(QtCore.Qt.ToolTipRole, item_text) item.setFlags(QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled) self.twList.setItem(row, 3, item) row += 1 self.twList.resizeColumnsToContents() self.twList.setSortingEnabled(True) self.twList.sortItems(2, QtCore.Qt.AscendingOrder) self.twList.selectRow(0) self.twList.resizeColumnsToContents() self.twList.horizontalHeader().setStretchLastSection(True) def cellDoubleClicked(self, r, c): self.accept() def currentItemChanged(self, curr, prev): if curr is None: return if prev is not None and prev.row() == curr.row(): return self.altCoverWidget.setIssueID(self.currentMatch()['issue_id']) if self.currentMatch()['description'] is None: self.teDescription.setText("") else: self.teDescription.setText(self.currentMatch()['description']) def setCoverImage(self): self.archiveCoverWidget.setArchive(self.comic_archive) def currentMatch(self): row = self.twList.currentRow() match = self.twList.item(row, 0).data(QtCore.Qt.UserRole).toPyObject()[0] return match
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)
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)
class AutoTagMatchWindow(QtGui.QDialog): volume_id = 0 def __init__(self, parent, match_set_list, style, fetch_func): super(AutoTagMatchWindow, self).__init__(parent) uic.loadUi(ComicTaggerSettings.getUIFile('matchselectionwindow.ui' ), self) self.altCoverWidget = CoverImageWidget( self.altCoverContainer, CoverImageWidget.AltCoverMode ) gridlayout = QtGui.QGridLayout( self.altCoverContainer ) gridlayout.addWidget( self.altCoverWidget ) gridlayout.setContentsMargins(0,0,0,0) self.archiveCoverWidget = CoverImageWidget( self.archiveCoverContainer, CoverImageWidget.ArchiveMode ) gridlayout = QtGui.QGridLayout( self.archiveCoverContainer ) gridlayout.addWidget( self.archiveCoverWidget ) gridlayout.setContentsMargins(0,0,0,0) utils.reduceWidgetFontSize( self.twList ) utils.reduceWidgetFontSize( self.teDescription, 1 ) self.setWindowFlags(self.windowFlags() | QtCore.Qt.WindowSystemMenuHint | QtCore.Qt.WindowMaximizeButtonHint) self.skipButton = QtGui.QPushButton(self.tr("Skip to Next")) self.buttonBox.addButton(self.skipButton, QtGui.QDialogButtonBox.ActionRole) self.buttonBox.button(QtGui.QDialogButtonBox.Ok).setText("Accept and Write Tags") self.match_set_list = match_set_list self.style = style self.fetch_func = fetch_func self.current_match_set_idx = 0 self.twList.currentItemChanged.connect(self.currentItemChanged) self.twList.cellDoubleClicked.connect(self.cellDoubleClicked) self.skipButton.clicked.connect(self.skipToNext) self.updateData() def updateData( self): self.current_match_set = self.match_set_list[ self.current_match_set_idx ] if self.current_match_set_idx + 1 == len( self.match_set_list ): self.buttonBox.button(QtGui.QDialogButtonBox.Cancel).setDisabled(True) #self.buttonBox.button(QtGui.QDialogButtonBox.Ok).setText("Accept") self.skipButton.setText(self.tr("Skip")) self.setCoverImage() self.populateTable() self.twList.resizeColumnsToContents() self.twList.selectRow( 0 ) path = self.current_match_set.ca.path self.setWindowTitle( u"Select correct match or skip ({0} of {1}): {2}".format( self.current_match_set_idx+1, len( self.match_set_list ), os.path.split(path)[1] )) def populateTable( self ): while self.twList.rowCount() > 0: self.twList.removeRow(0) self.twList.setSortingEnabled(False) row = 0 for match in self.current_match_set.matches: self.twList.insertRow(row) item_text = match['series'] item = QtGui.QTableWidgetItem(item_text) item.setData( QtCore.Qt.ToolTipRole, item_text ) item.setData( QtCore.Qt.UserRole, (match,)) item.setFlags(QtCore.Qt.ItemIsSelectable| QtCore.Qt.ItemIsEnabled) self.twList.setItem(row, 0, item) if match['publisher'] is not None: item_text = u"{0}".format(match['publisher']) else: item_text = u"Unknown" item = QtGui.QTableWidgetItem(item_text) item.setData( QtCore.Qt.ToolTipRole, item_text ) item.setFlags(QtCore.Qt.ItemIsSelectable| QtCore.Qt.ItemIsEnabled) self.twList.setItem(row, 1, item) month_str = u"" year_str = u"????" if match['month'] is not None: month_str = u"-{0:02d}".format(int(match['month'])) if match['year'] is not None: year_str = u"{0}".format(match['year']) item_text = year_str + month_str item = QtGui.QTableWidgetItem(item_text) item.setData( QtCore.Qt.ToolTipRole, item_text ) item.setFlags(QtCore.Qt.ItemIsSelectable| QtCore.Qt.ItemIsEnabled) self.twList.setItem(row, 2, item) item_text = match['issue_title'] if item_text is None: item_text = "" item = QtGui.QTableWidgetItem(item_text) item.setData( QtCore.Qt.ToolTipRole, item_text ) item.setFlags(QtCore.Qt.ItemIsSelectable| QtCore.Qt.ItemIsEnabled) self.twList.setItem(row, 3, item) row += 1 self.twList.resizeColumnsToContents() self.twList.setSortingEnabled(True) self.twList.sortItems( 2 , QtCore.Qt.AscendingOrder ) self.twList.selectRow(0) self.twList.resizeColumnsToContents() self.twList.horizontalHeader().setStretchLastSection(True) def cellDoubleClicked( self, r, c ): self.accept() def currentItemChanged( self, curr, prev ): if curr is None: return if prev is not None and prev.row() == curr.row(): return self.altCoverWidget.setIssueID( self.currentMatch()['issue_id'] ) if self.currentMatch()['description'] is None: self.teDescription.setText ( "" ) else: self.teDescription.setText ( self.currentMatch()['description'] ) def setCoverImage( self ): ca = self.current_match_set.ca self.archiveCoverWidget.setArchive(ca) def currentMatch( self ): row = self.twList.currentRow() match = self.twList.item(row, 0).data( QtCore.Qt.UserRole ).toPyObject()[0] return match def accept(self): self.saveMatch() self.current_match_set_idx += 1 if self.current_match_set_idx == len( self.match_set_list ): # no more items QtGui.QDialog.accept(self) else: self.updateData() def skipToNext( self ): self.current_match_set_idx += 1 if self.current_match_set_idx == len( self.match_set_list ): # no more items QtGui.QDialog.reject(self) else: self.updateData() def reject(self): reply = QtGui.QMessageBox.question(self, self.tr("Cancel Matching"), self.tr("Are you sure you wish to cancel the matching process?"), QtGui.QMessageBox.Yes, QtGui.QMessageBox.No ) if reply == QtGui.QMessageBox.No: return QtGui.QDialog.reject(self) def saveMatch( self ): match = self.currentMatch() ca = self.current_match_set.ca md = ca.readMetadata( self.style ) if md.isEmpty: md = ca.metadataFromFilename() # now get the particular issue data cv_md = self.fetch_func( match ) if cv_md is None: QtGui.QMessageBox.critical(self, self.tr("Network Issue"), self.tr("Could not connect to ComicVine to get issue details!")) return QtGui.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.WaitCursor)) md.overlay( cv_md ) success = ca.writeMetadata( md, self.style ) ca.loadCache( [ MetaDataStyle.CBI, MetaDataStyle.CIX ] ) QtGui.QApplication.restoreOverrideCursor() if not success: QtGui.QMessageBox.warning(self, self.tr("Write Error"), self.tr("Saving the tags to the archive seemed to fail!"))
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))
class MatchSelectionWindow(QtGui.QDialog): volume_id = 0 def __init__(self, parent, matches, comic_archive): super(MatchSelectionWindow, self).__init__(parent) uic.loadUi(ComicTaggerSettings.getUIFile('matchselectionwindow.ui' ), self) self.altCoverWidget = CoverImageWidget( self.altCoverContainer, CoverImageWidget.AltCoverMode ) gridlayout = QtGui.QGridLayout( self.altCoverContainer ) gridlayout.addWidget( self.altCoverWidget ) gridlayout.setContentsMargins(0,0,0,0) self.archiveCoverWidget = CoverImageWidget( self.archiveCoverContainer, CoverImageWidget.ArchiveMode ) gridlayout = QtGui.QGridLayout( self.archiveCoverContainer ) gridlayout.addWidget( self.archiveCoverWidget ) gridlayout.setContentsMargins(0,0,0,0) utils.reduceWidgetFontSize( self.twList ) utils.reduceWidgetFontSize( self.teDescription, 1 ) self.setWindowFlags(self.windowFlags() | QtCore.Qt.WindowSystemMenuHint | QtCore.Qt.WindowMaximizeButtonHint) self.matches = matches self.comic_archive = comic_archive self.twList.currentItemChanged.connect(self.currentItemChanged) self.twList.cellDoubleClicked.connect(self.cellDoubleClicked) self.updateData() def updateData( self): self.setCoverImage() self.populateTable() self.twList.resizeColumnsToContents() self.twList.selectRow( 0 ) path = self.comic_archive.path self.setWindowTitle( u"Select correct match: {0}".format( os.path.split(path)[1] )) def populateTable( self ): while self.twList.rowCount() > 0: self.twList.removeRow(0) self.twList.setSortingEnabled(False) row = 0 for match in self.matches: self.twList.insertRow(row) item_text = match['series'] item = QtGui.QTableWidgetItem(item_text) item.setData( QtCore.Qt.ToolTipRole, item_text ) item.setData( QtCore.Qt.UserRole, (match,)) item.setFlags(QtCore.Qt.ItemIsSelectable| QtCore.Qt.ItemIsEnabled) self.twList.setItem(row, 0, item) if match['publisher'] is not None: item_text = u"{0}".format(match['publisher']) else: item_text = u"Unknown" item = QtGui.QTableWidgetItem(item_text) item.setData( QtCore.Qt.ToolTipRole, item_text ) item.setFlags(QtCore.Qt.ItemIsSelectable| QtCore.Qt.ItemIsEnabled) self.twList.setItem(row, 1, item) month_str = u"" year_str = u"????" if match['month'] is not None: month_str = u"-{0:02d}".format(int(match['month'])) if match['year'] is not None: year_str = u"{0}".format(match['year']) item_text = year_str + month_str item = QtGui.QTableWidgetItem(item_text) item.setData( QtCore.Qt.ToolTipRole, item_text ) item.setFlags(QtCore.Qt.ItemIsSelectable| QtCore.Qt.ItemIsEnabled) self.twList.setItem(row, 2, item) item_text = match['issue_title'] if item_text is None: item_text = "" item = QtGui.QTableWidgetItem(item_text) item.setData( QtCore.Qt.ToolTipRole, item_text ) item.setFlags(QtCore.Qt.ItemIsSelectable| QtCore.Qt.ItemIsEnabled) self.twList.setItem(row, 3, item) row += 1 self.twList.resizeColumnsToContents() self.twList.setSortingEnabled(True) self.twList.sortItems( 2 , QtCore.Qt.AscendingOrder ) self.twList.selectRow(0) self.twList.resizeColumnsToContents() self.twList.horizontalHeader().setStretchLastSection(True) def cellDoubleClicked( self, r, c ): self.accept() def currentItemChanged( self, curr, prev ): if curr is None: return if prev is not None and prev.row() == curr.row(): return self.altCoverWidget.setIssueID( self.currentMatch()['issue_id'] ) if self.currentMatch()['description'] is None: self.teDescription.setText ( "" ) else: self.teDescription.setText ( self.currentMatch()['description'] ) def setCoverImage( self ): self.archiveCoverWidget.setArchive( self.comic_archive) def currentMatch( self ): row = self.twList.currentRow() match = self.twList.item(row, 0).data( QtCore.Qt.UserRole ).toPyObject()[0] return match
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 ) )