Sync to trunk.

This commit is contained in:
John Schember 2009-07-13 00:29:37 -04:00
commit dcdda76dbc
9 changed files with 328 additions and 256 deletions

View File

@ -229,6 +229,8 @@ def get_metadata(stream):
tags = [x.strip() for x in mi.category.split(',') if x.strip()]
if tags:
mi.tags = tags
if mi.category.strip() == ',':
mi.category = None
mi.publisher = lrf.publisher.strip()
mi.cover_data = lrf.get_cover()
try:

View File

@ -22,9 +22,18 @@ class LRFOptions(object):
m = oeb.metadata
self.title = None
self.author = self.publisher = _('Unknown')
self.title_sort = self.author_sort = ''
for x in m.creator:
if x.role == 'aut':
self.author = unicode(x)
fa = unicode(getattr(x, 'file_as', ''))
if fa:
self.author_sort = fa
for x in m.title:
if unicode(x.file_as):
self.title_sort = unicode(x.file_as)
self.freetext = f2s(m.description)
self.category = f2s(m.tags)
self.title_sort = self.author_sort = ''
self.cover = None
self.use_metadata_cover = True
self.output = output

View File

@ -317,7 +317,7 @@ class MetaInformation(object):
if getattr(self, 'book_producer', False):
fmt('Book Producer', self.book_producer)
if self.category:
ans += u'Category : ' + unicode(self.category) + u'\n'
fmt('Category', self.category)
if self.comments:
fmt('Comments', self.comments)
if self.isbn:

View File

