E-book viewer: Add option to not remember position in book when quitting. Fixes #7699 (Option to disable bookmarks in ebook viewer). Also disable multiple library support when the CALIBRE_OVERRIDE_DATABASE_PATH env var is set

This commit is contained in:
Kovid Goyal 2010-12-15 07:06:01 -07:00
commit c221ce75e9
6 changed files with 46 additions and 9 deletions

View File

@ -160,15 +160,17 @@ class ChooseLibraryAction(InterfaceAction):
self.action_choose.triggered.connect(self.choose_library, self.action_choose.triggered.connect(self.choose_library,
type=Qt.QueuedConnection) type=Qt.QueuedConnection)
self.choose_menu = QMenu(self.gui) self.choose_menu = QMenu(self.gui)
self.choose_menu.addAction(self.action_choose)
self.qaction.setMenu(self.choose_menu) self.qaction.setMenu(self.choose_menu)
self.quick_menu = QMenu(_('Quick switch')) if not os.environ.get('CALIBRE_OVERRIDE_DATABASE_PATH', None):
self.quick_menu_action = self.choose_menu.addMenu(self.quick_menu) self.choose_menu.addAction(self.action_choose)
self.rename_menu = QMenu(_('Rename library'))
self.rename_menu_action = self.choose_menu.addMenu(self.rename_menu) self.quick_menu = QMenu(_('Quick switch'))
self.delete_menu = QMenu(_('Delete library')) self.quick_menu_action = self.choose_menu.addMenu(self.quick_menu)
self.delete_menu_action = self.choose_menu.addMenu(self.delete_menu) self.rename_menu = QMenu(_('Rename library'))
self.rename_menu_action = self.choose_menu.addMenu(self.rename_menu)
self.delete_menu = QMenu(_('Delete library'))
self.delete_menu_action = self.choose_menu.addMenu(self.delete_menu)
self.rename_separator = self.choose_menu.addSeparator() self.rename_separator = self.choose_menu.addSeparator()
@ -223,6 +225,8 @@ class ChooseLibraryAction(InterfaceAction):
self.library_changed(self.gui.library_view.model().db) self.library_changed(self.gui.library_view.model().db)
def build_menus(self): def build_menus(self):
if os.environ.get('CALIBRE_OVERRIDE_DATABASE_PATH', None):
return
db = self.gui.library_view.model().db db = self.gui.library_view.model().db
locations = list(self.stats.locations(db)) locations = list(self.stats.locations(db))
for ac in self.switch_actions: for ac in self.switch_actions:
@ -387,6 +391,11 @@ class ChooseLibraryAction(InterfaceAction):
c.exec_() c.exec_()
def change_library_allowed(self): def change_library_allowed(self):
if os.environ.get('CALIBRE_OVERRIDE_DATABASE_PATH', None):
warning_dialog(self.gui, _('Not allowed'),
_('You cannot change libraries while using the environment'
' variable CALIBRE_OVERRIDE_DATABASE_PATH.'), show=True)
return False
if self.gui.job_manager.has_jobs(): if self.gui.job_manager.has_jobs():
warning_dialog(self.gui, _('Not allowed'), warning_dialog(self.gui, _('Not allowed'),
_('You cannot change libraries while jobs' _('You cannot change libraries while jobs'

View File

@ -12,7 +12,7 @@ from threading import Thread
from PyQt4.Qt import QMenu, QToolButton from PyQt4.Qt import QMenu, QToolButton
from calibre.gui2.actions import InterfaceAction from calibre.gui2.actions import InterfaceAction
from calibre.gui2 import error_dialog, Dispatcher from calibre.gui2 import error_dialog, Dispatcher, warning_dialog
from calibre.gui2.dialogs.progress import ProgressDialog from calibre.gui2.dialogs.progress import ProgressDialog
from calibre.utils.config import prefs, tweaks from calibre.utils.config import prefs, tweaks
@ -106,6 +106,9 @@ class CopyToLibraryAction(InterfaceAction):
def build_menus(self): def build_menus(self):
self.menu.clear() self.menu.clear()
if os.environ.get('CALIBRE_OVERRIDE_DATABASE_PATH', None):
self.menu.addAction('disabled', self.cannot_do_dialog)
return
db = self.gui.library_view.model().db db = self.gui.library_view.model().db
locations = list(self.stats.locations(db)) locations = list(self.stats.locations(db))
for name, loc in locations: for name, loc in locations:
@ -160,5 +163,9 @@ class CopyToLibraryAction(InterfaceAction):
self.gui.iactions['Remove Books'].library_ids_deleted( self.gui.iactions['Remove Books'].library_ids_deleted(
self.worker.processed, row) self.worker.processed, row)
def cannot_do_dialog(self):
warning_dialog(self.gui, _('Not allowed'),
_('You cannot use other libraries while using the environment'
' variable CALIBRE_OVERRIDE_DATABASE_PATH.'), show=True)

View File

@ -171,6 +171,13 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="8" column="0" colspan="2">
<widget class="QCheckBox" name="opt_remember_current_page">
<property name="text">
<string>Remember the &amp;current page when quitting</string>
</property>
</widget>
</item>
<item row="3" column="1"> <item row="3" column="1">
<widget class="QSpinBox" name="max_view_width"> <widget class="QSpinBox" name="max_view_width">
<property name="suffix"> <property name="suffix">

View File

@ -50,6 +50,8 @@ def config(defaults=None):
c.add_opt('hyphenate', default=False, help=_('Hyphenate text')) c.add_opt('hyphenate', default=False, help=_('Hyphenate text'))
c.add_opt('hyphenate_default_lang', default='en', c.add_opt('hyphenate_default_lang', default='en',
help=_('Default language for hyphenation rules')) help=_('Default language for hyphenation rules'))
c.add_opt('remember_current_page', default=True,
help=_('Save the current position in the document, when quitting'))
fonts = c.add_group('FONTS', _('Font options')) fonts = c.add_group('FONTS', _('Font options'))
fonts('serif_family', default='Times New Roman' if iswindows else 'Liberation Serif', fonts('serif_family', default='Times New Roman' if iswindows else 'Liberation Serif',
@ -72,6 +74,7 @@ class ConfigDialog(QDialog, Ui_Dialog):
opts = config().parse() opts = config().parse()
self.opt_remember_window_size.setChecked(opts.remember_window_size) self.opt_remember_window_size.setChecked(opts.remember_window_size)
self.opt_remember_current_page.setChecked(opts.remember_current_page)
self.serif_family.setCurrentFont(QFont(opts.serif_family)) self.serif_family.setCurrentFont(QFont(opts.serif_family))
self.sans_family.setCurrentFont(QFont(opts.sans_family)) self.sans_family.setCurrentFont(QFont(opts.sans_family))
self.mono_family.setCurrentFont(QFont(opts.mono_family)) self.mono_family.setCurrentFont(QFont(opts.mono_family))
@ -118,6 +121,7 @@ class ConfigDialog(QDialog, Ui_Dialog):
c.set('fit_images', self.opt_fit_images.isChecked()) c.set('fit_images', self.opt_fit_images.isChecked())
c.set('max_view_width', int(self.max_view_width.value())) c.set('max_view_width', int(self.max_view_width.value()))
c.set('hyphenate', self.hyphenate.isChecked()) c.set('hyphenate', self.hyphenate.isChecked())
c.set('remember_current_page', self.opt_remember_current_page.isChecked())
idx = self.hyphenate_default_lang.currentIndex() idx = self.hyphenate_default_lang.currentIndex()
c.set('hyphenate_default_lang', c.set('hyphenate_default_lang',
str(self.hyphenate_default_lang.itemData(idx).toString())) str(self.hyphenate_default_lang.itemData(idx).toString()))

View File

@ -328,6 +328,11 @@ class EbookViewer(MainWindow, Ui_EbookViewer):
c = config().parse() c = config().parse()
self.frame.setMaximumWidth(c.max_view_width) self.frame.setMaximumWidth(c.max_view_width)
def get_remember_current_page_opt(self):
from calibre.gui2.viewer.documentview import config
c = config().parse()
return c.remember_current_page
def print_book(self, preview): def print_book(self, preview):
Printing(self.iterator.spine, preview) Printing(self.iterator.spine, preview)
@ -578,7 +583,8 @@ class EbookViewer(MainWindow, Ui_EbookViewer):
current_page = None current_page = None
self.existing_bookmarks = [] self.existing_bookmarks = []
for bm in bookmarks: for bm in bookmarks:
if bm[0] == 'calibre_current_page_bookmark': if bm[0] == 'calibre_current_page_bookmark' and \
self.get_remember_current_page_opt():
current_page = bm current_page = bm
else: else:
self.existing_bookmarks.append(bm[0]) self.existing_bookmarks.append(bm[0])
@ -598,6 +604,8 @@ class EbookViewer(MainWindow, Ui_EbookViewer):
self.set_bookmarks(bookmarks) self.set_bookmarks(bookmarks)
def save_current_position(self): def save_current_position(self):
if not self.get_remember_current_page_opt():
return
try: try:
pos = self.view.bookmark() pos = self.view.bookmark()
bookmark = '%d#%s'%(self.current_index, pos) bookmark = '%d#%s'%(self.current_index, pos)

View File

@ -72,3 +72,5 @@ Precautions
-------------- --------------
Portable media can occasionally fail so you should make periodic backups of you Calibre library. This can be done by making a copy of the CalibreLibrary folder and all its contents. There are many freely available tools around that can optimise such back processes, well known ones being RoboCopy and RichCopy. However you can simply use a Windows copy facility if you cannot be bothered to use a specialised tools. Portable media can occasionally fail so you should make periodic backups of you Calibre library. This can be done by making a copy of the CalibreLibrary folder and all its contents. There are many freely available tools around that can optimise such back processes, well known ones being RoboCopy and RichCopy. However you can simply use a Windows copy facility if you cannot be bothered to use a specialised tools.
Using the environment variable CALIBRE_OVERRIDE_DATABASE_PATH disables multiple-library support in |app|. Avoid setting this variable in calibre-portable.bat unless you really need it.