ToggleButton* InfoWidget::createToggleButton(Widget* p_pMatrix, ElementType p_eType, QString p_rRefChannel) { ToggleButton *tb = new ToggleButton(NULL, "intro-open.svg", "intro-close.svg", "intro-close.svg", "intro-open.svg", QSize(INFO_WIDTH, SEPARATOR_HEIGHT), false); TbWrapp *wrapp = new TbWrapp(p_pMatrix, tb, p_eType, p_rRefChannel); if (!m_rToggleButtons.contains(p_eType)) { m_rToggleButtons.insert(p_eType, new QMap<QString, TbWrapp*>); } m_rToggleButtons[p_eType]->insert(p_rRefChannel, wrapp); tb->setToolTip(m_pMatrix->getDisplayFunction(IN, "", p_eType, p_rRefChannel, true)); tb->setValue(m_pMatrix->isVisible(p_eType, p_rRefChannel)); return tb; }
PatternEditorPanel::PatternEditorPanel( QWidget *pParent ) : QWidget( pParent ) , Object( __class_name ) , m_pPattern( NULL ) , m_bEnablePatternResize( true ) { setAcceptDrops(true); Preferences *pPref = Preferences::get_instance(); // Editor TOP PixmapWidget *editor_top = new PixmapWidget(0); editor_top->setPixmap("/patternEditor/editor_top.png", true); editor_top->setFixedHeight(24); PixmapWidget *editor_top_2 = new PixmapWidget(0); editor_top_2->setPixmap("/patternEditor/editor_top.png", true); editor_top_2->setFixedHeight(24); QHBoxLayout *editor_top_hbox = new QHBoxLayout(editor_top); editor_top_hbox->setSpacing(0); editor_top_hbox->setMargin(0); editor_top_hbox->setAlignment(Qt::AlignLeft); QHBoxLayout *editor_top_hbox_2 = new QHBoxLayout(editor_top_2); editor_top_hbox_2->setSpacing(0); editor_top_hbox_2->setMargin(0); editor_top_hbox_2->setAlignment(Qt::AlignLeft); //soundlibrary name pSLlabel = new QLabel( NULL ); pSLlabel->setText( Hydrogen::get_instance()->m_currentDrumkit ); pSLlabel->setFixedSize( 170, 20 ); pSLlabel->move( 10, 3 ); pSLlabel->setToolTip( trUtf8("Loaded Soundlibrary") ); editor_top_hbox->addWidget( pSLlabel ); //wolke some background images back_size_res PixmapWidget *pSizeResol = new PixmapWidget( NULL ); pSizeResol->setFixedSize( 200, 20 ); pSizeResol->setPixmap( "/patternEditor/background_res-new.png" ); pSizeResol->move( 0, 3 ); editor_top_hbox_2->addWidget( pSizeResol ); // PATTERN size __pattern_size_combo = new LCDCombo(pSizeResol, 4); __pattern_size_combo->move( 34, 2 ); __pattern_size_combo->setToolTip( trUtf8("Select pattern size") ); for ( int i = 1; i <= 32; i++) { __pattern_size_combo->addItem( QString( "%1" ).arg( i ) ); } __pattern_size_combo->update(); connect(__pattern_size_combo, SIGNAL( valueChanged( QString ) ), this, SLOT( patternSizeChanged(QString) ) ); // GRID resolution __resolution_combo = new LCDCombo( pSizeResol , 7); __resolution_combo->setToolTip(trUtf8("Select grid resolution")); __resolution_combo->addItem( "4" ); __resolution_combo->addItem( "8" ); __resolution_combo->addItem( "16" ); __resolution_combo->addItem( "32" ); __resolution_combo->addItem( "64" ); __resolution_combo->addSeparator(); __resolution_combo->addItem( "4T" ); __resolution_combo->addItem( "8T" ); __resolution_combo->addItem( "16T" ); __resolution_combo->addItem( "32T" ); __resolution_combo->addSeparator(); __resolution_combo->addItem( "off" ); __resolution_combo->update(); __resolution_combo->move( 121, 2 ); connect(__resolution_combo, SIGNAL(valueChanged(QString)), this, SLOT(gridResolutionChanged(QString))); PixmapWidget *pRec = new PixmapWidget( NULL ); pRec->setFixedSize( 158, 20 ); pRec->setPixmap( "/patternEditor/background_rec-new.png" ); pRec->move( 0, 3 ); editor_top_hbox_2->addWidget( pRec ); // Hear notes btn ToggleButton *hearNotesBtn = new ToggleButton( pRec, "/patternEditor/btn_hear_on.png", "/patternEditor/btn_hear_off.png", "/patternEditor/btn_hear_off.png", QSize(15, 13) ); hearNotesBtn->move( 34, 3 ); hearNotesBtn->setToolTip( trUtf8( "Hear new notes" ) ); connect( hearNotesBtn, SIGNAL(clicked(Button*)), this, SLOT( hearNotesBtnClick(Button*))); hearNotesBtn->setPressed( pPref->getHearNewNotes() ); // quantize ToggleButton* quantizeEventsBtn = new ToggleButton( pRec, "/patternEditor/btn_quant_on.png", "/patternEditor/btn_quant_off.png", "/patternEditor/btn_quant_off.png", QSize(15, 13) ); quantizeEventsBtn->move( 90, 3 ); quantizeEventsBtn->setPressed( pPref->getQuantizeEvents()); quantizeEventsBtn->setToolTip( trUtf8( "Quantize keyboard/midi events to grid" ) ); connect( quantizeEventsBtn, SIGNAL(clicked(Button*)), this, SLOT( quantizeEventsBtnClick(Button*))); // Editor mode __show_drum_btn = new ToggleButton( pRec, "/patternEditor/btn_drum_piano_on.png", "/patternEditor/btn_drum_piano_off.png", "/patternEditor/btn_drum_piano_off.png", QSize(17, 13) ); __show_drum_btn->move( 137, 3 ); __show_drum_btn->setPressed( false ); __show_drum_btn->setToolTip( trUtf8( "Show piano roll editor" ) ); connect(__show_drum_btn, SIGNAL(clicked(Button*)), this, SLOT( showDrumEditorBtnClick(Button*))); __recpredelete = new QComboBox( NULL ); __recpredelete->setFixedSize( 130, 20 ); __recpredelete->move( 2, 1 ); __recpredelete->addItem ( QString( "On play" )); __recpredelete->addItem ( QString( "On rec: once fp" )); __recpredelete->addItem ( QString( "On rec: 1/1 fp" )); __recpredelete->addItem ( QString( "On rec: 1/2 fp" )); __recpredelete->addItem ( QString( "On rec: 1/4 fp" )); __recpredelete->addItem ( QString( "On rec: 1/8 fp" )); __recpredelete->addItem ( QString( "On rec: 1/16 fp" )); __recpredelete->addItem ( QString( "On rec: 1/32 fp" )); __recpredelete->addItem ( QString( "On rec: 1/64 fp" )); __recpredelete->addItem ( QString( "On rec: 1/64" )); __recpredelete->addItem ( QString( "On rec: 1/32" )); __recpredelete->addItem ( QString( "On rec: 1/16" )); __recpredelete->addItem ( QString( "On rec: 1/8" )); __recpredelete->addItem ( QString( "On rec: 1/4" )); __recpredelete->addItem ( QString( "On rec: 1/2" )); __recpredelete->addItem ( QString( "On rec: 1/1" )); __recpredelete->addItem ( QString( "On rec: once" )); __recpredelete->update(); __recpredelete->setToolTip( trUtf8( "destructive mode pre delete settings" ) ); editor_top_hbox_2->addWidget( __recpredelete ); connect( __recpredelete, SIGNAL( currentIndexChanged( int ) ), this, SLOT( recPreDeleteSelect( int) ) ); __recpostdelete = new QComboBox( NULL ); __recpostdelete->setFixedSize( 60, 20 ); __recpostdelete->move( 2, 1 ); __recpostdelete->addItem ( QString( "off" )); __recpostdelete->addItem ( QString( "1/64" )); __recpostdelete->addItem ( QString( "1/32" )); __recpostdelete->addItem ( QString( "1/16" )); __recpostdelete->addItem ( QString( "1/8" )); __recpostdelete->addItem ( QString( "1/4" )); __recpostdelete->addItem ( QString( "1/2" )); __recpostdelete->addItem ( QString( "1/1" )); __recpostdelete->update(); __recpostdelete->setToolTip( trUtf8( "destructive mode post delete settings" ) ); editor_top_hbox_2->addWidget( __recpostdelete ); connect( __recpostdelete, SIGNAL( currentIndexChanged( int ) ), this, SLOT( recPostDeleteSelect( int) ) ); // zoom-in btn Button *zoom_in_btn = new Button( NULL, "/songEditor/btn_new_on.png", "/songEditor/btn_new_off.png", "/songEditor/btn_new_over.png", QSize(19, 13) ); zoom_in_btn->setToolTip( trUtf8( "Zoom in" ) ); connect(zoom_in_btn, SIGNAL(clicked(Button*)), this, SLOT( zoomInBtnClicked(Button*) ) ); // zoom-out btn Button *zoom_out_btn = new Button( NULL, "/songEditor/btn_minus_on.png", "/songEditor/btn_minus_off.png", "/songEditor/btn_minus_over.png", QSize(19, 13) ); zoom_out_btn->setToolTip( trUtf8( "Zoom out" ) ); connect( zoom_out_btn, SIGNAL(clicked(Button*)), this, SLOT( zoomOutBtnClicked(Button*) ) ); // End Editor TOP // RULER____________________________________ // Ruler ScrollView m_pRulerScrollView = new QScrollArea( NULL ); m_pRulerScrollView->setFrameShape( QFrame::NoFrame ); m_pRulerScrollView->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); m_pRulerScrollView->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); m_pRulerScrollView->setFixedHeight( 25 ); // Ruler m_pPatternEditorRuler = new PatternEditorRuler( m_pRulerScrollView->viewport() ); m_pRulerScrollView->setWidget( m_pPatternEditorRuler ); //~ RULER // EDITOR _____________________________________ // Editor scrollview m_pEditorScrollView = new QScrollArea( NULL ); m_pEditorScrollView->setFrameShape( QFrame::NoFrame ); m_pEditorScrollView->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); m_pEditorScrollView->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); // Editor m_pDrumPatternEditor = new DrumPatternEditor( m_pEditorScrollView->viewport(), this ); m_pEditorScrollView->setWidget( m_pDrumPatternEditor ); connect( m_pEditorScrollView->verticalScrollBar(), SIGNAL( valueChanged(int) ), this, SLOT( on_patternEditorScroll(int) ) ); //PianoRollEditor m_pPianoRollScrollView = new QScrollArea( NULL ); m_pPianoRollScrollView->setFrameShape( QFrame::NoFrame ); m_pPianoRollScrollView->setVerticalScrollBarPolicy( Qt::ScrollBarAsNeeded ); m_pPianoRollScrollView->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); m_pPianoRollEditor = new PianoRollEditor( m_pPianoRollScrollView->viewport(), this ); m_pPianoRollScrollView->setWidget( m_pPianoRollEditor ); m_pPianoRollScrollView->hide(); //~ EDITOR // INSTRUMENT LIST // Instrument list scrollview m_pInstrListScrollView = new QScrollArea( NULL ); m_pInstrListScrollView->setFrameShape( QFrame::NoFrame ); m_pInstrListScrollView->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); m_pInstrListScrollView->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); // Instrument list m_pInstrumentList = new PatternEditorInstrumentList( m_pInstrListScrollView->viewport(), this ); m_pInstrListScrollView->setWidget( m_pInstrumentList ); m_pInstrListScrollView->setFixedWidth( m_pInstrumentList->width() ); connect( m_pInstrListScrollView->verticalScrollBar(), SIGNAL( valueChanged(int) ), this, SLOT( on_patternEditorScroll(int) ) ); //~ INSTRUMENT LIST // NOTE_VELOCITY EDITOR m_pNoteVelocityScrollView = new QScrollArea( NULL ); m_pNoteVelocityScrollView->setFrameShape( QFrame::NoFrame ); m_pNoteVelocityScrollView->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); m_pNoteVelocityScrollView->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); m_pNoteVelocityEditor = new NotePropertiesRuler( m_pNoteVelocityScrollView->viewport(), this, NotePropertiesRuler::VELOCITY ); m_pNoteVelocityScrollView->setWidget( m_pNoteVelocityEditor ); m_pNoteVelocityScrollView->setFixedHeight( 100 ); //~ NOTE_VELOCITY EDITOR // NOTE_PAN EDITOR m_pNotePanScrollView = new QScrollArea( NULL ); m_pNotePanScrollView->setFrameShape( QFrame::NoFrame ); m_pNotePanScrollView->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); m_pNotePanScrollView->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); m_pNotePanEditor = new NotePropertiesRuler( m_pNotePanScrollView->viewport(), this, NotePropertiesRuler::PAN ); m_pNotePanScrollView->setWidget( m_pNotePanEditor ); m_pNotePanScrollView->setFixedHeight( 100 ); //~ NOTE_PAN EDITOR // NOTE_LEADLAG EDITOR m_pNoteLeadLagScrollView = new QScrollArea( NULL ); m_pNoteLeadLagScrollView->setFrameShape( QFrame::NoFrame ); m_pNoteLeadLagScrollView->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); m_pNoteLeadLagScrollView->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); m_pNoteLeadLagEditor = new NotePropertiesRuler( m_pNoteLeadLagScrollView->viewport(), this, NotePropertiesRuler::LEADLAG ); m_pNoteLeadLagScrollView->setWidget( m_pNoteLeadLagEditor ); m_pNoteLeadLagScrollView->setFixedHeight( 100 ); //~ NOTE_LEADLAG EDITOR // NOTE_NOTEKEY EDITOR m_pNoteNoteKeyScrollView = new QScrollArea( NULL ); m_pNoteNoteKeyScrollView->setFrameShape( QFrame::NoFrame ); m_pNoteNoteKeyScrollView->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); m_pNoteNoteKeyScrollView->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff ); m_pNoteNoteKeyEditor = new NotePropertiesRuler( m_pNoteNoteKeyScrollView->viewport(), this, NotePropertiesRuler::NOTEKEY ); m_pNoteNoteKeyScrollView->setWidget( m_pNoteNoteKeyEditor ); m_pNoteNoteKeyScrollView->setFixedHeight( 210 ); //~ NOTE_NOTEKEY EDITOR // external horizontal scrollbar m_pPatternEditorHScrollBar = new QScrollBar( Qt::Horizontal , NULL ); connect( m_pPatternEditorHScrollBar, SIGNAL(valueChanged(int)), this, SLOT( syncToExternalHorizontalScrollbar(int) ) ); // external vertical scrollbar m_pPatternEditorVScrollBar = new QScrollBar( Qt::Vertical, NULL ); connect( m_pPatternEditorVScrollBar, SIGNAL(valueChanged(int)), this, SLOT( syncToExternalHorizontalScrollbar(int) ) ); QHBoxLayout *pPatternEditorHScrollBarLayout = new QHBoxLayout(); pPatternEditorHScrollBarLayout->setSpacing( 0 ); pPatternEditorHScrollBarLayout->setMargin( 0 ); pPatternEditorHScrollBarLayout->addWidget( m_pPatternEditorHScrollBar ); pPatternEditorHScrollBarLayout->addWidget( zoom_in_btn ); pPatternEditorHScrollBarLayout->addWidget( zoom_out_btn ); QWidget *pPatternEditorHScrollBarContainer = new QWidget(); pPatternEditorHScrollBarContainer->setLayout( pPatternEditorHScrollBarLayout ); QPalette label_palette; label_palette.setColor( QPalette::Foreground, QColor( 230, 230, 230 ) ); QFont boldFont; boldFont.setBold( true ); m_pPatternNameLbl = new QLabel( NULL ); m_pPatternNameLbl->setFont( boldFont ); m_pPatternNameLbl->setText( "pattern name label" ); m_pPatternNameLbl->setPalette(label_palette); // NOTE_PROPERTIES BUTTONS PixmapWidget *pPropertiesPanel = new PixmapWidget( NULL ); pPropertiesPanel->setColor( QColor( 58, 62, 72 ) ); pPropertiesPanel->setFixedSize( 181, 100 ); QVBoxLayout *pPropertiesVBox = new QVBoxLayout( pPropertiesPanel ); pPropertiesVBox->setSpacing( 0 ); pPropertiesVBox->setMargin( 0 ); __pPropertiesCombo = new LCDCombo( NULL, 20); __pPropertiesCombo->setToolTip(trUtf8("Select note properties")); __pPropertiesCombo->addItem( trUtf8("Velocity") ); __pPropertiesCombo->addItem( trUtf8("Pan") ); __pPropertiesCombo->addItem( trUtf8("Lead and Lag") ); __pPropertiesCombo->addItem( trUtf8("NoteKey") ); __pPropertiesCombo->update(); connect( __pPropertiesCombo, SIGNAL(valueChanged(QString)), this, SLOT(propertiesComboChanged(QString))); pPropertiesVBox->addWidget( __pPropertiesCombo ); //~ NOTE_PROPERTIES BUTTONS // LAYOUT QWidget *pMainPanel = new QWidget(); QGridLayout *pGrid = new QGridLayout(); pGrid->setSpacing( 0 ); pGrid->setMargin( 0 ); pGrid->addWidget( editor_top, 0, 0); pGrid->addWidget( editor_top_2, 0, 1, 1, 3); pGrid->addWidget( m_pPatternNameLbl, 1, 0 ); pGrid->addWidget( m_pRulerScrollView, 1, 1 ); pGrid->addWidget( m_pInstrListScrollView, 2, 0 ); pGrid->addWidget( m_pEditorScrollView, 2, 1 ); pGrid->addWidget( m_pPianoRollScrollView, 2, 1 ); pGrid->addWidget( m_pPatternEditorVScrollBar, 2, 2 ); pGrid->addWidget( pPatternEditorHScrollBarContainer, 10, 1 ); pGrid->addWidget( m_pNoteVelocityScrollView, 4, 1 ); pGrid->addWidget( m_pNotePanScrollView, 4, 1 ); pGrid->addWidget( m_pNoteLeadLagScrollView, 4, 1 ); pGrid->addWidget( m_pNoteNoteKeyScrollView, 4, 1 ); pGrid->addWidget( pPropertiesPanel, 4, 0 ); pGrid->setRowStretch( 2, 100 ); pMainPanel->setLayout( pGrid ); // restore grid resolution int nIndex; if ( pPref->isPatternEditorUsingTriplets() == false ) { switch ( pPref->getPatternEditorGridResolution() ) { case 4: __resolution_combo->set_text( "4" ); nIndex = 0; break; case 8: __resolution_combo->set_text( "8" ); nIndex = 1; break; case 16: __resolution_combo->set_text( "16" ); nIndex = 2; break; case 32: __resolution_combo->set_text( "32" ); nIndex = 3; break; case 64: __resolution_combo->set_text( "64" ); nIndex = 4; break; default: ERRORLOG( QString("Wrong grid resolution: %1").arg( pPref->getPatternEditorGridResolution() ) ); __resolution_combo->set_text( "4" ); nIndex = 0; } } else { switch ( pPref->getPatternEditorGridResolution() ) { case 8: __resolution_combo->set_text( "4T" ); nIndex = 5; break; case 16: __resolution_combo->set_text( "8T" ); nIndex = 6; break; case 32: __resolution_combo->set_text( "16T" ); nIndex = 7; break; case 64: __resolution_combo->set_text( "32T" ); nIndex = 8; break; default: ERRORLOG( QString("Wrong grid resolution: %1").arg( pPref->getPatternEditorGridResolution() ) ); __resolution_combo->set_text( "4T" ); nIndex = 5; } } gridResolutionChanged(__resolution_combo->getText()); //set pre delete __recpredelete->setCurrentIndex(pPref->m_nRecPreDelete); __recpostdelete->setCurrentIndex(pPref->m_nRecPostDelete); displayorHidePrePostCB(); // LAYOUT QVBoxLayout *pVBox = new QVBoxLayout(); pVBox->setSpacing( 0 ); pVBox->setMargin( 0 ); this->setLayout( pVBox ); pVBox->addWidget( pMainPanel ); HydrogenApp::get_instance()->addEventListener( this ); selectedPatternChangedEvent(); // force an update __pPropertiesCombo->set_text( trUtf8("Velocity")); }