예제 #1
0
    def strokeMouseFromCenter(self,
                              imgView,
                              start,
                              end,
                              modifier=Qt.NoModifier,
                              numSteps=10):
        """
        Drag the mouse between two coordinates.
        A modifier can be specified that will be keep pressed
        default no modifier
        """

        centerPoint = imgView.rect().bottomRight() / 2

        startPoint = QPoint(*start) + centerPoint
        endPoint = QPoint(*end) + centerPoint

        # Note: Due to the implementation of volumina.EventSwitch.eventFilter(),
        #       mouse events intended for the ImageView MUST go through the viewport.

        # Move to start
        move = QMouseEvent(QEvent.MouseMove, startPoint, Qt.NoButton,
                           Qt.NoButton, modifier)
        QApplication.sendEvent(imgView.viewport(), move)

        # Press left button
        press = QMouseEvent(QEvent.MouseButtonPress, startPoint, Qt.LeftButton,
                            Qt.NoButton, modifier)
        QApplication.sendEvent(imgView.viewport(), press)

        # Move to end in several steps
        #numSteps = numSteps
        for i in range(numSteps):
            nextPoint = startPoint + (endPoint - startPoint) * (float(i) /
                                                                numSteps)
            move = QMouseEvent(QEvent.MouseMove, nextPoint, Qt.NoButton,
                               Qt.NoButton, modifier)
            QApplication.sendEvent(imgView.viewport(), move)

        # Move to end
        move = QMouseEvent(QEvent.MouseMove, endPoint, Qt.NoButton,
                           Qt.NoButton, modifier)
        QApplication.sendEvent(imgView.viewport(), move)

        # Release left button
        release = QMouseEvent(QEvent.MouseButtonRelease, endPoint,
                              Qt.LeftButton, Qt.NoButton, modifier)
        QApplication.sendEvent(imgView.viewport(), release)

        # Wait for the gui to catch up
        QApplication.processEvents()
        self.waitForViews([imgView])
예제 #2
0
    def readSettings(self):
        settings = QSettings()

        settings.beginGroup("MainWindow")
        self.resize(settings.value("Size", QVariant(QSize(965, 655))).toSize())
        self.move(settings.value("Pos", QVariant(QPoint(0, 0))).toPoint())
        settings.endGroup()

        settings.beginGroup("BrowsePanel")
        self.browsePanel.setVisible(settings.value("Visible", QVariant(True)).toBool())
        self.browsePanel.setFloating(settings.value("Floating", QVariant(False)).toBool())
        self.browsePanel.resize(settings.value("Size", QVariant(QSize(250, 655))).toSize())
        self.browsePanel.move(settings.value("Pos", QVariant(QPoint(0, 0))).toPoint())
        settings.endGroup()

        settings.beginGroup("FilterPanel")
        self.filterPanel.setVisible(settings.value("Visible", QVariant(True)).toBool())
        self.filterPanel.setFloating(settings.value("Floating", QVariant(False)).toBool())
        self.filterPanel.resize(settings.value("Size", QVariant(QSize(270, 655))).toSize())
        self.filterPanel.move(settings.value("Pos", QVariant(QPoint(0, 0))).toPoint())
        settings.endGroup()

        settings.beginGroup("DataView")
        self.dataView.setFixedWidthFont(settings.value("FixedWidthFont", QVariant(False)).toBool())
        settings.endGroup()

        settings.beginGroup("FindDialog")
        d = self.dataView.findDialog
        d.setVisible(settings.value("Visible", QVariant(False)).toBool())
        d.move(settings.value("Pos", QVariant(QPoint(0, 0))).toPoint())
        # Note: QVariant.toInt returns a tuple with the result of the conversion
        # and a boolean for the successful conversion
        d.setFindFlags(settings.value("Flags", QVariant(0)).toInt()[0])
        d.setWrappedSearch(settings.value("WrappedSearch", QVariant(True)).toBool())
        settings.endGroup()

        self.iovUTCCheckBox.setChecked(settings.value("IOVs/UTC", QVariant(True)).toBool())

        size = settings.beginReadArray("Recent")
        for i in range(size):
            settings.setArrayIndex(i)
            conn = settings.value("ConnString").toString()
            action = QAction(self)
            action.setText(conn)
            QObject.connect(action, SIGNAL("triggered()"), self.openRecentDatabase)
            self.menuRecent.addAction(action)
        settings.endArray()

        settings.beginGroup("Misc")
        self._showWelcome = settings.value("ShowWelcome", QVariant(True)).toBool()
        self._externalEditor = str(settings.value("ExternalEditor", QVariant("emacs")).toString())
        settings.endGroup()
