Thu, 06 Mar 2014 19:17:09 +0100
Added support for wheel events and mouse move events to the map widget and made some adjustments to the representation (colors).
--- a/Documentation/Source/eric5.E5Gui.E5MapWidget.html Thu Mar 06 18:34:59 2014 +0100 +++ b/Documentation/Source/eric5.E5Gui.E5MapWidget.html Thu Mar 06 19:17:09 2014 +0100 @@ -63,6 +63,9 @@ <td><a href="#E5MapWidget.__generateSliderRange">__generateSliderRange</a></td> <td>Private method to generate the slider rectangle.</td> </tr><tr> +<td><a href="#E5MapWidget.__setSliderColor">__setSliderColor</a></td> +<td>Set the slider color depending upon the background color.</td> +</tr><tr> <td><a href="#E5MapWidget.__updateMasterViewportWidth">__updateMasterViewportWidth</a></td> <td>Private method to update the master's viewport width.</td> </tr><tr> @@ -84,8 +87,11 @@ <td><a href="#E5MapWidget.lineDimensions">lineDimensions</a></td> <td>Public method to get the line (indicator) dimensions.</td> </tr><tr> -<td><a href="#E5MapWidget.mouseReleaseEvent">mouseReleaseEvent</a></td> -<td>Protected method to handle a mouse button release.</td> +<td><a href="#E5MapWidget.mouseMoveEvent">mouseMoveEvent</a></td> +<td>Protected method to handle a mouse moves.</td> +</tr><tr> +<td><a href="#E5MapWidget.mousePressEvent">mousePressEvent</a></td> +<td>Protected method to handle a mouse button press.</td> </tr><tr> <td><a href="#E5MapWidget.paintEvent">paintEvent</a></td> <td>Protected method to handle a paint event.</td> @@ -108,21 +114,18 @@ <td><a href="#E5MapWidget.setMaster">setMaster</a></td> <td>Public method to set the map master widget.</td> </tr><tr> -<td><a href="#E5MapWidget.setSliderColors">setSliderColors</a></td> -<td>Public method to set the slider colors.</td> -</tr><tr> <td><a href="#E5MapWidget.setWidth">setWidth</a></td> <td>Public method to set the widget width.</td> </tr><tr> <td><a href="#E5MapWidget.sizeHint">sizeHint</a></td> <td>Public method to give an indication about the preferred size.</td> </tr><tr> -<td><a href="#E5MapWidget.sliderColors">sliderColors</a></td> -<td>Public method to get the slider colors.</td> -</tr><tr> <td><a href="#E5MapWidget.value2Position">value2Position</a></td> <td>Public method to convert a scrollbar value into a position.</td> </tr><tr> +<td><a href="#E5MapWidget.wheelEvent">wheelEvent</a></td> +<td>Protected slot handling mouse wheel events.</td> +</tr><tr> <td><a href="#E5MapWidget.width">width</a></td> <td>Public method to get the widget's width.</td> </tr> @@ -156,7 +159,12 @@ <dd> slider rectangle (QRect) </dd> -</dl><a NAME="E5MapWidget.__updateMasterViewportWidth" ID="E5MapWidget.__updateMasterViewportWidth"></a> +</dl><a NAME="E5MapWidget.__setSliderColor" ID="E5MapWidget.__setSliderColor"></a> +<h4>E5MapWidget.__setSliderColor</h4> +<b>__setSliderColor</b>(<i></i>) +<p> + Set the slider color depending upon the background color. +</p><a NAME="E5MapWidget.__updateMasterViewportWidth" ID="E5MapWidget.__updateMasterViewportWidth"></a> <h4>E5MapWidget.__updateMasterViewportWidth</h4> <b>__updateMasterViewportWidth</b>(<i></i>) <p> @@ -223,15 +231,25 @@ <dd> tuple with border width (integer) and line height (integer) </dd> -</dl><a NAME="E5MapWidget.mouseReleaseEvent" ID="E5MapWidget.mouseReleaseEvent"></a> -<h4>E5MapWidget.mouseReleaseEvent</h4> -<b>mouseReleaseEvent</b>(<i>event</i>) +</dl><a NAME="E5MapWidget.mouseMoveEvent" ID="E5MapWidget.mouseMoveEvent"></a> +<h4>E5MapWidget.mouseMoveEvent</h4> +<b>mouseMoveEvent</b>(<i>event</i>) <p> - Protected method to handle a mouse button release. + Protected method to handle a mouse moves. </p><dl> <dt><i>event</i></dt> <dd> -mouse event (QMouseEvent) +reference to the mouse event (QMouseEvent) +</dd> +</dl><a NAME="E5MapWidget.mousePressEvent" ID="E5MapWidget.mousePressEvent"></a> +<h4>E5MapWidget.mousePressEvent</h4> +<b>mousePressEvent</b>(<i>event</i>) +<p> + Protected method to handle a mouse button press. +</p><dl> +<dt><i>event</i></dt> +<dd> +reference to the mouse event (QMouseEvent) </dd> </dl><a NAME="E5MapWidget.paintEvent" ID="E5MapWidget.paintEvent"></a> <h4>E5MapWidget.paintEvent</h4> @@ -321,19 +339,6 @@ <dd> map master widget (QAbstractScrollArea) </dd> -</dl><a NAME="E5MapWidget.setSliderColors" ID="E5MapWidget.setSliderColors"></a> -<h4>E5MapWidget.setSliderColors</h4> -<b>setSliderColors</b>(<i>border, background</i>) -<p> - Public method to set the slider colors. -</p><dl> -<dt><i>border</i></dt> -<dd> -border color (QColor) -</dd><dt><i>background</i></dt> -<dd> -background color (QColor) -</dd> </dl><a NAME="E5MapWidget.setWidth" ID="E5MapWidget.setWidth"></a> <h4>E5MapWidget.setWidth</h4> <b>setWidth</b>(<i>width</i>) @@ -354,17 +359,6 @@ <dd> preferred size (QSize) </dd> -</dl><a NAME="E5MapWidget.sliderColors" ID="E5MapWidget.sliderColors"></a> -<h4>E5MapWidget.sliderColors</h4> -<b>sliderColors</b>(<i></i>) -<p> - Public method to get the slider colors. -</p><dl> -<dt>Returns:</dt> -<dd> -tuple with the slider's border color (QColor) and - background color (QColor) -</dd> </dl><a NAME="E5MapWidget.value2Position" ID="E5MapWidget.value2Position"></a> <h4>E5MapWidget.value2Position</h4> <b>value2Position</b>(<i>value, slider=False</i>) @@ -384,6 +378,16 @@ <dd> position (integer) </dd> +</dl><a NAME="E5MapWidget.wheelEvent" ID="E5MapWidget.wheelEvent"></a> +<h4>E5MapWidget.wheelEvent</h4> +<b>wheelEvent</b>(<i>event</i>) +<p> + Protected slot handling mouse wheel events. +</p><dl> +<dt><i>event</i></dt> +<dd> +reference to the wheel event (QWheelEvent) +</dd> </dl><a NAME="E5MapWidget.width" ID="E5MapWidget.width"></a> <h4>E5MapWidget.width</h4> <b>width</b>(<i></i>)
--- a/E5Gui/E5MapWidget.py Thu Mar 06 18:34:59 2014 +0100 +++ b/E5Gui/E5MapWidget.py Thu Mar 06 19:17:09 2014 +0100 @@ -7,7 +7,7 @@ Module implementing a base class for showing a document map. """ -from PyQt4.QtCore import Qt, QSize, QRect +from PyQt4.QtCore import Qt, QSize, QRect, QCoreApplication from PyQt4.QtGui import QWidget, QAbstractScrollArea, QColor, QBrush, QPainter @@ -28,8 +28,7 @@ self.__lineBorder = 1 self.__lineHeight = 2 self.__backgroundColor = QColor("#e7e7e7") - self.__sliderBorderColor = QColor(Qt.black) - self.__sliderBackgroundColor = QColor(Qt.white) + self.__setSliderColor() self._master = None self.__enabled = False @@ -37,6 +36,17 @@ if parent is not None and isinstance(parent, QAbstractScrollArea): self.setMaster(parent) + def __setSliderColor(self): + """ + Set the slider color depending upon the background color. + """ + if self.__backgroundColor.toHsv().value() < 128: + # dark background, use white slider + self.__sliderColor = Qt.white + else: + # light background, use black slider + self.__sliderColor = Qt.black + def __updateMasterViewportWidth(self): """ Private method to update the master's viewport width. @@ -55,6 +65,7 @@ @param master map master widget (QAbstractScrollArea) """ self._master = master + self._master.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn) self._master.verticalScrollBar().valueChanged.connect(self.repaint) self.__updateMasterViewportWidth() @@ -124,6 +135,7 @@ """ if color != self.__backgroundColor: self.__backgroundColor = color + self.__setSliderColor() self.update() def backgroundColor(self): @@ -134,29 +146,6 @@ """ return QColor(self.__backgroundColor) - def setSliderColors(self, border, background): - """ - Public method to set the slider colors. - - @param border border color (QColor) - @param background background color (QColor) - """ - if border != self.__sliderBorderColor or \ - background != self.__sliderBackgroundColor: - self.__sliderBorderColor = border - self.__sliderBackgroundColor = background - self.update() - - def sliderColors(self): - """ - Public method to get the slider colors. - - @return tuple with the slider's border color (QColor) and - background color (QColor) - """ - return (QColor(self.__sliderBorderColor), - QColor(self.__sliderBackgroundColor)) - def sizeHint(self): """ Public method to give an indication about the preferred size. @@ -180,11 +169,9 @@ # step 3: paint the slider if self._master: - penColor = self.__sliderBorderColor - penColor.setAlphaF(0.8) + penColor = self.__sliderColor painter.setPen(penColor) - brushColor = self.__sliderBackgroundColor - brushColor.setAlphaF(0.5) + brushColor = Qt.transparent painter.setBrush(QBrush(brushColor)) painter.drawRect(self.__generateSliderRange( self._master.verticalScrollBar())) @@ -199,20 +186,39 @@ """ pass - def mouseReleaseEvent(self, event): + def mousePressEvent(self, event): """ - Protected method to handle a mouse button release. + Protected method to handle a mouse button press. - @param event mouse event (QMouseEvent) + @param event reference to the mouse event (QMouseEvent) """ if event.button() == Qt.LeftButton and self._master: vsb = self._master.verticalScrollBar() value = self.position2Value(event.pos().y() - 1) vsb.setValue(value - 0.5 * vsb.pageStep()) # center on page + self.__mousePressPos = None - # TODO: add support for dragging the slider + def mouseMoveEvent(self, event): + """ + Protected method to handle a mouse moves. + + @param event reference to the mouse event (QMouseEvent) + """ + if event.buttons() & Qt.LeftButton and self._master: + vsb = self._master.verticalScrollBar() + value = self.position2Value(event.pos().y() - 1) + vsb.setValue(value - 0.5 * vsb.pageStep()) # center on page - # TODO: add support for mouse wheel + def wheelEvent(self, event): + """ + Protected slot handling mouse wheel events. + + @param event reference to the wheel event (QWheelEvent) + """ + if self._master and \ + event.modifiers() == Qt.NoModifier and \ + event.orientation() == Qt.Vertical: + QCoreApplication.sendEvent(self._master.verticalScrollBar(), event) def calculateGeometry(self): """
--- a/QScintilla/EditorMarkerMap.py Thu Mar 06 18:34:59 2014 +0100 +++ b/QScintilla/EditorMarkerMap.py Thu Mar 06 19:17:09 2014 +0100 @@ -44,7 +44,7 @@ @param color color to be used (QColor) """ position = self.value2Position(line) - painter.setPen(color.darker(120)) + painter.setPen(color) painter.setBrush(color) painter.drawRect(self.generateIndicatorRect(position))