00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef MOLECULELIST_H
00024 #define MOLECULELIST_H
00025
00026 #include "Molecule.h"
00027 #include "AtomColor.h"
00028 #include "AtomRep.h"
00029 #include "ResizeArray.h"
00030 #include "JString.h"
00031 #include "utilities.h"
00032 #include "inthash.h"
00033
00034
00035 #define MLIST_USE_HASH 1
00036
00037 class VMDApp;
00038
00039
00040 enum { MLCAT_NAMES, MLCAT_TYPES, MLCAT_ELEMENTS,
00041 MLCAT_RESNAMES, MLCAT_RESTYPES,
00042 MLCAT_CHAINS, MLCAT_SEGNAMES, MLCAT_CONFORMATIONS, MLCAT_MOLECULES,
00043 MLCAT_SPECIAL, MLCAT_SSTRUCT, MLCAT_SURFACES, NUM_MLCAT};
00044
00045
00047 class MoleculeList {
00048 private:
00050 VMDApp *app;
00051
00053 Scene *scene;
00054
00057 Molecule *topMol;
00058
00060 ResizeArray<Molecule *> molList;
00061 #if defined(MLIST_USE_HASH)
00062 inthash_t indexIDhash;
00063 #endif
00064
00067 AtomColor *currAtomColor;
00068 AtomRep *currAtomRep;
00069 char *currAtomSel;
00070 int currMaterial;
00071 float lastCenter[4];
00072
00073
00075 JString defaultAtomColor;
00076 JString defaultAtomRepresentation;
00077 JString defaultAtomSelection;
00078 JString defaultAtomMaterial;
00079
00081 void set_top_molecule(Molecule *);
00082
00083 protected:
00085 void init_colors();
00086
00087 public:
00089 NameList<const char *> resTypes;
00090
00092 int colorCatIndex[NUM_MLCAT];
00093
00095 void add_color_names(int);
00096
00097 public:
00098 MoleculeList(VMDApp *, Scene *);
00099 virtual ~MoleculeList(void);
00100
00102 int num(void) { return int(molList.num()); }
00103
00105 Molecule *molecule(int n) {
00106 Molecule *retval = NULL;
00107 if(n >= 0 && n < num())
00108 retval = molList[n];
00109 return retval;
00110 }
00111
00113 int mol_index_from_id(int id) {
00114 #if defined(MLIST_USE_HASH)
00115
00116
00117 return inthash_lookup(&indexIDhash, id);
00118 #else
00119
00120 for (int i=num() - 1; i >= 0; i--) {
00121 if (id == (molList[i])->id()) {
00122 return i;
00123 }
00124 }
00125 return -1;
00126 #endif
00127 }
00128
00130 Molecule *mol_from_id(int id) {
00131 return molecule(mol_index_from_id(id));
00132 }
00133
00135 void add_molecule(Molecule *);
00136
00138 int del_molecule(int);
00139
00141 int del_all_molecules(void);
00142
00143
00144
00145
00146
00147
00149 int set_color(char *);
00150 char *color(void) { return currAtomColor->cmdStr; }
00151
00153 int set_representation(char *);
00154 char *representation(void) { return currAtomRep->cmdStr; }
00155
00157 int set_selection(const char *);
00158 const char *selection() const { return currAtomSel; }
00159
00161 int set_material(char *);
00162 const char *material(void);
00163
00165 int set_default_color(const char *);
00166 int set_default_representation(const char *);
00167 int set_default_selection(const char *);
00168 int set_default_material(const char *);
00169 const char *default_color() const {
00170 return defaultAtomColor;
00171 }
00172 const char *default_representation() const {
00173 return defaultAtomRepresentation;
00174 }
00175 const char *default_selection() const {
00176 return defaultAtomSelection;
00177 }
00178 const char *default_material() const {
00179 return defaultAtomMaterial;
00180 }
00181
00184 int add_rep(int n);
00185
00188 int change_rep(int m, int n);
00189
00191 int change_repcolor(int m, int n, char *);
00192
00194 int change_repmethod(int m, int n, char *);
00195
00198 int change_repsel(int m, int n, const char *);
00199
00201 int change_repmat(int m, int n, const char *);
00202
00205 int del_rep(int m, int n);
00206
00207
00208
00209
00210
00211
00213 Molecule *top(void) { return topMol; }
00214 int is_top(int n) { return (molecule(n) == topMol); }
00215 int is_top(Molecule *m) { return topMol == m; }
00216 void make_top(int n) { make_top(molecule(n)); }
00217 void make_top(Molecule *m);
00218
00220 int active(int n) { return molecule(n)->active; }
00221 int active(Molecule *m) { return (m && m->active); }
00222 void activate(int n) { molecule(n)->active = TRUE; }
00223 void inactivate(int n) { molecule(n)->active = FALSE; }
00224
00226 int displayed(int n) { return molecule(n)->displayed(); }
00227 int displayed(Molecule *m) { return (m && m->displayed()); }
00228 void show(int n) { molecule(n)->on(); }
00229 void hide(int n) { molecule(n)->off(); }
00230
00232 int fixed(int n) { return molecule(n)->fixed(); }
00233 int fixed(Molecule *m) { return (m && m->fixed()); }
00234 void fix(int n) { molecule(n)->fix(); }
00235 void unfix(int n) { molecule(n)->unfix(); }
00236
00238 void center_from_top_molecule_reps(void);
00239 void center_top_molecule(void);
00240 void center_all_molecules(void);
00241
00243 Molecule *check_pickable(Pickable *pobj);
00244 };
00245
00246 #endif
00247