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