WebBrowser/StatusBar/ImagesIcon.py

Sun, 08 May 2016 19:41:05 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 08 May 2016 19:41:05 +0200
changeset 4976
fa68a30f3cd0
parent 4967
d9edf6517263
child 5040
73c784b7b3bc
permissions
-rw-r--r--

Cleaned up the ImagesIcon code.

4967
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 # Copyright (c) 2016 Detlev Offenbach <detlev@die-offenbachs.de>
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing the images loading status bar icon.
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 #
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 # This is modeled after the code found in Qupzilla
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 # Copyright (C) 2014 David Rosca <nowrep@gmail.com>
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13 #
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15 from __future__ import unicode_literals
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17 from PyQt5.QtCore import pyqtSlot, Qt, QPoint
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 from PyQt5.QtWidgets import QGraphicsColorizeEffect, QMenu
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 from PyQt5.QtWebEngineWidgets import QWebEngineSettings
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 from .StatusBarIcon import StatusBarIcon
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 import UI.PixmapCache
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 import Preferences
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 class ImagesIcon(StatusBarIcon):
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 """
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 Class implementing the images loading status bar icon.
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 """
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 def __init__(self, window):
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 """
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 Constructor
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 @param window reference to the web browser window
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 @type WebBrowserWindow
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 """
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 super(ImagesIcon, self).__init__(window)
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 self.setToolTip(self.tr("Modify images loading settings temporarily"
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 " or globally"))
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 self.__icon = UI.PixmapCache.getPixmap("filePixmap").scaled(16, 16)
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 self.setPixmap(self.__icon)
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 self._window.tabWidget().currentChanged.connect(self.__updateIcon)
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 self.clicked.connect(self.__showMenu)
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 self.__updateIcon()
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 def preferencesChanged(self):
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 """
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 Public method to handle changes of the settings.
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 """
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 self.__updateIcon()
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 @pyqtSlot(QPoint)
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 def __showMenu(self, pos):
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 """
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 Private slot to show the menu.
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 @param pos position to show the menu at
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 @type QPoint
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 """
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 boldFont = self.font()
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 boldFont.setBold(True)
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 menu = QMenu()
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 menu.addAction(self.tr("Current Page Settings")).setFont(boldFont)
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 if self._testCurrentPageWebAttribute(
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 QWebEngineSettings.AutoLoadImages):
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 menu.addAction(self.tr("Disable loading images (temporarily)"),
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 self.__toggleLoadingImages)
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 else:
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 menu.addAction(self.tr("Enable loading images (temporarily)"),
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 self.__toggleLoadingImages)
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 menu.addSeparator()
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 menu.addAction(self.tr("Global Settings")).setFont(boldFont)
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 act = menu.addAction(self.tr("Automatically load images"))
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 act.setCheckable(True)
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 act.setChecked(Preferences.getWebBrowser("AutoLoadImages"))
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 act.toggled.connect(self.__setGlobalLoadingImages)
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 menu.exec(pos)
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 @pyqtSlot()
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 def __updateIcon(self):
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 """
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 Private slot to update the icon.
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 """
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 if self._testCurrentPageWebAttribute(
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 QWebEngineSettings.AutoLoadImages):
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 self.setGraphicsEffect(None)
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 else:
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 effect = QGraphicsColorizeEffect(self)
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 effect.setColor(Qt.gray)
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 self.setGraphicsEffect(effect)
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 @pyqtSlot()
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 def __toggleLoadingImages(self):
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 """
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 Private slot to toggle the images loading setting.
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 """
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 if self._currentPage() is None:
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 return
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 current = self._testCurrentPageWebAttribute(
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 QWebEngineSettings.AutoLoadImages)
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 self._setCurrentPageWebAttribute(QWebEngineSettings.AutoLoadImages,
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 not current)
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 if current:
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 # reload page upon disabling loading images
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 self._window.currentBrowser().reload()
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 self.__updateIcon()
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 @pyqtSlot(bool)
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 def __setGlobalLoadingImages(self, enable):
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 """
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 Private slot to toggle the global images loading setting.
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 @param enable flag indicating the state to set
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 @type bool
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 """
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 QWebEngineSettings.globalSettings().setAttribute(
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 QWebEngineSettings.AutoLoadImages, enable)
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 Preferences.setWebBrowser("AutoLoadImages", enable)
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 Preferences.syncPreferences()
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 self._window.preferencesChanged()
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133
d9edf6517263 Implemented the Images Loading status bar icon.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134 self.__updateIcon()
4976
fa68a30f3cd0 Cleaned up the ImagesIcon code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4967
diff changeset
135
fa68a30f3cd0 Cleaned up the ImagesIcon code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4967
diff changeset
136 if not enable:
fa68a30f3cd0 Cleaned up the ImagesIcon code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4967
diff changeset
137 # reload page upon disabling loading images
fa68a30f3cd0 Cleaned up the ImagesIcon code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4967
diff changeset
138 self._window.currentBrowser().reload()

eric ide

mercurial