diff options
author | Gonzalo Odiard <godiard@gmail.com> | 2012-09-27 20:07:27 (GMT) |
---|---|---|
committer | Gonzalo Odiard <godiard@gmail.com> | 2012-09-28 12:54:12 (GMT) |
commit | 57cbfee21ddb84654cfe67979b746e6ad99a7da8 (patch) | |
tree | 88af4ecef9ca3758e8099daf629862bc368170c9 | |
parent | df40048d6ab95f6806ae24e7bb436373b99ee0d5 (diff) |
Implement display o TOC in pdf files
This change needs evince 3.5.92 to work.
The code checks evince version, before enable the functionality.
This version works with index with one level only.
Signed-off-by: Gonzalo Odiard <gonzalo@laptop.org>
-rw-r--r-- | evinceadapter.py | 85 | ||||
-rw-r--r-- | readactivity.py | 7 |
2 files changed, 60 insertions, 32 deletions
diff --git a/evinceadapter.py b/evinceadapter.py index 4aa0ecc..597b656 100644 --- a/evinceadapter.py +++ b/evinceadapter.py @@ -261,45 +261,70 @@ class EvinceViewer(): self._model.connect('page-changed', handler) def update_toc(self, activity): - return False - """ - Commented because does not work and crash with old evince - doc = self._model.get_document() - if not doc.has_document_links(): - logging.error('The pdf file does not have a index') - return False + if self._validate_min_version(3, 5, 92): + # check version because does not work and crash with older evince + doc = self._model.get_document() + if not doc.has_document_links(): + logging.error('The pdf file does not have a index') + return False + else: + self._job_links = EvinceView.JobLinks.new(document=doc) + self._job_links.connect('finished', self.__index_loaded_cb, + activity) + EvinceView.Job.scheduler_push_job(self._job_links, + EvinceView.JobPriority.PRIORITY_NONE) + return True else: - self._job_links = EvinceView.JobLinks.new(document=doc) - self._job_links.connect('finished', self.__index_loaded_cb, - activity) - EvinceView.Job.scheduler_push_job(self._job_links, - EvinceView.JobPriority.PRIORITY_NONE) - """ - - def __index_loaded_cb(self, job, activity): - logging.error('__index_loaded_cb %s %s', job.__class__, dir(job)) - logging.error('job.succeeded %s', job.succeeded()) - logging.error('job.is_finished %s', job.is_finished()) + return False - self._index_model = job.model + def handle_link(self, link): + self._view.handle_link(link) - logging.error('index_model loaded %s', job.model.__class__) - if job.model is None: - return False + def _validate_min_version(self, major, minor, micro): """ - _iter = job.model.get_iter_first() - while True: - value = job.model.get_value(_iter, 0) - logging.error('value %s', value) - _iter = job.model.iter_next(_iter) - if _iter is None: - break + Check if Evince version is at major or equal than the requested """ + return EvinceDocument.MAJOR_VERSION >= major and \ + EvinceDocument.MINOR_VERSION >= minor and \ + EvinceDocument.MICRO_VERSION >= micro + + def __index_loaded_cb(self, job, activity): + self._index_model = job.get_model() + if job.get_model() is None: + return False activity.show_navigator_button() - activity.set_navigator_model(self._epub.get_links_model()) + activity.set_navigator_model(self._index_model) return True + def get_current_link(self): + _iter = self._index_model.get_iter_first() + link_found = "" + current_page = self._model.props.page + while True: + value = self._index_model.get_value(_iter, 0) + link = self._index_model.get_value(_iter, 1) + if self._document.get_link_page(link) > current_page: + break + else: + link_found = link + _iter = self._index_model.iter_next(_iter) + if _iter is None: + break + return link_found + + def get_link_iter(self, link): + _iter = self._index_model.get_iter_first() + while True: + value = self._index_model.get_value(_iter, 1) + if value == link: + break + else: + _iter = self._index_model.iter_next(_iter) + if _iter is None: + break + return _iter + def find_set_highlight_search(self, set_highlight_search): self._view.find_set_highlight_search(set_highlight_search) diff --git a/readactivity.py b/readactivity.py index 9728cc4..9efdbeb 100644 --- a/readactivity.py +++ b/readactivity.py @@ -426,7 +426,9 @@ class ReadActivity(activity.Activity): self._navigator.set_model(model) def __toogle_navigator_cb(self, button, visible): - scrollbar_pos = self._view.get_vertical_pos() + scrollbar_pos = -1 + if hasattr(self._view, 'get_vertical_pos'): + scrollbar_pos = self._view.get_vertical_pos() if visible: self._toc_visible = True self._update_toc_view = True @@ -439,7 +441,8 @@ class ReadActivity(activity.Activity): self._toc_visible = False self._toc_scroller.hide() self._toc_separator.hide() - self._view.set_vertical_pos(scrollbar_pos) + if scrollbar_pos > -1: + self._view.set_vertical_pos(scrollbar_pos) def __num_page_entry_insert_text_cb(self, entry, text, length, position): if not re.match('[0-9]', text): |