Exemple #1
0
    def generate_catalog(self):
        rows = self.gui.library_view.selectionModel().selectedRows()
        if not rows or len(rows) < 2:
            rows = xrange(self.gui.library_view.model().rowCount(
                QModelIndex()))
        ids = map(self.gui.library_view.model().id, rows)

        if not ids:
            return error_dialog(self.gui,
                                _('No books selected'),
                                _('No books selected for catalog generation'),
                                show=True)

        db = self.gui.library_view.model().db
        dbspec = {}
        for id in ids:
            dbspec[id] = {'ondevice': db.ondevice(id, index_is_id=True)}

        # Calling gui2.tools:generate_catalog()
        ret = generate_catalog(self.gui, dbspec, ids, self.gui.device_manager,
                               db)
        if ret is None:
            return

        func, args, desc, out, sync, title = ret

        fmt = os.path.splitext(out)[1][1:].upper()
        job = self.gui.job_manager.run_job(self.Dispatcher(
            self.catalog_generated),
                                           func,
                                           args=args,
                                           description=desc)
        job.catalog_file_path = out
        job.fmt = fmt
        job.catalog_sync, job.catalog_title = sync, title
        self.gui.status_bar.show_message(_('Generating %s catalog...') % fmt)
Exemple #2
0
 def update_result(self, plugin_name, width, height, data):
     if plugin_name.endswith('}'):
         # multi cover plugin
         plugin_name = plugin_name.partition('{')[0]
         plugin = [plugin for plugin in self.plugin_map if plugin.name == plugin_name]
         if not plugin:
             return
         plugin = plugin[0]
         last_row = max(self.plugin_map[plugin])
         pmap = QPixmap()
         pmap.loadFromData(data)
         if pmap.isNull():
             return
         self.beginInsertRows(QModelIndex(), last_row, last_row)
         for rows in self.plugin_map.itervalues():
             for i in xrange(len(rows)):
                 if rows[i] >= last_row:
                     rows[i] += 1
         self.plugin_map[plugin].insert(-1, last_row)
         self.covers.insert(last_row, self.get_item(plugin_name, pmap, waiting=False))
         self.endInsertRows()
     else:
         # single cover plugin
         idx = None
         for plugin, rows in self.plugin_map.iteritems():
             if plugin.name == plugin_name:
                 idx = rows[0]
                 break
         if idx is None:
             return
         pmap = QPixmap()
         pmap.loadFromData(data)
         if pmap.isNull():
             return
         self.covers[idx] = self.get_item(plugin_name, pmap, waiting=False)
         self.dataChanged.emit(self.index(idx), self.index(idx))
Exemple #3
0
 def columnCount(self, index=QModelIndex()):
     return 3
Exemple #4
0
 def rowCount(self, index=QModelIndex()):
     return len(self.dustTxOutlist)
                      QToolButton, QIcon, QApplication, Qt, QWidget, QPoint,
                      QSizePolicy, QPainter, QStaticText, pyqtSignal,
                      QTextOption, QAbstractListModel, QModelIndex, QVariant,
                      QStyledItemDelegate, QStyle, QListView, QTextDocument,
                      QSize, QComboBox, QFrame, QCursor, QCheckBox, QSplitter,
                      QPixmap, QRect, QGroupBox)

from calibre import prepare_string_for_xml, human_readable
from calibre.ebooks.oeb.polish.utils import lead_text, guess_type
from calibre.gui2 import error_dialog, choose_files, choose_save_file, NONE, info_dialog, choose_images
from calibre.gui2.tweak_book import tprefs, current_container
from calibre.utils.icu import primary_sort_key, sort_key, primary_contains
from calibre.utils.matcher import get_char, Matcher
from calibre.gui2.complete2 import EditWithComplete

ROOT = QModelIndex()


class BusyCursor(object):
    def __enter__(self):
        QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))

    def __exit__(self, *args):
        QApplication.restoreOverrideCursor()


class Dialog(QDialog):
    def __init__(self, title, name, parent=None):
        QDialog.__init__(self, parent)
        self.setWindowTitle(title)
        self.name = name
Exemple #6
0
 def columnCount(self, parent=QModelIndex()):
     parentPref = self.index2Pref(parent)
     return parentPref.qt_col_count()
Exemple #7
0
 def columnCount(self, parent=QModelIndex()):
     return 3
Exemple #8
0
 def rowCount(self, parent=QModelIndex()):
     return len(self.filtered_searches)
 def plugin_to_index(self, display_plugin):
     for i, p in enumerate(self.display_plugins):
         if display_plugin == p:
             return self.index(i, 0, QModelIndex())
     return QModelIndex()
Exemple #10
0
 def hide_all(self, *args):
     self.model.hide_jobs(
         list(xrange(0, self.model.rowCount(QModelIndex()))))
     self.proxy_model.reset()
Exemple #11
0
 def rowCount(self, parent=QModelIndex()):
     return len(self.jobs)
 def remove_row(self, row):
     self.beginRemoveRows(QModelIndex(), row, row)
     del self.bookmarks[row]
     self.endRemoveRows()
Exemple #13
0
 def insertRows(self, rows, count, parent=QModelIndex()):
     for row in rows:
         self.targets.append(row)
         self.beginInsertRows(parent, len(self.targets), len(self.targets))
         self.endInsertRows()
     return True
Exemple #14
0
 def insertRow(self, row, parent=QModelIndex()):
     self.insertRows(row, 1, parent)
Exemple #15
0
 def removeRows(self, rows, count, parent=QModelIndex()):
     for row in rows:
         if row in self.targets:
             self.targets.remove(row)
             self.beginRemoveRows(parent, len(self.targets), len(self.targets))
             self.endRemoveRows()
Exemple #16
0
 def index(self, row, column, parent=QModelIndex()):
     return self.createIndex(row, column)
Exemple #17
0
 def parent(self, index):
     if not index.isValid() or index.internalId() == 0:
         return QModelIndex()
     return self.createIndex(0, 0)
Exemple #18
0
 def itemToIndex(self, item):
     try:
         return self.indexdict[item]
     except KeyError:
         return QModelIndex()
Exemple #19
0
 def hide(self):
     self.setCurrentIndex(QModelIndex())
     QListView.hide(self)
 def get_ids_from_selected_rows():
     rows = self.gui.library_view.selectionModel().selectedRows()
     if not rows or len(rows) < 2:
         rows = xrange(self.gui.library_view.model().rowCount(QModelIndex()))
     ids = map(self.gui.library_view.model().id, rows)
     return ids
Exemple #21
0
 def rowCount(self, parent=QModelIndex()):
     parentPref = self.index2Pref(parent)
     return parentPref.qt_row_count()
Exemple #22
0
 def hide_all(self, *args):
     self.model.hide_jobs(
         list(xrange(0, self.model.rowCount(QModelIndex()))))
     self.proxy_model.beginResetModel(), self.proxy_model.endResetModel()
Exemple #23
0
 def paint(self, painter, option, index):
     QStyledItemDelegate.paint(
         self, painter, option,
         QModelIndex())  # draw the hover and selection highlights
     m = index.model()
     db = m.db
     try:
         book_id = db.id(index.row())
     except (ValueError, IndexError, KeyError):
         return
     if book_id in m.ids_to_highlight_set:
         painter.save()
         try:
             painter.setPen(self.highlight_color)
             painter.setRenderHint(QPainter.Antialiasing, True)
             painter.drawRoundedRect(option.rect, 10, 10, Qt.RelativeSize)
         finally:
             painter.restore()
     marked = db.data.get_marked(book_id)
     db = db.new_api
     cdata = self.cover_cache[book_id]
     device_connected = self.parent().gui.device_connected is not None
     on_device = device_connected and db.field_for('ondevice', book_id)
     painter.save()
     right_adjust = 0
     try:
         rect = option.rect
         rect.adjust(self.MARGIN, self.MARGIN, -self.MARGIN, -self.MARGIN)
         orect = QRect(rect)
         if cdata is None or cdata is False:
             title = db.field_for('title', book_id, default_value='')
             authors = ' & '.join(
                 db.field_for('authors', book_id, default_value=()))
             painter.setRenderHint(QPainter.TextAntialiasing, True)
             painter.drawText(rect, Qt.AlignCenter | Qt.TextWordWrap,
                              '%s\n\n%s' % (title, authors))
             if cdata is False:
                 self.render_queue.put(book_id)
         else:
             if self.title_height != 0:
                 trect = QRect(rect)
                 rect.setBottom(rect.bottom() - self.title_height)
             if self.animating is not None and self.animating.row(
             ) == index.row():
                 cdata = cdata.scaled(cdata.size() * self._animated_size)
             dx = max(0, int((rect.width() - cdata.width()) / 2.0))
             dy = max(0, rect.height() - cdata.height())
             right_adjust = dx
             rect.adjust(dx, dy, -dx, 0)
             painter.drawPixmap(rect, cdata)
             if self.title_height != 0:
                 rect = trect
                 rect.setTop(rect.bottom() - self.title_height + 5)
                 painter.setRenderHint(QPainter.TextAntialiasing, True)
                 title = self.render_field(db, book_id)
                 metrics = painter.fontMetrics()
                 painter.setPen(self.highlight_color)
                 painter.drawText(
                     rect, Qt.AlignCenter | Qt.TextSingleLine,
                     metrics.elidedText(title, Qt.ElideRight, rect.width()))
         if marked:
             try:
                 p = self.marked_emblem
             except AttributeError:
                 p = self.marked_emblem = m.marked_icon.pixmap(48, 48)
             drect = QRect(orect)
             drect.setLeft(drect.left() + right_adjust)
             drect.setRight(drect.left() + p.width())
             drect.setBottom(drect.bottom() - self.title_height)
             drect.setTop(drect.bottom() - p.height())
             painter.drawPixmap(drect, p)
         if on_device:
             try:
                 p = self.on_device_emblem
             except AttributeError:
                 p = self.on_device_emblem = QPixmap(I('ok.png')).scaled(
                     48, 48, transformMode=Qt.SmoothTransformation)
             drect = QRect(orect)
             drect.setRight(drect.right() - right_adjust)
             drect.setBottom(drect.bottom() - self.title_height)
             drect.setTop(drect.bottom() - p.height() + 1)
             drect.setLeft(drect.right() - p.width() + 1)
             painter.drawPixmap(drect, p)
     finally:
         painter.restore()
 def rowCount(self, parent=QModelIndex()):
     """
     :rtype: int
     """
     return len(self.lst)