⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xdisplay.c

📁 经典生物信息学多序列比对工具clustalw
💻 C
📖 第 1 页 / 共 4 页
字号:
		SetPanelExtra(seq_panel.names,&data);	}	}void correct_seq_bars(Boolean reset){	int maxcols,m1,m2;	panel_data data,data1;	if(aln_mode==PROFILEM)	{		GetPanelExtra(prf_panel[0].seqs,&data);		GetPanelExtra(prf_panel[1].seqs,&data1);		if(fixed_prf_scroll==TRUE)		{			Hide(data.hscrollbar);			m1=MAX(data.firstvcol,data1.firstvcol);			m2=MAX(data.ncols-data.firstvcol,data1.ncols-data1.firstvcol);			maxcols=m1+m2;			if(reset==TRUE)			{				data.firstvcol=0;				data1.firstvcol=0;			}			data.lockoffset= -MAX(data1.firstvcol-data.firstvcol,0);			data1.lockoffset= -MAX(data.firstvcol-data1.firstvcol,0);			correct_scrollbar(data1.hscrollbar,data1.vcols,maxcols,m1,TRUE);		}		else		{			Show(data.hscrollbar);			if(reset==TRUE)			{				data.firstvcol=0;				data1.firstvcol=0;			}			data.lockoffset=0;			data1.lockoffset=0;			correct_scrollbar(data.hscrollbar,data.vcols,data.ncols,data.firstvcol,reset);			correct_scrollbar(data1.hscrollbar,data1.vcols,data1.ncols,data.firstvcol,reset);		}		if(reset==TRUE)		{			data.firstvline=0;			data1.firstvline=0;		}		correct_scrollbar(data.vscrollbar,data.vseqs,data.nseqs,data.firstvline,reset);		correct_scrollbar(data1.vscrollbar,data1.vseqs,data1.nseqs,data.firstvline,reset);		SetPanelExtra(prf_panel[0].seqs,&data);		SetPanelExtra(prf_panel[1].seqs,&data1);	}	else	{		GetPanelExtra(seq_panel.seqs,&data);		if(reset==TRUE)		{			data.firstvcol=0;			data.firstvline=0;		}		correct_scrollbar(data.vscrollbar,data.vseqs,data.nseqs,data.firstvline,reset);		correct_scrollbar(data.hscrollbar,data.vcols,data.ncols,data.firstvcol,reset);		SetPanelExtra(seq_panel.seqs,&data);	}	}static void correct_scrollbar(BaR b,int visible,int total,int value,Boolean reset){	int max;	if (b!=NULL)	{		if (visible > 0 && total > visible)			max=total-visible;		else			max=0;       		if(reset==TRUE) CorrectBarValue(b,0);       		CorrectBarPage(b,visible,visible);       		CorrectBarValue(b,value);       		CorrectBarMax(b,max);	}}void color_seqs(void){	panel_data data;	GetPanelExtra(seq_panel.seqs,&data);	if (data.nseqs == 0) return;	info("Coloring sequences...");	make_colormask(data);	DrawPanel(seq_panel.seqs);	info("Done.");}void color_prf1(void){	panel_data data;	GetPanelExtra(prf_panel[0].seqs,&data);	if (data.nseqs == 0) return;	make_colormask(data);	info("Coloring profile 1...");	DrawPanel(prf_panel[0].seqs);	info("Done.");}void color_prf2(void){	panel_data data;	GetPanelExtra(prf_panel[1].seqs,&data);	if (data.nseqs == 0) return;	make_colormask(data);	info("Coloring profile 2...");	DrawPanel(prf_panel[1].seqs);	info("Done.");}void remove_gap_pos(int fseq, int lseq,int prf_no){	int i,j,k,ngaps;	if (fseq>=lseq) return;	for (i=1;i<=seqlen_array[fseq];)	{		ngaps=0;		for (j=fseq;j<=lseq;j++)			if(seq_array[j][i]==gap_pos1 || seq_array[j][i]==gap_pos2) ngaps++;		if (ngaps==lseq-fseq+1)		{			for (j=fseq;j<=lseq;j++)			{				for(k=i+1;k<=seqlen_array[j]+1;k++)					seq_array[j][k-1]=seq_array[j][k];				seqlen_array[j]--;			}			if(prf_no==1 && sec_struct_mask1 != NULL)				for(k=i;k<=seqlen_array[fseq];k++)					sec_struct_mask1[k-1]=sec_struct_mask1[k];			if(prf_no==1 && gap_penalty_mask1 != NULL)				for(k=i;k<=seqlen_array[fseq];k++)					gap_penalty_mask1[k-1]=gap_penalty_mask1[k];			if(prf_no==2 && sec_struct_mask2 != NULL)				for(k=i;k<=seqlen_array[fseq];k++)					sec_struct_mask2[k-1]=sec_struct_mask2[k];			if(prf_no==2 && gap_penalty_mask2 != NULL)				for(k=i;k<=seqlen_array[fseq];k++)					gap_penalty_mask2[k-1]=gap_penalty_mask2[k];			if(seqlen_array[fseq]<=0) break;		}		else i++;	}}/* width and height passed here are in pixels */static PaneL make_panel(int type,GrouP g,int width,int height,int firstseq,int nseqs){	int i,l,length=0;	PaneL p;	panel_data data;	data.type=type;	SelectFont(datafont);	data.lineheight=LineHeight();	data.charwidth=CharWidth('A');	if(type==NAMES)	{/* find the maximum length of sequence name */        	for (i=firstseq;i<=firstseq+nseqs-1;i++)		{           		l = strlen(names[i]);           		if (length < l) length = l;		}		data.vcols=width/data.charwidth - MARGIN*2 - DNUMBER;	}	else	{        	for (i=firstseq;i<=firstseq+nseqs-1;i++)           		if (length < seqlen_array[i]) length = seqlen_array[i];		data.vcols=width/data.charwidth - MARGIN*2;	} 	data.lines=NULL;	data.nhead=0;	data.nfoot=0;	data.header=NULL;	data.footer=NULL;	data.consensus=NULL;	data.colormask=NULL;	data.vlines=(height-SCOREHEIGHT)/data.lineheight - MARGIN;	data.vseqs=data.vlines-data.nhead-data.nfoot;	data.nseqs=nseqs;	data.ncols=length;	data.firstseq=firstseq-1;	data.firstvline=0;	data.firstvcol=0;	data.lockoffset=0;	data.ascent=Ascent();	data.descent=Descent();	data.selected=NULL;	data.firstsel=-1;	data.lastsel=-1;	data.colscore=NULL;	data.seqweight=NULL;	data.subgroup=NULL;	data.residue_exception=NULL;	data.segment_exception=NULL;	data.vscrollbar=NULL;	data.hscrollbar=NULL;	p=AutonomousPanel(g, width, height, DrawPanel, NULL,NULL,sizeof(panel_data), NULL, NULL);	SetPanelExtra(p, &data);	return p;} void DrawPanel(PaneL p){	RecT r;        panel_data data;	int pixelwidth,pixelheight;	UseWindow(mainw);	Select(p);	if (fromvscroll==0 && fromhscroll==0)	{		ObjectRect(p,&r);        	pixelwidth=r.right-r.left;        	pixelheight=r.bottom-r.top;		SelectFont(datafont);		GetPanelExtra(p, &data);		data.lineheight=LineHeight();		data.charwidth=CharWidth('A');		if (data.type==NAMES)			data.vcols=pixelwidth/data.charwidth-MARGIN*2-DNUMBER;		else			data.vcols=pixelwidth/data.charwidth-MARGIN*2;		data.vlines=(pixelheight-SCOREHEIGHT)/data.lineheight - MARGIN;		data.vseqs=data.vlines-data.nhead-data.nfoot;		if(data.vseqs<0)data.vseqs=0;		if(data.vcols<0)data.vcols=0;		SetPanelExtra(p, &data);/* draw the outside frame */		ObjectRect (p, &r);		Black();		FrameRect(&r);		InsetRect(&r,1,1);		black_on_white();		EraseRect(&r);		if(data.nseqs == 0) return;	}/* draw the structure and gap penalty data *//* draw the footer */	if (fromvscroll==0)	{		draw_header(p);		draw_footer(p);		draw_colscores(p);	}/* draw the data lines */	if (data.type==NAMES)		draw_names(p);	else		draw_seqs(p);}void hscrollnames(BaR bar, int newval, int oldval){	PaneL		p;        panel_data        data; 	p = active_panel.names;        GetPanelExtra(p, &data);        data.firstvcol = newval;        SetPanelExtra(p, &data);        Select(p); 	if (data.vseqs<=0) return;	draw_names(p);}void vscrollnames(BaR bar, int newval, int oldval){	PaneL		p;        panel_data        data; 	p = active_panel.names;        GetPanelExtra(p, &data);        data.firstvline = newval;        SetPanelExtra(p, &data);        Select(p); 	if (data.vseqs<=0) return;	draw_names(p);}void vscrollseqs(BaR bar, int newval, int oldval){	PaneL		p;        panel_data        data;        RecT            block,rect;	int 		l; 	p = active_panel.seqs;        GetPanelExtra(p, &data);	l=data.firstvline;        data.firstvline = newval;        SetPanelExtra(p, &data);        Select(p); 	if (data.vseqs<=0) return;	if (data.vseqs<3 || data.nseqs-l < data.vseqs)	{		fromvscroll=0;		draw_seqs(p);		return;	}        if (newval == oldval + 1) {		fromvscroll=1;                ObjectRect(p, &rect);		InsetRect(&rect,1,1);                block.top = rect.top+(data.nhead)*data.lineheight+data.descent+1;                block.bottom = block.top+(data.vseqs)*data.lineheight;		block.left=rect.left;		block.right=rect.right;                ScrollRect(&block, 0, -data.lineheight);        } else if (newval == oldval - 1) {		fromvscroll=-1;                ObjectRect(p, &rect);		InsetRect(&rect,1,1);                block.top = rect.top+(data.nhead)*data.lineheight+data.descent+1;                block.bottom = block.top+(data.vseqs)*data.lineheight;		block.left=rect.left;		block.right=rect.right;                ScrollRect(&block, 0, data.lineheight);        } else {		fromvscroll=0;        }	draw_seqs(p);}void hscrollseqs(BaR bar, int newval, int oldval){	PaneL p;        panel_data        data;        RecT            rect;  	p = active_panel.seqs;        GetPanelExtra(p, &data);        data.firstvcol = newval+data.lockoffset;        SetPanelExtra(p, &data);        Select(p); 	if (data.vcols<=0) return;	if (data.vcols<3)	{		fromhscroll=0;		draw_header(p);		draw_seqs(p);		draw_footer(p);		draw_colscores(p);		return;	}        if (newval == oldval + 1) {		fromhscroll=1;                ObjectRect(p, &rect);                InsetRect(&rect,1,1);                rect.left+=data.charwidth;                ScrollRect(&rect, -data.charwidth, 0);        } else if (newval == oldval - 1) {		fromhscroll=-1;                ObjectRect(p, &rect);                InsetRect(&rect,1,1);                rect.right=rect.left+(data.vcols+1)*data.charwidth;                ScrollRect(&rect, data.charwidth, 0);        } else {		fromhscroll=0;        }	draw_header(p);	draw_seqs(p);	draw_footer(p);	draw_colscores(p);}void draw_names(PaneL p){	int i,f,l;	panel_data data;	UseWindow(mainw);	Select(p);	GetPanelExtra(p,&data);	if(data.lines==NULL) return;	SelectFont(datafont);		if (fromvscroll==0)	{		f=data.firstvline;		l=data.firstvline+data.vseqs-1;	}	else if (fromvscroll==-1)		f=l=data.firstvline;	else		f=l=data.firstvline+data.vseqs-1;		if(l>=data.nseqs) l=data.nseqs-1;	for(i=f;i<=l;i++)		if (data.selected[i]==TRUE)			draw_nameline(p,i,i,HIGHLIGHT);		else			draw_nameline(p,i,i,NORMAL);}void draw_seqs(PaneL p){	int i,f,l,s,x,y,format;	int fs,ls;	panel_data data;	PoinT pt;	RecT r,block;	UseWindow(mainw);	Select(p);	GetPanelExtra(p,&data);	if(data.lines==NULL) return;	SelectFont(datafont);	black_on_white();	if (fromhscroll==-1)	{		f=data.firstvcol;		if ((f>=data.firstsel) && (f<=data.lastsel))			format=HIGHLIGHT;		else format=NORMAL; 		draw_seqcol(p,f,format);	}	else if (fromhscroll==1)	{		f=data.firstvcol+data.vcols-1;		if ((f>=data.firstsel) && (f<=data.lastsel))			format=HIGHLIGHT;		else format=NORMAL; 		draw_seqcol(p,f,format);	}	else	{ 		if (fromvscroll==-1)		{			f=l=data.firstvline;		}		else if (fromvscroll==1)		{			f=l=data.firstvline+data.vseqs-1;		}		else		{			f=data.firstvline;			l=data.firstvline+data.vseqs-1;		}			if(l>=data.nseqs) l=data.nseqs-1;        	s=f-data.firstvline;        	ObjectRect (p, &r);        	InsetRect(&r,1,1);		data_colors();        	block.top=r.top+((s+data.nhead)*data.lineheight)+data.descent+1;        	block.bottom=block.top+(l-f+1)*data.lineheight;        	block.left=r.left;        	block.right=r.right;        	EraseRect(&block);        	if(data.nseqs == 0) return;		if(data.firstsel != -1)		{			if ((data.firstsel>=data.firstvcol && data.firstsel<data.firstvcol+data.vcols)||	   		(data.lastsel>=data.firstvcol && data.lastsel<data.firstvcol+data.vcols))			{				fs=data.firstsel-data.firstvcol;				if (fs<0) fs=0;				if (fs>=data.vcols) fs=data.vcols-1;				ls=data.lastsel-data.firstvcol;				if (ls<0) ls=0;				if (ls>=data.vcols) ls=data.vcols-1;        			block.left=r.left+(fs+1)*data.charwidth;        			block.right=r.left+(ls+2)*data.charwidth;				text_colors();        			EraseRect(&block);			}		}        	x=r.left+data.charwidth;	         	for(i=f;i<=l;i++)        	{               		y=block.top+(i-f+1)*data.lineheight-data.descent-1;			LoadPt(&pt,x,y);               		draw_seqline(data,i,pt,data.firstvcol,data.firstvcol+data.vcols-1,NORMAL);        	}	}	black_on_white();	fromvscroll=fromhscroll=0;}static void NameClick(PaneL panel, PoinT pt){	int i;	panel_data data;	RecT r;	GetPanelExtra(panel,&data);	if(data.prf_no==1)	{/* revert selected area in profile 2 to normal */		GetPanelExtra(prf_panel[1].names,&data);		if(data.nseqs==0)			draw_seq_pointer(prf_panel[1].names,0,NORMAL);		for(i=0;i<data.nseqs;i++)			if (data.selected[i]==TRUE)				draw_nameline(prf_panel[1].names,i,i,NORMAL);		SetPanelExtra(prf_panel[1].names,&data);	}	else if(data.prf_no==2)	{/* revert selected area in profile 1 to normal */		GetPanelExtra(prf_panel[0].names,&data);		if(data.nseqs==0)			draw_seq_pointer(prf_panel[0].names,0,NORMAL);		for(i=0;i<data.nseqs;i++)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -