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

📄 xdisplay.c

📁 经典生物信息学多序列比对工具clustalw
💻 C
📖 第 1 页 / 共 4 页
字号:
			if (data.selected[i]==TRUE)				draw_nameline(prf_panel[0].names,i,i,NORMAL);		SetPanelExtra(prf_panel[0].names,&data);	}	GetPanelExtra(panel,&data);	Select(panel);	ObjectRect(panel,&r);	if (!shftKey)	{/* revert existing selected area to normal */		for(i=0;i<data.nseqs;i++)			if (data.selected[i]==TRUE)				draw_nameline(panel,i,i,NORMAL);	}	selected_seqs.first = (pt.y - r.top-data.lineheight/2)/data.lineheight + data.firstvline-data.nhead;	if (selected_seqs.first <0) selected_seqs.first=0;	if (selected_seqs.first >=data.nseqs) selected_seqs.first=data.nseqs-1;	if (selected_seqs.first==-1 && ncutseqs > 0)	{		selected_seqs.last=selected_seqs.first=0;		draw_seq_pointer(panel,0,HIGHLIGHT);	}	else	{		selected_seqs.last=selected_seqs.first;		draw_nameline(panel,selected_seqs.first,selected_seqs.last,HIGHLIGHT);	}	black_on_white();}static void NameDrag(PaneL panel, PoinT pt){	panel_data data;	RecT r;	int s;	GetPanelExtra(panel,&data);	Select(panel);	ObjectRect(panel,&r);	s = (pt.y - r.top-data.lineheight/2)/data.lineheight + data.firstvline-data.nhead;	if (s<0) s=0;	if (s>=data.nseqs) s=data.nseqs-1;	if (s==selected_seqs.first)	{		if (s!=selected_seqs.last)		{			draw_nameline(panel,selected_seqs.first,selected_seqs.last,NORMAL);			draw_nameline(panel,selected_seqs.first,s,HIGHLIGHT);		}	}	else if (s>selected_seqs.first)	{		if (s>selected_seqs.last)			draw_nameline(panel,selected_seqs.last+1,s,HIGHLIGHT);		else if (s<selected_seqs.last)			draw_nameline(panel,s+1,selected_seqs.last,NORMAL);	}	else	{		if (s<selected_seqs.last)			draw_nameline(panel,s,selected_seqs.last-1,HIGHLIGHT);		else if (s>selected_seqs.last)			draw_nameline(panel,selected_seqs.last,s-1,NORMAL);	}	selected_seqs.last=s;	black_on_white();}static void NameRelease(PaneL panel, PoinT pt){	int t;	panel_data data;	if (selected_seqs.first > selected_seqs.last)	{		t=selected_seqs.first;		selected_seqs.first=selected_seqs.last;		selected_seqs.last=t;	}		active_panel.names = panel;	GetPanelExtra(panel,&data);	active_panel.seqs = data.index;}void draw_seq_pointer(PaneL panel,int seq,int format){	RecT r,block;	panel_data data;	Select(panel);	GetPanelExtra(panel,&data);	ObjectRect(panel,&r);	InsetRect(&r,1,1);	block.top=r.top+((seq+data.nhead)*data.lineheight)+data.descent+1;	block.bottom=block.top+data.lineheight;	block.left=r.left;	block.right=r.right;	if (format==HIGHLIGHT)		Black();	else		White();	PaintRect(&block);}static void SeqClick(PaneL panel, PoinT pt){	int s;	int f,l;	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].seqs,&data);		f=data.firstsel;		l=data.lastsel;		data.firstsel=-1;		data.lastsel=-1;		SetPanelExtra(prf_panel[1].seqs,&data);		if (f != -1) highlight_seqrange(prf_panel[1].seqs,f,l,NORMAL);	}	else if(data.prf_no==2)	{/* revert selected area in profile 1 to normal */		GetPanelExtra(prf_panel[0].seqs,&data);		f=data.firstsel;		l=data.lastsel;		data.firstsel=-1;		data.lastsel=-1;		SetPanelExtra(prf_panel[0].seqs,&data);		if (f != -1) highlight_seqrange(prf_panel[0].seqs,f,l,NORMAL);	}	GetPanelExtra(panel,&data);	Select(panel);	ObjectRect(panel,&r);	s = (pt.x - r.left-data.charwidth)/data.charwidth + data.firstvcol;	if (s <0) s=0;	if (s<data.firstvcol) s=data.firstvcol;	if (s >=data.ncols) s=data.ncols-1;	if (s >=data.firstvcol+data.vcols) s=data.firstvcol+data.vcols-1;	if (shftKey && data.firstsel != -1)	{		if (s>data.lastsel)		{			highlight_seqrange(panel,data.firstsel,s,HIGHLIGHT);			data.lastsel=s;		}		else if (s<data.firstsel)		{			highlight_seqrange(panel,s,data.lastsel,HIGHLIGHT);			data.firstsel=s;		}		else		{			highlight_seqrange(panel,s+1,data.lastsel,NORMAL);			highlight_seqrange(panel,data.firstsel,s,HIGHLIGHT);			data.lastsel=s;		}		selected_res.first=data.firstsel;		selected_res.last=data.lastsel;	}	else	{/* revert existing selected area to normal */		f=data.firstsel;		l=data.lastsel;		data.firstsel=-1;		data.lastsel=-1;		SetPanelExtra(panel,&data);		if (f != -1) highlight_seqrange(panel,f,l,NORMAL);		selected_res.first=selected_res.last=s;		highlight_seqrange(panel,selected_res.first,selected_res.last,HIGHLIGHT);		data.firstsel=selected_res.first;		data.lastsel=selected_res.last;	}	SetPanelExtra(panel,&data);	black_on_white();}static void SeqDrag(PaneL panel, PoinT pt){	panel_data data;	RecT r;	int s;	GetPanelExtra(panel,&data);	Select(panel);	ObjectRect(panel,&r);	s = (pt.x - r.left-data.charwidth)/data.charwidth + data.firstvcol;	if (s<0) s=0;	if (s<data.firstvcol) s=data.firstvcol;	if (s>=data.ncols) s=data.ncols-1;	if (s >=data.firstvcol+data.vcols) s=data.firstvcol+data.vcols-1;	if (s==selected_res.first)	{		if (s!=selected_res.last)		{			highlight_seqrange(panel,selected_res.first,selected_res.last,NORMAL);			highlight_seqrange(panel,selected_res.first,s,HIGHLIGHT);		}	}	else if (s>selected_res.first)	{		if (s>selected_res.last)			highlight_seqrange(panel,selected_res.last+1,s,HIGHLIGHT);		else if (s<selected_res.last)			highlight_seqrange(panel,s+1,selected_res.last,NORMAL);	}	else	{		if (s<selected_res.last)			highlight_seqrange(panel,s,selected_res.last-1,HIGHLIGHT);		else if (s>selected_res.last)			highlight_seqrange(panel,selected_res.last,s-1,NORMAL);	}	selected_res.last=s;	black_on_white();}static void SeqRelease(PaneL panel, PoinT pt){	int t;	panel_data data;        if (selected_res.first > selected_res.last)        {                t=selected_res.first;                selected_res.first=selected_res.last;                selected_res.last=t;        }	active_panel.seqs = panel;	GetPanelExtra(panel,&data);	active_panel.names = data.index;	data.firstsel=selected_res.first;	data.lastsel=selected_res.last;	SetPanelExtra(panel,&data);}void draw_header(PaneL p){ 	RecT  block,r;	PoinT pt;	int i, j, x, y;	panel_data data;	char *line;	UseWindow(mainw);	Select(p);	SelectFont(datafont);	GetPanelExtra(p, &data);	if(data.nseqs == 0) return;	if(data.header == NULL) return;	if(data.vlines<data.nhead) return;	if(data.vcols<=0) return;	line=(char *)ckalloc((data.vcols+1) * sizeof(char));	ObjectRect (p, &r);	InsetRect(&r,1,1);	block.top=r.top+data.descent/2;	block.bottom=block.top+(data.nhead*data.lineheight);	block.left=r.left;	block.right=r.right;	text_colors();	EraseRect(&block);	if (data.type==NAMES)        	x=r.left+DNUMBER*data.charwidth;	else        	x=r.left+data.charwidth;        y=r.top+data.lineheight-data.descent/2;	for(i=0;i<data.nhead;i++)	{		for(j=data.firstvcol;j<data.firstvcol+data.vcols && j<data.ncols;j++)			if(j>=0)				line[j-data.firstvcol]=data.header[i][j];			else				line[j-data.firstvcol]=' ';		line[j-data.firstvcol]='\0';		LoadPt(&pt, x, y);		SetPen(pt);		PaintString(line);		y+=data.lineheight;	}	black_on_white();	ckfree(line);} void draw_footer(PaneL p){ 	RecT  block,r;	PoinT pt;	int i, j,x, y;	panel_data data;	char *line;	UseWindow(mainw);	Select(p);	SelectFont(datafont);	GetPanelExtra(p, &data);	if(data.nseqs == 0) return;	if(data.footer == NULL) return;	if(data.vlines<data.nfoot) return;	if(data.vcols<=0) return;	line=(char *)ckalloc((data.vcols+1) * sizeof(char));	ObjectRect (p, &r);	InsetRect(&r,1,1);	block.top=r.top+((data.vlines-data.nfoot)*data.lineheight)+data.descent+data.ascent/2;	block.bottom=block.top+data.nfoot*data.lineheight;	block.left=r.left;	block.right=r.right;	text_colors();	EraseRect(&block);	if(data.type==NAMES)        	x=block.left+DNUMBER*data.charwidth;	else        	x=block.left+data.charwidth;        y=block.top+data.lineheight-1;	for(i=0;i<data.nfoot;i++)	{		for(j=data.firstvcol;j<data.firstvcol+data.vcols && j<data.ncols;j++)			if(j>=0)				line[j-data.firstvcol]=data.footer[i][j];			else				line[j-data.firstvcol]=' ';		line[j-data.firstvcol]='\0';		LoadPt(&pt, x, y);		SetPen(pt);		PaintString(line);		y+=data.lineheight;	}	black_on_white();	ckfree(line);} void draw_nameline(PaneL p,int fseq,int lseq,int format){ 	RecT  block,r;	PoinT pt;	int n,i, j, t, f,l,x, y,ix;	panel_data data;	char *line;	Select(p);	SelectFont(datafont);	GetPanelExtra(p, &data);	if(data.nseqs == 0) return;		n=1;	i=data.nseqs;	for(;;)	{		i/=10;		if(i==0) break;		n++;	}	line=(char *)ckalloc((data.vcols+1) * sizeof(char));	if (fseq > lseq)	{		t=fseq;		fseq=lseq;		lseq=t;	}		if (format==HIGHLIGHT)		for(i=fseq;i<=lseq;i++) data.selected[i]=TRUE;	else		for(i=fseq;i<=lseq;i++) data.selected[i]=FALSE;	SetPanelExtra(p,&data);	if (fseq<data.firstvline)		fseq=data.firstvline;	if (fseq>=data.firstvline+data.vseqs)		fseq=data.firstvline+data.vseqs;	if (lseq<data.firstvline)		lseq=data.firstvline;	if (lseq>=data.firstvline+data.vseqs)		lseq=data.firstvline+data.vseqs-1;	f=fseq-data.firstvline;	l=lseq-data.firstvline;	ObjectRect (p, &r);	InsetRect(&r,1,1);	block.top=r.top+((f+data.nhead)*data.lineheight)+data.descent+1;	block.bottom=block.top+((l-f+1)*data.lineheight);	block.left=r.left;	block.right=r.right;	if (format==HIGHLIGHT)		white_on_black();	else		data_colors();	EraseRect(&block);        y=block.top+data.lineheight-data.descent-1;	for(i=fseq;i<=lseq;i++)	{        	x=r.left+data.charwidth;		sprintf(line,"%*d",n,i+1);		LoadPt(&pt, x, y);		SetPen(pt);		Gray();		PaintString(line);		y+=data.lineheight;	}        y=block.top+data.lineheight-data.descent-1;	for(i=fseq;i<=lseq;i++)	{		ix=output_index[i+1]-1;        	x=r.left+DNUMBER*data.charwidth;		for(j=0;j<data.vcols && j<data.ncols-data.firstvcol;j++)			line[j]=data.lines[ix][j+data.firstvcol];		line[j]='\0';		LoadPt(&pt, x, y);		SetPen(pt);		if(format==HIGHLIGHT) White();		else Black();		PaintString(line);		y+=data.lineheight;	}	black_on_white();	ckfree(line);} void draw_seqline(panel_data data,int seq,PoinT pt,int fcol,int lcol,int format){ 	RecT r;	int i, j, ix;	char *line[MAXCOLORS+1];	if(data.nseqs == 0) return;/* draw colored character on white background */	for(i=0;i<ncolors;i++)	{		line[i]=(char *)ckalloc((data.vcols+1) * sizeof(char));		for(j=0;j<data.vcols;j++)		line[i][j]=' ';		line[i][j]='\0';	}		ix=output_index[seq+1]-1;		r.top=pt.y-data.lineheight+data.descent+1;	r.bottom=r.top+data.lineheight;	for(j=fcol;j<=lcol && j<data.ncols;j++)	{		if(j>=0)		{		if(segment_exceptions && data.segment_exception[ix][j] > 0)		{			r.left=pt.x;			r.right=r.left+data.charwidth;			DkGray();			PaintRect(&r);			White();		}		else if(residue_exceptions && data.residue_exception[ix][j] == TRUE)		{			r.left=pt.x;			r.right=r.left+data.charwidth;		/*	LtGray(); */			SelectColor(150,150,150);			PaintRect(&r);			White();		}		else		{                        if(inverted)                        {				if(format==HIGHLIGHT || (j>=data.firstsel && j<=data.lastsel))					Black();				else				{                                	r.left=pt.x;#ifdef UNIX                	                r.right=r.left+data.charwidth-1;#else                	                r.right=r.left+data.charwidth;#endif                                 	SetColor(color_lut[(int)data.colormask[ix][j]].val);                       	         	PaintRect(&r);                       	         	Black();				}                        }                        else                                SetColor(color_lut[(int)data.colormask[ix][j]].val);		}		SetPen(pt);		PaintChar(data.lines[ix][j]);		}		pt.x+=data.charwidth;	}	for(i=0;i<ncolors;i++)		ckfree(line[i]);	Black();} void draw_seqcol(PaneL p,int col,int format){ 	RecT  block,r, r2;	PoinT pt;	int totseqs,i, c,x,y,ix;	panel_data data;	Select(p);	SelectFont(datafont);	GetPanelExtra(p, &data);	if(data.nseqs == 0) return;	if(data.ncols == 0) return;	SetPanelExtra(p, &data);		if (col<data.firstvcol)		col=data.firstvcol;	if (col>=data.firstvcol+data.vcols)		col=data.firstvcol+data.vcols-1;	c=col-data.firstvcol;	totseqs=data.vseqs;	if (totseqs>data.nseqs) totseqs=data.nseqs;	ObjectRect (p, &r);	InsetRect(&r,1,1);	block.top=r.top+(data.nhead*data.lineheight)+data.descent+1;	block.bottom=block.top+(totseqs)*data.lineheight;	block.left=r.left+(c+1)*data.charwidth;	block.right=block.left+data.charwidth;        if (format==HIGHLIGHT)                text_colors();        else                data_colors();	EraseRect(&block);	x=r.left+(c+1)*data.charwidth;       	y=block.top+data.lineheight-data.descent-1;	r2.left=x;	r2.right=r2.left+data.charwidth;

⌨️ 快捷键说明

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