📄 xdisplay.c
字号:
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 + -