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