3 * This source code is part of
7 * GROningen MAchine for Chemical Simulations
10 * Written by David van der Spoel, Erik Lindahl, Berk Hess, and others.
11 * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
12 * Copyright (c) 2001-2013, The GROMACS development team,
13 * check out http://www.gromacs.org for more information.
15 * This program is free software; you can redistribute it and/or
16 * modify it under the terms of the GNU General Public License
17 * as published by the Free Software Foundation; either version 2
18 * of the License, or (at your option) any later version.
20 * If you want to redistribute modifications, please consider that
21 * scientific software is very special. Version control is crucial -
22 * bugs must be traceable. We will be happy to consider code for
23 * inclusion in the official distribution, but derived work must not
24 * be called official GROMACS. Details are found in the README & COPYING
25 * files - if they are missing, get the official version at www.gromacs.org.
27 * To help us fund GROMACS development, we humbly ask that you cite
28 * the papers on the package - you can find them in the top README file.
30 * For more info, check our website at http://www.gromacs.org
33 * Gyas ROwers Mature At Cryogenic Speed
48 #include "gmx_fatal.h"
50 t_filter *init_filter(t_atoms *atoms, const char *fn, int natom_trx)
58 f->grps = init_index(fn, &f->grpnames);
63 snew(f->grps->index, 1);
64 analyse(atoms, f->grps, &f->grpnames, false, false);
66 snew(f->bDisable, f->grps->nr);
67 for (g = 0; g < f->grps->nr; g++)
69 for (i = f->grps->index[g]; i < f->grps->index[g+1] && !f->bDisable[g]; i++)
71 f->bDisable[g] = (f->grps->a[i] >= natom_trx);
75 snew(f->bShow, f->grps->nr);
80 static void FilterCB(t_x11 *x11, int dlg_mess, int item_id,
81 char *set, void *data)
89 dlg = gmx->dlgs[edFilter];
93 printf("item_id: %d, set: %s\n", item_id, set);
100 if (sscanf(set, "%10d", &nset) == 1)
102 f->bShow[nset] = !f->bShow[nset];
108 write_gmx(x11, gmx, IDDOFILTER);
113 t_dlg *select_filter(t_x11 *x11, t_gmx *gmx)
115 static const char *title = "Group";
116 static const char *dummy = "\"FALSE\"";
117 static const char *ok = "\"Ok\"";
120 char tmpfile[STRLEN];
121 int i, j, k, len, tlen, ht, ncol, nrow, x0;
124 for (i = 0; (i < (int)gmx->filter->grps->nr); i++)
126 len = std::max(len, (int)strlen(gmx->filter->grpnames[i]));
130 ncol = 1+(gmx->filter->grps->nr / 15);
131 nrow = gmx->filter->grps->nr/ncol;
132 if (nrow*ncol < gmx->filter->grps->nr)
142 ht = 1+(gmx->filter->grps->nr+1)*2+3;
144 strcpy(tmpfile, "filterXXXXXX");
147 fprintf(stderr, "file: %s\n", tmpfile);
149 if ((tmp = fopen(tmpfile, "w")) == NULL)
151 sprintf(tmpfile, "%ctmp%cfilterXXXXXX", DIR_SEPARATOR, DIR_SEPARATOR);
153 if ((tmp = fopen(tmpfile, "w")) == NULL)
155 gmx_fatal(FARGS, "Can not open tmp file %s", tmpfile);
158 tlen = 1+ncol*(1+len);
159 fprintf(tmp, "grid %d %d {\n\n", tlen, ht);
161 for (k = j = 0, x0 = 1; (j < ncol); j++, x0 += len+1)
163 fprintf(tmp, "group \"%s-%d\" %d 1 %d %d {\n", title, j+1, x0, len, ht-5);
164 for (i = 0; (i < nrow) && (k < gmx->filter->grps->nr); i++, k++)
166 if (!gmx->filter->bDisable[k])
168 fprintf(tmp, "checkbox \"%s\" \"%d\" %s %s %s\n",
169 gmx->filter->grpnames[k], k, dummy, dummy, dummy);
173 fprintf(tmp, "statictext { \" %s\" } \"%d\" %s %s %s\n",
174 gmx->filter->grpnames[k], k, dummy, dummy, dummy);
177 fprintf(tmp, "}\n\n");
179 fprintf(tmp, "simple 1 %d %d 2 {\n", ht-3, tlen-2);
180 fprintf(tmp, "defbutton %s %s %s %s %s\n", ok, ok, dummy, dummy, dummy);
181 fprintf(tmp, "}\n\n}\n");
184 dlg = ReadDlg(x11, gmx->wd->self, title, tmpfile,
185 0, 0, true, false, FilterCB, gmx);