first re-commit.
This commit is contained in:
146
swadjustabledigit.cpp
Normal file
146
swadjustabledigit.cpp
Normal file
@@ -0,0 +1,146 @@
|
||||
/***************************************************************************
|
||||
|
||||
source::worx raDIYo
|
||||
Copyright © 2020-2022 c.holzheuer
|
||||
chris@sourceworx.org
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
|
||||
#include <QDebug>
|
||||
#include <QMouseEvent>
|
||||
|
||||
#include <swadjustabledigit.h>
|
||||
|
||||
using namespace std::chrono;
|
||||
|
||||
|
||||
/**
|
||||
* @brief Standartkonstruktor: Erzeugt ein AdjustableDigit Widget, also
|
||||
* eine FlipDigit, deren Zahlerwert per Maus, Touchscreen oder RotaryDial
|
||||
* geändert werden kann.
|
||||
* Erbt von @see SWFlipDigit
|
||||
* @param parent
|
||||
*/
|
||||
|
||||
SWAdjustableDigit::SWAdjustableDigit( QWidget* parent )
|
||||
: SWFlipDigit( parent )
|
||||
{
|
||||
_fontScale = 0.75; //0.85
|
||||
|
||||
//_fontFamily = "Valley Grrrl NF";
|
||||
//_fontFamily = "Lansbury FG";
|
||||
//_fontFamily = "Selznick Remix NF";
|
||||
//_fontFamily = "Josefin Sans Thin";
|
||||
//_fontFamily = "ThickDeco";
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Setzt einen Zahlenwert. Wenn der Wert nicht in den
|
||||
* vorgegebenen Wertebereich passt, wird er angepasst und
|
||||
* SIGNAL valueOverflow ausgelöst.
|
||||
* @see setRange
|
||||
*/
|
||||
|
||||
void SWAdjustableDigit::setValue( int value )
|
||||
{
|
||||
|
||||
_value = qBound( _rangeFrom, value, _rangeTo );
|
||||
|
||||
if( value > _rangeTo )
|
||||
emit valueOverflow( value );
|
||||
else if( value < _rangeFrom )
|
||||
emit valueOverflow( value );
|
||||
preparePixmap();
|
||||
update();
|
||||
|
||||
emit valueChanged( _value );
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Teil der Maussteuerung, mit der Zahlenwert der Klappzahl
|
||||
* geändert werden kann.
|
||||
* @param event
|
||||
*/
|
||||
|
||||
void SWAdjustableDigit::mousePressEvent( QMouseEvent* event )
|
||||
{
|
||||
// timer merken
|
||||
_timerID = startTimer( 200 );
|
||||
// aktuelle Y-Pos/Höhe des Mauszeigers merken, um
|
||||
// delta plus oder minus zu ermitteln
|
||||
_posY = event->pos().y();
|
||||
int middle = rect().height() / 2;
|
||||
_delta = _posY >= middle ? -1 : +1 ;
|
||||
setValue( _value + _delta );
|
||||
_waiting = true;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Teil der Maussteuerung, mit der Zahlenwert der Klappzahl
|
||||
* geändert werden kann.
|
||||
* @param event
|
||||
*/
|
||||
|
||||
void SWAdjustableDigit::mouseMoveEvent( QMouseEvent* event )
|
||||
{
|
||||
|
||||
// Wenn wir uns dem Digit 'rausgezappelt haben, dann ist schluss ...
|
||||
if( !rect().contains( event->pos() ) )
|
||||
mouseReleaseEvent( event );
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Teil der Maussteuerung, mit der Zahlenwert der Klappzahl
|
||||
* geändert werden kann.
|
||||
* @param event
|
||||
*/
|
||||
|
||||
void SWAdjustableDigit::mouseReleaseEvent( QMouseEvent* )
|
||||
{
|
||||
// und schluss
|
||||
killTimer( _timerID );
|
||||
_delta = 0;
|
||||
_timerID = -1;
|
||||
_waiting = false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Timersteuerung. Verlangsamt die Wertänderung per Maus.
|
||||
*/
|
||||
|
||||
void SWAdjustableDigit::timerEvent( QTimerEvent* )
|
||||
{
|
||||
// zwei Fälle: der erste TimerEvent kommt
|
||||
// wenn die 'Festhalthürde' von 200 ms genommen ist,
|
||||
// dann kommen die Hoch/Runterzähl TickerEvents.
|
||||
|
||||
// zähltimer tick
|
||||
if( !_waiting && _delta )
|
||||
{
|
||||
setValue( _value + _delta );
|
||||
return;
|
||||
}
|
||||
|
||||
// erster Timer: alten Timer wegschmeissen ...
|
||||
killTimer( _timerID );
|
||||
// ...und den neuen schnelleren starten
|
||||
_timerID = startTimer( 100 );
|
||||
_waiting = false;
|
||||
|
||||
}
|
Reference in New Issue
Block a user