예제 #3
0
 def titleOptionRect(self, fw, mw):
     if self.checkStateButton:
         return QRect(
             QPoint(fw + mw + self.checkStateButton.size().width(), fw),
             QSize(
                 self.geometry().width() - (fw * 2) - mw -
                 self.checkStateButton.size().width(),
                 self.geometry().height() - (fw * 2)))
     else:
         return QRect(
             QPoint(fw + mw, fw),
             QSize(self.geometry().width() - (fw * 2) - mw,
                   self.geometry().height() - (fw * 2)))
예제 #4
0
 def paintEvent(self, event):
     """
     Paint the interpolated pixmap image.
     """
     p = QPainter(self)
     p.setClipRect(event.rect())
     factor = self.blendingFactor_ ** 2
     if self.pixmap1 and 1. - factor:
         p.setOpacity(1. - factor)
         p.drawPixmap(QPoint(0, 0), self.pixmap1)
     if self.pixmap2 and factor:
         p.setOpacity(factor)
         p.drawPixmap(QPoint(0, 0), self.pixmap2)
예제 #5
0
파일: mainpanel.py 프로젝트: buptlsp/coco
 def mouseMoveEvent(self, e):
     this = self.mw
     try:
         if ((self._last2.x() == -1) or
             (self._last2.x() >= 0 and self._last2.x() <= this.width() and
              (self._last2.y() >= self.MOVE_HANDLE_HEIGHT) and
              (self._last2.y() <= this.height()))):
             return
         newpos = QPoint(e.globalPos())
         upleft = QPoint(self._pos0 + newpos - self._last)
         this.move(upleft)
     except AttributeError:
         pass
