📄 xmenu.c
字号:
if (output_tree_clustal)
{
make_prompt(output_list, "SAVE CLUSTAL TREE AS :");
bootnjtreetext=DialogText(output_list, "", 35, NULL);
strcpy(name,path);
strcat(name,"njb");
SetTitle(bootnjtreetext, name);
Break(output_list);
}
if (output_tree_phylip)
{
make_prompt(output_list, "SAVE PHYLIP TREE AS :");
bootphtreetext=DialogText(output_list, "", 35, NULL);
strcpy(name,path);
strcat(name,"phb");
SetTitle(bootphtreetext, name);
Break(output_list);
}
if (output_tree_nexus)
{
make_prompt(output_list, "SAVE NEXUS TREE AS :");
bootnxstreetext=DialogText(output_list, "", 35, NULL);
strcpy(name,path);
strcat(name,"treb");
SetTitle(bootnxstreetext, name);
Break(output_list);
}
SelectFont(systemFont);
stdLineHeight=15;
Break(boottreew);
bootgr=HiddenGroup(boottreew, 2, 0, NULL);
shift(bootgr, 140, 20);
boot_ok=PushButton(bootgr, " OK ", BootstrapTree);
shift(bootgr, 20, 0);
boot_can=PushButton(bootgr, "CANCEL", CancelWin);
Show(boottreew);
}
static void CreateAlignTree(ButtoN but)
{
char path[FILENAMELEN];
char phylip_name[FILENAMELEN];
GetTitle(savetreetext, filename, FILENAMELEN);
strcpy(phylip_name,filename);
stripspace(filename);
info("Doing pairwise alignments...");
if(save_log)
{
get_path(seqname,path);
strcpy(save_log_filename,path);
strcat(save_log_filename,"log");
if ((save_log_fd=fopen(save_log_filename,"a"))==NULL)
error("Cannot open log file %s",save_log_filename);
}
WatchCursor();
if (Visible(savetreew))
{
Remove(savetreew);
savetreew=NULL;
}
make_tree(phylip_name);
if(save_log && save_log_fd!=NULL)
{
fclose(save_log_fd);
save_log_fd=NULL;
}
ArrowCursor();
info("Tree %s created",filename);
}
static void DrawTree(ButtoN but)
{
char path[FILENAMELEN];
char phylip_name[FILENAMELEN];
char clustal_name[FILENAMELEN];
char dist_name[FILENAMELEN];
char nexus_name[FILENAMELEN];
if(output_tree_clustal)
{
GetTitle(drawnjtreetext, filename, FILENAMELEN);
stripspace(filename);
strcpy(clustal_name,filename);
}
if(output_tree_phylip)
{
GetTitle(drawphtreetext, filename, FILENAMELEN);
stripspace(filename);
strcpy(phylip_name,filename);
}
if(output_tree_distances)
{
GetTitle(drawdsttreetext, filename, FILENAMELEN);
stripspace(filename);
strcpy(dist_name,filename);
}
if(output_tree_nexus)
{
GetTitle(drawnxstreetext, filename, FILENAMELEN);
stripspace(filename);
strcpy(nexus_name,filename);
}
info("Calculating tree...");
WatchCursor();
if(save_log)
{
get_path(seqname,path);
strcpy(save_log_filename,path);
strcat(save_log_filename,"log");
if ((save_log_fd=fopen(save_log_filename,"a"))==NULL)
error("Cannot open log file %s",save_log_filename);
}
if (Visible(drawtreew))
{
Remove(drawtreew);
drawtreew=NULL;
}
phylogenetic_tree(phylip_name,clustal_name,dist_name,nexus_name);
if(save_log && save_log_fd!=NULL)
{
fclose(save_log_fd);
save_log_fd=NULL;
}
ArrowCursor();
info("Tree %s created",filename);
}
static void BootstrapTree(ButtoN but)
{
char phylip_name[FILENAMELEN];
char clustal_name[FILENAMELEN];
char nexus_name[FILENAMELEN];
char path[FILENAMELEN];
if(output_tree_clustal)
{
GetTitle(bootnjtreetext, filename, FILENAMELEN);
stripspace(filename);
strcpy(clustal_name,filename);
}
if(output_tree_phylip)
{
GetTitle(bootphtreetext, filename, FILENAMELEN);
stripspace(filename);
strcpy(phylip_name,filename);
}
if(output_tree_nexus)
{
GetTitle(bootnxstreetext, filename, FILENAMELEN);
stripspace(filename);
strcpy(nexus_name,filename);
}
info("Bootstrapping tree...");
WatchCursor();
if(save_log)
{
get_path(seqname,path);
strcpy(save_log_filename,path);
strcat(save_log_filename,"log");
if ((save_log_fd=fopen(save_log_filename,"a"))==NULL)
warning("Cannot open log file %s",save_log_filename);
}
if (Visible(boottreew))
{
Remove(boottreew);
boottreew=NULL;
}
bootstrap_tree(phylip_name,clustal_name,nexus_name);
if(save_log && save_log_fd!=NULL)
{
fclose(save_log_fd);
save_log_fd=NULL;
}
info("Bootstrap tree %s created",filename);
ArrowCursor();
}
static void OpenSeqFile (IteM item)
{
int n;
panel_data data;
if (nseqs>0)
{
if (Message(MSG_YN,"Replace existing sequences ?")==ANS_NO)
return;
}
if (!GetInputFileName (filename,FILENAMELEN,"","")) return;
strcpy(seqname,filename);
GetPanelExtra(seq_panel.names,&data);
data.nseqs=0;
data.vseqs=0;
SetPanelExtra(seq_panel.names,&data);
GetPanelExtra(seq_panel.seqs,&data);
data.nseqs=0;
data.vseqs=0;
SetPanelExtra(seq_panel.seqs,&data);
n=seq_input(FALSE);
if (n<=0)
{
info("File %s not loaded.",seqname);
return;
}
load_aln(seq_panel,0,nseqs-1,TRUE);
ncutseqs=0;
info("File %s loaded.",seqname);
}
static void AppendSeqFile (IteM item)
{
int n;
panel_data data;
if (!GetInputFileName (filename,FILENAMELEN,"","")) return;
strcpy(seqname,filename);
GetPanelExtra(seq_panel.names,&data);
data.nseqs=0;
SetPanelExtra(seq_panel.names,&data);
n=seq_input(TRUE);
if (n<=0)
{
info("File %s not loaded.",seqname);
return;
}
load_aln(seq_panel,0,nseqs-1,FALSE);
info("File %s appended.",seqname);
}
static void OpenPrf1File (IteM item)
{
int i,j,n,tmpn=0,tmpfs;
sint *tmplen_array;
sint *tmpindex;
char **tmp_array;
char **tmpnames;
char **tmptitles;
panel_data data;
if (profile1_nseqs>0)
{
if (Message(MSG_YN,"Replace existing sequences ?")==ANS_NO)
return;
}
if (!GetInputFileName (filename,FILENAMELEN,"","")) return;
if(!profile2_empty)
{
tmpn=nseqs-profile1_nseqs;
tmpfs=profile1_nseqs;
tmpnames=(char **)ckalloc((tmpn+1)*sizeof(char *));
tmptitles=(char **)ckalloc((tmpn+1)*sizeof(char *));
tmplen_array=(sint *)ckalloc((tmpn+1)*sizeof(sint));
tmpindex=(sint *)ckalloc((tmpn+1)*sizeof(sint));
tmp_array=(char **)ckalloc((tmpn+1)*sizeof(char *));
for(i=profile1_nseqs+1;i<=nseqs;i++)
{
tmpnames[i-profile1_nseqs-1]=(char *)ckalloc((MAXNAMES+2)*sizeof(char));
tmptitles[i-profile1_nseqs-1]=(char *)ckalloc((MAXTITLES+2)*sizeof(char));
strcpy(tmpnames[i-profile1_nseqs-1],names[i]);
strcpy(tmptitles[i-profile1_nseqs-1],titles[i]);
tmplen_array[i-profile1_nseqs-1]=seqlen_array[i];
tmpindex[i-profile1_nseqs-1]=output_index[i]-tmpfs+profile1_nseqs;
tmp_array[i-profile1_nseqs-1]=(char *)ckalloc((seqlen_array[i]+2)*sizeof(char));
for(j=1;j<=seqlen_array[i];j++)
tmp_array[i-profile1_nseqs-1][j]=seq_array[i][j];
}
}
strcpy(seqname,filename);
GetPanelExtra(prf_panel[0].names,&data);
data.nseqs=0;
data.vseqs=0;
SetPanelExtra(prf_panel[0].names,&data);
GetPanelExtra(prf_panel[0].seqs,&data);
data.nseqs=0;
data.vseqs=0;
SetPanelExtra(prf_panel[0].seqs,&data);
profile_no = 1;
n=profile_input();
if (n<=0)
{
info("File %s not loaded.",seqname);
return;
}
strcpy(profile1_name,seqname);
load_aln(prf_panel[0],0,profile1_nseqs-1,TRUE);
if(tmpn!=0)
{
nseqs=tmpn+profile1_nseqs;
realloc_aln(profile1_nseqs+1,nseqs);
for(i=profile1_nseqs+1;i<=nseqs;i++)
{
names[i]=(char *)ckalloc((MAXNAMES+2)*sizeof(char));
titles[i]=(char *)ckalloc((MAXTITLES+2)*sizeof(char));
strcpy(names[i],tmpnames[i-profile1_nseqs-1]);
ckfree(tmpnames[i-profile1_nseqs-1]);
strcpy(titles[i],tmptitles[i-profile1_nseqs-1]);
ckfree(tmptitles[i-profile1_nseqs-1]);
seqlen_array[i]=tmplen_array[i-profile1_nseqs-1];
output_index[i]=tmpindex[i-profile1_nseqs-1]-tmpfs+profile1_nseqs;
seq_array[i]=(char *)ckalloc((seqlen_array[i]+2)*sizeof(char));
for(j=1;j<=seqlen_array[i];j++)
seq_array[i][j]=tmp_array[i-profile1_nseqs-1][j];
ckfree(tmp_array[i-profile1_nseqs-1]);
}
ckfree(tmpnames);
ckfree(tmptitles);
ckfree(tmplen_array);
ckfree(tmpindex);
ckfree(tmp_array);
profile2_empty=FALSE;
}
load_aln(prf_panel[1],profile1_nseqs,nseqs-1,TRUE);
ncutseqs=0;
info("File %s loaded.",profile1_name);
}
static void OpenPrf2File (IteM item)
{
int n;
panel_data data;
if(profile1_empty)
{
error("You must load profile 1 first.");
return;
}
if (nseqs>profile1_nseqs)
{
if (Message(MSG_YN,"Replace existing sequences ?")==ANS_NO)
return;
}
if (!GetInputFileName (filename,FILENAMELEN,"","")) return;
strcpy(seqname,filename);
GetPanelExtra(prf_panel[1].names,&data);
data.nseqs=0;
data.vseqs=0;
SetPanelExtra(prf_panel[1].names,&data);
GetPanelExtra(prf_panel[1].seqs,&data);
data.nseqs=0;
data.vseqs=0;
SetPanelExtra(prf_panel[1].seqs,&data);
profile_no = 2;
n=profile_input();
if (n<=0)
{
info("File %s not loaded.",seqname);
return;
}
strcpy(profile2_name,seqname);
ncutseqs=0;
load_aln(prf_panel[1],profile1_nseqs,nseqs-1,TRUE);
info("File %s loaded.",profile2_name);
}
static void BlackandWhite(IteM item)
{
ncolors=1;
if (aln_mode == MULTIPLEM)
color_seqs();
else
{
color_prf1();
color_prf2();
}
usebw=TRUE;
usedefcolors=FALSE;
useusercolors=FALSE;
SetStatus(bw_item,usebw);
SetStatus(defcol_item,usedefcolors);
SetStatus(usercol_item,useusercolors);
info("Done.");
}
static void DefColorPar(IteM item)
{
if (explicit_par_file != NULL)
ckfree(explicit_par_file);
explicit_par_file=NULL;
if(dnaflag)
par_file=find_file(def_dnapar_file);
else
par_file=find_file(def_protpar_file);
init_color_parameters(par_file);
if (aln_mode == MULTIPLEM)
color_seqs();
else
{
color_prf1();
color_prf2();
}
usebw=FALSE;
usedefcolors=TRUE;
useusercolors=FALSE;
SetStatus(bw_item,usebw);
SetStatus(defcol_item,usedefcolors);
SetStatus(usercol_item,useusercolors);
info("Done.");
}
void set_reset_new_gaps(IteM i)
{
reset_alignments_new=GetStatus(i);
if(reset_alignments_new==TRUE)
{
reset_alignments_all=FALSE;
SetStatus(all_gaps_item,reset_alignments_all);
}
}
void set_reset_all_gaps(IteM i)
{
reset_alignments_all=GetStatus(i);
if(reset_alignments_all==TRUE)
{
reset_alignments_new=FALSE;
SetStatus(new_gaps_item,reset_alignments_new);
}
}
static void OpenColorParWin(IteM item)
{
read_file_window("Input Color File","COLOR PARAMETER FILE NAME:",explicit_par_file,OpenColorPar);
}
static void OpenColorPar(ButtoN but)
{
GetTitle(readfiletext, filename, FILENAMELEN);
stripspace(filename);
if (explicit_par_file != NULL)
ckfree(explicit_par_file);
explicit_par_file=(char *)ckalloc(FILENAMELEN*sizeof(char));
if (par_file != NULL)
ckfree(par_file);
par_file=(char *)ckalloc(FILENAMELEN*sizeof(char));
strcpy(explicit_par_file,filename);
strcpy(par_file,filename);
info("Loading color file: %s\n",par_file);
init_color_parameters(par_file);
if (Visible(readfilew))
{
Remove(readfilew);
readfilew=NULL;
}
if (aln_mode == MULTIPLEM)
color_seqs();
else
{
color_prf1();
color_prf2();
}
usebw=FALSE;
usedefcolors=FALSE;
useusercolors=TRUE;
SetStatus(bw_item,usebw);
SetStatus(defcol_item,usedefcolors);
SetStatus(usercol_item,useusercolors);
info("Done.");
}
static void RemoveGapPos(IteM item)
{
int i,j,sl;
Boolean sel=FALSE;
if (nseqs==0)
{
Message(MSG_OK,"No file loaded.");
return;
}
if (Message(MSG_YN,"Remove positions that contain gaps in all sequences ?")==ANS_NO)
return;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -