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