Changeset 1533
- Timestamp:
- 01/26/10 13:38:55 (3 years ago)
- Location:
- branches/undo
- Files:
-
- 4 modified
-
gui/src/PatternEditor/DrumPatternEditor.cpp (modified) (11 diffs)
-
gui/src/PatternEditor/DrumPatternEditor.h (modified) (2 diffs)
-
gui/src/UndoActions.h (modified) (6 diffs)
-
undo_implementation_todo (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
branches/undo/gui/src/PatternEditor/DrumPatternEditor.cpp
r1532 r1533 102 102 m_pPattern = NULL; 103 103 } 104 __selectedPatternNumber = nSelectedPatternNumber; 104 105 105 106 … … 162 163 163 164 if (ev->button() == Qt::LeftButton ) { 164 SE_addNoteAction *action = new SE_addNoteAction( nColumn, row );165 SE_addNoteAction *action = new SE_addNoteAction( nColumn, row, __selectedPatternNumber ); 165 166 HydrogenApp::get_instance()->m_undoStack->push( action ); 166 167 } … … 182 183 183 184 if ( Preferences::get_instance()->__rightclickedpattereditor == 1){ 184 SE_addNoteRightClickAction *action = new SE_addNoteRightClickAction( nColumn, row );185 SE_addNoteRightClickAction *action = new SE_addNoteRightClickAction( nColumn, row, __selectedPatternNumber ); 185 186 HydrogenApp::get_instance()->m_undoStack->push( action ); 186 187 return; … … 232 233 __nColumn = nColumn; 233 234 __row = row; 235 __oldLength = m_pDraggedNote->get_length(); 234 236 235 237 AudioEngine::get_instance()->unlock(); … … 237 239 } 238 240 239 void DrumPatternEditor::addOrDeleteNoteAction( int nColumn, int row ) 240 { 241 void DrumPatternEditor::addOrDeleteNoteAction( int nColumn, int row, int selectedPatternNumber ) 242 { 243 244 245 Hydrogen *pEngine = Hydrogen::get_instance(); 246 PatternList *pPatternList = pEngine->getSong()->get_pattern_list(); 247 H2Core::Pattern *pPattern; 248 249 if ( ( selectedPatternNumber != -1 ) && ( (uint)selectedPatternNumber < pPatternList->get_size() ) ) { 250 pPattern = pPatternList->get( selectedPatternNumber ); 251 } 252 else { 253 pPattern = NULL; 254 } 255 256 241 257 Song *pSong = Hydrogen::get_instance()->getSong(); 242 258 int nInstruments = pSong->get_instrument_list()->get_size(); … … 249 265 bool bNoteAlreadyExist = false; 250 266 std::multimap <int, Note*>::iterator pos; 251 for ( pos = m_pPattern->note_map.lower_bound( nColumn ); pos != m_pPattern->note_map.upper_bound( nColumn ); ++pos ) {267 for ( pos = pPattern->note_map.lower_bound( nColumn ); pos != pPattern->note_map.upper_bound( nColumn ); ++pos ) { 252 268 Note *pNote = pos->second; 253 269 assert( pNote ); … … 256 272 bNoteAlreadyExist = true; 257 273 delete pNote; 258 m_pPattern->note_map.erase( pos );274 pPattern->note_map.erase( pos ); 259 275 break; 260 276 } … … 271 287 Note *pNote = new Note( pSelectedInstrument, nPosition, fVelocity, fPan_L, fPan_R, nLength, fPitch ); 272 288 pNote->set_noteoff( false ); 273 m_pPattern->note_map.insert( std::make_pair( nPosition, pNote ) );289 pPattern->note_map.insert( std::make_pair( nPosition, pNote ) ); 274 290 275 291 // hear note … … 298 314 299 315 300 void DrumPatternEditor::addNoteRightClickAction( int nColumn, int row ) 301 { 316 void DrumPatternEditor::addNoteRightClickAction( int nColumn, int row, int selectedPatternNumber ) 317 { 318 319 Hydrogen *pEngine = Hydrogen::get_instance(); 320 PatternList *pPatternList = pEngine->getSong()->get_pattern_list(); 321 322 H2Core::Pattern *pPattern; 323 if ( (selectedPatternNumber != -1) && ( (uint)selectedPatternNumber < pPatternList->get_size() ) ) { 324 pPattern = pPatternList->get( selectedPatternNumber ); 325 } 326 else { 327 pPattern = NULL; 328 } 302 329 303 330 Song *pSong = Hydrogen::get_instance()->getSong(); … … 322 349 323 350 324 m_pPattern->note_map.insert( std::make_pair( nPosition, poffNote ) );351 pPattern->note_map.insert( std::make_pair( nPosition, poffNote ) ); 325 352 326 353 pSong->__is_modified = true; … … 351 378 return; 352 379 } 380 381 if (m_bRightBtnPressed && m_pDraggedNote && ( Preferences::get_instance()->__rightclickedpattereditor == 0 ) ) { 382 if ( m_pDraggedNote->get_noteoff() ) return; 383 384 SE_editNoteLenghtAction *action = new SE_editNoteLenghtAction( m_pDraggedNote->get_position(), m_pDraggedNote->get_position(), __row, m_pDraggedNote->get_length(),__oldLength, __selectedPatternNumber); 385 HydrogenApp::get_instance()->m_undoStack->push( action ); 386 } 387 } 388 389 390 void DrumPatternEditor::editNoteLenghtAction( int nColumn, int nRealColumn, int row, int length, int selectedPatternNumber ) 391 { 392 Hydrogen *pEngine = Hydrogen::get_instance(); 393 PatternList *pPatternList = pEngine->getSong()->get_pattern_list(); 394 395 H2Core::Pattern *pPattern; 396 if ( (selectedPatternNumber != -1) && ( (uint)selectedPatternNumber < pPatternList->get_size() ) ) { 397 pPattern = pPatternList->get( selectedPatternNumber ); 398 } 399 else { 400 pPattern = NULL; 401 } 402 403 Note *pDraggedNote; 404 Song *pSong = pEngine->getSong(); 405 int nInstruments = pSong->get_instrument_list()->get_size(); 406 407 Instrument *pSelectedInstrument = pSong->get_instrument_list()->get( row ); 408 409 AudioEngine::get_instance()->lock( RIGHT_HERE ); 410 411 std::multimap <int, Note*>::iterator pos; 412 for ( pos = pPattern->note_map.lower_bound( nColumn ); pos != pPattern->note_map.upper_bound( nColumn ); ++pos ) { 413 Note *pNote = pos->second; 414 assert( pNote ); 415 416 if ( pNote->get_instrument() == pSelectedInstrument ) { 417 pDraggedNote = pNote; 418 break; 419 } 420 } 421 if ( !pDraggedNote ) { 422 for ( pos = pPattern->note_map.lower_bound( nRealColumn ); pos != pPattern->note_map.upper_bound( nRealColumn ); ++pos ) { 423 Note *pNote = pos->second; 424 assert( pNote ); 425 426 if ( pNote->get_instrument() == pSelectedInstrument ) { 427 pDraggedNote = pNote; 428 break; 429 } 430 } 431 432 433 } 434 // potrei essere sulla coda di una nota precedente.. 435 for ( int nCol = 0; unsigned(nCol) < nRealColumn; ++nCol ) { 436 if ( pDraggedNote ) break; 437 for ( pos = pPattern->note_map.lower_bound( nCol ); pos != pPattern->note_map.upper_bound( nCol ); ++pos ) { 438 Note *pNote = pos->second; 439 assert( pNote ); 440 441 if ( pNote->get_instrument() == pSelectedInstrument 442 && ( (nRealColumn <= pNote->get_position() + pNote->get_length() ) 443 && nRealColumn >= pNote->get_position() ) ){ 444 pDraggedNote = pNote; 445 break; 446 } 447 } 448 } 449 450 pDraggedNote->set_length( length ); 451 AudioEngine::get_instance()->unlock(); 452 update( 0, 0, width(), height() ); 453 m_pPatternEditorPanel->getVelocityEditor()->updateEditor(); 454 m_pPatternEditorPanel->getPanEditor()->updateEditor(); 455 m_pPatternEditorPanel->getLeadLagEditor()->updateEditor(); 456 m_pPatternEditorPanel->getNoteKeyEditor()->updateEditor(); 457 353 458 } 354 459 -
branches/undo/gui/src/PatternEditor/DrumPatternEditor.h
r1532 r1533 65 65 virtual void selectedInstrumentChangedEvent(); 66 66 //~ Implements EventListener interface 67 void addOrDeleteNoteAction( int __nColumn, int __nRow ); 68 void addNoteRightClickAction( int nColumn, int nRow ); 67 void addOrDeleteNoteAction( int __nColumn, int __nRow, int selectedPatternNumber); 68 void addNoteRightClickAction( int nColumn, int nRow, int selectedPatternNumber ); 69 void editNoteLenghtAction( int nColumn, int nRealColumn, int row, int length, int selectedPatternNumber ); 69 70 70 71 public slots: … … 108 109 int __nColumn; 109 110 int __row; 111 int __oldLength; 112 int __selectedPatternNumber; 110 113 }; 111 114 -
branches/undo/gui/src/UndoActions.h
r1532 r1533 457 457 { 458 458 public: 459 SE_addNoteAction( int nColumn, int nRow ){459 SE_addNoteAction( int nColumn, int nRow, int selectedPatternNumber ){ 460 460 setText( QString( "Add Note ( %1, %2 )" ).arg( nColumn ).arg( nRow ) ); 461 461 //setText("add Pattern"); 462 462 __nColumn = nColumn; 463 463 __nRow = nRow; 464 __selectedPatternNumber = selectedPatternNumber; 464 465 } 465 466 virtual void undo() … … 467 468 qDebug() << "Add note Undo "; 468 469 HydrogenApp* h2app = HydrogenApp::get_instance(); 469 h2app->getPatternEditorPanel()->getDrumPatternEditor()->addOrDeleteNoteAction( __nColumn, __nRow );470 h2app->getPatternEditorPanel()->getDrumPatternEditor()->addOrDeleteNoteAction( __nColumn, __nRow, __selectedPatternNumber ); 470 471 } 471 472 virtual void redo() … … 473 474 qDebug() << "Add Note Redo " ; 474 475 HydrogenApp* h2app = HydrogenApp::get_instance(); 475 h2app->getPatternEditorPanel()->getDrumPatternEditor()->addOrDeleteNoteAction( __nColumn, __nRow );476 h2app->getPatternEditorPanel()->getDrumPatternEditor()->addOrDeleteNoteAction( __nColumn, __nRow, __selectedPatternNumber ); 476 477 } 477 478 private: 478 479 int __nColumn; 479 480 int __nRow; 481 int __selectedPatternNumber; 480 482 }; 481 483 … … 484 486 { 485 487 public: 486 SE_addNoteRightClickAction( int nColumn, int nRow ){488 SE_addNoteRightClickAction( int nColumn, int nRow, int selectedPatternNumber ){ 487 489 setText( QString( "Add off note Note ( %1, %2 )" ).arg( nColumn ).arg( nRow ) ); 488 490 //setText("add Pattern"); 489 491 __nColumn = nColumn; 490 492 __nRow = nRow; 493 __selectedPatternNumber = selectedPatternNumber; 491 494 } 492 495 virtual void undo() … … 494 497 qDebug() << "Add off note Note Undo "; 495 498 HydrogenApp* h2app = HydrogenApp::get_instance(); 496 h2app->getPatternEditorPanel()->getDrumPatternEditor()->addOrDeleteNoteAction( __nColumn, __nRow );499 h2app->getPatternEditorPanel()->getDrumPatternEditor()->addOrDeleteNoteAction( __nColumn, __nRow, __selectedPatternNumber ); 497 500 } 498 501 virtual void redo() … … 500 503 qDebug() << "Add off note Note Redo " ; 501 504 HydrogenApp* h2app = HydrogenApp::get_instance(); 502 h2app->getPatternEditorPanel()->getDrumPatternEditor()->addNoteRightClickAction( __nColumn, __nRow );505 h2app->getPatternEditorPanel()->getDrumPatternEditor()->addNoteRightClickAction( __nColumn, __nRow, __selectedPatternNumber ); 503 506 } 504 507 private: 505 508 int __nColumn; 506 509 int __nRow; 510 int __selectedPatternNumber; 511 }; 512 513 class SE_editNoteLenghtAction : public QUndoCommand 514 { 515 public: 516 SE_editNoteLenghtAction( int nColumn, int nRealColumn, int row, int length, int oldLength, int selectedPatternNumber ){ 517 setText( QString( "Change note length" ) ); 518 __nColumn = nColumn; 519 __nRealColumn = nRealColumn; 520 __row = row; 521 __length = length; 522 __oldLength = oldLength; 523 __selectedPatternNumber = selectedPatternNumber; 524 } 525 virtual void undo() 526 { 527 qDebug() << "Change note length Undo "; 528 HydrogenApp* h2app = HydrogenApp::get_instance(); 529 h2app->getPatternEditorPanel()->getDrumPatternEditor()->editNoteLenghtAction( __nColumn, __nRealColumn, __row, __oldLength, __selectedPatternNumber ); 530 } 531 virtual void redo() 532 { 533 qDebug() << "Change note length Redo " ; 534 HydrogenApp* h2app = HydrogenApp::get_instance(); 535 h2app->getPatternEditorPanel()->getDrumPatternEditor()->editNoteLenghtAction( __nColumn, __nRealColumn, __row, __length, __selectedPatternNumber ); 536 } 537 private: 538 int __nColumn; 539 int __nRealColumn; 540 int __row; 541 int __oldLength; 542 int __length; 543 int __selectedPatternNumber; 507 544 }; 508 545 #endif // UNDOACTIONS_H -
branches/undo/undo_implementation_todo
r1532 r1533 23 23 + Add/Remove note Pattern Editor | Done 24 24 + Add/Remove noteoff note Pattern Editor | Done 25 + Edit note length Pattern Editor (right cklicking) | ----25 + Edit note length Pattern Editor (right cklicking) | Done 26 26 + Add/Remove note Piano Roll Editor | ---- 27 27 + Add/Remove noteoff note Piano Roll Editor | ----