Merge branch release-4-6 into release-5-0
[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 #include "typedefs.h"
43 #include "x11.h"
44 #include "xutil.h"
45 #include "gromacs/math/3dview.h"
46 #include "nleg.h"
47 #include "buttons.h"
48 #include "rmpbc.h"
49 #include "gromacs/fileio/trxio.h"
50
51 /* Some window sizes */
52 #define EWIDTH      200
53 #define EHEIGHT       0
54 #define LDHEIGHT      0
55 #define LEGHEIGHT    60
56
57 enum eObject {
58     eOSingle, eOBond, eOHBond, eONR
59 };
60
61 enum eVisible {
62     eVNormal, eVSpecial, eVHidden, evNR
63 };
64
65 enum eBwidth {
66     eBThin, eBFat, eBVeryFat, eBSpheres, eBNR
67 };
68
69 enum esBox {
70     esbNone, esbRect, esbTri, esbTrunc, esbNR
71 };
72
73 typedef struct {
74     t_windata     wd;            /* Mol window structure                        */
75     bool          bShowHydrogen; /* Show Hydrogens?                     */
76     int           bond_type;     /* Show one of the above bondtypes      */
77     int           ePBC;          /* PBC type                             */
78     int           boxtype;       /* Rectangular, Tric, TruncOct (display)*/
79     int           realbox;       /* Property of the real box             */
80 } t_molwin;
81
82 typedef struct {
83     eObject           eO;     /* The type of object                     */
84     eVisible          eV;     /* Visibility status of the object        */
85     unsigned long     color;  /* The color (only when eV==evSpecial)    */
86     atom_id           ai, aj; /* The atom_id for i (and j if bond)      */
87     real              z;      /* The Z-coordinate for depht cueing      */
88 } t_object;
89
90 typedef struct {
91     t_blocka    *grps;     /* Blocks with atom numbers          */
92     char       **grpnames; /* The names of the groups           */
93     bool        *bDisable; /* Group indexes out of natoms in TRX   */
94     bool        *bShow;    /* Show a group ?                    */
95 } t_filter;
96
97 /*
98  * t_manager structure:
99  *
100  * This structure manages the display area for the gmx program.
101  * It reads the status file and sends messages when windows need to
102  * be updated.
103  *
104  */
105 typedef struct {
106     t_trxstatus   *status;
107     const char    *trajfile;
108     int            natom;    /* The number of atoms                     */
109     t_topology     top;      /* topology                             */
110     rvec           box_size;
111     real           time;     /* The actual time                      */
112     rvec          *x;        /* The coordinates                 */
113     iv2           *ix;       /* The coordinates after projection        */
114     real          *zz;       /* Z-coords                             */
115     matrix         box;      /* The box                         */
116     int            nobj;     /* The number of objects           */
117     t_object      *obj;      /* The objects on screen           */
118     bool          *bHydro;   /* true for hydrogen atoms         */
119     bool          *bLabel;   /* Show a label on atom i?              */
120     char         **szLab;    /* Array of pointers to labels          */
121     unsigned long *col;      /* The colour of the atoms         */
122     int           *size;     /* The size of the atoms           */
123     real          *vdw;      /* The VDWaals radius of the atoms */
124     bool          *bVis;     /* visibility of atoms                  */
125     bool           bPbc;     /* Remove Periodic boundary             */
126     bool           bAnimate; /* Animation going on?                     */
127     bool           bEof;     /* End of file reached?                 */
128     bool           bStop;    /* Stopped by user?                     */
129     bool           bSort;    /* Sort the coordinates                    */
130     bool           bPlus;    /* Draw plus for single atom               */
131     int            nSkip;    /* Skip n steps after each frame   */
132     int            nWait;    /* Wait n ms after each frame           */
133     gmx_rmpbc_t    gpbc;     /* For removing peridiocity             */
134
135     t_windata      wd;       /* The manager subwindow                */
136     t_windata      title;    /* Title window                            */
137     t_3dview      *view;     /* The 3d struct                        */
138     t_molwin      *molw;     /* The molecule window                     */
139     t_butbox      *vbox;     /* The video box                   */
140     t_butbox      *bbox;     /* The button box                  */
141     t_legendwin   *legw;     /* The legend window                       */
142
143     output_env_t   oenv;     /* output env data */
144 } t_manager;
145
146 extern t_manager *init_man(t_x11 *x11, Window Parent,
147                            int x, int y, int width, int height,
148                            unsigned long fg, unsigned long bg,
149                            int ePBC, matrix box, const output_env_t oenv);
150 /* Initiate the display manager */
151
152 extern void move_man(t_x11 *x11, t_manager *man, int width, int height);
153 /* Set the right size for this window */
154
155 extern void step_message(t_x11 *x11, t_manager *man);
156 /* Send a message to the manager */
157
158 extern void set_file(t_x11 *x11, t_manager *man, const char *trajectory,
159                      const char *status);
160 /* Read a new trajectory and topology */
161
162 extern void map_man(t_x11 *x11, t_manager *man);
163
164 extern void move_man(t_x11 *x11, t_manager *man, int width, int height);
165
166 extern bool toggle_animate (t_x11 *x11, t_manager *man);
167
168 extern bool toggle_pbc (t_manager *man);
169
170 extern void no_labels(t_x11 *x11, t_manager *man);
171 /* Turn off all labels */
172
173 extern void done_man(t_x11 *x11, t_manager *man);
174 /* Clean up man struct */
175
176 extern void draw_mol(t_x11 *x11, t_manager *man);
177
178 extern void do_filter(t_x11 *x11, t_manager *man, t_filter *filter);
179
180 #endif