LeftRightNav::LeftRightNav(QWidget *parent) : QWidget(parent), m_layout(this), m_leftBtn(this, tr("Previous")), m_rightBtn(this, tr("Next")) { m_layout.setContentsMargins(0, 0, 0, 0); m_layout.setSpacing(2); m_leftBtn.setCheckable(false); m_rightBtn.setCheckable(false); m_leftBtn.setCursor(Qt::PointingHandCursor); m_rightBtn.setCursor(Qt::PointingHandCursor); m_leftBtn.setActiveGraphic(embed::getIconPixmap( "stepper-left-press")); m_rightBtn.setActiveGraphic(embed::getIconPixmap( "stepper-right-press" )); m_leftBtn.setInactiveGraphic(embed::getIconPixmap( "stepper-left" )); m_rightBtn.setInactiveGraphic(embed::getIconPixmap( "stepper-right")); connect(&m_leftBtn, SIGNAL(clicked()), this, SIGNAL(onNavLeft())); connect(&m_rightBtn, SIGNAL(clicked()), this, SIGNAL(onNavRight())); ToolTip::add(&m_leftBtn, tr("Previous")); ToolTip::add(&m_rightBtn, tr("Next")); m_leftBtn.setWindowTitle(tr("Previous")); m_rightBtn.setWindowTitle(tr("Next")); // AutomatableButton's right click menu (contains irrelevant options like copying and pasting values) m_leftBtn.setContextMenuPolicy(Qt::NoContextMenu); m_rightBtn.setContextMenuPolicy(Qt::NoContextMenu); m_layout.addWidget(&m_leftBtn); m_layout.addWidget(&m_rightBtn); }
// #### ITW: InstrumentTrackWindow::InstrumentTrackWindow( InstrumentTrackView * _itv ) : QWidget(), ModelView( NULL, this ), m_track( _itv->model() ), m_itv( _itv ), m_instrumentView( NULL ) { setAcceptDrops( true ); // init own layout + widgets setFocusPolicy( Qt::StrongFocus ); QVBoxLayout * vlayout = new QVBoxLayout( this ); vlayout->setMargin( 0 ); vlayout->setSpacing( 0 ); TabWidget* generalSettingsWidget = new TabWidget( tr( "GENERAL SETTINGS" ), this ); QVBoxLayout* generalSettingsLayout = new QVBoxLayout( generalSettingsWidget ); generalSettingsLayout->setContentsMargins( 8, 18, 8, 8 ); generalSettingsLayout->setSpacing( 6 ); QWidget* nameAndChangeTrackWidget = new QWidget( generalSettingsWidget ); QHBoxLayout* nameAndChangeTrackLayout = new QHBoxLayout( nameAndChangeTrackWidget ); nameAndChangeTrackLayout->setContentsMargins( 0, 0, 0, 0 ); nameAndChangeTrackLayout->setSpacing( 2 ); // setup line edit for changing instrument track name m_nameLineEdit = new QLineEdit; m_nameLineEdit->setFont( pointSize<9>( m_nameLineEdit->font() ) ); connect( m_nameLineEdit, SIGNAL( textChanged( const QString & ) ), this, SLOT( textChanged( const QString & ) ) ); m_nameLineEdit->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred)); nameAndChangeTrackLayout->addWidget(m_nameLineEdit); // set up left/right arrows for changing instrument m_leftRightNav = new LeftRightNav(this); connect( m_leftRightNav, SIGNAL( onNavLeft() ), this, SLOT( viewPrevInstrument() ) ); connect( m_leftRightNav, SIGNAL( onNavRight() ), this, SLOT( viewNextInstrument() ) ); m_leftRightNav->setWhatsThis( tr( "Use these controls to view and edit the next/previous track in the song editor." ) ); // m_leftRightNav->setShortcuts(); nameAndChangeTrackLayout->addWidget(m_leftRightNav); generalSettingsLayout->addWidget( nameAndChangeTrackWidget ); QGridLayout* basicControlsLayout = new QGridLayout; basicControlsLayout->setHorizontalSpacing(3); basicControlsLayout->setVerticalSpacing(0); basicControlsLayout->setContentsMargins(0, 0, 0, 0); QString labelStyleSheet = "font-size: 6pt;"; Qt::Alignment labelAlignment = Qt::AlignHCenter | Qt::AlignTop; Qt::Alignment widgetAlignment = Qt::AlignHCenter | Qt::AlignCenter; // set up volume knob m_volumeKnob = new Knob( knobBright_26, NULL, tr( "Instrument volume" ) ); m_volumeKnob->setVolumeKnob( true ); m_volumeKnob->setHintText( tr( "Volume:" ), "%" ); m_volumeKnob->setWhatsThis( tr( volume_help ) ); basicControlsLayout->addWidget( m_volumeKnob, 0, 0 ); basicControlsLayout->setAlignment( m_volumeKnob, widgetAlignment ); QLabel *label = new QLabel( tr( "VOL" ), this ); label->setStyleSheet( labelStyleSheet ); basicControlsLayout->addWidget( label, 1, 0); basicControlsLayout->setAlignment( label, labelAlignment ); // set up panning knob m_panningKnob = new Knob( knobBright_26, NULL, tr( "Panning" ) ); m_panningKnob->setHintText( tr( "Panning:" ), "" ); basicControlsLayout->addWidget( m_panningKnob, 0, 1 ); basicControlsLayout->setAlignment( m_panningKnob, widgetAlignment ); label = new QLabel( tr( "PAN" ), this ); label->setStyleSheet( labelStyleSheet ); basicControlsLayout->addWidget( label, 1, 1); basicControlsLayout->setAlignment( label, labelAlignment ); basicControlsLayout->setColumnStretch(2, 1); // set up pitch knob m_pitchKnob = new Knob( knobBright_26, NULL, tr( "Pitch" ) ); m_pitchKnob->setHintText( tr( "Pitch:" ), " " + tr( "cents" ) ); basicControlsLayout->addWidget( m_pitchKnob, 0, 3 ); basicControlsLayout->setAlignment( m_pitchKnob, widgetAlignment ); m_pitchLabel = new QLabel( tr( "PITCH" ), this ); m_pitchLabel->setStyleSheet( labelStyleSheet ); basicControlsLayout->addWidget( m_pitchLabel, 1, 3); basicControlsLayout->setAlignment( m_pitchLabel, labelAlignment ); // set up pitch range knob m_pitchRangeSpinBox= new LcdSpinBox( 2, NULL, tr( "Pitch range (semitones)" ) ); basicControlsLayout->addWidget( m_pitchRangeSpinBox, 0, 4 ); basicControlsLayout->setAlignment( m_pitchRangeSpinBox, widgetAlignment ); m_pitchRangeLabel = new QLabel( tr( "RANGE" ), this ); m_pitchRangeLabel->setStyleSheet( labelStyleSheet ); basicControlsLayout->addWidget( m_pitchRangeLabel, 1, 4); basicControlsLayout->setAlignment( m_pitchRangeLabel, labelAlignment ); basicControlsLayout->setColumnStretch(5, 1); // setup spinbox for selecting FX-channel m_effectChannelNumber = new fxLineLcdSpinBox( 2, NULL, tr( "FX channel" ) ); basicControlsLayout->addWidget( m_effectChannelNumber, 0, 6 ); basicControlsLayout->setAlignment( m_effectChannelNumber, widgetAlignment ); label = new QLabel( tr( "FX" ), this ); label->setStyleSheet( labelStyleSheet ); basicControlsLayout->addWidget( label, 1, 6); basicControlsLayout->setAlignment( label, labelAlignment ); QPushButton* saveSettingsBtn = new QPushButton( embed::getIconPixmap( "project_save" ), QString() ); saveSettingsBtn->setMinimumSize( 32, 32 ); connect( saveSettingsBtn, SIGNAL( clicked() ), this, SLOT( saveSettingsBtnClicked() ) ); ToolTip::add( saveSettingsBtn, tr( "Save current instrument track settings in a preset file" ) ); saveSettingsBtn->setWhatsThis( tr( "Click here, if you want to save current instrument track settings in a preset file. " "Later you can load this preset by double-clicking it in the preset-browser." ) ); basicControlsLayout->addWidget( saveSettingsBtn, 0, 7 ); label = new QLabel( tr( "SAVE" ), this ); label->setStyleSheet( labelStyleSheet ); basicControlsLayout->addWidget( label, 1, 7); basicControlsLayout->setAlignment( label, labelAlignment ); generalSettingsLayout->addLayout( basicControlsLayout ); m_tabWidget = new TabWidget( "", this ); m_tabWidget->setFixedHeight( INSTRUMENT_HEIGHT + 10 ); // create tab-widgets m_ssView = new InstrumentSoundShapingView( m_tabWidget ); // FUNC tab QWidget* instrumentFunctions = new QWidget( m_tabWidget ); QVBoxLayout* instrumentFunctionsLayout = new QVBoxLayout( instrumentFunctions ); instrumentFunctionsLayout->setMargin( 5 ); m_noteStackingView = new InstrumentFunctionNoteStackingView( &m_track->m_noteStacking ); m_arpeggioView = new InstrumentFunctionArpeggioView( &m_track->m_arpeggio ); instrumentFunctionsLayout->addWidget( m_noteStackingView ); instrumentFunctionsLayout->addWidget( m_arpeggioView ); instrumentFunctionsLayout->addStretch(); // MIDI tab m_midiView = new InstrumentMidiIOView( m_tabWidget ); // FX tab m_effectView = new EffectRackView( m_track->m_audioPort.effects(), m_tabWidget ); // MISC tab m_miscView = new InstrumentMiscView( m_track, m_tabWidget ); m_tabWidget->addTab( m_ssView, tr( "ENV/LFO" ), 1 ); m_tabWidget->addTab( instrumentFunctions, tr( "FUNC" ), 2 ); m_tabWidget->addTab( m_effectView, tr( "FX" ), 3 ); m_tabWidget->addTab( m_midiView, tr( "MIDI" ), 4 ); m_tabWidget->addTab( m_miscView, tr( "MISC" ), 5 ); // setup piano-widget m_pianoView = new PianoView( this ); m_pianoView->setFixedSize( INSTRUMENT_WIDTH, PIANO_HEIGHT ); vlayout->addWidget( generalSettingsWidget ); vlayout->addWidget( m_tabWidget ); vlayout->addWidget( m_pianoView ); setModel( _itv->model() ); updateInstrumentView(); setFixedWidth( INSTRUMENT_WIDTH ); resize( sizeHint() ); QMdiSubWindow * subWin = gui->mainWindow()->addWindowedWidget( this ); Qt::WindowFlags flags = subWin->windowFlags(); flags |= Qt::MSWindowsFixedSizeDialogHint; flags &= ~Qt::WindowMaximizeButtonHint; subWin->setWindowFlags( flags ); // Hide the Size and Maximize options from the system menu // since the dialog size is fixed. QMenu * systemMenu = subWin->systemMenu(); systemMenu->actions().at( 2 )->setVisible( false ); // Size systemMenu->actions().at( 4 )->setVisible( false ); // Maximize subWin->setWindowIcon( embed::getIconPixmap( "instrument_track" ) ); subWin->setFixedSize( subWin->size() ); subWin->hide(); }