raDIYo 0.4
swadjustabledigit.cpp
1/***************************************************************************
2
3 source::worx raDIYo
4 Copyright © 2020-2022 c.holzheuer
5 c.holzheuer@sourceworx.org
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12***************************************************************************/
13
14
15#include <QDebug>
16#include <QMouseEvent>
17
18#include <swadjustabledigit.h>
19
20using namespace std::chrono;
21
22SWAdjustableDigit::SWAdjustableDigit( QWidget* parent )
23 : SWFlipDigit( parent )
24{
25
26}
27
28SWAdjustableDigit::~SWAdjustableDigit()
29{
30
31}
32
33void SWAdjustableDigit::mousePressEvent( QMouseEvent* event )
34{
35 // timer merken
36 //_timerID = startTimer( 200ms );
37 _timerID = startTimer( 200 );
38 // aktuelle Y-Pos/Höhe des Mauszeigers merken, um
39 // delta plus oder minus zu ermitteln
40 _posY = event->pos().y();
41 int middle = rect().height() / 2;
42 _delta = _posY >= middle ? -1 : +1 ;
43 qDebug() << "first press: " << middle << " : " << _posY << "delta: " << _delta;
44 setNumber( _number + _delta );
45 _waiting = true;
46
47}
48
49
50void SWAdjustableDigit::mouseMoveEvent( QMouseEvent* event )
51{
52
53 // Wenn wir uns dem Digit 'rausgezappelt haben, dann ist schluss ...
54 if( !rect().contains( event->pos() ) )
55 {
56 mouseReleaseEvent( event );
57 //killTimer( _timerID );
58 //_timerID = -1;
59 //_delta = 0;
60 }
61
62}
63
64
65void SWAdjustableDigit::mouseReleaseEvent( QMouseEvent* event )
66{
67 Q_UNUSED( event );
68 // und schluss
69 killTimer( _timerID );
70 _delta = 0;
71 _timerID = -1;
72 _waiting = false;
73
74
75}
76
77
78
79void SWAdjustableDigit::timerEvent( QTimerEvent* event )
80{
81
82 Q_UNUSED(event);
83
84 // zwei Fälle: der erste TimerEvent kommt
85 // wenn die 'Festhalthürde' von 200 ms genommen ist,
86 // dann kommen die Hoch/Runterzähl TickerEvents.
87
88
89 // zähltimer tick
90 if( !_waiting && _delta )
91 {
92 setNumber( _number + _delta );
93 return;
94 }
95
96 // erster Timer: alten Timer wegschmeissen ...
97 killTimer( _timerID );
98 // ...und den neuen schnelleren starten
99 _timerID = startTimer( 100 );
100 _waiting = false;
101
102
103
104}