@ -7,7 +7,7 @@ __docformat__ = 'restructuredtext en'
lxml based OPF parser.
'''
import sys, unittest, functools, os, mimetypes, uuid, glob, cStringIO
import re, sys, unittest, functools, os, mimetypes, uuid, glob, cStringIO
from urllib import unquote
from urlparse import urlparse
@ -435,7 +435,7 @@ class OPF(object):
spine_path = XPath('descendant::*[re:match(name(), "spine", "i")]/*[re:match(name(), "itemref", "i")]')
guide_path = XPath('descendant::*[re:match(name(), "guide", "i")]/*[re:match(name(), "reference", "i")]')
title = MetadataField('title')
title = MetadataField('title', formatter=lambda x: re.sub(r'\s+', ' ', x))
publisher = MetadataField('publisher')
language = MetadataField('language')
comments = MetadataField('description')

View File

@ -10,6 +10,7 @@ import os
from datetime import datetime
def meta_info_to_oeb_metadata(mi, m, log):
from calibre.ebooks.oeb.base import OPF
if mi.title:
m.clear('title')
m.add('title', mi.title)
@ -22,7 +23,7 @@ def meta_info_to_oeb_metadata(mi, m, log):
for a in mi.authors:
attrib = {'role':'aut'}
if mi.author_sort:
attrib['file_as'] = mi.author_sort
attrib[OPF('file-as')] = mi.author_sort
m.add('creator', a, attrib=attrib)
if mi.book_producer:
m.filter('contributor', lambda x : x.role.lower() == 'bkp')

View File

@ -144,13 +144,36 @@
</item>
</widget>
</item>
<item row="3" column="0" colspan="2">
<item row="4" column="0" colspan="2">
<widget class="QCheckBox" name="opt_remember_window_size">
<property name="text">
<string>Remember last used &amp;window size</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QSpinBox" name="max_view_width">
<property name="suffix">
<string> px</string>
</property>
<property name="minimum">
<number>100</number>
</property>
<property name="maximum">
<number>10000</number>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_7">
<property name="text">
<string>Maximum &amp;view width:</string>
</property>
<property name="buddy">
<cstring>max_view_width</cstring>
</property>
</widget>
</item>
</layout>
</item>
<item row="2" column="0">
@ -159,7 +182,7 @@
<string>&amp;User stylesheet</string>
</property>
<layout class="QGridLayout" name="gridLayout_5">
<item row="0" column="0">
<item row="1" column="0">
<widget class="QPlainTextEdit" name="css"/>
</item>
</layout>
@ -180,6 +203,18 @@
</item>
</layout>
</widget>
<tabstops>
<tabstop>serif_family</tabstop>
<tabstop>sans_family</tabstop>
<tabstop>mono_family</tabstop>
<tabstop>default_font_size</tabstop>
<tabstop>mono_font_size</tabstop>
<tabstop>standard_font</tabstop>
<tabstop>max_view_width</tabstop>
<tabstop>opt_remember_window_size</tabstop>
<tabstop>css</tabstop>
<tabstop>buttonBox</tabstop>
</tabstops>
<resources>
<include location="../images.qrc"/>
</resources>

View File

@ -59,6 +59,8 @@ def config(defaults=None):
help=_('Remember last used window size'))
c.add_opt('user_css', default='',
help=_('Set the user CSS stylesheet. This can be used to customize the look of all books.'))
c.add_opt('max_view_width', default=6000,
help=_('Maximum width of the viewer window, in pixels.'))
fonts = c.add_group('FONTS', _('Font options'))
fonts('serif_family', default='Times New Roman' if iswindows else 'Liberation Serif',
@ -103,6 +105,7 @@ class ConfigDialog(QDialog, Ui_Dialog):
self.standard_font.setCurrentIndex({'serif':0, 'sans':1, 'mono':2}[opts.standard_font])
self.css.setPlainText(opts.user_css)
self.css.setToolTip(_('Set the user CSS stylesheet. This can be used to customize the look of all books.'))
self.max_view_width.setValue(opts.max_view_width)
def accept(self, *args):
@ -115,6 +118,7 @@ class ConfigDialog(QDialog, Ui_Dialog):
c.set('standard_font', {0:'serif', 1:'sans', 2:'mono'}[self.standard_font.currentIndex()])
c.set('user_css', unicode(self.css.toPlainText()))
c.set('remember_window_size', self.opt_remember_window_size.isChecked())
c.set('max_view_width', int(self.max_view_width.value()))
return QDialog.accept(self, *args)
@ -333,6 +337,10 @@ class DocumentView(QWebView):
self.connect(self.document, SIGNAL('animated_scroll_done()'),
self.animated_scroll_done, Qt.QueuedConnection)
@property
def copy_action(self):
return self.document.action(QWebPage.Copy)
def animated_scroll_done(self):
if self.manager is not None:
self.manager.scrolled(self.document.scroll_fraction)
@ -349,6 +357,8 @@ class DocumentView(QWebView):
def config(self, parent=None):
self.document.do_config(parent)
if self.manager is not None:
self.manager.set_max_width()
def bookmark(self):
return self.document.bookmark()

View File

@ -9,7 +9,7 @@ from PyQt4.Qt import QMovie, QApplication, Qt, QIcon, QTimer, QWidget, SIGNAL, \
QDesktopServices, QDoubleSpinBox, QLabel, QTextBrowser, \
QPainter, QBrush, QColor, QStandardItemModel, QPalette, \
QStandardItem, QUrl, QRegExpValidator, QRegExp, QLineEdit, \
QToolButton, QMenu, QInputDialog, QAction
QToolButton, QMenu, QInputDialog, QAction, QKeySequence
from calibre.gui2.viewer.main_ui import Ui_EbookViewer
from calibre.gui2.viewer.printing import Printing
@ -284,6 +284,15 @@ class EbookViewer(MainWindow, Ui_EbookViewer):
self.tool_bar.widgetForAction(self.action_print).setPopupMode(QToolButton.MenuButtonPopup)
self.connect(self.action_print, SIGNAL("triggered(bool)"), partial(self.print_book, preview=False))
self.connect(self.print_menu.actions()[0], SIGNAL("triggered(bool)"), partial(self.print_book, preview=True))
self.set_max_width()
ca = self.view.copy_action
ca.setShortcut(QKeySequence.Copy)
def set_max_width(self):
from calibre.gui2.viewer.documentview import config
c = config().parse()
self.frame.setMaximumWidth(c.max_view_width)
def print_book(self, preview):
Printing(self.iterator.spine, preview)

View File

@ -1,7 +1,8 @@
<ui version="4.0" >
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>EbookViewer</class>
<widget class="QMainWindow" name="EbookViewer" >
<property name="geometry" >
<widget class="QMainWindow" name="EbookViewer">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
@ -9,37 +10,42 @@
<height>672</height>
</rect>
</property>
<property name="windowTitle" >
<property name="windowTitle">
<string>Ebook Viewer</string>
</property>
<property name="windowIcon" >
<iconset resource="../images.qrc" >
<property name="windowIcon">
<iconset resource="../images.qrc">
<normaloff>:/images/viewer.svg</normaloff>:/images/viewer.svg</iconset>
</property>
<widget class="QWidget" name="centralwidget" >
<layout class="QGridLayout" name="gridLayout_2" >
<item row="0" column="0" >
<widget class="QSplitter" name="splitter" >
<property name="orientation" >
<widget class="QWidget" name="centralwidget">
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<widget class="QSplitter" name="splitter">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<widget class="QTreeView" name="toc" />
<widget class="QWidget" name="layoutWidget" >
<layout class="QGridLayout" name="gridLayout" >
<item row="0" column="0" >
<widget class="QWebView" name="view" >
</widget>
<widget class="QTreeView" name="toc"/>
<widget class="QFrame" name="frame">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QWebView" name="view"/>
</item>
<item row="0" column="1" >
<widget class="QScrollBar" name="vertical_scrollbar" >
<property name="orientation" >
<item row="0" column="1">
<widget class="QScrollBar" name="vertical_scrollbar">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item row="1" column="0" >
<widget class="QScrollBar" name="horizontal_scrollbar" >
<property name="orientation" >
<item row="1" column="0">
<widget class="QScrollBar" name="horizontal_scrollbar">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
@ -50,193 +56,193 @@
</item>
</layout>
</widget>
<widget class="QToolBar" name="tool_bar" >
<property name="windowTitle" >
<widget class="QToolBar" name="tool_bar">
<property name="windowTitle">
<string>toolBar</string>
</property>
<property name="iconSize" >
<property name="iconSize">
<size>
<width>32</width>
<height>32</height>
</size>
</property>
<attribute name="toolBarArea" >
<attribute name="toolBarArea">
<enum>LeftToolBarArea</enum>
</attribute>
<attribute name="toolBarBreak" >
<attribute name="toolBarBreak">
<bool>false</bool>
</attribute>
<addaction name="action_back" />
<addaction name="action_forward" />
<addaction name="separator" />
<addaction name="action_open_ebook" />
<addaction name="action_copy" />
<addaction name="action_font_size_larger" />
<addaction name="action_font_size_smaller" />
<addaction name="action_table_of_contents" />
<addaction name="action_metadata" />
<addaction name="separator" />
<addaction name="action_previous_page" />
<addaction name="action_next_page" />
<addaction name="separator" />
<addaction name="action_bookmark" />
<addaction name="action_reference_mode" />
<addaction name="separator" />
<addaction name="action_preferences" />
<addaction name="action_full_screen" />
<addaction name="separator" />
<addaction name="action_print" />
<addaction name="action_back"/>
<addaction name="action_forward"/>
<addaction name="separator"/>
<addaction name="action_open_ebook"/>
<addaction name="action_copy"/>
<addaction name="action_font_size_larger"/>
<addaction name="action_font_size_smaller"/>
<addaction name="action_table_of_contents"/>
<addaction name="action_metadata"/>
<addaction name="separator"/>
<addaction name="action_previous_page"/>
<addaction name="action_next_page"/>
<addaction name="separator"/>
<addaction name="action_bookmark"/>
<addaction name="action_reference_mode"/>
<addaction name="separator"/>
<addaction name="action_preferences"/>
<addaction name="action_full_screen"/>
<addaction name="separator"/>
<addaction name="action_print"/>
</widget>
<widget class="QToolBar" name="tool_bar2" >
<attribute name="toolBarArea" >
<widget class="QToolBar" name="tool_bar2">
<attribute name="toolBarArea">
<enum>TopToolBarArea</enum>
</attribute>
<attribute name="toolBarBreak" >
<attribute name="toolBarBreak">
<bool>false</bool>
</attribute>
<addaction name="action_find_next" />
<addaction name="action_find_next"/>
</widget>
<action name="action_back" >
<property name="icon" >
<iconset resource="../images.qrc" >
<action name="action_back">
<property name="icon">
<iconset resource="../images.qrc">
<normaloff>:/images/back.svg</normaloff>:/images/back.svg</iconset>
</property>
<property name="text" >
<property name="text">
<string>Back</string>
</property>
</action>
<action name="action_forward" >
<property name="icon" >
<iconset resource="../images.qrc" >
<action name="action_forward">
<property name="icon">
<iconset resource="../images.qrc">
<normaloff>:/images/forward.svg</normaloff>:/images/forward.svg</iconset>
</property>
<property name="text" >
<property name="text">
<string>Forward</string>
</property>
</action>
<action name="action_next_page" >
<property name="icon" >
<iconset resource="../images.qrc" >
<action name="action_next_page">
<property name="icon">
<iconset resource="../images.qrc">
<normaloff>:/images/next.svg</normaloff>:/images/next.svg</iconset>
</property>
<property name="text" >
<property name="text">
<string>Next page</string>
</property>
</action>
<action name="action_previous_page" >
<property name="icon" >
<iconset resource="../images.qrc" >
<action name="action_previous_page">
<property name="icon">
<iconset resource="../images.qrc">
<normaloff>:/images/previous.svg</normaloff>:/images/previous.svg</iconset>
</property>
<property name="text" >
<property name="text">
<string>Previous page</string>
</property>
</action>
<action name="action_font_size_larger" >
<property name="icon" >
<iconset resource="../images.qrc" >
<action name="action_font_size_larger">
<property name="icon">
<iconset resource="../images.qrc">
<normaloff>:/images/font_size_larger.svg</normaloff>:/images/font_size_larger.svg</iconset>
</property>
<property name="text" >
<property name="text">
<string>Font size larger</string>
</property>
</action>
<action name="action_font_size_smaller" >
<property name="icon" >
<iconset resource="../images.qrc" >
<action name="action_font_size_smaller">
<property name="icon">
<iconset resource="../images.qrc">
<normaloff>:/images/font_size_smaller.svg</normaloff>:/images/font_size_smaller.svg</iconset>
</property>
<property name="text" >
<property name="text">
<string>Font size smaller</string>
</property>
</action>
<action name="action_table_of_contents" >
<property name="icon" >
<iconset resource="../images.qrc" >
<action name="action_table_of_contents">
<property name="icon">
<iconset resource="../images.qrc">
<normaloff>:/images/chapters.svg</normaloff>:/images/chapters.svg</iconset>
</property>
<property name="text" >
<property name="text">
<string>Table of Contents</string>
</property>
</action>
<action name="action_metadata" >
<property name="icon" >
<iconset resource="../images.qrc" >
<action name="action_metadata">
<property name="icon">
<iconset resource="../images.qrc">
<normaloff>:/images/dialog_information.svg</normaloff>:/images/dialog_information.svg</iconset>
</property>
<property name="text" >
<property name="text">
<string>Metadata</string>
</property>
</action>
<action name="action_open_ebook" >
<property name="icon" >
<iconset resource="../images.qrc" >
<action name="action_open_ebook">
<property name="icon">
<iconset resource="../images.qrc">
<normaloff>:/images/document_open.svg</normaloff>:/images/document_open.svg</iconset>
</property>
<property name="text" >
<property name="text">
<string>Open ebook</string>
</property>
</action>
<action name="action_find_next" >
<property name="icon" >
<iconset resource="../images.qrc" >
<action name="action_find_next">
<property name="icon">
<iconset resource="../images.qrc">
<normaloff>:/images/arrow-down.svg</normaloff>:/images/arrow-down.svg</iconset>
</property>
<property name="text" >
<property name="text">
<string>Find next</string>
</property>
</action>
<action name="action_copy" >
<property name="icon" >
<iconset resource="../images.qrc" >
<action name="action_copy">
<property name="icon">
<iconset resource="../images.qrc">
<normaloff>:/images/convert.svg</normaloff>:/images/convert.svg</iconset>
</property>
<property name="text" >
<property name="text">
<string>Copy to clipboard</string>
</property>
</action>
<action name="action_preferences" >
<property name="icon" >
<iconset resource="../images.qrc" >
<action name="action_preferences">
<property name="icon">
<iconset resource="../images.qrc">
<normaloff>:/images/config.svg</normaloff>:/images/config.svg</iconset>
</property>
<property name="text" >
<property name="text">
<string>Preferences</string>
</property>
</action>
<action name="action_reference_mode" >
<property name="icon" >
<iconset resource="../images.qrc" >
<action name="action_reference_mode">
<property name="icon">
<iconset resource="../images.qrc">
<normaloff>:/images/lookfeel.svg</normaloff>:/images/lookfeel.svg</iconset>
</property>
<property name="text" >
<property name="text">
<string>Reference Mode</string>
</property>
</action>
<action name="action_bookmark" >
<property name="icon" >
<iconset resource="../images.qrc" >
<action name="action_bookmark">
<property name="icon">
<iconset resource="../images.qrc">
<normaloff>:/images/bookmarks.svg</normaloff>:/images/bookmarks.svg</iconset>
</property>
<property name="text" >
<property name="text">
<string>Bookmark</string>
</property>
</action>
<action name="action_full_screen" >
<property name="icon" >
<iconset resource="../images.qrc" >
<action name="action_full_screen">
<property name="icon">
<iconset resource="../images.qrc">
<normaloff>:/images/page.svg</normaloff>:/images/page.svg</iconset>
</property>
<property name="text" >
<property name="text">
<string>Toggle full screen</string>
</property>
</action>
<action name="action_print" >
<property name="icon" >
<iconset resource="../images.qrc" >
<action name="action_print">
<property name="icon">
<iconset resource="../images.qrc">
<normaloff>:/images/print.svg</normaloff>:/images/print.svg</iconset>
</property>
<property name="text" >
<property name="text">
<string>Print</string>
</property>
</action>
@ -249,7 +255,7 @@
</customwidget>
</customwidgets>
<resources>
<include location="../images.qrc" />
<include location="../images.qrc"/>
</resources>
<connections/>
</ui>