Sort includes outside src/gromacs
[alexxy/gromacs.git] / src / programs / view / manager.h
1 /*
2  * This file is part of the GROMACS molecular simulation package.
3  *
4  * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
5  * Copyright (c) 2001-2004, The GROMACS development team.
6  * Copyright (c) 2013,2014, by the GROMACS development team, led by
7  * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
8  * and including many others, as listed in the AUTHORS file in the
9  * top-level source directory and at http://www.gromacs.org.
10  *
11  * GROMACS is free software; you can redistribute it and/or
12  * modify it under the terms of the GNU Lesser General Public License
13  * as published by the Free Software Foundation; either version 2.1
14  * of the License, or (at your option) any later version.
15  *
16  * GROMACS is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19  * Lesser General Public License for more details.
20  *
21  * You should have received a copy of the GNU Lesser General Public
22  * License along with GROMACS; if not, see
23  * http://www.gnu.org/licenses, or write to the Free Software Foundation,
24  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA.
25  *
26  * If you want to redistribute modifications to GROMACS, please
27  * consider that scientific software is very special. Version
28  * control is crucial - bugs must be traceable. We will be happy to
29  * consider code for inclusion in the official distribution, but
30  * derived work must not be called official GROMACS. Details are found
31  * in the README & COPYING files - if they are missing, get the
32  * official version at http://www.gromacs.org.
33  *
34  * To help us fund GROMACS development, we humbly ask that you cite
35  * the research papers on the package. Check out http://www.gromacs.org.
36  */
37
38 #ifndef _manager_h
39 #define _manager_h
40
41 #include <stdio.h>
42
43 #include "gromacs/fileio/trxio.h"
44 #include "gromacs/legacyheaders/typedefs.h"
45 #include "gromacs/pbcutil/rmpbc.h"
46
47 #include "3dview.h"
48 #include "buttons.h"
49 #include "nleg.h"
50 #include "x11.h"
51 #include "xutil.h"
52
53 /* Some window sizes */
54 #define EWIDTH      200
55 #define EHEIGHT       0
56 #define LDHEIGHT      0
57 #define LEGHEIGHT    60
58
59 enum eObject {
60     eOSingle, eOBond, eOHBond, eONR
61 };
62
63 enum eVisible {
64     eVNormal, eVSpecial, eVHidden, evNR
65 };
66
67 enum eBwidth {
68     eBThin, eBFat, eBVeryFat, eBSpheres, eBNR
69 };
70
71 enum esBox {
72     esbNone, esbRect, esbTri, esbTrunc, esbNR
73 };
74
75 typedef struct {
76     t_windata     wd;            /* Mol window structure                        */
77     bool          bShowHydrogen; /* Show Hydrogens?                     */
78     int           bond_type;     /* Show one of the above bondtypes      */
79     int           ePBC;          /* PBC type                             */
80     int           boxtype;       /* Rectangular, Tric, TruncOct (display)*/
81     int           realbox;       /* Property of the real box             */
82 } t_molwin;
83
84 typedef struct {
85     eObject           eO;     /* The type of object                     */
86     eVisible          eV;     /* Visibility status of the object        */
87     unsigned long     color;  /* The color (only when eV==evSpecial)    */
88     atom_id           ai, aj; /* The atom_id for i (and j if bond)      */
89     real              z;      /* The Z-coordinate for depht cueing      */
90 } t_object;
91
92 typedef struct {
93     t_blocka    *grps;     /* Blocks with atom numbers          */
94     char       **grpnames; /* The names of the groups           */
95     bool        *bDisable; /* Group indexes out of natoms in TRX   */
96     bool        *bShow;    /* Show a group ?                    */
97 } t_filter;
98
99 /*
100  * t_manager structure:
101  *
102  * This structure manages the display area for the gmx program.
103  * It reads the status file and sends messages when windows need to
104  * be updated.
105  *
106  */
107 typedef struct {
108     t_trxstatus   *status;
109     const char    *trajfile;
110     int            natom;    /* The number of atoms                     */
111     t_topology     top;      /* topology                             */
112     rvec           box_size;
113     real           time;     /* The actual time                      */
114     rvec          *x;        /* The coordinates                 */
115     iv2           *ix;       /* The coordinates after projection        */
116     real          *zz;       /* Z-coords                             */
117     matrix         box;      /* The box                         */
118     int            nobj;     /* The number of objects           */
119     t_object      *obj;      /* The objects on screen           */
120     bool          *bHydro;   /* true for hydrogen atoms         */
121     bool          *bLabel;   /* Show a label on atom i?              */
122     char         **szLab;    /* Array of pointers to labels          */
123     unsigned long *col;      /* The colour of the atoms         */
124     int           *size;     /* The size of the atoms           */
125     real          *vdw;      /* The VDWaals radius of the atoms */
126     bool          *bVis;     /* visibility of atoms                  */
127     bool           bPbc;     /* Remove Periodic boundary             */
128     bool           bAnimate; /* Animation going on?                     */
129     bool           bEof;     /* End of file reached?                 */
130     bool           bStop;    /* Stopped by user?                     */
131     bool           bSort;    /* Sort the coordinates                    */
132     bool           bPlus;    /* Draw plus for single atom               */
133     int            nSkip;    /* Skip n steps after each frame   */
134     int            nWait;    /* Wait n ms after each frame           */
135     gmx_rmpbc_t    gpbc;     /* For removing peridiocity             */
136
137     t_windata      wd;       /* The manager subwindow                */
138     t_windata      title;    /* Title window                            */
139     t_3dview      *view;     /* The 3d struct                        */
140     t_molwin      *molw;     /* The molecule window                     */
141     t_butbox      *vbox;     /* The video box                   */
142     t_butbox      *bbox;     /* The button box                  */
143     t_legendwin   *legw;     /* The legend window                       */
144
145     output_env_t   oenv;     /* output env data */
146 } t_manager;
147
148 extern t_manager *init_man(t_x11 *x11, Window Parent,
149                            int x, int y, int width, int height,
150                            unsigned long fg, unsigned long bg,
151                            int ePBC, matrix box, const output_env_t oenv);
152 /* Initiate the display manager */
153
154 extern void move_man(t_x11 *x11, t_manager *man, int width, int height);
155 /* Set the right size for this window */
156
157 extern void step_message(t_x11 *x11, t_manager *man);
158 /* Send a message to the manager */
159
160 extern void set_file(t_x11 *x11, t_manager *man, const char *trajectory,
161                      const char *status);
162 /* Read a new trajectory and topology */
163
164 extern void map_man(t_x11 *x11, t_manager *man);
165
166 extern void move_man(t_x11 *x11, t_manager *man, int width, int height);
167
168 extern bool toggle_animate (t_x11 *x11, t_manager *man);
169
170 extern bool toggle_pbc (t_manager *man);
171
172 extern void no_labels(t_x11 *x11, t_manager *man);
173 /* Turn off all labels */
174
175 extern void done_man(t_x11 *x11, t_manager *man);
176 /* Clean up man struct */
177
178 extern void draw_mol(t_x11 *x11, t_manager *man);
179
180 extern void do_filter(t_x11 *x11, t_manager *man, t_filter *filter);
181
182 #endif