00001 #ifndef StructureUnitH
00002 #define StructureUnitH
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00040
00041
00042 #include "CoreMainHeader.h"
00043 #include "Atom.h"
00044 #include "ContainerEnumerator.h"
00045 #include "IndexCounter.h"
00046
00047
00048
00049 class CElementsRecord;
00050 class CMolecule;
00051 class CAtom;
00052 class CStructureUnitsList;
00053 class CStructureUnit;
00054
00055
00056
00058
00061 class NEMESIS_CORE_PACKAGE CStructureUnitData {
00062 public:
00063
00064 __fastcall CStructureUnitData(void);
00065 __fastcall ~CStructureUnitData(void);
00066
00067
00068 friend ostream& __fastcall operator << (ostream& str,const CStructureUnitData& su);
00069 friend istream& __fastcall operator >> (istream& str,CStructureUnitData& su);
00070
00071
00072 void __fastcall GetFromStructureUnit(CStructureUnit* unit);
00073 CStructureUnit* __fastcall MakeStructureUnit(CMolecule* molecule,CElementsRecord* history=NULL);
00074 inline int __fastcall GetStructureUnitIndex(void) const;
00075
00076 void __fastcall SetNumOfAtoms(int atoms);
00077
00078
00079 public:
00080 CExtUUID ExtUUID;
00081 int StructureUnitIndex;
00082 CSmallString Name;
00083 CSmallString Description;
00084 CSmallString UnitName;
00085 CExtObject::CStatus Status;
00086 int NumOfAtoms;
00087 int* AtomsIndexArea;
00088 };
00089
00090
00091
00093
00096 class NEMESIS_CORE_PACKAGE CStructureUnit : public CExtObject{
00097 public:
00098
00099 __fastcall CStructureUnit(CStructureUnitsList* baselist,CPluginObjectInfo* objectinfo);
00100 __fastcall ~CStructureUnit(void);
00101 void __fastcall RemoveFromBaseList(CElementsRecord* history=NULL);
00102
00103
00104 bool __fastcall Delete(void);
00105
00106
00107 bool __fastcall IsModified(void);
00108 inline CMolecule* __fastcall GetMolecule(void);
00109 CSmallString __fastcall GetFullUnitName(void);
00110 inline const CSmallString& __fastcall GetUnitName(void);
00111 inline void __fastcall SetUnitName(const CSmallString& name);
00112 inline void __fastcall SetUnitID(int unit_id);
00113 inline int __fastcall GetUnitID(void);
00114
00115
00116 bool __fastcall RegisterAtom(CAtom* atom,int index);
00117 bool __fastcall UnregisterAtom(int index);
00118 void __fastcall SetNumOfAtoms(int atoms);
00119 inline int __fastcall GetNumOfAtoms(void);
00120 CAtom* __fastcall GetAtom(int index);
00121
00122
00123 bool __fastcall Load(CXMLElement* p_el);
00124 bool __fastcall Save(CXMLElement* p_el);
00125
00126 virtual void __fastcall RemoveFromRegistered(CExtObject* object,CElementsRecord* history=NULL);
00127
00128
00129 protected:
00130 CStructureUnitsList* FBaselist;
00131 CSmallString FUnitName;
00132 int NumOfAtoms;
00133 CAtom** AtomsArea;
00134 bool Modified;
00135 int UnitID;
00136 friend class CStructureUnitData;
00137 };
00138
00139
00140
00141 DECLARE_EVENT(StructureUnit_IsModified);
00142
00143
00144
00146
00149 class NEMESIS_CORE_PACKAGE CStructureUnitsList : public CExtObject, public CTemplList<CStructureUnit> {
00150 public:
00151
00152 __fastcall CStructureUnitsList(CMolecule* molecule);
00153
00154
00155 CStructureUnit* __fastcall AddStructureUnit(CStructureUnitData& data,CElementsRecord* history=NULL);
00156 CStructureUnit* __fastcall AddStructureUnit(const CUUID& uuid);
00157
00158
00159 __property CMolecule* Molecule = {read = FMolecule};
00160
00161 bool __fastcall Load(CXMLElement* p_el);
00162 bool __fastcall Save(CXMLElement* p_el);
00163
00164 public:
00165 CIndexCounter NameIndexer;
00166
00167
00168 private:
00169 CMolecule* FMolecule;
00170 };
00171
00172
00173
00174 DECLARE_EVENT(StructureUnitsList_AddStructureUnit);
00175 DECLARE_EVENT(StructureUnitsList_RemoveStructureUnit);
00176
00177
00178
00179
00180
00181 extern CPluginObjectInfo StructureUnitEnumObjectInfo;
00182 extern CExtUUID ID_StructureUnitEnum;
00183
00184
00185
00187
00190 class CStructureUnitEnumerator : public CContainerEnumerator {
00191 public:
00192 __fastcall CStructureUnitEnumerator(CComObject* owner,CMolecule* molecule);
00193
00194 virtual int __fastcall NumOfCommands(void);
00195 virtual CSmallString __fastcall GetCommand(int i,bool& enabled);
00196 virtual bool __fastcall DoCommand(int i);
00197
00198
00199 virtual int __fastcall NumOfObjects(void);
00200 virtual bool __fastcall PrepareObjects(int startpos,int size,int rstart,int rend);
00201 virtual CExtObject* __fastcall GetObject(int pos);
00202
00203
00204 virtual int __fastcall NumOfColumns(void);
00205 virtual const CSmallString __fastcall GetColumnCaption(int index);
00206 virtual const CSmallString __fastcall GetObjectProperty(int index);
00207 virtual int __fastcall GetObjectImageIndex(void);
00208
00209 virtual void __fastcall ProcessEvent(const CEventIdentifier& event,CExtObject* Sender,void* p_data);
00210
00211 virtual CExtObject* __fastcall GetCurrentObject(void);
00212 virtual bool __fastcall SetCurrentObject(CExtObject* p_object);
00213
00214 private:
00215 CStructureUnitsList* StructureUnits;
00216 CTemplIterator<CStructureUnit> Pointer;
00217 CStructureUnit* CurrentObject;
00218 int StartPos;
00219 int EndPos;
00220 bool Changed;
00221 CSimpleList<CStructureUnit> CurrentView;
00222 };
00223
00224
00225
00226 extern CPluginObjectInfo SingleStructureUnitEnumObjectInfo;
00227 extern CExtUUID ID_SingleStructureUnitEnum;
00228
00229
00230
00232
00235 class CSingleStructureUnitEnumerator : public CContainerEnumerator {
00236 public:
00237 __fastcall CSingleStructureUnitEnumerator(CComObject* owner,CStructureUnit* p_str);
00238
00239 virtual int __fastcall NumOfCommands(void);
00240 virtual CSmallString __fastcall GetCommand(int i,bool& enabled);
00241 virtual bool __fastcall DoCommand(int i);
00242
00243
00244 virtual int __fastcall NumOfObjects(void);
00245 virtual CExtObject* __fastcall GetObject(int pos);
00246
00247
00248 virtual int __fastcall NumOfColumns(void);
00249 virtual const CSmallString __fastcall GetColumnCaption(int index);
00250 virtual const CSmallString __fastcall GetObjectProperty(int index);
00251 virtual int __fastcall GetObjectImageIndex(void);
00252
00253 virtual void __fastcall ProcessEvent(const CEventIdentifier& event,CExtObject* Sender,void* p_data);
00254
00255 virtual CExtObject* __fastcall GetCurrentObject(void);
00256 virtual bool __fastcall SetCurrentObject(CExtObject* p_object);
00257
00258 private:
00259 CStructureUnit* StructureUnit;
00260 CAtom* CurrentObject;
00261 bool Changed;
00262 };
00263
00264
00265
00266
00267
00268
00269
00270
00271
00272 class CStructureUnitDataHistory : public CElementData{
00273 public:
00274 __fastcall CStructureUnitDataHistory(CStructureUnit* p_unit,bool create);
00275
00276 private:
00277 virtual void __fastcall Forward(void);
00278 virtual void __fastcall Backward(void);
00279
00280 CStructureUnitData Data;
00281 CMolecule* Molecule;
00282 CStructureUnit* Unit;
00283 };
00284
00285
00286
00287
00288
00289 class CStructureUnitUnregHistory: public CElementData{
00290 public:
00291 __fastcall CStructureUnitUnregHistory(CStructureUnit* p_str,CAtom* p_atom,int index,bool regobject);
00292
00293 private:
00294 CMolecule* Molecule;
00295 int StructureUnitIndex;
00296 int AtomIndex;
00297 int AtomPositionIndex;
00298
00299 virtual void __fastcall Forward(void);
00300 virtual void __fastcall Backward(void);
00301 };
00302
00303
00304
00305 inline int __fastcall CStructureUnitData::GetStructureUnitIndex(void) const
00306 {
00307 return(StructureUnitIndex);
00308 }
00309
00310
00311
00312 inline CMolecule* __fastcall CStructureUnit::GetMolecule(void)
00313 {
00314 return(FBaselist->Molecule);
00315 }
00316
00317
00318
00319 inline int __fastcall CStructureUnit::GetNumOfAtoms(void)
00320 {
00321 return(NumOfAtoms);
00322 }
00323
00324
00325
00326 inline const CSmallString& __fastcall CStructureUnit::GetUnitName(void)
00327 {
00328 return(FUnitName);
00329 }
00330
00331
00332
00333 inline void __fastcall CStructureUnit::SetUnitName(const CSmallString& name)
00334 {
00335 FUnitName = name;
00336 }
00337
00338
00339
00340 inline void __fastcall CStructureUnit::SetUnitID(int unit_id)
00341 {
00342 UnitID = unit_id;
00343 }
00344
00345
00346
00347 inline int __fastcall CStructureUnit::GetUnitID(void)
00348 {
00349 return(UnitID);
00350 }
00351
00352
00353
00354 #endif