void DeleteBlock( NInt blockpos ){ struct Tracker_Windows *window=root->song->tracker_windows; struct WBlocks *wblock; struct Blocks *removed_block=ListFindElement1(&root->song->blocks->l,blockpos); struct Blocks *nextblock=NextBlock(removed_block); ListRemoveElement1(&root->song->blocks,&removed_block->l); { struct Blocks *block = nextblock; while(block!=NULL){ block->l.num--; block=NextBlock(block); } } root->song->num_blocks--; while(window!=NULL){ wblock=ListFindElement1(&window->wblocks->l,blockpos); ListRemoveElement1( &window->wblocks, &wblock->l ); wblock=NextWBlock(wblock); while(wblock!=NULL){ wblock->l.num--; wblock=NextWBlock(wblock); } window=NextWindow(window); } // Call BL_removeBlockFromPlaylist after blocklist is updated. BL_removeBlockFromPlaylist(removed_block); }
void *Undo_Do_Block_Split( struct Tracker_Windows *window, struct WBlocks *wblock, struct WTracks *wtrack, int realline, void *pointer ){ struct Undo_Block_MergeSplit *ubm=(struct Undo_Block_MergeSplit *)pointer; struct WBlocks *wblocktemp=NULL; if(ubm->nwblock==NULL){ //Undo ubm->nwblock=CB_CopyBlock(wblock); // wblocktemp=CB_CopyBlock((struct WBlocks*)ListPrevElement1(&window->wblocks->l,&wblock->l)); wblocktemp=CB_CopyBlock(NextWBlock(wblock)); CB_PasteBlock(window,ubm->wblock,wblock); DeleteBlock(ubm->blockpos+1); ubm->wblock=wblocktemp; }else{ //Redo InsertBlock(ubm->blockpos,20,20,"n"); wblocktemp=CB_CopyBlock(wblock); CB_PasteBlock(window,ubm->wblock,wblock); CB_PasteBlock(window,ubm->nwblock,(struct WBlocks*)ListPrevElement1(&window->wblocks->l,&wblock->l)); ubm->wblock=wblocktemp; ubm->nwblock=NULL; } BS_UpdateBlockList(); BS_UpdatePlayList(); return ubm; }
void InsertBlock_IncBlockNums( NInt blockpos ){ struct Tracker_Windows *window=root->song->tracker_windows; struct WBlocks *wblock; struct Blocks *block=ListFindElement1_r0(&root->song->blocks->l,blockpos); while(block!=NULL){ block->l.num++; block=NextBlock(block); } root->song->num_blocks++; g_editor_blocks_generation++; while(window!=NULL){ wblock=ListFindElement1_r0(&window->wblocks->l,blockpos); while(wblock!=NULL){ wblock->l.num++; wblock=NextWBlock(wblock); } window=NextWindow(window); } }
void TRACKREALLINES_update_peak_tracks(struct Tracker_Windows *window, struct Patch *patch){ struct WBlocks *wblock=window->wblocks; while(wblock!=NULL){ struct WTracks *wtrack=wblock->wtracks; while(wtrack!=NULL){ struct Tracks *track=wtrack->track; if(track->patch==patch || patch==NULL) if(TRACK_has_peaks(wtrack->track)) UpdateTrackReallines( window, wblock, wtrack ); wtrack=NextWTrack(wtrack); } wblock=NextWBlock(wblock); } }