예제 #6
0
    def draw_line_to(self, end_point):
        painter = QPainter(self.image)
        painter.setPen(
            QPen(self.draw_color if self.scribbling == 1 else Qt.black,
                 self.pen_width, Qt.SolidLine, Qt.RoundCap, Qt.RoundJoin))
        painter.drawLine(
            QPoint(self.last_point.x() // self.image_pen_width,
                   self.last_point.y() // self.image_pen_width),
            QPoint(end_point.x() // self.image_pen_width,
                   end_point.y() // self.image_pen_width))

        self.update()
        self.last_point = QPoint(end_point)
예제 #7
0
 def dropEvent(tree_view, e):
     try:
         _index = tree_view.indexAt(QPoint(e.pos().x(), e.pos().y()))
         _i = self.groupTreeModel.itemFromIndex(_index)
         if _i and _i.parent() is None and self.__dragged_dut:
             _index = tree_view.indexAt(QPoint(e.pos().x(), e.pos().y()))
             _g = self.groupTreeModel.itemFromIndex(_index)
             _group_id = str(_g.data().toPyObject())
             _group = self.server.group(_group_id)
             self.__dragged_dut.exchangeGroup(_group)
             QTreeView.dropEvent(tree_view, e)
     except Exception, e:
         logger.LOGGER.error(str(e))
예제 #8
0
파일: view.py 프로젝트: yisuax11/orange2
    def drawBackground(self, painter, rect):
        QGraphicsView.drawBackground(self, painter, rect)

        if not self.__backgroundIcon.isNull():
            painter.setClipRect(rect)
            vrect = QRect(QPoint(0, 0), self.viewport().size())
            vrect = self.mapToScene(vrect).boundingRect()

            pm = self.__backgroundIcon.pixmap(vrect.size().toSize().boundedTo(
                QSize(200, 200)))
            pmrect = QRect(QPoint(0, 0), pm.size())
            pmrect.moveCenter(vrect.center().toPoint())
            if rect.toRect().intersects(pmrect):
                painter.drawPixmap(pmrect, pm)
예제 #9
0
    def __init__(self):

        self.d = FlickablePrivate()
        self.d.state = FlickablePrivate.Steady
        self.d.threshold = 10
        self.d.ticker = FlickableTicker(self)
        self.d.timeStamp = QTime.currentTime()
        self.d.target = 0

        self.d.pressPos = QPoint()
        self.d.offset = QPoint()
        self.d.delta = QPoint()
        self.d.speed = QPoint()
        self.d.ignoreList = []
예제 #10
0
    def mouseReleaseEvent(self, event):

        if event.button() == Qt.LeftButton:
            x = (QPoint(event.pos())).x()
            y = (QPoint(event.pos())).y()

            posDictionary2.append(x)
            posDictionary2.append(y)
            self.rubberBand.hide()
            self.close()

            Capture(posDictionary1[0], posDictionary1[1], posDictionary2[0],
                    posDictionary2[1])
            Result_Window()
예제 #11
0
 def startBounce(self):
     """
      Button starts to bounce requiring attention.
     """
     if self.__bouncing:
         return
     self.__startPos = QPoint(self.pos().x(), self.pos().y())
     self.__animationUp.setStartValue(
         QPoint(self.__startPos.x(), self.__startPos.y()))
     self.__animationUp.setEndValue(
         QPoint(self.__startPos.x(),
                self.__startPos.y() - self.geometry().height()))
     self.__animationUp.start()
     self.__bouncing = True
예제 #12
0
 def moveTo(self, x, y):
     """ Move itself to a given point with the given animation in the given duration.
     @param x: X point coordinate
     @type x: int
     @param y: Y point coordinate
     @type y: int
     """
     self.__starting_position = QPoint(self.pos())
     self.__moveAnimation = QPropertyAnimation(self, "pos", self)
     self.__moveAnimation.setDuration(self.__move_time)
     self.__moveAnimation.setEasingCurve(self.__move_animation_type)
     self.__moveAnimation.setStartValue(self.__starting_position)
     self.__moveAnimation.setEndValue(QPoint(x, y))
     self.__moveAnimation.start()
예제 #13
0
파일: gui_builder.py 프로젝트: xding/IVNS
 def update_connected(self, env_view, rel_1, rel_2, selected_env): 
     env_view.scene().clear() 
     if not self.store_first:
         self.store_first = rel_1
         self.store_second = rel_2
     try:
         DragSelection().connected[selected_env]
     except:
         return
         
     for con in DragSelection().connected[selected_env]:            
         pt_from = con.pt_from.pos() - self.store_first - self.store_second - QPoint(442, 250)
         for pt in con.pts_to:
             pt_to = pt.pos() - self.store_first - self.store_second - QPoint(442, 250)
             env_view.draw_line(pt_from, pt_to)
예제 #14
0
 def calcCanvasTolerance(pixPoint, layer, mapTool, distance):
     """
     To transform the tolerance from screen coordinates to layer coordinates
     :param pixPoint: a screen position
     :param layer: the layer in which we are working
     :param mapTool: a QgsMapTool instance
     :param distance: the tolerance in map coordinates
     :return: the tolerance in layer coordinates
     """
     pt1 = QPoint(pixPoint.x(), pixPoint.y())
     pt2 = QPoint(pixPoint.x() + distance, pixPoint.y())
     layerPt1 = mapTool.toLayerCoordinates(layer, pt1)
     layerPt2 = mapTool.toLayerCoordinates(layer, pt2)
     tolerance = layerPt2.x() - layerPt1.x()
     return tolerance
예제 #15
0
    def updatePixmap(self, alpha):
        """ Update the pixmap for the current transition.

        This method first clears the output pixmap. It then draws the
        starting pixmap followed by the ending pixmap. Each pixmap is
        drawn with complementary alpha values.

        """
        out = self.outPixmap()
        painter = QPainter(out)
        painter.eraseRect(0, 0, out.width(), out.height())
        painter.setOpacity(1.0 - alpha)
        painter.drawPixmap(QPoint(0, 0), self.startPixmap())
        painter.setOpacity(alpha)
        painter.drawPixmap(QPoint(0, 0), self.endPixmap())
예제 #16
0
    def __updatePixmap(self):
        """
        Update the cached shadow pixmap.
        """
        rect_size = QSize(50, 50)
        left = top = right = bottom = self.radius_

        # Size of the pixmap.
        pixmap_size = QSize(rect_size.width() + left + right,
                            rect_size.height() + top + bottom)
        shadow_rect = QRect(QPoint(left, top), rect_size)
        pixmap = QPixmap(pixmap_size)
        pixmap.fill(QColor(0, 0, 0, 0))
        rect_fill_color = self.palette().color(QPalette.Window)

        pixmap = render_drop_shadow_frame(
                      pixmap,
                      QRectF(shadow_rect),
                      shadow_color=self.color_,
                      offset=QPointF(0, 0),
                      radius=self.radius_,
                      rect_fill_color=rect_fill_color
                      )

        self.__shadowPixmap = pixmap
        self.update()
예제 #17
0
    def paintEvent(self, ev):
        """Called when paint is needed, finds out which page to magnify."""
        layout = self.parent().pageLayout()
        pos = self.geometry().center()
        page = layout.pageAt(pos)
        if not page:
            return
        pagePos = pos - page.pos()

        newPage = Page(page, self._scale)
        if newPage != self._page:
            if self._page:
                self._page.magnifier = None
            self._page = newPage
            self._page.magnifier = self

        relx = pagePos.x() / float(page.width())
        rely = pagePos.y() / float(page.height())

        image = cache.image(self._page)
        img_rect = QRect(self.rect())
        if not image:
            cache.generate(self._page)
            image = cache.image(self._page, False)
            if image:
                img_rect.setWidth(self.width() * image.width() /
                                  self._page.width())
                img_rect.setHeight(self.height() * image.height() /
                                   self._page.height())
        if image:
            img_rect.moveCenter(
                QPoint(relx * image.width(), rely * image.height()))
            QPainter(self).drawImage(self.rect(), image, img_rect)
예제 #18
0
파일: config.py 프로젝트: tojojames/orange3
def splash_screen():
    """
    """
    pm = QPixmap(
        pkg_resources.resource_filename(
            __name__, "icons/orange-splash-screen.png")
    )

    version = QCoreApplication.applicationVersion()
    size = 21 if len(version) < 5 else 16
    font = QFont("Helvetica")
    font.setPixelSize(size)
    font.setBold(True)
    font.setItalic(True)
    font.setLetterSpacing(QFont.AbsoluteSpacing, 2)
    metrics = QFontMetrics(font)
    br = metrics.boundingRect(version).adjusted(-5, 0, 5, 0)
    br.moveCenter(QPoint(436, 224))

    p = QPainter(pm)
    p.setRenderHint(QPainter.Antialiasing)
    p.setRenderHint(QPainter.TextAntialiasing)
    p.setFont(font)
    p.setPen(QColor("#231F20"))
    p.drawText(br, Qt.AlignCenter, version)
    p.end()
    return pm, QRect(88, 193, 200, 20)
예제 #19
0
    def action_rotation_mouse_move(self, point):
        """ Slot function when mouse is moved in the canvas. 
            Add marker if any feature is snapped 
        """

        # Hide marker and get coordinates
        self.vertex_marker.hide()
        map_point = self.canvas.getCoordinateTransform().transform(point)
        x = map_point.x()
        y = map_point.y()
        event_point = QPoint(x, y)

        # Snapping
        (retval, result) = self.snapper.snapToBackgroundLayers(
            event_point)  # @UnusedVariable

        if not result:
            return

        # Check snapped features
        for snapped_point in result:
            point = QgsPoint(snapped_point.snappedVertex)
            self.vertex_marker.setCenter(point)
            self.vertex_marker.show()
            break
예제 #20
0
    def __init__(self, parent, ancestor):
        QTabBar.__init__(self, parent)
        self.ancestor = ancestor

        # Dragging tabs
        self.__drag_start_pos = QPoint()
        self.setAcceptDrops(True)
예제 #21
0
def openDocument(path):

    try:
        f = open(path)
        line = f.readline()
        width, height = map(int, line.strip().split("x"))

        image = QImage(800, 600, QImage.Format_RGB16)
        image.fill(QColor(255, 255, 255))

        painter = QPainter()
        painter.begin(image)
        painter.setRenderHint(QPainter.Antialiasing)
        painter.setPen(QPen(QColor(0, 0, 0), 4))

        n = int(f.readline())

        while n > 0:
            line = f.readline().strip()
            if not line:
                break

            obj = []
            for point in line.split():
                x, y = map(int, point.split(","))
                obj.append(QPoint(x, y))
            painter.drawPolyline(*obj)
            n -= 1

    except (IOError, ValueError):
        return

    painter.end()

    return image
예제 #22
0
    def reLayout(self):
        pages = list(self.pages())
        cols = self._npages
        if len(pages) > cols:
            ## prepend empty places if the first row should display less pages
            pages[0:0] = [None] * ((cols - self._npages_first) % cols)
        else:
            cols = len(pages)

        col_widths = []
        col_offsets = []
        offset = self._margin
        for col in range(cols):
            width = max(p.width() for p in pages[col::cols] if p)
            col_widths.append(width)
            col_offsets.append(offset)
            offset += width + self._spacing

        top = self._margin
        for row in (pages[i:i + cols]
                    for i in range(0, len(pages), cols or 1)):
            height = max(p.height() for p in row if p)
            for n, page in enumerate(row):
                if page:
                    x = col_offsets[n] + (col_widths[n] - page.width()) // 2
                    y = top + (height - page.height()) // 2
                    page.setPos(QPoint(x, y))
            top += height + self._spacing
        total_height = top + self._margin - self._spacing
        total_width = self._margin * 2 + self._spacing * (cols -
                                                          1) + sum(col_widths)
        self.setSize(QSize(total_width, total_height))
예제 #23
0
 def moveMouseFromCenter(self, imgView, coords):
     centerPoint = imgView.rect().bottomRight() / 2
     point = QPoint(*coords) + centerPoint
     move = QMouseEvent(QEvent.MouseMove, point, Qt.NoButton, Qt.NoButton,
                        Qt.NoModifier)
     QApplication.postEvent(imgView, move)
     QApplication.processEvents()
예제 #24
0
    def draw_filled_polygon(self, outline_pen_with=0):
        if not self.scale_polygon_colors == None:
            painter_filled_polygon = QPainter(self)
            painter_filled_polygon.setRenderHint(QPainter.Antialiasing)
            # Koordinatenursprung in die Mitte der Flaeche legen
            painter_filled_polygon.translate(self.width() / 2, self.height() / 2)

            painter_filled_polygon.setPen(Qt.NoPen)

            self.pen.setWidth(outline_pen_with)
            if outline_pen_with > 0:
                painter_filled_polygon.setPen(self.pen)

            colored_scale_polygon = self.create_polygon_pie(
                ((self.widget_diameter / 2) - (self.pen.width() / 2)) * self.gauge_color_outer_radius_factor,
                (((self.widget_diameter / 2) - (self.pen.width() / 2)) * self.gauge_color_inner_radius_factor),
                self.scale_angle_start_value, self.scale_angle_size)

            gauge_rect = QRect(QPoint(0, 0), QSize(self.widget_diameter / 2 - 1, self.widget_diameter - 1))
            grad = QConicalGradient(QPointF(0, 0), - self.scale_angle_size - self.scale_angle_start_value +
                                    self.angle_offset - 1)

            # todo definition scale color as array here
            for eachcolor in self.scale_polygon_colors:
                grad.setColorAt(eachcolor[0], eachcolor[1])
            # grad.setColorAt(.00, Qt.red)
            # grad.setColorAt(.1, Qt.yellow)
            # grad.setColorAt(.15, Qt.green)
            # grad.setColorAt(1, Qt.transparent)
            painter_filled_polygon.setBrush(grad)
            # self.brush = QBrush(QColor(255, 0, 255, 255))
            # painter_filled_polygon.setBrush(self.brush)
            painter_filled_polygon.drawPolygon(colored_scale_polygon)
예제 #25
0
    def mousePressEvent(self, mouseEvent):
        pos = mouseEvent.pos()

        if self.pointInScroller(pos, QtCore.Qt.Vertical) or self.pointInScroller(pos, QtCore.Qt.Horizontal):
            self.clickedInScrollBar = True
        else:
            if self.ignored.count(mouseEvent):
                self.ignored.remove(mouseEvent)
                return QWebView.mousePressEvent(self, mouseEvent)

            if not self.pressed and not self.scrolling and mouseEvent.modifiers() == QtCore.Qt.NoModifier:
                if mouseEvent.buttons() == QtCore.Qt.LeftButton:
                    self.pressed = True
                    self.scrolling = False
                    self.handIsClosed = False
                    QApplication.setOverrideCursor(QtCore.Qt.OpenHandCursor)

                    self.position = mouseEvent.pos()
                    frame = self.page().mainFrame()
                    xTuple = frame.evaluateJavaScript("window.scrollX").toInt()
                    yTuple = frame.evaluateJavaScript("window.scrollY").toInt()
                    self.offset = QPoint(xTuple[0], yTuple[0])
                    return

        return QWebView.mousePressEvent(self, mouseEvent)
예제 #26
0
 def paintEvent(self, ev):
     """Called when paint is needed, finds out which page to magnify."""
     layout = self.parent().surface().pageLayout()
     pos = self.geometry().center() - self.parent().surface().pos()
     page = layout.pageAt(pos)
     if not page:
         return
     pagePos = pos - page.pos()
     
     newPage = Page(page, self._scale)
     if not newPage.same_page(self._page):
         if self._page:
             self._page.magnifier = None
         self._page = newPage
         self._page.magnifier = self
     
     relx = pagePos.x() / float(page.width())
     rely = pagePos.y() / float(page.height())
     
     image = cache.image(self._page)
     img_rect = QRect(self.rect())
     if not image:
         cache.generate(self._page)
         image = cache.image(self._page, False)
         if image:
             img_rect.setWidth(self.width() * image.width() / self._page.width())
             img_rect.setHeight(self.height() * image.height() / self._page.height())
     if image:
         img_rect.moveCenter(QPoint(relx * image.width(), rely * image.height()))
         p = QPainter(self)
         p.drawImage(self.rect(), image, img_rect)
         p.setRenderHint(QPainter.Antialiasing, True)
         p.setPen(QPen(QColor(192, 192, 192, 128), 6))
         p.drawEllipse(self.rect().adjusted(2, 2, -2, -2))
예제 #27
0
    def mousePressEvent(self, ev):
        """Handle mouse press for dragging start/stop."""
        if ev.button() == Qt.LeftButton:
            self._dragPos = ev.globalPos()

            if self._kineticScrollingEnabled:
                # kinetic scrolling
                if self._kineticData.ignoreEvent(ev):
                    return

                if self._kineticData._state == KineticData.Steady or self._kineticData._state == KineticData.Stop:
                    self._dragging = True
                    self._kineticData._state = KineticData.Pressed
                    self._kineticData._pressPos = copy.copy(ev.pos())
                    self._kineticData._offset = self.scrollOffset()
                    self._kineticData._maxSpeed = 64  #limit speed.

                elif self._kineticData._state == KineticData.AutoScroll:
                    self._dragging = True
                    self._kineticData._state = KineticData.Stop
                    self._kineticData._speed = QPoint(0, 0)
            else:
                self._dragging = True

        super(KineticScrollArea, self).mousePressEvent(ev)
예제 #28
0
    def canvasMoveEvent(self, event):

        # Hide highlight
        self.vertex_marker.hide()

        # Get the click
        x = event.pos().x()
        y = event.pos().y()
        try:
            event_point = QPoint(x, y)
        except (TypeError, KeyError):
            self.iface.actionPan().trigger()
            return

        # Snapping
        if self.snap_to_selected_layer:
            (retval, result) = self.snapper.snapToCurrentLayer(event_point, 2)
        else:
            (retval, result) = self.snapper.snapToBackgroundLayers(event_point)

        # That's the snapped features
        if result:
            # Get the point and add marker on it
            point = QgsPoint(result[0].snappedVertex)
            self.vertex_marker.setCenter(point)
            self.vertex_marker.show()
    def mousePressEvent(self, event):
        if (not self.__readOnly):
            # Den ursprÜnglichen Wert speichern
            oldValue = self.__value

            # Die Position des Mauszeigers beim Klicken wird errechnet. Dabei soll die Mitte der linken Seite der Position (0, 0) entsprechen.
            mousePoint = event.pos() - self.rect().bottomLeft() - QPoint(
                0,
                self.rect().height() / 2)

            # Welche Breite haben die Punkte? Das bestimme ich je nachdem, ob das Fenster zu breit ist, sie alle aufzunehmen, oder zu hoch, aus Höhe bzw. Breite.
            windowWidth = self.width() / self.__maximum
            windowHeight = self.height()
            dotDiameter = min(windowWidth, windowHeight)

            # Hierdurch entspricht der neue Wert dem Punkt, auf den geklickt wurde
            newValue = int(mousePoint.x() / dotDiameter) + 1

            # Dadurch kann ich aber den Wert 0 nicht erreichen.
            # Also Abfrage einbauen, damit der Wert 0 wird, wenn der Wert bereits 1 war und wieder auf 1 geklickt wird,
            if (oldValue == 1 and newValue == 1):
                self.setValue(0)
            else:
                self.setValue(newValue)

            # Signal senden, wenn der neue Wert sich vom alten unterscheidet.
            # Dieses Signal soll nur ausgesendet werden, wenn der User den Wert ändert, nicht wenn programmtechnisch der Wert verändert wird. DafÜr existiert das signal valueChanged( int ).
            if (self.__value != oldValue):
                self.valueClicked.emit(oldValue)
    def canvasReleaseEvent(self, event):

        self.node_id = None

        # With left click the digitizing is finished
        if event.button() == Qt.RightButton:
            self.cancel_map_tool()
            return

        # Get the click
        x = event.pos().x()
        y = event.pos().y()
        event_point = QPoint(x, y)
        snapped_feat = None

        # Snapping
        (retval, result) = self.snapper.snapToCurrentLayer(event_point, 2)  #@UnusedVariable
            
        if result:
            # Get the point
            point = QgsPoint(result[0].snappedVertex)   #@UnusedVariable
            snapped_feat = next(result[0].layer.getFeatures(QgsFeatureRequest().setFilterFid(result[0].snappedAtGeometry)))
            self.node_id = snapped_feat.attribute('node_id')           
                  
            # Change node type
            self.change_elem_type(snapped_feat)

            # Refresh map canvas
            self.refresh_map_canvas()