📄 xdisplay.c
字号:
for(i=data.firstvline;i<data.firstvline+data.vseqs && i<data.nseqs;i++) { ix=output_index[i+1]-1; if(segment_exceptions && data.segment_exception[ix][col] > 0) { r2.top=y-data.lineheight+data.descent+1; r2.bottom=r.top+data.lineheight; DkGray(); PaintRect(&r2); White(); } else if(residue_exceptions && data.residue_exception[ix][col] == TRUE) { r2.top=y-data.lineheight+data.descent+1; r2.bottom=r.top+data.lineheight; /* LtGray(); */ SelectColor(150,150,150); PaintRect(&r2); White(); } else { if(inverted) { r2.top=y-data.lineheight+data.descent+1; r2.bottom=r2.top+data.lineheight; if(format==HIGHLIGHT) { LtGray(); } else SetColor(color_lut[(int)data.colormask[ix][col]].val); PaintRect(&r2); Black(); } else SetColor(color_lut[(int)data.colormask[ix][col]].val); } LoadPt(&pt,x,y); SetPen(pt); PaintChar(data.lines[ix][col]); y+=data.lineheight; } Black();} void highlight_seqrange(PaneL p,int fcol,int lcol, int format){ RecT block,r; int i,t,x,y; int fseq,lseq,s; panel_data data; PoinT pt; Select(p); SelectFont(datafont); GetPanelExtra(p, &data); if(data.nseqs == 0) return; if(data.ncols == 0) return; if (fcol > lcol) { t=fcol; fcol=lcol; lcol=t; } if ((fcol>=data.firstvcol && fcol<data.firstvcol+data.vcols)|| (lcol>=data.firstvcol && lcol<data.firstvcol+data.vcols)) { if (fcol<data.firstvcol) fcol=data.firstvcol; if (fcol>=data.firstvcol+data.vcols) fcol=data.firstvcol+data.vcols-1; if (lcol<data.firstvcol) lcol=data.firstvcol; if (lcol>=data.firstvcol+data.vcols) lcol=data.firstvcol+data.vcols-1; } fseq=data.firstvline; lseq=data.firstvline+data.vseqs-1; if(lseq>=data.nseqs) lseq=data.nseqs-1; s=fseq-data.firstvline; ObjectRect (p, &r); InsetRect(&r,1,1); if(format==HIGHLIGHT) text_colors(); else data_colors(); block.top=r.top+((s+data.nhead)*data.lineheight)+data.descent+1; block.bottom=block.top+(lseq-fseq+1)*data.lineheight; block.left=r.left+(fcol-data.firstvcol+1)*data.charwidth; block.right=r.left+(lcol-data.firstvcol+2)*data.charwidth; EraseRect(&block); x=r.left+(fcol-data.firstvcol+1)*data.charwidth; for(i=fseq;i<=lseq;i++) { y=block.top+(i-fseq+1)*data.lineheight-data.descent-1; LoadPt(&pt,x,y); draw_seqline(data,i,pt,fcol,lcol,format); } black_on_white();} GrouP make_scroll_area(GrouP w,int prf_no,int nwidth,int swidth,int height,int firstseq,int nseqs,spanel *p){ panel_data ndata,sdata; GrouP display; RecT rect; PoinT pt; PaneL names,seqs; BaR vscrollbar,hnscrollbar,hsscrollbar; BarScrlProc hscrollnameproc, hscrollseqproc, vscrollproc; if(prf_no==0) { hscrollnameproc=HscrollMultiN; hscrollseqproc=HscrollMultiS; vscrollproc=VscrollMulti; } else if (prf_no==1) { hscrollnameproc=HscrollPrf1N; hscrollseqproc=HscrollPrf1S; vscrollproc=VscrollPrf1; } else { hscrollnameproc=HscrollPrf2N; hscrollseqproc=HscrollPrf2S; vscrollproc=VscrollPrf2; } display=HiddenGroup(w, 0, 0, NULL); SetGroupSpacing(display, 0, 0); Hide(display); vscrollbar=ScrollBar(display, -1, 1, vscrollproc); ObjectRect(vscrollbar, &rect);/* vscrollbar for names */ pt.x=rect.right; /*how near they should be with name panel Ramu */ pt.y=rect.top; SetNextPosition(display, pt); names=make_panel(NAMES,display, nwidth+(5*max_names), height, firstseq,nseqs); /* 5*max_names Ramu */ ObjectRect(names, &rect); pt.x=rect.right; pt.y=rect.top; SetNextPosition(display, pt); seqs=make_panel(SEQS,display, swidth, height, firstseq,nseqs);/* horizontal scroll bars */ ObjectRect(names, &rect); pt.x=rect.left; pt.y=rect.bottom; SetNextPosition(display, pt); hnscrollbar=ScrollBar(display, 1, -1, hscrollnameproc); ObjectRect(seqs, &rect); pt.x=rect.left; pt.y=rect.bottom; SetNextPosition(display, pt); hsscrollbar=ScrollBar(display, 1, -1, hscrollseqproc); SetRange(hsscrollbar,1,1,0); SetRange(hnscrollbar,1,1,0); SetRange(vscrollbar,1,1,0); GetPanelExtra(names,&ndata); ndata.hscrollbar=hnscrollbar; ndata.index=seqs; ndata.prf_no=prf_no; GetPanelExtra(seqs,&sdata); sdata.vscrollbar=vscrollbar; sdata.hscrollbar=hsscrollbar; sdata.index=names; sdata.prf_no=prf_no; SetPanelClick(names,NameClick, NameDrag, NULL, NameRelease); SetPanelClick(seqs,SeqClick, SeqDrag, NULL, SeqRelease); p->names = names; p->seqs = seqs; ndata=alloc_name_data(ndata); sdata=alloc_seq_data(sdata); SetPanelExtra(names,&ndata); SetPanelExtra(seqs,&sdata); Show(display); return(display);}void white_on_black(void){ Black(); InvertColors(); White();}void black_on_white(void){ White(); InvertColors(); Black();}void text_colors(void){ SelectColor(220,220,220); InvertColors(); Black();}void data_colors(void){ White(); InvertColors(); Black();}void make_ruler(int length, char *name,char *seq){ int i,j; char marker[5]; int marker_len; strcpy(name,"ruler"); seq[0] = '1'; for (i=1;i<length;i++) { if ((i+1)%10 > 0) seq[i] = '.'; else { sprintf(marker,"%d",((i+1)/10)*10); marker_len = strlen(marker); for (j=0;j<marker_len && i+1+j-marker_len < length;j++) seq[i+1+j-marker_len] = marker[j]; } } seq[length]='\0';}panel_data free_panel_data(panel_data data){ int i; if (data.header!=NULL) { for (i=0;i<mheader;i++) { if(data.header[i] != NULL) ckfree(data.header[i]); data.header[i]=NULL; } ckfree(data.header); data.header=NULL; } if (data.footer!=NULL) { for (i=0;i<mfooter;i++) { if(data.footer[i] != NULL) ckfree(data.footer[i]); data.footer[i]=NULL; } ckfree(data.footer); data.footer=NULL; } if (data.consensus!=NULL) { ckfree(data.consensus); data.consensus=NULL; } if (data.lines!=NULL) { for (i=0;i<data.nseqs;i++) { if(data.lines[i] != NULL) ckfree(data.lines[i]); data.lines[i]=NULL; } ckfree(data.lines); data.lines=NULL; } if (data.colormask!=NULL) { for (i=0;i<data.nseqs;i++) { if(data.colormask[i] != NULL) ckfree(data.colormask[i]); data.colormask[i]=NULL; } ckfree(data.colormask); data.colormask=NULL; } if (data.selected!=NULL) ckfree(data.selected); data.selected=NULL; if (data.seqweight!=NULL) ckfree(data.seqweight); data.seqweight=NULL; if (data.subgroup!=NULL) ckfree(data.subgroup); data.subgroup=NULL; if (data.colscore!=NULL) ckfree(data.colscore); data.colscore=NULL; if (data.residue_exception!=NULL) { for (i=0;i<data.nseqs;i++) { if(data.residue_exception[i] != NULL) ckfree(data.residue_exception[i]); data.residue_exception[i]=NULL; } ckfree(data.residue_exception); data.residue_exception=NULL; } if (data.segment_exception!=NULL) { for (i=0;i<data.nseqs;i++) { if(data.segment_exception[i] != NULL) ckfree(data.segment_exception[i]); data.segment_exception[i]=NULL; } ckfree(data.segment_exception); data.segment_exception=NULL; } return(data);}void make_consensus(panel_data data,char *name,char *seq1){ char c; sint catident1[NUMRES],catident2[NUMRES],ident; sint i,j,k,l; strcpy(name,""); for(i=0; i<data.ncols; i++) { seq1[i]=' '; ident=0; for(j=0;res_cat1[j]!=NULL;j++) catident1[j] = 0; for(j=0;res_cat2[j]!=NULL;j++) catident2[j] = 0; for(j=0;j<data.nseqs;++j) { if(isalpha(data.lines[0][i])) { if(data.lines[0][i] == data.lines[j][i]) ++ident; for(k=0;res_cat1[k]!=NULL;k++) { for(l=0;(c=res_cat1[k][l]);l++) { if (c=='\0') break; if (data.lines[j][i]==c) { catident1[k]++; break; } } } for(k=0;res_cat2[k]!=NULL;k++) { for(l=0;(c=res_cat2[k][l]);l++) { if (c=='\0') break; if (data.lines[j][i]==c) { catident2[k]++; break; } } } } } if(ident==data.nseqs) seq1[i]='*'; else if (!dnaflag) { for(k=0;res_cat1[k]!=NULL;k++) { if (catident1[k]==data.nseqs) { seq1[i]=':'; break; } } if(seq1[i]==' ') for(k=0;res_cat2[k]!=NULL;k++) { if (catident2[k]==data.nseqs) { seq1[i]='.'; break; } } } }}int make_struct_data(int prf_no,int len, char *name,char *seq){ int i,n=0; char val; char *ss_mask; seq[0]='\0'; name[0]='\0';if (prf_no == 1){ if (struct_penalties1 == SECST && use_ss1 == TRUE) { n=1; strcpy(name,"Structures"); ss_mask = (char *)ckalloc((seqlen_array[1]+10) * sizeof(char)); for (i=0;i<seqlen_array[1];i++) ss_mask[i] = sec_struct_mask1[i]; print_sec_struct_mask(seqlen_array[1],sec_struct_mask1,ss_mask); for(i=0; i<len; i++) { val=ss_mask[i]; if (val == gap_pos1) seq[i]='-'; else seq[i]=val; } seq[i]=EOS; ckfree(ss_mask); } }else if (prf_no == 2){ if (struct_penalties2 == SECST && use_ss2 == TRUE) { n=1; strcpy(name,"Structures"); ss_mask = (char *)ckalloc((seqlen_array[profile1_nseqs+1]+10) *sizeof(char)); for (i=0;i<seqlen_array[profile1_nseqs+1];i++) ss_mask[i] = sec_struct_mask2[i]; print_sec_struct_mask(seqlen_array[profile1_nseqs+1],sec_struct_mask2,ss_mask); for(i=0; i<len; i++) { val=ss_mask[i]; if (val == gap_pos1) seq[i]='-'; else seq[i]=val; } seq[i]=EOS; ckfree(ss_mask); }} return(n);}int make_gp_data(int prf_no,int len, char *name,char *seq){ int i,n=0; char val; seq[0]='\0'; name[0]='\0';if (prf_no == 1){ if (struct_penalties1 == GMASK && use_ss1 == TRUE) { n=1; strcpy(name,"Gap Penalties"); for(i=0; i<len; i++) { val=gap_penalty_mask1[i]; if (val == gap_pos1) seq[i]='-'; else seq[i]=val; } seq[i]=EOS; }}else if (prf_no == 2){ if (struct_penalties2 == GMASK && use_ss2 == TRUE) { n=1; strcpy(name,"Gap Penalties"); for(i=0; i<len; i++) { val=gap_penalty_mask2[i]; if (val == gap_pos1) seq[i]='-'; else seq[i]=val; } seq[i]=EOS; }} return(n);}static void VscrollMulti(BaR bar, GraphiC p, Nlm_Int2 newval, Nlm_Int2 oldval){ active_panel=seq_panel; vscrollnames(bar, newval, oldval); vscrollseqs(bar, newval, oldval);}static void HscrollMultiN(BaR bar, GraphiC p, Nlm_Int2 newval, Nlm_Int2 oldval){ active_panel=seq_panel; hscrollnames(bar, newval, oldval);}static void HscrollMultiS(BaR bar, GraphiC p, Nlm_Int2 newval, Nlm_Int2 oldval){ active_panel=seq_panel; hscrollseqs(bar, newval, oldval);}static void VscrollPrf1(BaR bar, GraphiC p, Nlm_Int2 newval, Nlm_Int2 oldval){ active_panel=prf_panel[0]; vscrollnames(bar, newval, oldval); vscrollseqs(bar, newval, oldval);}static void HscrollPrf1N(BaR bar, GraphiC p, Nlm_Int2 newval, Nlm_Int2 oldval){ active_panel=prf_panel[0]; hscrollnames(bar, newval, oldval);}static void HscrollPrf1S(BaR bar, GraphiC p, Nlm_Int2 newval, Nlm_Int2 oldval){ active_panel=prf_panel[0]; hscrollseqs(bar, newval, oldval); if(fixed_prf_scroll==TRUE) { active_panel=prf_panel[1]; hscrollseqs(bar, newval, oldval); }}static void VscrollPrf2(BaR bar, GraphiC p, Nlm_Int2 newval, Nlm_Int2 oldval){ active_panel=prf_panel[1]; vscrollnames(bar, newval, oldval); vscrollseqs(bar, newval, oldval);}static void HscrollPrf2N(BaR bar, GraphiC p, Nlm_Int2 newval, Nlm_Int2 oldval){ active_panel=prf_panel[1]; hscrollnames(bar, newval, oldval);}static void HscrollPrf2S(BaR bar, GraphiC p, Nlm_Int2 newval, Nlm_Int2 oldval){ if(fixed_prf_scroll==TRUE) { active_panel=prf_panel[0]; hscrollseqs(bar, newval, oldval); } active_panel=prf_panel[1]; hscrollseqs(bar, newval, oldval);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -