void CutRange_CurrPos( struct Tracker_Windows *window ){ struct WBlocks *wblock = window->wblock; if( ! window->wblock->isranged) return; CopyRange(wblock); wblock->isranged=true; ADD_UNDO(Range( window, window->wblock, window->wblock->rangex1, window->wblock->rangex2, window->wblock->curr_realline )); Undo_start_ignoring_undo_operations();{ CutRangedRange(wblock); }Undo_stop_ignoring_undo_operations(); UpdateAndClearSomeTrackReallinesAndGfxWTracks( window, wblock, wblock->rangex1, wblock->rangex2 ); window->must_redraw = true; }
void putNoteNote(int notenote,int windownum,int blocknum,int tracknum,int notenum){ struct Tracker_Windows *window=getWindowFromNum(windownum); struct Notes *note=getNoteFromNum(windownum,blocknum,tracknum,notenum); if(window==NULL) return; if(note==NULL) return; note->note=notenote; UpdateAndClearSomeTrackReallinesAndGfxWTracks( window, window->wblock, 0, window->wblock->block->num_tracks-1 ); }
void InvertTrack_CurrPos( struct Tracker_Windows *window ){ ADD_UNDO(Notes_CurrPos(window)); InvertTrack(window->wblock->block,window->wblock->wtrack->track); UpdateAndClearSomeTrackReallinesAndGfxWTracks( window, window->wblock, window->wblock->wtrack->l.num, window->wblock->wtrack->l.num ); }
void TransposeTrack_CurrPos( struct Tracker_Windows *window, int trans ){ ADD_UNDO(Notes_CurrPos(window)); TransposeTrack(window->wblock->wtrack->track,trans); UpdateAndClearSomeTrackReallinesAndGfxWTracks( window, window->wblock, window->wblock->wtrack->l.num, window->wblock->wtrack->l.num ); }
void TransposeNote_CurrPos( struct Tracker_Windows *window, int trans ){ struct Notes *note = FindNoteCurrPos(window); if (note==NULL) return; ADD_UNDO(Notes_CurrPos(window)); Transpose_note(note,trans); UpdateAndClearSomeTrackReallinesAndGfxWTracks( window, window->wblock, window->wblock->wtrack->l.num, window->wblock->wtrack->l.num ); }
void TransposeRange_CurrPos( struct Tracker_Windows *window, int trans ){ if(!window->wblock->isranged) return; ADD_UNDO(Range(window,window->wblock,window->wblock->rangex1,window->wblock->rangex2,window->wblock->curr_realline)); TransposeRange(window->wblock,trans); UpdateAndClearSomeTrackReallinesAndGfxWTracks( window, window->wblock, window->wblock->rangex1, window->wblock->rangex2 ); }
void InvertBlock_CurrPos( struct Tracker_Windows *window ){ ADD_UNDO(Range( window, window->wblock, 0,window->wblock->block->num_tracks-1, window->wblock->curr_realline )); InvertBlock(window->wblock->block); UpdateAndClearSomeTrackReallinesAndGfxWTracks( window, window->wblock, 0, window->wblock->block->num_tracks-1 ); }
void TransposeBlock_CurrPos( struct Tracker_Windows *window, int trans ){ ADD_UNDO(Range( window, window->wblock, 0,window->wblock->block->num_tracks-1, window->wblock->curr_realline )); TransposeBlock(window->wblock->block,trans); UpdateAndClearSomeTrackReallinesAndGfxWTracks( window, window->wblock, 0, window->wblock->block->num_tracks-1 ); }
static void handleDirtyBlock(int blocknum){ struct Tracker_Windows *window = root->song->tracker_windows; while(window!=NULL){ struct WBlocks *wblock=ListFindElement1(&window->wblocks->l,blocknum); UpdateAllWTracksCoordinates(window,wblock); UpdateAndClearSomeTrackReallinesAndGfxWTracks( window, wblock, 0, window->wblock->block->num_tracks-1 ); if(wblock->curr_realline>=wblock->num_reallines){ wblock->curr_realline=wblock->num_reallines-1; } UpdateReallinesDependens(window,wblock); window=NextWindow(window); } }
void CB_PasteTrack_CurrPos(struct Tracker_Windows *window){ struct WBlocks *wblock=window->wblock; struct Blocks *block=wblock->block; struct WTracks *wtrack=wblock->wtrack; Place lastplace; PlaceSetLastPos(wblock->block,&lastplace); PC_Pause(); switch(window->curr_track){ case SIGNATURETRACK: if(cb_signature==NULL) goto exit; ADD_UNDO(Signatures_CurrPos(window)); block->signatures=CB_CopySignatures(cb_signature); CutListAt_a(&block->signatures,&lastplace); UpdateWBlockWidths(window, wblock); UpdateBeats(block); //UpdateSTimes(block); //UpdateWLPBs(window,wblock); break; case LPBTRACK: if(cb_lpb==NULL) goto exit; ADD_UNDO(LPBs_CurrPos(window)); block->lpbs=CB_CopyLPBs(cb_lpb); CutListAt_a(&block->lpbs,&lastplace); UpdateSTimes(block); //UpdateWLPBs(window,wblock); UpdateBeats(block); #if !USE_OPENGL DrawUpLPBs(window,wblock); #endif break; case TEMPOTRACK: if(cb_tempo==NULL) goto exit; ADD_UNDO(Tempos_CurrPos(window)); block->tempos=CB_CopyTempos(cb_tempo); CutListAt_a(&block->tempos,&lastplace); //UpdateWTempos(window,wblock); #if !USE_OPENGL DrawUpTempos(window,wblock); #endif UpdateSTimes(block); break; case TEMPONODETRACK: if(cb_temponode==NULL) goto exit; ADD_UNDO(TempoNodes_CurrPos(window)); block->temponodes=CB_CopyTempoNodes(cb_temponode); CutListAt_a(&block->temponodes,&lastplace); LegalizeTempoNodes(block); #if !USE_OPENGL ///UpdateWTempoNodes(window,wblock); DrawUpWTempoNodes(window,wblock); #endif UpdateSTimes(block); break; default: if(cb_wtrack==NULL) goto exit; Undo_Open_rec();{ printf("curr_track_sub: %d\n",window->curr_track_sub); ADD_UNDO(Track_CurrPos(window)); if(window->curr_track_sub==-1 && cb_wtrack_only_contains_one_fxs==false){ // copy all printf("aaa\n"); if(co_CB_PasteTrack(wblock,cb_wtrack,wtrack)){ #if !USE_OPENGL UpdateFXNodeLines(window,wblock,wtrack); #endif window->must_redraw = true; }else{ #if !USE_OPENGL UpdateAndClearSomeTrackReallinesAndGfxWTracks( window, wblock, window->curr_track, window->curr_track ); #endif } }else{ printf("bbb\n"); // only copy fx struct WTracks *fromwtrack = cb_wtrack; if (cb_wtrack_only_contains_one_fxs==true){ // only copy one fx R_ASSERT(cb_wtrack->track->fxs.num_elements==1); struct FXs *fxs = cb_wtrack->track->fxs.elements[0]; vector_t *fxss = VECTOR_copy(&wtrack->track->fxs); remove_fxs_from_fxss(fxss, fxs); VECTOR_push_back(fxss, fxs); fromwtrack = CB_CopyTrack(wblock, cb_wtrack); fromwtrack->track->fxs = *VECTOR_copy(fxss); } if(co_CB_PasteTrackFX(wblock,fromwtrack,wtrack)){ #if !USE_OPENGL UpdateFXNodeLines(window,wblock,wtrack); #endif window->must_redraw = true; }else{ #if !USE_OPENGL UpdateAndClearSomeTrackReallinesAndGfxWTracks( window, wblock, window->curr_track, window->curr_track ); #endif } } }Undo_Close(); break; } SetNotePolyphonyAttributes(wtrack->track); ValidateCursorPos(window); exit: PC_StopPause(window); }
void CB_PasteTrack_CurrPos(struct Tracker_Windows *window){ struct WBlocks *wblock=window->wblock; struct Blocks *block=wblock->block; struct WTracks *wtrack=wblock->wtrack; Place lastplace; PlayStop(); PlaceSetLastPos(wblock->block,&lastplace); switch(window->curr_track){ case LPBTRACK: if(cb_lpb==NULL) return; Undo_LPBs_CurrPos(window); block->lpbs=CB_CopyLPBs(cb_lpb); CutListAt_a(&block->lpbs,&lastplace); UpdateSTimes(block); UpdateBeats(block); UpdateWLPBs(window,wblock); #if !USE_OPENGL DrawUpLPBs(window,wblock); #endif break; case TEMPOTRACK: if(cb_tempo==NULL) return; Undo_Tempos_CurrPos(window); block->tempos=CB_CopyTempos(cb_tempo); CutListAt_a(&block->tempos,&lastplace); //UpdateWTempos(window,wblock); #if !USE_OPENGL DrawUpTempos(window,wblock); #endif UpdateSTimes(block); break; case TEMPONODETRACK: if(cb_temponode==NULL) return; Undo_TempoNodes_CurrPos(window); block->temponodes=CB_CopyTempoNodes(cb_temponode); CutListAt_a(&block->temponodes,&lastplace); LegalizeTempoNodes(block); #if !USE_OPENGL UpdateWTempoNodes(window,wblock); DrawUpWTempoNodes(window,wblock); #endif UpdateSTimes(block); break; default: if(cb_wtrack==NULL) return; Undo_Track_CurrPos(window); if(window->curr_track_sub==-1){ if(CB_PasteTrack(wblock,cb_wtrack,wtrack)){ #if !USE_OPENGL UpdateFXNodeLines(window,wblock,wtrack); #endif window->must_redraw = true; }else{ #if !USE_OPENGL UpdateAndClearSomeTrackReallinesAndGfxWTracks( window, wblock, window->curr_track, window->curr_track ); #endif } }else{ if(CB_PasteTrackFX(wblock,cb_wtrack,wtrack)){ #if !USE_OPENGL UpdateFXNodeLines(window,wblock,wtrack); #endif window->must_redraw = true; }else{ #if !USE_OPENGL UpdateAndClearSomeTrackReallinesAndGfxWTracks( window, wblock, window->curr_track, window->curr_track ); #endif } } break; } SetNoteSubtrackAttributes(wtrack->track); ValidateCursorPos(window); }