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 CB_PasteBlock_CurrPos( struct Tracker_Windows *window ){ if(cb_wblock==NULL) return; PC_Pause();{ ADD_UNDO(Block_CurrPos(window)); CB_PasteBlock(window,cb_wblock,window->wblock); SelectWBlock(window,window->wblock); }PC_StopPause(window); }
void *Undo_Do_Block( struct Tracker_Windows *window, struct WBlocks *wblock, struct WTracks *wtrack, int realline, void *pointer ){ struct WBlocks *undo_wblock=(struct WBlocks *)pointer; struct WBlocks *temp=CB_CopyBlock(wblock); CB_PasteBlock(window,undo_wblock,wblock); return temp; }
void loadBlock(const char *filename_c){ struct Tracker_Windows *window=getWindowFromNum(-1);if(window==NULL) return; bool success = false; bool have_made_undo = false; if (filename_c==NULL || !strcmp(filename_c, "")) filename_c = "/tmp/block.block"; const wchar_t *filename = STRING_create(filename_c); int num_blocks = root->song->num_blocks; if (Load_Initialize(filename, "RADIUM BLOCK")==false) { goto exit; return; } if(strcmp(dc.ls,"WBLOCK")){ handleError("Loading failed.\nExpected \"WBLOCK\", but found instead: '%s'.\nFile: '%s'\n",dc.ls,STRING_get_chars(filename)); DISK_close_and_delete(dc.file); goto exit; return; } struct WBlocks *wblock = LoadWBlock(); wblock->l.num = num_blocks; DC_Next(); if(strcmp(dc.ls,"BLOCK")){ handleError("Loading failed.\nExpected \"BLOCK\", but found instead: '%s'.\nFile: '%s'\n",dc.ls,STRING_get_chars(filename)); DISK_close_and_delete(dc.file); goto exit; } struct Blocks *block = LoadBlock(); block->l.num = num_blocks; DISK_close_and_delete(dc.file); if(!dc.success){ handleError("Loading failed.\n"); goto exit; } printf("Got it: %p / %p\n",wblock,block); ADD_UNDO(Block_Insert(num_blocks)); have_made_undo = true; /* DC_ListAdd1(&root->song->blocks,block); DC_ListAdd1(&root->song->tracker_windows->wblocks, wblock); */ wblock->block = block; window->curr_track = 0; DLoadBlocks(root, block); DLoadWBlocks(window, window, wblock); CB_PasteBlock(window, wblock, window->wblock); success = true; exit: if (success==false) if (have_made_undo) Undo_CancelLastUndo(); }