Changeset 2261 for trunk/src/core/src/basics/pattern.cpp
- Timestamp:
- 07/12/11 14:36:32 (23 months ago)
- Files:
-
- 1 modified
-
trunk/src/core/src/basics/pattern.cpp (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/core/src/basics/pattern.cpp
r2259 r2261 22 22 23 23 #include <hydrogen/basics/pattern.h> 24 #include <hydrogen/basics/song.h> 24 25 #include <cassert> 26 25 27 #include <hydrogen/basics/note.h> 26 28 #include <hydrogen/audio_engine.h> 27 29 28 #include <vector>29 #include <cassert>30 30 namespace H2Core 31 31 { … … 33 33 const char* Pattern::__class_name = "Pattern"; 34 34 35 Pattern::Pattern( const QString& name, const QString& category, unsignedlength )35 Pattern::Pattern( const QString& name, const QString& category, int length ) 36 36 : Object( __class_name ) 37 , __length( length ) 38 , __name( name ) 39 , __category( category ) 37 40 { 38 // INFOLOG( "INIT: " + m_sName );39 set_name( name );40 set_category( category );41 set_length( length );42 41 } 43 42 44 43 Pattern::Pattern( Pattern* other) 45 44 : Object( __class_name ) 45 , __length( other->get_length() ) 46 , __name( other->get_name() ) 47 , __category( other->get_category() ) 46 48 { 47 // TODO 49 std::multimap <int, Note*>::const_iterator pos; 50 for ( pos = note_map.begin(); pos != note_map.end(); pos++ ) { 51 note_map.insert( std::make_pair( pos->first, new Note( pos->second ) ) ); 52 } 48 53 } 49 50 54 51 55 Pattern::~Pattern() 52 56 { 53 // INFOLOG( "DESTROY: " + m_sName ); 54 55 // delete all Notes 56 std::multimap <int, Note*>::iterator pos; 57 for ( pos = note_map.begin(); pos != note_map.end(); ++pos ) { 58 Note* pNote = pos->second; 59 delete pNote; 57 std::multimap <int, Note*>::const_iterator pos; 58 for ( pos = note_map.begin(); pos != note_map.end(); pos++ ) { 59 delete pos->second; 60 60 } 61 61 } 62 62 63 bool Pattern::references( Instrument* instr ) 64 { 65 std::multimap <int, Note*>::const_iterator pos; 66 for ( pos = note_map.begin(); pos != note_map.end(); pos++ ) { 67 Note *note = pos->second; 68 assert( note ); 69 if ( note->get_instrument() == instr ) { 70 return true; 71 } 72 } 73 return false; 74 } 63 75 64 void Pattern::purge_instrument( Instrument* I)76 void Pattern::purge_instrument( Instrument* instr ) 65 77 { 66 78 bool locked = false; 67 79 std::list< Note* > slate; 68 69 std::multimap <int, Note*>::iterator pos = note_map.begin(); 70 while ( pos != note_map.end() ) { 71 Note* pNote = pos->second; 72 assert( pNote ); 73 74 if ( pNote->get_instrument() == I ) { 80 std::multimap <int, Note*>::iterator pos; 81 for ( pos = note_map.begin(); pos != note_map.end(); pos++ ) { 82 Note* note = pos->second; 83 assert( note ); 84 if ( note->get_instrument() == instr ) { 75 85 if ( !locked ) { 76 86 H2Core::AudioEngine::get_instance()->lock( RIGHT_HERE ); 77 87 locked = true; 78 88 } 79 slate.push_back( pNote ); 80 81 note_map.erase( pos++ ); 82 } else { 83 ++pos; 89 slate.push_back( note ); 90 note_map.erase( pos ); 84 91 } 85 92 } 86 87 93 if ( locked ) { 88 94 H2Core::AudioEngine::get_instance()->unlock(); … … 94 100 } 95 101 96 97 bool Pattern::references_instrument( Instrument* I ) 98 { 102 void Pattern::set_to_old() { 99 103 std::multimap <int, Note*>::const_iterator pos; 100 for ( pos = note_map.begin(); pos != note_map.end(); ++pos ) { 101 Note* pNote = pos->second; 102 assert( pNote ); 103 if ( pNote->get_instrument() == I ) { 104 return true; 105 } 106 } 107 return false; 108 } 109 110 111 void Pattern::set_to_old() 112 { 113 std::multimap <int, Note*>::const_iterator pos; 114 for ( pos = note_map.begin(); pos != note_map.end(); ++pos ) { 115 Note* pNote = pos->second; 116 assert( pNote ); 117 pNote->set_just_recorded( false ); 104 for ( pos = note_map.begin(); pos != note_map.end(); pos++ ) { 105 Note *note = pos->second; 106 assert( note ); 107 note->set_just_recorded( false ); 118 108 } 119 109 } 120 110 111 }; 121 112 122 /// Returns an empty Pattern 123 Pattern* Pattern::get_empty_pattern() 124 { 125 Pattern* pat = new Pattern( "Pattern", "not_categorized" ); 126 return pat; 127 } 128 129 130 131 Pattern* Pattern::copy() 132 { 133 // ERRORLOG( "not implemented yet!!!" ); 134 135 Pattern* newPat = new Pattern( __name, __category ); 136 newPat->set_length( get_length() ); 137 138 std::multimap <int, Note*>::iterator pos; 139 for ( pos = note_map.begin(); pos != note_map.end(); ++pos ) { 140 Note* pNote = new Note( pos->second ); 141 newPat->note_map.insert( std::make_pair( pos->first, pNote ) ); 142 } 143 144 return newPat; 145 } 146 147 148 149 void Pattern::debug_dump() 150 { 151 INFOLOG( "Pattern dump" ); 152 INFOLOG( "Pattern name: " + __name ); 153 INFOLOG( "Pattern category: " + __category ); 154 INFOLOG( QString( "Pattern length: %1" ).arg( get_length() ) ); 155 } 156 157 }; 113 /* vim: set softtabstop=4 expandtab: */