void *Undo_Do_Block_Delete( struct Tracker_Windows *window, struct WBlocks *wblock, struct WTracks *wtrack, int realline, void *pointer ){ struct Undo_Block_InsertDelete *ubi=(struct Undo_Block_InsertDelete *)pointer; if(ubi->wblock==NULL){ return Undo_Do_Block_Insert(window,wblock,wtrack,realline,pointer); } InsertBlock_IncBlockNums(ubi->blockpos); ListAddElement1(&root->song->blocks,&ubi->wblock->block->l); ListAddElement1(&window->wblocks,&ubi->wblock->l); SEQUENCER_create_from_state(ubi->sequencer_state, root->song); BS_UpdateBlockList(); BS_UpdatePlayList(); ubi->wblock=NULL; return ubi; }
static void *Undo_Do_Sequencer( struct Tracker_Windows *window, struct WBlocks *wblock, struct WTracks *wtrack, int realline, void *pointer ){ hash_t *ret = SEQUENCER_get_state(); SEQUENCER_create_from_state(pointer); return ret; }
void *Undo_Do_Block_Insert( struct Tracker_Windows *window, struct WBlocks *wblock, struct WTracks *wtrack, int realline, void *pointer ){ struct Undo_Block_InsertDelete *ubi=(struct Undo_Block_InsertDelete *)pointer; if(ubi->wblock!=NULL){ return Undo_Do_Block_Delete(window,wblock,wtrack,realline,pointer); } ubi->wblock=(struct WBlocks *)ListFindElement1(&window->wblocks->l,ubi->blockpos); DeleteBlock(ubi->blockpos); SEQUENCER_create_from_state(ubi->sequencer_state); BS_UpdateBlockList(); BS_UpdatePlayList(); return ubi; }