113
113
s_textFloat = new textFloat( this );
116
setAcceptDrops( TRUE );
117
119
setAccessibleName( _name );
119
setRange( 0.0, 100.0, 1.0 );
122
120
m_knobPixmap = new QPixmap( embed::getIconPixmap( QString( "knob0" +
123
121
QString::number( m_knobNum + 1 ) ).toAscii().constData() ) );
123
setBackgroundMode( Qt::NoBackground );
125
124
m_knobPixmap = new QPixmap( embed::getIconPixmap( "knob0" +
126
125
QString::number( m_knobNum + 1 ) ) );
129
// setAttribute( Qt::WA_NoBackground );
131
setBackgroundMode( Qt::NoBackground );
134
m_knobWidth = m_knobPixmap->width();
127
setRange( 0.0f, 100.0f, 1.0f );
136
129
setFixedSize( m_knobPixmap->width(), m_knobPixmap->height() );
137
130
setTotalAngle( 270.0f );
314
void knob::recalcAngle( void )
317
// calculate the angle corresponding to the value
319
if( m_maxValue == m_minValue )
325
m_angle = ( value() - 0.5 * ( m_minValue + m_maxValue ) ) /
326
( m_maxValue - m_minValue ) * m_totalAngle;
327
m_angle = static_cast<int>( m_angle ) % 360;
334
void knob::contextMenuEvent( QContextMenuEvent * )
336
// for the case, the user clicked right while pressing left mouse-
337
// button, the context-menu appears while mouse-cursor is still hidden
338
// and it isn't shown again until user does something which causes
339
// an QApplication::restoreOverrideCursor()-call...
340
mouseReleaseEvent( NULL );
342
QMenu contextMenu( this );
344
contextMenu.setTitle( accessibleName() );
346
QLabel * caption = new QLabel( "<font color=white><b>" +
347
QString( accessibleName() ) + "</b></font>", this );
348
caption->setPaletteBackgroundColor( QColor( 0, 0, 192 ) );
349
caption->setAlignment( Qt::AlignCenter );
350
contextMenu.addAction( caption );
352
contextMenu.addAction( embed::getIconPixmap( "reload" ),
353
tr( "&Reset (%1%2)" ).arg( m_initValue ).arg(
354
m_hintTextAfterValue ),
355
this, SLOT( reset() ) );
356
contextMenu.addSeparator();
357
contextMenu.addAction( embed::getIconPixmap( "edit_copy" ),
358
tr( "&Copy value (%1%2)" ).arg( value() ).arg(
359
m_hintTextAfterValue ),
360
this, SLOT( copyValue() ) );
361
contextMenu.addAction( embed::getIconPixmap( "edit_paste" ),
362
tr( "&Paste value (%1%2)"
363
).arg( s_copiedValue ).arg(
364
m_hintTextAfterValue ),
365
this, SLOT( pasteValue() ) );
366
contextMenu.addSeparator();
367
contextMenu.addAction( tr( "Connect to MIDI-device" ), this,
368
SLOT( connectToMidiDevice() ) );
369
contextMenu.addSeparator();
370
contextMenu.addAction( embed::getIconPixmap( "help" ), tr( "&Help" ),
371
this, SLOT( displayHelp() ) );
372
contextMenu.exec( QCursor::pos() );
378
void knob::dragEnterEvent( QDragEnterEvent * _dee )
380
stringPairDrag::processDragEnterEvent( _dee, "float_value" );
386
void knob::dropEvent( QDropEvent * _de )
388
QString type = stringPairDrag::decodeKey( _de );
389
QString value = stringPairDrag::decodeValue( _de );
390
if( type == "float_value" )
392
setValue( value.toFloat() );
400
//! Mouse press event handler
401
void knob::mousePressEvent( QMouseEvent * _me )
403
if( _me->button() == Qt::LeftButton &&
404
lmmsMainWin::inst()->isCtrlPressed() == FALSE )
406
const QPoint & p = _me->pos();
409
if( configManager::inst()->value( "knobs",
410
"classicalusability").toInt() )
412
m_mouseOffset = getValue( p ) - value();
414
emit sliderPressed();
416
if( !configManager::inst()->value( "knobs", "classicalusability"
419
QApplication::setOverrideCursor( Qt::BlankCursor );
421
s_textFloat->reparent( this );
422
s_textFloat->setText( m_hintTextBeforeValue +
423
QString::number( value() ) +
424
m_hintTextAfterValue );
425
s_textFloat->move( mapTo( topLevelWidget(), QPoint( 0, 0 ) ) +
426
QPoint( m_knobPixmap->width() + 2, 0 ) );
428
m_buttonPressed = TRUE;
430
else if( _me->button() == Qt::LeftButton &&
431
lmmsMainWin::isCtrlPressed() == TRUE )
433
new stringPairDrag( "float_value", QString::number( value() ),
436
else if( _me->button() == Qt::MidButton )
445
//! Mouse Move Event handler
446
void knob::mouseMoveEvent( QMouseEvent * _me )
448
if( m_buttonPressed == TRUE )
450
setPosition( _me->pos() );
451
emit sliderMoved( value() );
452
if( !configManager::inst()->value( "knobs",
453
"classicalusability").toInt() )
455
QCursor::setPos( mapToGlobal( m_origMousePos ) );
457
songEditor::inst()->setModified();
460
s_textFloat->setText( m_hintTextBeforeValue +
461
QString::number( value() ) +
462
m_hintTextAfterValue );
468
//! Mouse Release Event handler
469
void knob::mouseReleaseEvent( QMouseEvent * /* _me*/ )
471
if( m_buttonPressed )
473
m_buttonPressed = TRUE;
478
emit sliderReleased();
480
if( !configManager::inst()->value( "knobs", "classicalusability"
483
QApplication::restoreOverrideCursor();
492
void knob::mouseDoubleClickEvent( QMouseEvent * )
346
500
void knob::paintEvent( QPaintEvent * _me )
348
// Use double-buffering
349
502
QRect ur = _me->rect();
351
504
if( ur.isValid() )
381
void knob::recalcAngle( void )
535
void knob::resizeEvent( QResizeEvent * )
383
m_oldAngle = m_angle;
386
// calculate the angle corresponding to the value
388
if( m_maxValue == m_minValue )
395
m_angle = ( value() - 0.5 * ( m_minValue + m_maxValue ) ) /
396
( m_maxValue - m_minValue ) * m_totalAngle;
397
m_nTurns = floor( ( m_angle + 180.0 ) / 360.0 );
398
m_angle = m_angle - m_nTurns * 360.0;
405
//! Mouse press event handler
406
void knob::mousePressEvent( QMouseEvent * _me )
544
void knob::wheelEvent( QWheelEvent * _we )
408
const QPoint & p = _me->pos();
411
getScrollMode( p, m_scrollMode, m_direction );
413
switch( m_scrollMode )
416
m_mouseOffset = getValue( p ) - value();
417
emit sliderPressed();
426
if( _me->button() == Qt::LeftButton )
428
if( !configManager::inst()->value( "knobs", "classicalusability"
431
QApplication::setOverrideCursor( Qt::BlankCursor );
433
s_textFloat->reparent( this );
434
s_textFloat->setText( m_hintTextBeforeValue +
435
QString::number( value() ) +
436
m_hintTextAfterValue );
437
s_textFloat->move( mapTo( topLevelWidget(), QPoint( 0, 0 ) ) +
547
const int inc = ( _we->delta() > 0 ) ? 1 : -1;
549
songEditor::inst()->setModified();
552
s_textFloat->reparent( this );
553
s_textFloat->setText( m_hintTextBeforeValue +
554
QString::number( value() ) +
555
m_hintTextAfterValue );
556
s_textFloat->move( mapTo( topLevelWidget(), QPoint( 0, 0 ) ) +
438
557
QPoint( m_knobPixmap->width() + 2, 0 ) );
558
s_textFloat->setVisibilityTimeOut( 1000 );
560
if( value() != m_prevValue )
562
emit sliderMoved( value() );
458
//! Mouse Release Event handler
459
void knob::mouseReleaseEvent( QMouseEvent * _me )
461
m_scrollMode = ScrNone;
464
switch( m_scrollMode )
467
setPosition( _me->pos() );
470
emit sliderReleased ();
474
setPosition( _me->pos() );
483
if( !configManager::inst()->value( "knobs", "classicalusability"
486
QApplication::restoreOverrideCursor();
495
581
void knob::setPosition( const QPoint & _p )
497
583
if( configManager::inst()->value( "knobs", "classicalusability"
500
setNewValue( getValue( _p ) - m_mouseOffset, 1 );
586
setValue( getValue( _p ) - m_mouseOffset );
504
setNewValue( m_value - getValue( _p ), 1 );
511
void knob::setTracking( bool _enable )
513
m_tracking = _enable;
519
//! Mouse Move Event handler
520
void knob::mouseMoveEvent( QMouseEvent * _me )
522
if( m_scrollMode == ScrMouse )
524
setPosition( _me->pos() );
525
if( value() != m_prevValue )
527
emit sliderMoved( value() );
529
if( !configManager::inst()->value( "knobs", "classicalusability"
532
QCursor::setPos( mapToGlobal( m_origMousePos ) );
535
songEditor::inst()->setModified();
537
s_textFloat->setText( m_hintTextBeforeValue +
538
QString::number( value() ) +
539
m_hintTextAfterValue );
546
void knob::wheelEvent( QWheelEvent * _me )
549
const int inc = _me->delta() / WHEEL_DELTA;
552
songEditor::inst()->setModified();
554
s_textFloat->reparent( this );
555
s_textFloat->setText( m_hintTextBeforeValue +
556
QString::number( value() ) +
557
m_hintTextAfterValue );
558
s_textFloat->move( mapTo( topLevelWidget(), QPoint( 0, 0 ) ) +
559
QPoint( m_knobPixmap->width() + 2, 0 ) );
560
s_textFloat->setVisibilityTimeOut( 1000 );
562
/* toolTip::add( this, m_hintTextBeforeValue+QString::number( value() ) +
563
m_hintTextAfterValue );*/
565
if( value() != m_prevValue )
567
emit sliderMoved( value() );
590
setValue( m_value - getValue( _p ) );
723
void knob::contextMenuEvent( QContextMenuEvent * )
725
QMenu contextMenu( this );
727
contextMenu.setTitle( accessibleName() );
729
QLabel * caption = new QLabel( "<font color=white><b>" +
730
QString( accessibleName() ) + "</b></font>", this );
731
caption->setPaletteBackgroundColor( QColor( 0, 0, 192 ) );
732
caption->setAlignment( Qt::AlignCenter );
733
contextMenu.addAction( caption );
735
contextMenu.addAction( embed::getIconPixmap( "reload" ),
736
tr( "&Reset (%1%2)" ).arg( m_initValue ).arg(
737
m_hintTextAfterValue ),
738
this, SLOT( reset() ) );
739
contextMenu.addSeparator();
740
contextMenu.addAction( embed::getIconPixmap( "edit_copy" ),
741
tr( "&Copy value (%1%2)" ).arg( value() ).arg(
742
m_hintTextAfterValue ),
743
this, SLOT( copyValue() ) );
744
contextMenu.addAction( embed::getIconPixmap( "edit_paste" ),
745
tr( "&Paste value (%1%2)"
746
).arg( s_copiedValue ).arg(
747
m_hintTextAfterValue ),
748
this, SLOT( pasteValue() ) );
749
contextMenu.addSeparator();
750
contextMenu.addAction( tr( "Connect to MIDI-device" ), this,
751
SLOT( connectToMidiDevice() ) );
752
contextMenu.addSeparator();
753
contextMenu.addAction( embed::getIconPixmap( "help" ), tr( "&Help" ),
754
this, SLOT( displayHelp() ) );
755
contextMenu.exec( QCursor::pos() );
761
747
void knob::reset( void )
763
749
setValue( m_initValue );
750
songEditor::inst()->setModified();
751
s_textFloat->reparent( this );
752
s_textFloat->setText( m_hintTextBeforeValue +
753
QString::number( value() ) +
754
m_hintTextAfterValue );
755
s_textFloat->move( mapTo( topLevelWidget(), QPoint( 0, 0 ) ) +
756
QPoint( m_knobPixmap->width() + 2, 0 ) );
757
s_textFloat->setVisibilityTimeOut( 1000 );
777
771
void knob::pasteValue( void )
779
773
setValue( s_copiedValue );
774
songEditor::inst()->setModified();
775
s_textFloat->reparent( this );
776
s_textFloat->setText( m_hintTextBeforeValue +
777
QString::number( value() ) +
778
m_hintTextAfterValue );
779
s_textFloat->move( mapTo( topLevelWidget(), QPoint( 0, 0 ) ) +
780
QPoint( m_knobPixmap->width() + 2, 0 ) );
781
s_textFloat->setVisibilityTimeOut( 1000 );
787
void knob::enterValue( void )
790
float new_val = QInputDialog::getDouble(
795
tr( "Please enter a new value between "
797
minValue() ).arg( maxValue() ),
798
value(), minValue(), maxValue(),