Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGonzalo Odiard <godiard@gmail.com>2012-09-27 20:07:27 (GMT)
committer Gonzalo Odiard <godiard@gmail.com>2012-09-28 12:54:12 (GMT)
commit57cbfee21ddb84654cfe67979b746e6ad99a7da8 (patch)
tree88af4ecef9ca3758e8099daf629862bc368170c9
parentdf40048d6ab95f6806ae24e7bb436373b99ee0d5 (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.py85
-rw-r--r--readactivity.py7
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):