Propagate the given Mouse event to the widgetdelegate

        Enter edit mode, get the editor widget and issue an event on that widget.

        :param event: the mouse event
        :type event: :class:`QtGui.QMouseEvent`
        :param eventhandler: the eventhandler to use. E.g. ``"mousePressEvent"``
        :type eventhandler: str
        :returns: None
        :rtype: None
        :raises: None

def propagate_event_to_delegate(self, event, eventhandler):
        """Propagate the given Mouse event to the widgetdelegate

        Enter edit mode, get the editor widget and issue an event on that widget.

        :param event: the mouse event
        :type event: :class:`QtGui.QMouseEvent`
        :param eventhandler: the eventhandler to use. E.g. ``"mousePressEvent"``
        :type eventhandler: str
        :returns: None
        :rtype: None
        :raises: None
        """
        # if we are recursing because we sent a click event, and it got propagated to the parents
        # and we recieve it again, terminate
        if self.__recursing:
            return
        # find index at mouse position
        i = self.index_at_event(event)

        # if the index is not valid, we don't care
        # handle it the default way
        if not i.isValid():
            return getattr(super(WidgetDelegateViewMixin, self), eventhandler)(event)
        # get the widget delegate. if there is None, handle it the default way
        delegate = self.itemDelegate(i)
        if not isinstance(delegate, WidgetDelegate):
            return getattr(super(WidgetDelegateViewMixin, self), eventhandler)(event)

        # see if there is already a editor
        widget = delegate.edit_widget(i)
        if not widget:
            # close all editors, then start editing
            delegate.close_editors()
            # Force editing. If in editing state, view will refuse editing.
            if self.state() == self.EditingState:
                self.setState(self.NoState)
            self.edit(i)
            # get the editor widget. if there is None, there is nothing to do so return
            widget = delegate.edit_widget(i)
        if not widget:
            return getattr(super(WidgetDelegateViewMixin, self), eventhandler)(event)

        # try to find the relative position to the widget
        pid = self.get_pos_in_delegate(i, event.globalPos())
        widgetatpos = widget.childAt(pid)
        if widgetatpos:
            widgettoclick = widgetatpos
            g = widget.mapToGlobal(pid)
            clickpos = widgettoclick.mapFromGlobal(g)
        else:
            widgettoclick = widget
            clickpos = pid

        # create a new event for the editor widget.
        e = QtGui.QMouseEvent(event.type(),
                              clickpos,
                              event.button(),
                              event.buttons(),
                              event.modifiers())
        # before we send, make sure, we cannot recurse
        self.__recursing = True
        try:
            r = QtGui.QApplication.sendEvent(widgettoclick, e)
        finally:
            self.__recursing = False  # out of the recursion. now we can accept click events again
        return r