Codebase list sugar-read-activity / 57cbfee
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> Gonzalo Odiard 11 years ago
2 changed file(s) with 64 addition(s) and 36 deletion(s). Raw diff Collapse all Expand all
260260 self._model.connect('page-changed', handler)
261261
262262 def update_toc(self, activity):
263 return False
263 if self._validate_min_version(3, 5, 92):
264 # check version because does not work and crash with older evince
265 doc = self._model.get_document()
266 if not doc.has_document_links():
267 logging.error('The pdf file does not have a index')
268 return False
269 else:
270 self._job_links = EvinceView.JobLinks.new(document=doc)
271 self._job_links.connect('finished', self.__index_loaded_cb,
272 activity)
273 EvinceView.Job.scheduler_push_job(self._job_links,
274 EvinceView.JobPriority.PRIORITY_NONE)
275 return True
276 else:
277 return False
278
279 def handle_link(self, link):
280 self._view.handle_link(link)
281
282 def _validate_min_version(self, major, minor, micro):
264283 """
265 Commented because does not work and crash with old evince
266 doc = self._model.get_document()
267 if not doc.has_document_links():
268 logging.error('The pdf file does not have a index')
284 Check if Evince version is at major or equal than the requested
285 """
286 return EvinceDocument.MAJOR_VERSION >= major and \
287 EvinceDocument.MINOR_VERSION >= minor and \
288 EvinceDocument.MICRO_VERSION >= micro
289
290 def __index_loaded_cb(self, job, activity):
291 self._index_model = job.get_model()
292 if job.get_model() is None:
269293 return False
270 else:
271 self._job_links = EvinceView.JobLinks.new(document=doc)
272 self._job_links.connect('finished', self.__index_loaded_cb,
273 activity)
274 EvinceView.Job.scheduler_push_job(self._job_links,
275 EvinceView.JobPriority.PRIORITY_NONE)
276 """
277
278 def __index_loaded_cb(self, job, activity):
279 logging.error('__index_loaded_cb %s %s', job.__class__, dir(job))
280 logging.error('job.succeeded %s', job.succeeded())
281 logging.error('job.is_finished %s', job.is_finished())
282
283 self._index_model = job.model
284
285 logging.error('index_model loaded %s', job.model.__class__)
286 if job.model is None:
287 return False
288 """
289 _iter = job.model.get_iter_first()
294
295 activity.show_navigator_button()
296 activity.set_navigator_model(self._index_model)
297 return True
298
299 def get_current_link(self):
300 _iter = self._index_model.get_iter_first()
301 link_found = ""
302 current_page = self._model.props.page
290303 while True:
291 value = job.model.get_value(_iter, 0)
292 logging.error('value %s', value)
293 _iter = job.model.iter_next(_iter)
294 if _iter is None:
304 value = self._index_model.get_value(_iter, 0)
305 link = self._index_model.get_value(_iter, 1)
306 if self._document.get_link_page(link) > current_page:
295307 break
296 """
297
298 activity.show_navigator_button()
299 activity.set_navigator_model(self._epub.get_links_model())
300 return True
308 else:
309 link_found = link
310 _iter = self._index_model.iter_next(_iter)
311 if _iter is None:
312 break
313 return link_found
314
315 def get_link_iter(self, link):
316 _iter = self._index_model.get_iter_first()
317 while True:
318 value = self._index_model.get_value(_iter, 1)
319 if value == link:
320 break
321 else:
322 _iter = self._index_model.iter_next(_iter)
323 if _iter is None:
324 break
325 return _iter
301326
302327 def find_set_highlight_search(self, set_highlight_search):
303328 self._view.find_set_highlight_search(set_highlight_search)
425425 self._navigator.set_model(model)
426426
427427 def __toogle_navigator_cb(self, button, visible):
428 scrollbar_pos = self._view.get_vertical_pos()
428 scrollbar_pos = -1
429 if hasattr(self._view, 'get_vertical_pos'):
430 scrollbar_pos = self._view.get_vertical_pos()
429431 if visible:
430432 self._toc_visible = True
431433 self._update_toc_view = True
438440 self._toc_visible = False
439441 self._toc_scroller.hide()
440442 self._toc_separator.hide()
441 self._view.set_vertical_pos(scrollbar_pos)
443 if scrollbar_pos > -1:
444 self._view.set_vertical_pos(scrollbar_pos)
442445
443446 def __num_page_entry_insert_text_cb(self, entry, text, length, position):
444447 if not re.match('[0-9]', text):