From 89cc647009317a65b79be0fc3e4196fd5453f09d Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 31 Jan 2015 10:45:40 +0530 Subject: [PATCH] Some utility functions to control the viewer position with page numbers in paged mode --- resources/compiled_coffeescript.zip | Bin 102082 -> 102583 bytes src/calibre/ebooks/oeb/display/paged.coffee | 3 +++ src/calibre/ebooks/oeb/display/utils.coffee | 9 ++++++++ src/calibre/gui2/viewer/documentview.py | 23 ++++++++++++++++++++ 4 files changed, 35 insertions(+) diff --git a/resources/compiled_coffeescript.zip b/resources/compiled_coffeescript.zip index 3c95cce2eba6ae79280fe59ff2351de0ec3680ba..05e40b1bb4765e3b20f2f083cbfee0025ef3d849 100644 GIT binary patch delta 708 zcmZuv-)qxQ6wax*)~G|=Muro1EezVNmNZGz)S_byCq9UXOolHtxw&bJX)^M|DPwg}pgU(h6(Yfy3pTbHDF==broVJM((wTxk9EA-VOaHF(G5XHir;LPtl-JXN#-pN_mVd)1B*j_IS-FxH1 z%c6H$P(e{{`1zPac72+@Yr(a|>jnC(4U=@d4Pqi$><6h1oThpk<`V}uqD(&dz6H!d zVv}||Fc~yemTDbXrr{=1x%4HJE{O_ObWI?-R>B2IDNBNed4h3?5J?w{nk1KsWm%w0 z9pK_G6vIS8E|&@d!91@hMhFlEUKZ4%EE$rbV_7uHhGZCGA7*dE^GN3j`lAgMDnEht Tu^dWMUW8dX73=AM0$cw80#M~c delta 351 zcmdnKknPZ1whc=*@v*Nkb@kg&aPdtF1H+q?>4_4IlABL&TI9U>`?nZHzK_AHU5Ztw zaBmf4VAv|S9VlzezD<#F5!d9Io4B{H(Po^OfNp|!52Ljrsy+q=X$EAlUz~BWK&!~~ z-93y(Olvi#zwcpmXAv@HWSA~9fl+>XWG|x@Gp7&ZbZI|ES&0B|RyL4kE+Blx#K3T* zgOTAMQ?=6ck3Edi(}VjNt*6KJF>*|o?qlT9ut-TwO))b{F)&UuHcT@%NHIxEF-@{e zu`ozXGB&U3S0w1E!zrW%M;ENK8*n(aS1U zvQkhoGEFrzH%~H2O*KffOfxYyH#RmkHa0OZGB8XvF-bE@O-V~lF*Y}Zm{vD|(PDZ- JKjTcsS^&T2Y{UQn diff --git a/src/calibre/ebooks/oeb/display/paged.coffee b/src/calibre/ebooks/oeb/display/paged.coffee index 7de9817d03..094d137adc 100644 --- a/src/calibre/ebooks/oeb/display/paged.coffee +++ b/src/calibre/ebooks/oeb/display/paged.coffee @@ -350,6 +350,9 @@ class PagedDisplay else window.scrollTo(pos, 0) + scroll_to_column: (number) -> + this.scroll_to_xpos(number * this.page_width + 10) + column_at: (xpos) -> # Return the number of the column that contains xpos return Math.floor(xpos/this.page_width) diff --git a/src/calibre/ebooks/oeb/display/utils.coffee b/src/calibre/ebooks/oeb/display/utils.coffee index ab35e1bad9..9891e6ed58 100644 --- a/src/calibre/ebooks/oeb/display/utils.coffee +++ b/src/calibre/ebooks/oeb/display/utils.coffee @@ -51,6 +51,15 @@ class CalibreUtils process.stdout.write(msg + '\n') # }}} + stack_trace: () -> # {{{ + currentFunction = arguments.callee.caller + while (currentFunction) + fn = currentFunction.toString() + this.log(fn) + currentFunction = currentFunction.caller + + # }}} + window_scroll_pos: (win=window) -> # {{{ # The current scroll position of the browser window if typeof(win.pageXOffset) == 'number' diff --git a/src/calibre/gui2/viewer/documentview.py b/src/calibre/gui2/viewer/documentview.py index e8e1d831ac..dbac9c7b97 100644 --- a/src/calibre/gui2/viewer/documentview.py +++ b/src/calibre/gui2/viewer/documentview.py @@ -460,6 +460,29 @@ class Document(QWebPage): # {{{ self.scroll_to(x=self.xpos, y=npos) return property(fget=fget, fset=fset) + @dynamic_property + def page_number(self): + ' The page number is the number of the page at the left most edge of the screen (starting from 0) ' + def fget(self): + if self.in_paged_mode: + return self.javascript( + 'ans = 0; if (window.paged_display) ans = window.paged_display.column_boundaries()[0]; ans;', typ='int') + def fset(self, val): + if self.in_paged_mode and self.loaded_javascript: + self.javascript('if (window.paged_display) window.paged_display.scroll_to_column(%d)' % int(val)) + return True + return property(fget=fget, fset=fset) + + @property + def page_dimensions(self): + if self.in_paged_mode: + return self.javascript( + ''' + ans = '' + if (window.paged_display) + ans = window.paged_display.col_width + ':' + window.paged_display.current_page_height; + ans;''', typ='string') + @property def hscroll_fraction(self): try: