Exemple #1
0
void Undo_Block(
	struct Tracker_Windows *window,
	struct WBlocks *wblock,
	struct WTracks *wtrack,
	int realline
){
  static struct WBlocks *last_wblock;
  static struct WTracks *last_wtrack;
  static int last_realline;

  static double last_undo_block_time = -1000;
  double time_now = TIME_get_ms();
  
  //printf("last: %d, now: %d, diff: %d\n",(int)last_undo_block_time,(int)time_now,(int)(time_now-last_undo_block_time));

  if( (time_now-last_undo_block_time) > 1000*3 // more than 3 seconds.
      || wblock!=last_wblock
      || wtrack!=last_wtrack
      || realline!=last_realline
      || Undo_get_last_function()!=Undo_Do_Block)
    Undo_Add(
             window->l.num,
             wblock->l.num,
             wtrack->l.num,
             realline,
             CB_CopyBlock(wblock),
             Undo_Do_Block
             );

  last_undo_block_time = time_now;
  last_wblock=wblock;
  last_wtrack=wtrack;
  last_realline=realline;
}
Exemple #2
0
void ADD_UNDO_FUNC(Playlist(void)){
  struct Tracker_Windows *window = root->song->tracker_windows;

  Undo_Add(
           window->l.num,
           window->wblock->l.num,
           window->curr_track,
           window->wblock->curr_realline,
           BL_copy(),
           Undo_Do_Playlist,
           "Playlist"
           );
}
Exemple #3
0
void ADD_UNDO_FUNC(Sequencer(void)){
  struct Tracker_Windows *window = root->song->tracker_windows;

  Undo_Add(
           window->l.num,
           window->wblock->l.num,
           window->curr_track,
           window->wblock->curr_realline,
           SEQUENCER_get_state(),
           Undo_Do_Sequencer,
           "Sequencer"
           );
}
Exemple #4
0
void Undo_Tempos(
	struct Tracker_Windows *window,
	struct Blocks *block,
	NInt tracknum,
	int realline
){
	Undo_Add(
                 window->l.num,
                 block->l.num,
                 tracknum,
                 realline,
                 CB_CopyTempos(block->tempos),
                 Undo_Do_Tempos
	);
}
Exemple #5
0
void Undo_Signatures(
	struct Tracker_Windows *window,
	struct Blocks *block,
	NInt tracknum,
	int realline
){
	Undo_Add(
                 window->l.num,
                 block->l.num,
                 tracknum,
                 realline,
                 CB_CopySignatures(block->signatures),
                 Undo_Do_Signatures
	);
}
Exemple #6
0
static void Undo_Mixer(
	struct Tracker_Windows *window,
	struct WBlocks *wblock
){
  //struct Undo_Mixer *u_rt=talloc(sizeof(struct Undo_Mixer));
  //u_rt->reltempomax=wblock->reltempomax;

	Undo_Add(
                 window->l.num,
                 wblock->l.num,
                 wblock->wtrack->l.num,
                 wblock->curr_realline,
                 MW_get_state(),
                 Undo_Do_Mixer
	);

}
void Undo_Block_Split_CurrPos(void){
	struct Tracker_Windows *window=root->song->tracker_windows;
	struct WBlocks *wblock=window->wblock;

	struct Undo_Block_MergeSplit *ubm=talloc(sizeof(struct Undo_Block_MergeSplit));

	ubm->wblock=CB_CopyBlock(wblock);
	ubm->blockpos=wblock->l.num;

	Undo_Add(
		window->l.num,
		wblock->l.num,
		window->curr_track,
		wblock->curr_realline,
		ubm,
		Undo_Do_Block_Split
	);
}
void ADD_UNDO_FUNC(Block_Delete(NInt blockpos)){
	struct Tracker_Windows *window=root->song->tracker_windows;
	struct WBlocks *wblock=window->wblock;

	struct Undo_Block_InsertDelete *ubi=talloc(sizeof(struct Undo_Block_InsertDelete));
	ubi->blockpos=blockpos;
	ubi->wblock=(struct WBlocks *)ListFindElement1(&window->wblocks->l,blockpos);
        ubi->sequencer_state=SEQUENCER_get_state();

	Undo_Add(
		window->l.num,
		wblock->l.num,
		window->curr_track,
		wblock->curr_realline,
		ubi,
		Undo_Do_Block_Delete,
                "Block delete"
	);
}
void Undo_Block_Delete(
	NInt blockpos
){
	struct Tracker_Windows *window=root->song->tracker_windows;
	struct WBlocks *wblock=window->wblock;

	struct Undo_Block_InsertDelete *ubi=talloc(sizeof(struct Undo_Block_InsertDelete));
	ubi->blockpos=blockpos;
	ubi->wblock=(struct WBlocks *)ListFindElement1(&window->wblocks->l,blockpos);
        ubi->playlist=BL_copy();

	Undo_Add(
		window->l.num,
		wblock->l.num,
		window->curr_track,
		wblock->curr_realline,
		ubi,
		Undo_Do_Block_Delete
	);
}
Exemple #10
0
void Undo_Range(
	struct Tracker_Windows *window,
	struct Blocks *block,
	NInt starttrack,
	NInt endtrack,
	int realline
){
	Place *p1=PlaceGetFirstPos();
	Place p2;
	struct Range *undo_range;
	NInt num_tracks;
	NInt lokke;
	struct Tracks *track;
	NInt num_tracks_in_block=block->num_tracks;

	if(endtrack>=num_tracks_in_block){
		num_tracks=num_tracks_in_block-1;
	}else{
		num_tracks=endtrack-starttrack+1;
	}

	undo_range=talloc(sizeof(struct Range));
	undo_range->notes=talloc((size_t)(sizeof(struct Notes *)*num_tracks));
	undo_range->stops=talloc((size_t)(sizeof(struct Stops *)*num_tracks));
	undo_range->num_tracks=num_tracks;

	PlaceSetLastPos(block,&p2);

	for(lokke=0;lokke<num_tracks;lokke++){
		track=ListFindElement1(&block->tracks->l,lokke+starttrack);
		CopyRange_stops(&undo_range->stops[lokke],track->stops,p1,&p2);
		CopyRange_notes(&undo_range->notes[lokke],track->notes,p1,&p2);
	}

	Undo_Add(window->l.num,block->l.num,starttrack,realline,
                 undo_range,Undo_Do_Range,
                 "Range",
                 LOC()
                 );
}
Exemple #11
0
void Undo_Notes(
	struct Tracker_Windows *window,
	struct Blocks *block,
	struct Tracks *track,
	int realline
){
	Place *p1=PlaceGetFirstPos();
	Place p2;
	struct Undo_Notes *undo_notes=talloc(sizeof(struct Undo_Notes));

	PlaceSetLastPos(block,&p2);

	CopyRange_stops(&undo_notes->stops,track->stops,p1,&p2);
	CopyRange_notes(&undo_notes->notes,track->notes,p1,&p2);

	Undo_Add(
                 window->l.num,
                 block->l.num,
                 track->l.num,
                 realline,
                 undo_notes,
                 Undo_Do_Notes);
}
Exemple #12
0
void ADD_UNDO_FUNC(
                   MainTempo(
                             struct Tracker_Windows *window,
                             struct WBlocks *wblock
                             )
                   )
{
	struct Undo_MainTempo *u_rt=talloc_atomic(sizeof(struct Undo_MainTempo));
	u_rt->tempo=root->tempo;
	u_rt->lpb=root->lpb;
        u_rt->signature=root->signature;
        u_rt->quantitize_options = root->quantitize_options;

	Undo_Add(
                 window->l.num,
                 wblock->l.num,
                 wblock->wtrack->l.num,
                 wblock->curr_realline,
                 u_rt,
                 Undo_Do_MainTempo,
                 "Block tempo/lpb/signature/quantiatize settings"
	);

}