void SongEditorPatternList::patternPopup_copy() { Engine *pEngine = g_engine; T<Song>::shared_ptr pSong = pEngine->getSong(); PatternList *pPatternList = pSong->get_pattern_list(); int nSelectedPattern = pEngine->getSelectedPatternNumber(); T<Tritium::Pattern>::shared_ptr pPattern = pPatternList->get( nSelectedPattern ); T<Tritium::Pattern>::shared_ptr pNewPattern = pPattern->copy(); pPatternList->add( pNewPattern ); // rename the copied pattern PatternPropertiesDialog *dialog = new PatternPropertiesDialog( this, pNewPattern, true ); if ( dialog->exec() == QDialog::Accepted ) { pSong->set_modified( true ); pEngine->setSelectedPatternNumber(pPatternList->get_size() - 1); // select the last pattern (the copied one) if (pSong->get_mode() == Song::PATTERN_MODE) { pEngine->sequencer_setNextPattern( pPatternList->get_size() - 1, false, false ); // select the last pattern (the new copied pattern) } } else { pPatternList->del( pNewPattern ); pNewPattern.reset(); } delete dialog; CompositeApp::get_instance()->getSongEditorPanel()->updateAll(); }
void SongEditorPanel::revertaddEmptyPattern( int idx ) { Hydrogen *pEngine = Hydrogen::get_instance(); Song *pSong = pEngine->getSong(); PatternList *pPatternList = pSong->get_pattern_list(); H2Core::Pattern *pPattern = pPatternList->get( idx ); if( idx == pEngine->getSelectedPatternNumber() ) pEngine->setSelectedPatternNumber( idx -1 ); pPatternList->del( pPattern ); delete pPattern; pSong->set_is_modified( true ); updateAll(); }
void SongEditorPatternList::patternPopup_delete() { Engine *pEngine = g_engine; // int state = engine->get_transport()->get_state(); // // per ora non lascio possibile la cancellazione del pattern durante l'esecuzione // // da togliere quando correggo il bug // if (state == PLAYING) { // QMessageBox::information( this, "Composite", trUtf8("Can't delete the pattern while the audio engine is playing")); // return; // } if ( pEngine->getSong()->get_mode() == Song::PATTERN_MODE ) { pEngine->sequencer_setNextPattern( -1, false, false ); // reimposto il prossimo pattern a NULL, altrimenti viene scelto quello che sto distruggendo ora... } // pEngine->sequencer_stop(); // "lock engine" I am not sure, but think this is unnecessarily. -wolke- // g_engine->lock( RIGHT_HERE ); T<Song>::shared_ptr song = pEngine->getSong(); PatternList *pSongPatternList = song->get_pattern_list(); T<Pattern>::shared_ptr pattern = pSongPatternList->get( pEngine->getSelectedPatternNumber() ); DEBUGLOG( QString("[patternPopup_delete] Delete pattern: %1 @%2").arg(pattern->get_name()).arg( (long)pattern.get() ) ); pSongPatternList->del(pattern); T<Song::pattern_group_t>::shared_ptr patternGroupVect = song->get_pattern_group_vector(); uint i = 0; while (i < patternGroupVect->size() ) { T<PatternList>::shared_ptr list = (*patternGroupVect)[i]; uint j = 0; while ( j < list->get_size() ) { T<Tritium::Pattern>::shared_ptr pOldPattern = list->get( j ); if (pOldPattern == pattern ) { list->del( j ); continue; } j++; } // for (uint j = 0; j < list->get_size(); j++) { // Pattern *pOldPattern = list->get( j ); // if (pOldPattern == pattern ) { // list->del( j ); // } // } /* if (list->get_size() == 0 ) { patternGroupVect->erase( patternGroupVect->begin() + i ); delete list; list = NULL; } else { */ i++; // } } T<PatternList>::shared_ptr list = pEngine->getCurrentPatternList(); list->del( pattern ); // se esiste, seleziono il primo pattern if ( pSongPatternList->get_size() > 0 ) { T<Tritium::Pattern>::shared_ptr pFirstPattern = pSongPatternList->get( 0 ); list->add( pFirstPattern ); // Cambio due volte...cosi' il pattern editor viene costretto ad aggiornarsi pEngine->setSelectedPatternNumber( -1 ); pEngine->setSelectedPatternNumber( 0 ); } else { // there's no patterns.. T<Pattern>::shared_ptr emptyPattern = Pattern::get_empty_pattern(); emptyPattern->set_name( trUtf8("Pattern 1") ); emptyPattern->set_category( trUtf8("not_categorized") ); pSongPatternList->add( emptyPattern ); pEngine->setSelectedPatternNumber( -1 ); pEngine->setSelectedPatternNumber( 0 ); } pattern.reset(); song->set_modified( true ); // "unlock" I am not sure, but think this is unnecessarily. -wolke- // g_engine->unlock(); ( CompositeApp::get_instance() )->getSongEditorPanel()->updateAll(); }