コード例 #1
0
ファイル: LISTS.C プロジェクト: NoSuchProcess/OrangeC
/* ----- set focus to the next sibling ----- */
void SetNextFocus()
{
    if (inFocus != NULL)    {
        WINDOW wnd1 = inFocus, pwnd;
        while (TRUE)    {
			pwnd = GetParent(wnd1);
            if (NextWindow(wnd1) != NULL)
				wnd1 = NextWindow(wnd1);
			else if (pwnd != NULL)
                wnd1 = FirstWindow(pwnd);
            if (wnd1 == NULL || wnd1 == inFocus)	{
				wnd1 = pwnd;
				break;
			}
			if (GetClass(wnd1) == STATUSBAR || GetClass(wnd1) == MENUBAR || GetClass(wnd1) == TABBAR)
				continue;
            if (isVisible(wnd1))
                break;
        }
        if (wnd1 != NULL)	{
			while (wnd1->childfocus != NULL)
				wnd1 = wnd1->childfocus;
            if (wnd1->condition != ISCLOSING)
	            SendMessage(wnd1, SETFOCUS, TRUE, 0);
		}
    }
}
コード例 #2
0
ファイル: block_properties.c プロジェクト: renno23/radium
void Block_Properties(
	struct Blocks *block,
	NInt num_tracks,
	int num_lines
){
	if(num_tracks!=block->num_tracks){
		struct Tracker_Windows *window=root->song->tracker_windows;
		while(window!=NULL){
			struct WBlocks *wblock=(struct WBlocks *)ListFindElement1(&window->wblocks->l,block->l.num);
			SetCursorPosConcrete(window,wblock,0,-1);
			window=NextWindow(window);
		}
		Block_Set_num_tracks(block,num_tracks);
	}

	if(num_lines!=block->num_lines){
		Block_Set_num_lines(block,num_lines);
	}

	struct Tracker_Windows *window=root->song->tracker_windows;
	while(window!=NULL){
		struct WBlocks *wblock=ListFindElement1(&window->wblocks->l,block->l.num);
		if(wblock->curr_realline>=wblock->num_reallines){
			wblock->curr_realline = wblock->num_reallines-1;
		}

		UpdateReallinesDependens(window,wblock);
		window=NextWindow(window);
	}
}
コード例 #3
0
ファイル: LISTS.C プロジェクト: NoSuchProcess/OrangeC
/* ---- append a window to the linked list ---- */
void AppendWindow(WINDOW wnd)
{
    if (wnd != NULL)    {
		WINDOW pwnd = GetParent(wnd);
		if (pwnd != NULL)	{
        	if (FirstWindow(pwnd) == NULL)
            	FirstWindow(pwnd) = wnd;
        	if (LastWindow(pwnd) != NULL)
            	NextWindow(LastWindow(pwnd)) = wnd;
        	PrevWindow(wnd) = LastWindow(pwnd);
	        LastWindow(pwnd) = wnd;
		}
        NextWindow(wnd) = NULL;
    }
}
コード例 #4
0
ファイル: LISTS.C プロジェクト: NoSuchProcess/OrangeC
/* ---- remove a window from the linked list ---- */
void RemoveWindow(WINDOW wnd)
{
    if (wnd != NULL)    {
		WINDOW pwnd = GetParent(wnd);
        if (PrevWindow(wnd) != NULL)
            NextWindow(PrevWindow(wnd)) = NextWindow(wnd);
        if (NextWindow(wnd) != NULL)
            PrevWindow(NextWindow(wnd)) = PrevWindow(wnd);
		if (pwnd != NULL)	{
        	if (wnd == FirstWindow(pwnd))
            	FirstWindow(pwnd) = NextWindow(wnd);
        	if (wnd == LastWindow(pwnd))
            	LastWindow(pwnd) = PrevWindow(wnd);
		}
    }
}
コード例 #5
0
ファイル: block_insert.c プロジェクト: kmatheussen/radium
struct Blocks *InsertBlock(
                           NInt blockpos,
                           NInt num_tracks,
                           int num_lines,
                           const char *name
                           )
{
        R_ASSERT(is_playing()==false);

	struct Tracker_Windows *window=root->song->tracker_windows;
	struct WBlocks *wblock;

	struct Blocks *block;
          
        InsertBlock_IncBlockNums(blockpos);

        block=talloc(sizeof(struct Blocks));
          
        block->l.num=blockpos;
        NewBlock(block,num_tracks,num_lines,name);
        
        while(window!=NULL){
          wblock=talloc(sizeof(struct WBlocks));
          wblock->l.num=blockpos;
            
          NewWBlock(window,wblock,block);
            
          window=NextWindow(window);
        }

        return block;
}
コード例 #6
0
ファイル: block_properties.c プロジェクト: renno23/radium
void Block_Set_num_tracks(
	struct Blocks *block,
	NInt num_tracks
){
	struct Tracker_Windows *window=root->song->tracker_windows;
	struct WBlocks *wblock;
	NInt org_num_tracks=block->num_tracks;
	NInt lokke;

	if(num_tracks==0){
		RError("Error in function 'Block_Set_num_tracks' in file 'block_properties.c'. num_tracks=0.\n");
		return;
	}

	if(num_tracks==org_num_tracks) return;

	block->num_tracks=num_tracks;

	if(num_tracks<org_num_tracks){
		CutListAt1(&block->tracks,num_tracks);
		while(window!=NULL){
			wblock=(struct WBlocks *)ListFindElement1(&window->wblocks->l,block->l.num);
			CutListAt1(&wblock->wtracks,num_tracks);
			window=NextWindow(window);
		}
	}else{
		for(lokke=org_num_tracks;lokke<num_tracks;lokke++){
			AppendTrack(block);
		}
		window=root->song->tracker_windows;
		while(window!=NULL){
			wblock=(struct WBlocks *)ListFindElement1(&window->wblocks->l,block->l.num);
			UpdateWTracks(window,wblock);
			window=NextWindow(window);
		}
	}

}
コード例 #7
0
ファイル: block_properties.c プロジェクト: renno23/radium
void Block_Properties_CurrPos(
	struct Tracker_Windows *window
){
	NInt num_tracks;
	int num_lines;
	char seltext[500];
	char *blockname;
	ReqType reqtype;

	struct WBlocks *wblock=window->wblock;
	struct Blocks *block=wblock->block;

	PlayStop();

	reqtype=GFX_OpenReq(window,33,5,"Block Properties");

	sprintf(seltext,"Number of tracks (now %d): ",wblock->block->num_tracks);
	num_tracks=GFX_GetInteger(window,reqtype,seltext,2,200);
	if(num_tracks==1) num_tracks=wblock->block->num_tracks;

	sprintf(seltext,"Number of lines (now %d): ",wblock->block->num_lines);
	num_lines=GFX_GetInteger(window,reqtype,seltext,2,2000);
	if(num_lines==1) num_lines=wblock->block->num_lines;

	sprintf(seltext,"Name (now: '%s'): ",wblock->block->name);
	blockname=GFX_GetString(window,reqtype,seltext);
	if(blockname!=NULL){
		wblock->block->name=blockname;
		BS_UpdateBlockList();
		BS_UpdatePlayList();
	}

	GFX_CloseReq(window,reqtype);

	if(num_tracks==wblock->block->num_tracks && num_lines==wblock->block->num_lines){
		return;
	}

	Undo_Block_CurrPos(window);

	Block_Properties(block,num_tracks,num_lines);

	window=root->song->tracker_windows;
	while(window!=NULL){
		window->must_redraw = true;
		window=NextWindow(window);
	}

}
コード例 #8
0
void checkIfWBlocksAreDirty(void) {
  bool is_dirty = false;
  struct Blocks *block=root->song->blocks;

  while(block!=NULL){
    if (block->is_dirty==true){
      handleDirtyBlock(block->l.num);
      block->is_dirty = false;
      is_dirty = true;
    }
    block = NextBlock(block);
  }

  if(is_dirty==true){
    struct Tracker_Windows *window=root->song->tracker_windows;
    while(window!=NULL){
      //DrawUpTrackerWindow(window);
      window->must_redraw = true;
      window=NextWindow(window);
    }
  }
}
コード例 #9
0
static void handleDirtyBlock(int blocknum){
  struct Tracker_Windows *window = root->song->tracker_windows;

  while(window!=NULL){
    struct WBlocks *wblock=ListFindElement1(&window->wblocks->l,blocknum);

    UpdateAllWTracksCoordinates(window,wblock);
    UpdateAndClearSomeTrackReallinesAndGfxWTracks(
                                                  window,
                                                  wblock,
                                                  0,
                                                  window->wblock->block->num_tracks-1
                                                  );


    if(wblock->curr_realline>=wblock->num_reallines){
      wblock->curr_realline=wblock->num_reallines-1;
    }

    UpdateReallinesDependens(window,wblock);
    window=NextWindow(window);
  }
}
コード例 #10
0
ファイル: block_insert.c プロジェクト: kmatheussen/radium
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);
	}
}
コード例 #11
0
ファイル: block_delete.c プロジェクト: dieface/radium-1
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);
}
コード例 #12
0
ファイル: lines.c プロジェクト: onukore/radium
void InsertLines_CurrPos(
                         struct Tracker_Windows *window,
                         int toinsert
){
	struct WBlocks *wblock=window->wblock;
	int curr_realline=wblock->curr_realline;
	int curr_line=wblock->reallines[curr_realline]->Tline;
	int num_lines=wblock->block->num_lines;

        if(toinsert==0)
	  toinsert=GFX_GetInteger(window,NULL,"Number of lines to insert\n(number can be negative): ",-(num_lines-curr_line),10000);

	if(toinsert==-(num_lines-curr_line)-1) return;

	ADD_UNDO(Block_CurrPos(window));

	InsertLines(window->wblock->block,curr_line,toinsert);

	window=root->song->tracker_windows;
	while(window!=NULL){
		window->must_redraw = true;
		window=NextWindow(window);
	}
}
コード例 #13
0
ファイル: lines.c プロジェクト: onukore/radium
/* Argh. This one was difficult, I don`t think it works correctly
   in all situations yet either.
*/
void InsertLines(
	struct Blocks *block,
	int line,
	int toinsert
){
	int lokke;
	struct LocalZooms *localzoom;
	struct Tracker_Windows *window=root->song->tracker_windows;
	struct WBlocks *wblock;
	struct Tracks *track=block->tracks;

	int num_lines=block->num_lines;

	if(line>num_lines+toinsert){
		toinsert=line-num_lines;
	}

        if (line==num_lines-1) { // special case
          Block_Properties(block, block->num_tracks, block->num_lines + toinsert);
          return;
        }
        
	if( line<0 || line>=num_lines) return;

	if(toinsert==0 || num_lines+toinsert<2 || num_lines+toinsert>=MAX_UINT32) return;

        
        PC_Pause();{
        
          blocktobelongtoforinsertlines_notes_a_terrible_hack=block;
          
          block->num_lines=num_lines+toinsert;
          
          List_InsertLines3(&block->temponodes,block->temponodes->l.next,line,toinsert,NULL);
          LegalizeTempoNodes(block);
          List_InsertLines3(&block->signatures,&block->signatures->l,line,toinsert,NULL);
          List_InsertLines3(&block->lpbs,&block->lpbs->l,line,toinsert,NULL);
          List_InsertLines3(&block->tempos,&block->tempos->l,line,toinsert,NULL);
          
          UpdateSTimes(block);
          UpdateBeats(block);

          while(track!=NULL){
            List_InsertLines3(&track->notes,&track->notes->l,line,toinsert,InsertLines_notes);
            LegalizeNotes(block,track);
            List_InsertLines3(&track->stops,&track->stops->l,line,toinsert,NULL);
            VECTOR_FOR_EACH(struct FXs *fxs, &track->fxs){
              List_InsertLines3(&fxs->fxnodelines,&fxs->fxnodelines->l,line,toinsert,NULL);
            }END_VECTOR_FOR_EACH;
            LegalizeFXlines(block,track);
            track=NextTrack(track);
          }

          while(window!=NULL){
            wblock=ListFindElement1(&window->wblocks->l,block->l.num);
            List_InsertLines3(
                              &wblock->localzooms,
                              &wblock->localzooms->l,
                              line,
                              toinsert,
                              InsertLines_localzooms
                              //			NULL
                              );
            for(lokke=line;lokke<line+toinsert;lokke++){
              localzoom=talloc(sizeof(struct LocalZooms));
              localzoom->Tline=lokke;
              localzoom->Tdividor=1;
              localzoom->zoomline=lokke;
              ListAddElement3(&wblock->localzooms,&localzoom->l);
            }
            UpdateWBlockWidths(window,wblock);
            wblock->reallines = NULL; // We changed the localzooms, which is used to set new curr_realline. We don't need to set new curr_realline, so just set reallines to NULL.
            UpdateRealLines(window,wblock);
            UpdateReallinesDependens(window,wblock);
            if(wblock->curr_realline>=wblock->num_reallines){
              wblock->curr_realline=wblock->num_reallines-1;
            }
            window=NextWindow(window);
          }
          
          blocktobelongtoforinsertlines_notes_a_terrible_hack=NULL;

        }PC_StopPause(window);
}
コード例 #14
0
ファイル: block_properties.c プロジェクト: renno23/radium
void Block_Set_num_lines(
	struct Blocks *block,
	int num_lines
){
	Place lastplace1,lastplace;
	struct Tracker_Windows *window=root->song->tracker_windows;
	struct WBlocks *wblock;
	struct LocalZooms *localzoom;
	struct Tracks *track=block->tracks;
	struct Notes *note;
	struct FXs *fxs;
	int org_num_lines=block->num_lines;
	int lokke;

	if(org_num_lines==num_lines || num_lines<2) return;

	PlaceSetLastPos(block,&lastplace1);

	block->num_lines=num_lines;

	PlaceSetLastPos(block,&lastplace);

	if(num_lines<org_num_lines){

		CutListAt_a(&block->lpbs,&lastplace);
		CutListAt_a(&block->tempos,&lastplace);
		CutListAt_a(&block->temponodes,&lastplace);
		PlaceSetLastPos(block,&block->lasttemponode->l.p);
		ListAddElement3(&block->temponodes,&block->lasttemponode->l);

		while(track!=NULL){
			CutListAt_a(&track->notes,&lastplace);
			note=track->notes;
			while(note!=NULL){
				CutListAt(&note->velocities,&lastplace);
				CutListAt(&note->pitches,&lastplace);
				if(PlaceEqual(&note->end,&lastplace1) && note->noend==1){
					PlaceCopy(&note->end,&lastplace);
				}
				note=NextNote(note);
			}
			LegalizeNotes(block,track);

			CutListAt_a(&track->stops,&lastplace);

			fxs=track->fxs;
			while(fxs!=NULL){
				CutListAt_a(&fxs->fxnodelines,&lastplace);
				fxs=NextFX(fxs);
			}
			LegalizeFXlines(block,track);
			track=NextTrack(track);
		}
		while(window!=NULL){
			wblock=ListFindElement1(&window->wblocks->l,block->l.num);
			CutListAt_a(&wblock->localzooms,&lastplace);
			window=NextWindow(window);
		}
	}else{

		PlaceSetLastPos(block,&block->lasttemponode->l.p);

		while(track!=NULL){
			note=track->notes;
			while(note!=NULL){
				if(PlaceEqual(&note->end,&lastplace1) && note->noend==1){
					PlaceSetLastPos(block,&note->end);
				}
				note=NextNote(note);
			}
			LegalizeNotes(block,track);
			track=NextTrack(track);
		}
		while(window!=NULL){
			wblock=ListFindElement1(&window->wblocks->l,block->l.num);
			for(lokke=org_num_lines;lokke<num_lines;lokke++){
				localzoom=talloc(sizeof(struct LocalZooms));
				localzoom->Tline=lokke;
				localzoom->Tdividor=1;
				localzoom->zoomline=lokke;
				ListAddElement3(&wblock->localzooms,&localzoom->l);
			}
			window=NextWindow(window);
		}

	}


	window=root->song->tracker_windows;

	while(window!=NULL){
		wblock=ListFindElement1(&window->wblocks->l,block->l.num);
                UpdateWBlockWidths(window,wblock);
		UpdateRealLines(window,wblock);
		window=NextWindow(window);
	}

	UpdateSTimes(block);
        UpdateBeats(block);
}
コード例 #15
0
ファイル: Ptask2Mtask.c プロジェクト: dieface/radium-1
                            STime time = to_time - from_time;
                            
                            STime time_necessary_to_scroll = pc->pfreq / scrolls_per_second;
                            
                            if(time>=time_necessary_to_scroll)
                              do_scrolling = true;
                          }

                          if(do_scrolling==true) {
                            ScrollEditorToRealLine(window,wblock,till_curr_realline);
                            last_time = ATOMIC_GET(pc->therealtime);
                            last_wblock = wblock;
                          }
                        }
#endif

                    });
        }
		window=NextWindow(window);
}

	ATOMIC_SET(root->setfirstpos, false);

}

void (*Ptask2MtaskCallBack)(void)= &P2MUpdateSongPosCallBack;


#endif