Пример #1
0
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);
}
Пример #2
0
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;
}
Пример #3
0
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);
	}
}
Пример #4
0
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);
  }
}