Add an entry to show help to the context menu when triggered by tap and hold

This commit is contained in:
Kovid Goyal 2014-02-13 21:28:46 +05:30
parent 7040010cdc
commit 6c5e9e9769
2 changed files with 63 additions and 3 deletions

View File

@ -640,6 +640,7 @@ class DocumentView(QWebView): # {{{
self.document.font_magnification_step) self.document.font_magnification_step)
def contextMenuEvent(self, ev): def contextMenuEvent(self, ev):
from_touch = ev.reason() == ev.Other
mf = self.document.mainFrame() mf = self.document.mainFrame()
r = mf.hitTestContent(ev.pos()) r = mf.hitTestContent(ev.pos())
img = r.pixmap() img = r.pixmap()
@ -705,13 +706,16 @@ class DocumentView(QWebView): # {{{
for plugin in self.document.all_viewer_plugins: for plugin in self.document.all_viewer_plugins:
plugin.customize_context_menu(menu, ev, r) plugin.customize_context_menu(menu, ev, r)
if ev.reason() == ev.Other:
# Triggered by a touch event if from_touch:
from calibre.constants import plugins from calibre.constants import plugins
pi = plugins['progress_indicator'][0] pi = plugins['progress_indicator'][0]
for x in (menu, self.goto_location_menu): for x in (menu, self.goto_location_menu):
if hasattr(pi, 'set_touch_menu_style'): if hasattr(pi, 'set_touch_menu_style'):
pi.set_touch_menu_style(x) pi.set_touch_menu_style(x)
helpt = QAction(QIcon(I('help.png')), _('Show supported touch screen gestures'), menu)
helpt.triggered.connect(self.gesture_handler.show_help)
menu.insertAction(menu.actions()[0], helpt)
else: else:
self.goto_location_menu.setStyle(self.style()) self.goto_location_menu.setStyle(self.style())
self.context_menu = menu self.context_menu = menu

View File

@ -10,7 +10,7 @@ import time, ctypes, sys
from functools import partial from functools import partial
from PyQt4.Qt import ( from PyQt4.Qt import (
QObject, QPointF, pyqtSignal, QEvent, QApplication, QMouseEvent, Qt, QObject, QPointF, pyqtSignal, QEvent, QApplication, QMouseEvent, Qt,
QContextMenuEvent) QContextMenuEvent, QDialog, QDialogButtonBox, QLabel, QVBoxLayout)
from calibre.constants import iswindows from calibre.constants import iswindows
@ -36,6 +36,56 @@ Tap, TapAndHold, Pinch, Swipe, SwipeAndHold = 'Tap', 'TapAndHold', 'Pinch', 'Swi
Left, Right, Up, Down = 'Left', 'Right', 'Up', 'Down' Left, Right, Up, Down = 'Left', 'Right', 'Up', 'Down'
In, Out = 'In', 'Out' In, Out = 'In', 'Out'
class Help(QDialog): # {{{
def __init__(self, parent=None):
QDialog.__init__(self, parent=parent)
self.l = l = QVBoxLayout(self)
self.setLayout(l)
self.la = la = QLabel(
'''
<style>
h2 { text-align: center }
dt { font-weight: bold }
dd { margin-bottom: 1.5em }
</style>
''' + _(
'''
<h2>The list of available gestures</h2>
<dl>
<dt>Single tap</dt>
<dd>A single tap on the right two thirds of the page will turn to the next page
and on the left one-third of the page will turn to the previous page. Single tapping
on a link will activate the link.</dd>
<dt>Swipe</dt>
<dd>Swipe to the left to go to the next page and to the right to go to the previous page.
This mimics turning pages in a paper book.</dd>
<dt>Pinch</dt>
<dd>Pinch in or out to decrease or increase the font size</dd>
<dt>Swipe and hold</dt>
<dd>If you swipe and the hold your finger down instead of lifting it, pages will be turned
rapidly allowing for quickly scanning through large numbers of pages.</dd>
<dt>Tap and hold</dt>
<dd>Bring up the context (right-click) menu</dd>
</dl>
'''
))
la.setAlignment(Qt.AlignTop | Qt.AlignLeft)
la.setWordWrap(True)
l.addWidget(la, Qt.AlignTop|Qt.AlignLeft)
self.bb = bb = QDialogButtonBox(QDialogButtonBox.Close)
bb.accepted.connect(self.accept)
bb.rejected.connect(self.reject)
l.addWidget(bb)
self.resize(600, 500)
# }}}
class TouchPoint(object): class TouchPoint(object):
def __init__(self, tp): def __init__(self, tp):
@ -316,3 +366,9 @@ class GestureHandler(QObject):
attr = 'magnify' if direction is Out else 'shrink' attr = 'magnify' if direction is Out else 'shrink'
getattr(self.parent(), '%s_fonts' % attr)() getattr(self.parent(), '%s_fonts' % attr)()
def show_help(self):
Help(self.parent()).exec_()
if __name__ == '__main__':
app = QApplication([])
Help().exec_()