--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Helpviewer/GreaseMonkey/GreaseMonkeyConfiguration/GreaseMonkeyConfigurationListWidget.py Sun Jul 22 15:32:52 2012 +0200 @@ -0,0 +1,75 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2012 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing a special list widget for GreaseMonkey scripts. +""" + +from PyQt4.QtCore import pyqtSignal, QRect +from PyQt4.QtGui import QListWidget, QListWidgetItem + +from .GreaseMonkeyConfigurationListDelegate import GreaseMonkeyConfigurationListDelegate + + +class GreaseMonkeyConfigurationListWidget(QListWidget): + """ + Class implementing a special list widget for GreaseMonkey scripts. + """ + removeItemRequested = pyqtSignal(QListWidgetItem) + + def __init__(self, parent=None): + """ + Constructor + + @param parent reference to the parent widget (QWidget) + """ + super().__init__(parent) + + self.__delegate = GreaseMonkeyConfigurationListDelegate(self) + self.setItemDelegate(self.__delegate) + + def __containsRemoveIcon(self, pos): + """ + Private method to check, if the given position is inside the remove icon. + + @param pos position to check for (QPoint) + @return flag indicating success (boolean) + """ + itm = self.itemAt(pos) + if itm is None: + return False + + rect = self.visualItemRect(itm) + iconSize = GreaseMonkeyConfigurationListDelegate.RemoveIconSize + removeIconXPos = rect.right() - self.__delegate.padding() - iconSize + center = rect.height() // 2 + rect.top() + removeIconYPos = center - iconSize // 2 + + removeIconRect = QRect(removeIconXPos, removeIconYPos, iconSize, iconSize) + return removeIconRect.contains(pos) + + def mousePressEvent(self, evt): + """ + Private method handling presses of mouse buttons. + + @param evt mouse press event (QMouseEvent) + """ + if self.__containsRemoveIcon(evt.pos()): + self.removeItemRequested.emit(self.itemAt(evt.pos())) + return + + super().mousePressEvent(evt) + + def mouseDoubleClickEvent(self, evt): + """ + Private method handling mouse double click events. + + @param evt mouse press event (QMouseEvent) + """ + if self.__containsRemoveIcon(evt.pos()): + self.removeItemRequested.emit(self.itemAt(evt.pos())) + return + + super().mouseDoubleClickEvent(evt)