lb302SynthView::lb302SynthView( Instrument * _instrument, QWidget * _parent ) : InstrumentView( _instrument, _parent ) { // GUI m_vcfCutKnob = new Knob( knobBright_26, this ); m_vcfCutKnob->move( 75, 130 ); m_vcfCutKnob->setHintText( tr( "Cutoff Freq:" ), "" ); m_vcfCutKnob->setLabel( "" ); m_vcfResKnob = new Knob( knobBright_26, this ); m_vcfResKnob->move( 120, 130 ); m_vcfResKnob->setHintText( tr( "Resonance:" ), "" ); m_vcfResKnob->setLabel( "" ); m_vcfModKnob = new Knob( knobBright_26, this ); m_vcfModKnob->move( 165, 130 ); m_vcfModKnob->setHintText( tr( "Env Mod:" ), "" ); m_vcfModKnob->setLabel( "" ); m_vcfDecKnob = new Knob( knobBright_26, this ); m_vcfDecKnob->move( 210, 130 ); m_vcfDecKnob->setHintText( tr( "Decay:" ), "" ); m_vcfDecKnob->setLabel( "" ); m_slideToggle = new LedCheckBox( "", this ); m_slideToggle->move( 10, 180 ); /* m_accentToggle = new LedCheckBox( "", this ); m_accentToggle->move( 10, 200 ); m_accentToggle->setDisabled(true);*/ // accent removed pending real implementation - no need for non-functional buttons m_deadToggle = new LedCheckBox( "", this ); m_deadToggle->move( 10, 200 ); m_db24Toggle = new LedCheckBox( "", this ); m_db24Toggle->setWhatsThis( tr( "303-es-que, 24dB/octave, 3 pole filter" ) ); m_db24Toggle->move( 10, 150); m_slideDecKnob = new Knob( knobBright_26, this ); m_slideDecKnob->move( 210, 75 ); m_slideDecKnob->setHintText( tr( "Slide Decay:" ), "" ); m_slideDecKnob->setLabel( ""); m_distKnob = new Knob( knobBright_26, this ); m_distKnob->move( 210, 190 ); m_distKnob->setHintText( tr( "DIST:" ), "" ); m_distKnob->setLabel( tr( "")); // Shapes // move to 120,75 const int waveBtnX = 10; const int waveBtnY = 96; PixmapButton * sawWaveBtn = new PixmapButton( this, tr( "Saw wave" ) ); sawWaveBtn->move( waveBtnX, waveBtnY ); sawWaveBtn->setActiveGraphic( embed::getIconPixmap( "saw_wave_active" ) ); sawWaveBtn->setInactiveGraphic( embed::getIconPixmap( "saw_wave_inactive" ) ); ToolTip::add( sawWaveBtn, tr( "Click here for a saw-wave." ) ); PixmapButton * triangleWaveBtn = new PixmapButton( this, tr( "Triangle wave" ) ); triangleWaveBtn->move( waveBtnX+(16*1), waveBtnY ); triangleWaveBtn->setActiveGraphic( embed::getIconPixmap( "triangle_wave_active" ) ); triangleWaveBtn->setInactiveGraphic( embed::getIconPixmap( "triangle_wave_inactive" ) ); ToolTip::add( triangleWaveBtn, tr( "Click here for a triangle-wave." ) ); PixmapButton * sqrWaveBtn = new PixmapButton( this, tr( "Square wave" ) ); sqrWaveBtn->move( waveBtnX+(16*2), waveBtnY ); sqrWaveBtn->setActiveGraphic( embed::getIconPixmap( "square_wave_active" ) ); sqrWaveBtn->setInactiveGraphic( embed::getIconPixmap( "square_wave_inactive" ) ); ToolTip::add( sqrWaveBtn, tr( "Click here for a square-wave." ) ); PixmapButton * roundSqrWaveBtn = new PixmapButton( this, tr( "Rounded square wave" ) ); roundSqrWaveBtn->move( waveBtnX+(16*3), waveBtnY ); roundSqrWaveBtn->setActiveGraphic( embed::getIconPixmap( "round_square_wave_active" ) ); roundSqrWaveBtn->setInactiveGraphic( embed::getIconPixmap( "round_square_wave_inactive" ) ); ToolTip::add( roundSqrWaveBtn, tr( "Click here for a square-wave with a rounded end." ) ); PixmapButton * moogWaveBtn = new PixmapButton( this, tr( "Moog wave" ) ); moogWaveBtn->move( waveBtnX+(16*4), waveBtnY ); moogWaveBtn->setActiveGraphic( embed::getIconPixmap( "moog_saw_wave_active" ) ); moogWaveBtn->setInactiveGraphic( embed::getIconPixmap( "moog_saw_wave_inactive" ) ); ToolTip::add( moogWaveBtn, tr( "Click here for a moog-like wave." ) ); PixmapButton * sinWaveBtn = new PixmapButton( this, tr( "Sine wave" ) ); sinWaveBtn->move( waveBtnX+(16*5), waveBtnY ); sinWaveBtn->setActiveGraphic( embed::getIconPixmap( "sin_wave_active" ) ); sinWaveBtn->setInactiveGraphic( embed::getIconPixmap( "sin_wave_inactive" ) ); ToolTip::add( sinWaveBtn, tr( "Click for a sine-wave." ) ); PixmapButton * exponentialWaveBtn = new PixmapButton( this, tr( "White noise wave" ) ); exponentialWaveBtn->move( waveBtnX+(16*6), waveBtnY ); exponentialWaveBtn->setActiveGraphic( embed::getIconPixmap( "exp_wave_active" ) ); exponentialWaveBtn->setInactiveGraphic( embed::getIconPixmap( "exp_wave_inactive" ) ); ToolTip::add( exponentialWaveBtn, tr( "Click here for an exponential wave." ) ); PixmapButton * whiteNoiseWaveBtn = new PixmapButton( this, tr( "White noise wave" ) ); whiteNoiseWaveBtn->move( waveBtnX+(16*7), waveBtnY ); whiteNoiseWaveBtn->setActiveGraphic( embed::getIconPixmap( "white_noise_wave_active" ) ); whiteNoiseWaveBtn->setInactiveGraphic( embed::getIconPixmap( "white_noise_wave_inactive" ) ); ToolTip::add( whiteNoiseWaveBtn, tr( "Click here for white-noise." ) ); PixmapButton * blSawWaveBtn = new PixmapButton( this, tr( "Bandlimited saw wave" ) ); blSawWaveBtn->move( waveBtnX+(16*9)-8, waveBtnY ); blSawWaveBtn->setActiveGraphic( embed::getIconPixmap( "saw_wave_active" ) ); blSawWaveBtn->setInactiveGraphic( embed::getIconPixmap( "saw_wave_inactive" ) ); ToolTip::add( blSawWaveBtn, tr( "Click here for bandlimited saw wave." ) ); PixmapButton * blSquareWaveBtn = new PixmapButton( this, tr( "Bandlimited square wave" ) ); blSquareWaveBtn->move( waveBtnX+(16*10)-8, waveBtnY ); blSquareWaveBtn->setActiveGraphic( embed::getIconPixmap( "square_wave_active" ) ); blSquareWaveBtn->setInactiveGraphic( embed::getIconPixmap( "square_wave_inactive" ) ); ToolTip::add( blSquareWaveBtn, tr( "Click here for bandlimited square wave." ) ); PixmapButton * blTriangleWaveBtn = new PixmapButton( this, tr( "Bandlimited triangle wave" ) ); blTriangleWaveBtn->move( waveBtnX+(16*11)-8, waveBtnY ); blTriangleWaveBtn->setActiveGraphic( embed::getIconPixmap( "triangle_wave_active" ) ); blTriangleWaveBtn->setInactiveGraphic( embed::getIconPixmap( "triangle_wave_inactive" ) ); ToolTip::add( blTriangleWaveBtn, tr( "Click here for bandlimited triangle wave." ) ); PixmapButton * blMoogWaveBtn = new PixmapButton( this, tr( "Bandlimited moog saw wave" ) ); blMoogWaveBtn->move( waveBtnX+(16*12)-8, waveBtnY ); blMoogWaveBtn->setActiveGraphic( embed::getIconPixmap( "moog_saw_wave_active" ) ); blMoogWaveBtn->setInactiveGraphic( embed::getIconPixmap( "moog_saw_wave_inactive" ) ); ToolTip::add( blMoogWaveBtn, tr( "Click here for bandlimited moog saw wave." ) ); m_waveBtnGrp = new automatableButtonGroup( this ); m_waveBtnGrp->addButton( sawWaveBtn ); m_waveBtnGrp->addButton( triangleWaveBtn ); m_waveBtnGrp->addButton( sqrWaveBtn ); m_waveBtnGrp->addButton( roundSqrWaveBtn ); m_waveBtnGrp->addButton( moogWaveBtn ); m_waveBtnGrp->addButton( sinWaveBtn ); m_waveBtnGrp->addButton( exponentialWaveBtn ); m_waveBtnGrp->addButton( whiteNoiseWaveBtn ); m_waveBtnGrp->addButton( blSawWaveBtn ); m_waveBtnGrp->addButton( blSquareWaveBtn ); m_waveBtnGrp->addButton( blTriangleWaveBtn ); m_waveBtnGrp->addButton( blMoogWaveBtn ); setAutoFillBackground( true ); QPalette pal; pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap( "artwork" ) ); setPalette( pal ); }
EqControlsDialog::EqControlsDialog( EqControls *controls ) : EffectControlDialog( controls ), m_controls( controls ) { setAutoFillBackground( true ); QPalette pal; pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap( "EqLayout1BG" ) ); setPalette( pal ); setFixedSize( 500, 500 ); QGridLayout *mainLayout = new QGridLayout( this ); EqSpectrumView *inSpec = new EqSpectrumView( &controls->m_inFftBands, this ); mainLayout->addWidget( inSpec, 0, 1, 1, 8 ); inSpec->setColor( QColor( 238, 154, 120, 80 ) ); EqSpectrumView *outSpec = new EqSpectrumView( &controls->m_outFftBands, this ); outSpec->setColor( QColor( 145, 205, 22, 80 ) ); mainLayout->addWidget( outSpec, 0, 1, 1, 8 ); m_parameterWidget = new EqParameterWidget( this , controls ); mainLayout->addWidget( m_parameterWidget, 0, 1, 1, 8 ); setBand( 0, &controls->m_hpActiveModel, &controls->m_hpFeqModel, &controls->m_hpResModel, 0, QColor(255 ,255, 255), tr( "HP" ) ,0,0, &controls->m_hp12Model, &controls->m_hp24Model, &controls->m_hp48Model,0,0,0); setBand( 1, &controls->m_lowShelfActiveModel, &controls->m_lowShelfFreqModel, &controls->m_lowShelfResModel, &controls->m_lowShelfGainModel, QColor(255 ,255, 255), tr( "Low Shelf" ), &controls->m_lowShelfPeakL , &controls->m_lowShelfPeakR,0,0,0,0,0,0 ); setBand( 2, &controls->m_para1ActiveModel, &controls->m_para1FreqModel, &controls->m_para1BwModel, &controls->m_para1GainModel, QColor(255 ,255, 255), tr( "Peak 1" ), &controls->m_para1PeakL, &controls->m_para1PeakR,0,0,0,0,0,0 ); setBand( 3, &controls->m_para2ActiveModel, &controls->m_para2FreqModel, &controls->m_para2BwModel, &controls->m_para2GainModel, QColor(255 ,255, 255), tr( "Peak 2" ), &controls->m_para2PeakL, &controls->m_para2PeakR,0,0,0,0,0,0 ); setBand( 4, &controls->m_para3ActiveModel, &controls->m_para3FreqModel, &controls->m_para3BwModel, &controls->m_para3GainModel, QColor(255 ,255, 255), tr( "Peak 3" ), &controls->m_para3PeakL, &controls->m_para3PeakR,0,0,0,0,0,0 ); setBand( 5, &controls->m_para4ActiveModel, &controls->m_para4FreqModel, &controls->m_para4BwModel, &controls->m_para4GainModel, QColor(255 ,255, 255), tr( "Peak 4" ), &controls->m_para4PeakL, &controls->m_para4PeakR,0,0,0,0,0,0 ); setBand( 6, &controls->m_highShelfActiveModel, &controls->m_highShelfFreqModel, &controls->m_highShelfResModel, &controls->m_highShelfGainModel, QColor(255 ,255, 255), tr( "High Shelf" ), &controls->m_highShelfPeakL, &controls->m_highShelfPeakR,0,0,0,0,0,0 ); setBand( 7, &controls->m_lpActiveModel, &controls->m_lpFreqModel, &controls->m_lpResModel, 0, QColor(255 ,255, 255), tr( "LP" ) ,0,0,0,0,0, &controls->m_lp12Model, &controls->m_lp24Model, &controls->m_lp48Model); EqFader *inGainFader = new EqFader( &controls->m_inGainModel, tr( "In Gain" ), this, &controls->m_inPeakL, &controls->m_inPeakR ); mainLayout->addWidget( inGainFader, 0, 0 ); inGainFader->setDisplayConversion( false ); inGainFader->setHintText( tr( "Gain" ), "dBFS"); EqFader *outGainFader = new EqFader( &controls->m_outGainModel, tr( "Out Gain" ), this, &controls->m_outPeakL, &controls->m_outPeakR ); mainLayout->addWidget( outGainFader, 0, 9 ); outGainFader->setDisplayConversion( false ); outGainFader->setHintText( tr( "Gain" ), "dBFS" ); // Gain Fader for each Filter exepts the pass filter for( int i = 1; i < m_parameterWidget->bandCount() - 1; i++ ) { EqFader *gainFader = new EqFader( m_parameterWidget->getBandModels( i )->gain, tr( "" ), this, m_parameterWidget->getBandModels( i )->peakL, m_parameterWidget->getBandModels( i )->peakR ); mainLayout->addWidget( gainFader, 2, i+1 ); mainLayout->setAlignment( gainFader, Qt::AlignHCenter ); gainFader->setMinimumHeight(80); gainFader->resize(gainFader->width() , 80); gainFader->setDisplayConversion( false ); gainFader->setHintText( tr( "Gain") , "dB"); } //Control Button and Knobs for each Band for( int i = 0; i < m_parameterWidget->bandCount() ; i++ ) { Knob *resKnob = new Knob( knobBright_26, this ); mainLayout->setRowMinimumHeight( 4, 33 ); mainLayout->addWidget( resKnob, 5, i + 1 ); mainLayout->setAlignment( resKnob, Qt::AlignHCenter ); resKnob->setVolumeKnob(false); resKnob->setModel( m_parameterWidget->getBandModels( i )->res ); if(i > 1 && i < 6) { resKnob->setHintText( tr( "Bandwidth: " ) , tr( " Octave" ) ); } else { resKnob->setHintText( tr( "Resonance : " ) , "" ); } Knob *freqKnob = new Knob( knobBright_26, this ); mainLayout->addWidget( freqKnob, 3, i+1 ); mainLayout->setAlignment( freqKnob, Qt::AlignHCenter ); freqKnob->setVolumeKnob( false ); freqKnob->setModel( m_parameterWidget->getBandModels( i )->freq ); freqKnob->setHintText( tr( "Frequency:" ), "Hz" ); // adds the Number Active buttons PixmapButton *activeNumButton = new PixmapButton( this, NULL ); activeNumButton->setCheckable(true); activeNumButton->setModel( m_parameterWidget->getBandModels( i )->active ); QString iconActiveFileName = "bandLabel" + QString::number(i+1) + "on"; QString iconInactiveFileName = "bandLabel" + QString::number(i+1); activeNumButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap( iconActiveFileName.toLatin1() ) ); activeNumButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( iconInactiveFileName.toLatin1() ) ); mainLayout->addWidget( activeNumButton, 1, i+1 ); mainLayout->setAlignment( activeNumButton, Qt::AlignHCenter ); activeNumButton->setModel( m_parameterWidget->getBandModels( i )->active ); // adds the symbols active buttons PixmapButton *activeButton = new PixmapButton( this, NULL ); activeButton->setCheckable(true); activeButton->setModel( m_parameterWidget->getBandModels( i )->active ); switch (i) { case 0: activeButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "ActiveHP" ) ); activeButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "ActiveHPoff" ) ); break; case 1: activeButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "ActiveLS" ) ); activeButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "ActiveLSoff" ) ); break; case 6: activeButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "ActiveHS" ) ); activeButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "ActiveHSoff" ) ); break; case 7: activeButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "ActiveLP" ) ); activeButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "ActiveLPoff" ) ); break; default: activeButton->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "ActivePeak" ) ); activeButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "ActivePeakoff" ) ); } mainLayout->addWidget( activeButton, 7, i+1 ); mainLayout->setAlignment( activeButton, Qt::AlignHCenter); activeButton->setModel( m_parameterWidget->getBandModels( i )->active ); // Connects the knobs, Faders and buttons with the curve graphic QObject::connect( m_parameterWidget->getBandModels( i )->freq , SIGNAL( dataChanged() ), m_parameterWidget, SLOT ( updateHandle() ) ); if ( m_parameterWidget->getBandModels( i )->gain ) QObject::connect( m_parameterWidget->getBandModels( i )->gain, SIGNAL( dataChanged() ), m_parameterWidget, SLOT ( updateHandle() )); QObject::connect( m_parameterWidget->getBandModels( i )->res, SIGNAL( dataChanged() ), m_parameterWidget , SLOT ( updateHandle() ) ); QObject::connect( m_parameterWidget->getBandModels( i )->active, SIGNAL( dataChanged() ), m_parameterWidget , SLOT ( updateHandle() ) ); m_parameterWidget->changeHandle( i ); } // adds the buttons for Spectrum analyser on/off PixmapButton *inSpecB = new PixmapButton(this, NULL); inSpecB->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "ActiveAnalyse" ) ); inSpecB->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "ActiveAnalyseoff" ) ); inSpecB->setCheckable( true ); inSpecB->setModel( &controls->m_analyseInModel ); PixmapButton *outSpecB = new PixmapButton(this, NULL); outSpecB->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "ActiveAnalyse" ) ); outSpecB->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "ActiveAnalyseoff" ) ); outSpecB->setCheckable( true ); outSpecB->setModel( &controls->m_analyseOutModel ); mainLayout->addWidget( inSpecB, 1, 0 ); mainLayout->addWidget( outSpecB, 1, 9 ); mainLayout->setAlignment( inSpecB, Qt::AlignHCenter ); mainLayout->setAlignment( outSpecB, Qt::AlignHCenter ); //hp filter type PixmapButton *hp12Button = new PixmapButton( this , NULL ); hp12Button->setModel( m_parameterWidget->getBandModels( 0 )->hp12 ); hp12Button->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "12dB" ) ); hp12Button->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "12dBoff" ) ); PixmapButton *hp24Button = new PixmapButton( this , NULL ); hp24Button->setModel(m_parameterWidget->getBandModels( 0 )->hp24 ); hp24Button->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "24dB" ) ); hp24Button->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "24dBoff" ) ); PixmapButton *hp48Button = new PixmapButton( this , NULL ); hp48Button->setModel( m_parameterWidget->getBandModels(0)->hp48 ); hp48Button->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "48dB" ) ); hp48Button->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "48dBoff" ) ); //LP filter type PixmapButton *lp12Button = new PixmapButton( this , NULL ); mainLayout->addWidget( lp12Button, 2, 1 ); lp12Button->setModel( m_parameterWidget->getBandModels( 7 )->lp12 ); lp12Button->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "12dB" ) ); lp12Button->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "12dBoff" ) ); PixmapButton *lp24Button = new PixmapButton( this , NULL ); lp24Button->setModel( m_parameterWidget->getBandModels( 7 )->lp24 ); lp24Button->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "24dB" ) ); lp24Button->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "24dBoff" ) ); PixmapButton *lp48Button = new PixmapButton( this , NULL ); lp48Button->setModel( m_parameterWidget->getBandModels( 7 )->lp48 ); lp48Button->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "48dB" ) ); lp48Button->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "48dBoff" ) ); // the curve has to change its appearance connect( m_parameterWidget->getBandModels( 0 )->hp12 , SIGNAL ( dataChanged() ), m_parameterWidget, SLOT( updateHandle())); connect( m_parameterWidget->getBandModels( 0 )->hp24 , SIGNAL ( dataChanged() ), m_parameterWidget, SLOT( updateHandle())); connect( m_parameterWidget->getBandModels( 0 )->hp48 , SIGNAL ( dataChanged() ), m_parameterWidget, SLOT( updateHandle())); connect( m_parameterWidget->getBandModels( 7 )->lp12 , SIGNAL ( dataChanged() ), m_parameterWidget, SLOT( updateHandle())); connect( m_parameterWidget->getBandModels( 7 )->lp24 , SIGNAL ( dataChanged() ), m_parameterWidget, SLOT( updateHandle())); connect( m_parameterWidget->getBandModels( 7 )->lp48 , SIGNAL ( dataChanged() ), m_parameterWidget, SLOT( updateHandle())); QVBoxLayout *hpGrpBtnLayout = new QVBoxLayout; hpGrpBtnLayout->addWidget( hp12Button ); hpGrpBtnLayout->addWidget( hp24Button ); hpGrpBtnLayout->addWidget( hp48Button ); QVBoxLayout *lpGrpBtnLayout = new QVBoxLayout; lpGrpBtnLayout->addWidget( lp12Button ); lpGrpBtnLayout->addWidget( lp24Button ); lpGrpBtnLayout->addWidget( lp48Button ); mainLayout->addLayout( hpGrpBtnLayout, 2, 1, Qt::AlignCenter ); mainLayout->addLayout( lpGrpBtnLayout, 2, 8, Qt::AlignCenter ); automatableButtonGroup *lpBtnGrp = new automatableButtonGroup(this,tr ( "lp grp" ) ); lpBtnGrp->addButton( lp12Button ); lpBtnGrp->addButton( lp24Button ); lpBtnGrp->addButton( lp48Button ); lpBtnGrp->setModel( &m_controls->m_lpTypeModel, false); automatableButtonGroup *hpBtnGrp = new automatableButtonGroup( this, tr( "hp grp" ) ); hpBtnGrp->addButton( hp12Button ); hpBtnGrp->addButton( hp24Button ); hpBtnGrp->addButton( hp48Button ); hpBtnGrp->setModel( &m_controls->m_hpTypeModel,false); mainLayout->setAlignment( Qt::AlignTop ); for (int i = 0 ; i < 10; i++) { mainLayout->setColumnMinimumWidth(i, 50); } mainLayout->setAlignment( inGainFader, Qt::AlignHCenter ); mainLayout->setAlignment( outGainFader, Qt::AlignHCenter ); mainLayout->setRowMinimumHeight( 0,200 ); mainLayout->setRowMinimumHeight( 1, 40 ); mainLayout->setRowMinimumHeight(6,15); mainLayout->setContentsMargins( 0, 11, 0, 0 ); mainLayout->setAlignment(inSpec, Qt::AlignCenter ); mainLayout->setAlignment(outSpec, Qt::AlignCenter ); QLabel *freqLabel = new QLabel( this ); freqLabel->setText("- " + tr( "Frequency")+ " -" ); freqLabel->move( 217 , 377 ); QLabel *resLabel1 = new QLabel( this ); resLabel1->setText("- " + tr( "Resonance")+ " -" ); resLabel1->move( 62 , 444 ); QLabel *resLabel2 = new QLabel( this ); resLabel2->setText("- " + tr( "Resonance")+ " -" ); resLabel2->move( 365 , 444 ); QLabel *bandWidthLabel = new QLabel( this ); bandWidthLabel->setText("- " + tr( "Bandwidth")+ " -" ); bandWidthLabel->move( 215 , 444 ); setLayout(mainLayout); }
TripleOscillatorView::TripleOscillatorView( Instrument * _instrument, QWidget * _parent ) : InstrumentView( _instrument, _parent ) { setAutoFillBackground( true ); QPalette pal; pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap( "artwork" ) ); setPalette( pal ); const int mod_x = 66; const int mod1_y = 58; const int mod2_y = 75; const int osc_y = 109; const int osc_h = 52; // TODO: clean rewrite using layouts and all that... PixmapButton * pm_osc1_btn = new PixmapButton( this, NULL ); pm_osc1_btn->move( mod_x, mod1_y ); pm_osc1_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "pm_active" ) ); pm_osc1_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "pm_inactive" ) ); ToolTip::add( pm_osc1_btn, tr( "Use phase modulation for " "modulating oscillator 1 with " "oscillator 2" ) ); PixmapButton * am_osc1_btn = new PixmapButton( this, NULL ); am_osc1_btn->move( mod_x + 35, mod1_y ); am_osc1_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "am_active" ) ); am_osc1_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "am_inactive" ) ); ToolTip::add( am_osc1_btn, tr( "Use amplitude modulation for " "modulating oscillator 1 with " "oscillator 2" ) ); PixmapButton * mix_osc1_btn = new PixmapButton( this, NULL ); mix_osc1_btn->move( mod_x + 70, mod1_y ); mix_osc1_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "mix_active" ) ); mix_osc1_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "mix_inactive" ) ); ToolTip::add( mix_osc1_btn, tr( "Mix output of oscillator 1 & 2" ) ); PixmapButton * sync_osc1_btn = new PixmapButton( this, NULL ); sync_osc1_btn->move( mod_x + 105, mod1_y ); sync_osc1_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "sync_active" ) ); sync_osc1_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "sync_inactive" ) ); ToolTip::add( sync_osc1_btn, tr( "Synchronize oscillator 1 with " "oscillator 2" ) ); PixmapButton * fm_osc1_btn = new PixmapButton( this, NULL ); fm_osc1_btn->move( mod_x + 140, mod1_y ); fm_osc1_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "fm_active" ) ); fm_osc1_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "fm_inactive" ) ); ToolTip::add( fm_osc1_btn, tr( "Use frequency modulation for " "modulating oscillator 1 with " "oscillator 2" ) ); m_mod1BtnGrp = new automatableButtonGroup( this ); m_mod1BtnGrp->addButton( pm_osc1_btn ); m_mod1BtnGrp->addButton( am_osc1_btn ); m_mod1BtnGrp->addButton( mix_osc1_btn ); m_mod1BtnGrp->addButton( sync_osc1_btn ); m_mod1BtnGrp->addButton( fm_osc1_btn ); PixmapButton * pm_osc2_btn = new PixmapButton( this, NULL ); pm_osc2_btn->move( mod_x, mod2_y ); pm_osc2_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "pm_active" ) ); pm_osc2_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "pm_inactive" ) ); ToolTip::add( pm_osc2_btn, tr( "Use phase modulation for " "modulating oscillator 2 with " "oscillator 3" ) ); PixmapButton * am_osc2_btn = new PixmapButton( this, NULL ); am_osc2_btn->move( mod_x + 35, mod2_y ); am_osc2_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "am_active" ) ); am_osc2_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "am_inactive" ) ); ToolTip::add( am_osc2_btn, tr( "Use amplitude modulation for " "modulating oscillator 2 with " "oscillator 3" ) ); PixmapButton * mix_osc2_btn = new PixmapButton( this, NULL ); mix_osc2_btn->move( mod_x + 70, mod2_y ); mix_osc2_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "mix_active" ) ); mix_osc2_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "mix_inactive" ) ); ToolTip::add( mix_osc2_btn, tr("Mix output of oscillator 2 & 3" ) ); PixmapButton * sync_osc2_btn = new PixmapButton( this, NULL ); sync_osc2_btn->move( mod_x + 105, mod2_y ); sync_osc2_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "sync_active" ) ); sync_osc2_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "sync_inactive" ) ); ToolTip::add( sync_osc2_btn, tr( "Synchronize oscillator 2 with " "oscillator 3" ) ); PixmapButton * fm_osc2_btn = new PixmapButton( this, NULL ); fm_osc2_btn->move( mod_x + 140, mod2_y ); fm_osc2_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "fm_active" ) ); fm_osc2_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "fm_inactive" ) ); ToolTip::add( fm_osc2_btn, tr( "Use frequency modulation for " "modulating oscillator 2 with " "oscillator 3" ) ); m_mod2BtnGrp = new automatableButtonGroup( this ); m_mod2BtnGrp->addButton( pm_osc2_btn ); m_mod2BtnGrp->addButton( am_osc2_btn ); m_mod2BtnGrp->addButton( mix_osc2_btn ); m_mod2BtnGrp->addButton( sync_osc2_btn ); m_mod2BtnGrp->addButton( fm_osc2_btn ); for( int i = 0; i < NUM_OF_OSCILLATORS; ++i ) { int knob_y = osc_y + i * osc_h; // setup volume-knob Knob * vk = new Knob( knobStyled, this ); vk->setVolumeKnob( true ); vk->setFixedSize( 28, 35 ); vk->move( 6, knob_y ); vk->setHintText( tr( "Osc %1 volume:" ).arg( i+1 ), "%" ); vk->setWhatsThis( tr( "With this knob you can set the volume of " "oscillator %1. When setting a value of 0 the " "oscillator is turned off. Otherwise you can " "hear the oscillator as loud as you set it " "here.").arg( i+1 ) ); // setup panning-knob Knob * pk = new TripleOscKnob( this ); pk->move( 35, knob_y ); pk->setHintText( tr("Osc %1 panning:").arg( i + 1 ), "" ); pk->setWhatsThis( tr( "With this knob you can set the panning of the " "oscillator %1. A value of -100 means 100% " "left and a value of 100 moves oscillator-" "output right.").arg( i+1 ) ); // setup coarse-knob Knob * ck = new TripleOscKnob( this ); ck->move( 82, knob_y ); ck->setHintText( tr( "Osc %1 coarse detuning:" ).arg( i + 1 ) , " " + tr( "semitones" ) ); ck->setWhatsThis( tr( "With this knob you can set the coarse detuning of " "oscillator %1. You can detune the oscillator " "24 semitones (2 octaves) up and down. This is " "useful for creating sounds with a chord." ). arg( i + 1 ) ); // setup knob for left fine-detuning Knob * flk = new TripleOscKnob( this ); flk->move( 111, knob_y ); flk->setHintText( tr( "Osc %1 fine detuning left:" ). arg( i + 1 ), " " + tr( "cents" ) ); flk->setWhatsThis( tr( "With this knob you can set the fine detuning of " "oscillator %1 for the left channel. The fine-" "detuning is ranged between -100 cents and " "+100 cents. This is useful for creating " "\"fat\" sounds." ).arg( i + 1 ) ); // setup knob for right fine-detuning Knob * frk = new TripleOscKnob( this ); frk->move( 140, knob_y ); frk->setHintText( tr( "Osc %1 fine detuning right:" ). arg( i + 1 ), " " + tr( "cents" ) ); frk->setWhatsThis( tr( "With this knob you can set the fine detuning of " "oscillator %1 for the right channel. The " "fine-detuning is ranged between -100 cents " "and +100 cents. This is useful for creating " "\"fat\" sounds." ).arg( i+1 ) ); // setup phase-offset-knob Knob * pok = new TripleOscKnob( this ); pok->move( 188, knob_y ); pok->setHintText( tr( "Osc %1 phase-offset:" ). arg( i + 1 ), " " + tr( "degrees" ) ); pok->setWhatsThis( tr( "With this knob you can set the phase-offset of " "oscillator %1. That means you can move the " "point within an oscillation where the " "oscillator begins to oscillate. For example " "if you have a sine-wave and have a phase-" "offset of 180 degrees the wave will first go " "down. It's the same with a square-wave." ).arg( i+1 ) ); // setup stereo-phase-detuning-knob Knob * spdk = new TripleOscKnob( this ); spdk->move( 217, knob_y ); spdk->setHintText( tr("Osc %1 stereo phase-detuning:" ). arg( i + 1 ), " " + tr( "degrees" ) ); spdk->setWhatsThis( tr( "With this knob you can set the stereo phase-" "detuning of oscillator %1. The stereo phase-" "detuning specifies the size of the difference " "between the phase-offset of left and right " "channel. This is very good for creating wide " "stereo sounds." ).arg( i+1 ) ); int btn_y = 96 + i * osc_h; PixmapButton * sin_wave_btn = new PixmapButton( this, NULL ); sin_wave_btn->move( 128, btn_y ); sin_wave_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "sin_shape_active" ) ); sin_wave_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "sin_shape_inactive" ) ); ToolTip::add( sin_wave_btn, tr( "Use a sine-wave for " "current oscillator." ) ); PixmapButton * triangle_wave_btn = new PixmapButton( this, NULL ); triangle_wave_btn->move( 143, btn_y ); triangle_wave_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "triangle_shape_active" ) ); triangle_wave_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "triangle_shape_inactive" ) ); ToolTip::add( triangle_wave_btn, tr( "Use a triangle-wave " "for current oscillator." ) ); PixmapButton * saw_wave_btn = new PixmapButton( this, NULL ); saw_wave_btn->move( 158, btn_y ); saw_wave_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "saw_shape_active" ) ); saw_wave_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "saw_shape_inactive" ) ); ToolTip::add( saw_wave_btn, tr( "Use a saw-wave for " "current oscillator." ) ); PixmapButton * sqr_wave_btn = new PixmapButton( this, NULL ); sqr_wave_btn->move( 173, btn_y ); sqr_wave_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "square_shape_active" ) ); sqr_wave_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "square_shape_inactive" ) ); ToolTip::add( sqr_wave_btn, tr( "Use a square-wave for " "current oscillator." ) ); PixmapButton * moog_saw_wave_btn = new PixmapButton( this, NULL ); moog_saw_wave_btn->move( 188, btn_y ); moog_saw_wave_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "moog_saw_shape_active" ) ); moog_saw_wave_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "moog_saw_shape_inactive" ) ); ToolTip::add( moog_saw_wave_btn, tr( "Use a moog-like saw-wave " "for current oscillator." ) ); PixmapButton * exp_wave_btn = new PixmapButton( this, NULL ); exp_wave_btn->move( 203, btn_y ); exp_wave_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "exp_shape_active" ) ); exp_wave_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "exp_shape_inactive" ) ); ToolTip::add( exp_wave_btn, tr( "Use an exponential " "wave for current oscillator." ) ); PixmapButton * white_noise_btn = new PixmapButton( this, NULL ); white_noise_btn->move( 218, btn_y ); white_noise_btn->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "white_noise_shape_active" ) ); white_noise_btn->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "white_noise_shape_inactive" ) ); ToolTip::add( white_noise_btn, tr( "Use white-noise for " "current oscillator." ) ); PixmapButton * uwb = new PixmapButton( this, NULL ); uwb->move( 233, btn_y ); uwb->setActiveGraphic( PLUGIN_NAME::getIconPixmap( "usr_shape_active" ) ); uwb->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "usr_shape_inactive" ) ); ToolTip::add( uwb, tr( "Use a user-defined " "waveform for current oscillator." ) ); automatableButtonGroup * wsbg = new automatableButtonGroup( this ); wsbg->addButton( sin_wave_btn ); wsbg->addButton( triangle_wave_btn ); wsbg->addButton( saw_wave_btn ); wsbg->addButton( sqr_wave_btn ); wsbg->addButton( moog_saw_wave_btn ); wsbg->addButton( exp_wave_btn ); wsbg->addButton( white_noise_btn ); wsbg->addButton( uwb ); m_oscKnobs[i] = OscillatorKnobs( vk, pk, ck, flk, frk, pok, spdk, uwb, wsbg ); } }