4 * This source code is part of
8 * GROningen MAchine for Chemical Simulations
12 * Copyright (c) 1991-1999
13 * BIOSON Research Institute, Dept. of Biophysical Chemistry
14 * University of Groningen, The Netherlands
17 * GROMACS: A message-passing parallel molecular dynamics implementation
18 * H.J.C. Berendsen, D. van der Spoel and R. van Drunen
19 * Comp. Phys. Comm. 91, 43-56 (1995)
21 * Also check out our WWW page:
22 * http://md.chem.rug.nl/~gmx
27 * Great Red Oystrich Makes All Chemists Sane
29 static char *SRCID_filter_c = "$Id$";
41 t_filter *init_filter(t_atoms *atoms, char *fn, int natom_trx)
48 f->grps=init_index(fn,&f->grpnames);
51 snew(f->grps->index,1);
52 analyse(atoms,f->grps,&f->grpnames,FALSE,FALSE);
54 snew(f->bDisable,f->grps->nr);
55 for(g=0; g<f->grps->nr; g++)
56 for(i=f->grps->index[g]; i<f->grps->index[g+1] && !f->bDisable[g]; i++)
57 f->bDisable[g] = (f->grps->a[i] >= natom_trx);
59 snew(f->bShow,f->grps->nr);
64 static void FilterCB(t_x11 *x11,int dlg_mess,int item_id,
73 dlg=gmx->dlgs[edFilter];
77 printf("item_id: %d, set: %s\n",item_id,set);
82 if (sscanf(set,"%d",&nset)==1)
83 f->bShow[nset]=!f->bShow[nset];
87 write_gmx(x11,gmx,IDDOFILTER);
92 t_dlg *select_filter(t_x11 *x11,t_gmx *gmx)
94 static char *title="Group";
95 static char *dummy="\"FALSE\"";
96 static char *ok="\"Ok\"";
99 char tmpfile[L_tmpnam];
100 int i,j,k,len,tlen,ht,ncol,nrow,x0;
103 for(i=0; (i<(int)gmx->filter->grps->nr); i++)
104 len=max(len,(int)strlen(gmx->filter->grpnames[i]));
107 ncol=1+(gmx->filter->grps->nr / 15);
108 nrow=gmx->filter->grps->nr/ncol;
109 if (nrow*ncol < gmx->filter->grps->nr)
115 ht=1+(gmx->filter->grps->nr+1)*2+3;
119 fprintf(stderr,"file: %s\n",tmpfile);
121 tmp=fopen(tmpfile,"w");
123 fprintf(tmp,"grid %d %d {\n\n",tlen,ht);
125 for(k=j=0,x0=1; (j<ncol); j++,x0+=len+1) {
126 fprintf(tmp,"group \"%s-%d\" %d 1 %d %d {\n",title,j+1,x0,len,ht-5);
127 for(i=0; (i<nrow) && (k<gmx->filter->grps->nr); i++,k++)
128 if (!gmx->filter->bDisable[k])
129 fprintf(tmp,"checkbox \"%s\" \"%d\" %s %s %s\n",
130 gmx->filter->grpnames[k],k,dummy,dummy,dummy);
132 fprintf(tmp,"statictext { \" %s\" } \"%d\" %s %s %s\n",
133 gmx->filter->grpnames[k],k,dummy,dummy,dummy);
134 fprintf(tmp,"}\n\n");
136 fprintf(tmp,"simple 1 %d %d 2 {\n",ht-3,tlen-2);
137 fprintf(tmp,"defbutton %s %s %s %s %s\n",ok,ok,dummy,dummy,dummy);
138 fprintf(tmp,"}\n\n}\n");
141 dlg=ReadDlg(x11,gmx->wd->self,title,x11->fg,x11->bg,tmpfile,
142 0,0,TRUE,FALSE,FilterCB,gmx);