Esempio n. 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)
Esempio n. 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))
Esempio n. 3
0
 def columnCount(self, index=QModelIndex()):
     return 3
Esempio n. 4
0
 def rowCount(self, index=QModelIndex()):
     return len(self.dustTxOutlist)
Esempio n. 5
0
                      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
Esempio n. 6
0
 def columnCount(self, parent=QModelIndex()):
     parentPref = self.index2Pref(parent)
     return parentPref.qt_col_count()
Esempio n. 7
0
 def columnCount(self, parent=QModelIndex()):
     return 3
Esempio n. 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()
Esempio n. 10
0
File: jobs.py Progetto: sss/calibre
 def hide_all(self, *args):
     self.model.hide_jobs(
         list(xrange(0, self.model.rowCount(QModelIndex()))))
     self.proxy_model.reset()
Esempio n. 11
0
File: jobs.py Progetto: sss/calibre
 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()
Esempio n. 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
Esempio n. 14
0
 def insertRow(self, row, parent=QModelIndex()):
     self.insertRows(row, 1, parent)
Esempio n. 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()
Esempio n. 16
0
 def index(self, row, column, parent=QModelIndex()):
     return self.createIndex(row, column)
Esempio n. 17
0
 def parent(self, index):
     if not index.isValid() or index.internalId() == 0:
         return QModelIndex()
     return self.createIndex(0, 0)
Esempio n. 18
0
 def itemToIndex(self, item):
     try:
         return self.indexdict[item]
     except KeyError:
         return QModelIndex()
Esempio n. 19
0
 def hide(self):
     self.setCurrentIndex(QModelIndex())
     QListView.hide(self)
Esempio n. 20
0
 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
Esempio n. 21
0
 def rowCount(self, parent=QModelIndex()):
     parentPref = self.index2Pref(parent)
     return parentPref.qt_row_count()
Esempio n. 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()
Esempio n. 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()
Esempio n. 24
0
 def rowCount(self, parent=QModelIndex()):
     """
     :rtype: int
     """
     return len(self.lst)