00001 #ifndef ExtObjectH
00002 #define ExtObjectH
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
00037
00038
00039
00040
00041
00045
00046
00047 #include "CoreMainHeader.h"
00048 #include "SimpleList.h"
00049 #include "ComObject.h"
00050 #include "GeoDescriptor.h"
00051 #include "CoreHistoryList.h"
00052 #include "EventSystem.h"
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077 class CProject;
00078 class CPluginObjectDescription;
00079 class CExtObject;
00080 class CObjectDesigner;
00081 class CExtVisObject;
00082
00083
00084
00085
00087
00092 class NEMESIS_CORE_PACKAGE CExtObject : public CComObject{
00093 public:
00094 __fastcall CExtObject(CComObject* owner,CPluginObjectInfo* objectinfo,CProject* project);
00095 __fastcall CExtObject(CVisObject* owner,CPluginObjectInfo* objectinfo,CProject* project);
00096 __fastcall ~CExtObject(void);
00097
00098
00099
00100 class NEMESIS_CORE_PACKAGE CStatus{
00101 public:
00102 __fastcall CStatus(void);
00103 friend istream& __fastcall operator >> (istream& str,CStatus& status);
00104 friend ostream& __fastcall operator << (ostream& str,const CStatus& status);
00105
00106 CSmallString __fastcall GetStringForm(void) const;
00107 void __fastcall SetFromStringForm(const CSmallString& set);
00108
00109 public:
00110 bool Locked : 1;
00111 bool Visible : 1;
00112 bool Highlighted : 1;
00113 bool FragmentWork : 1;
00114 bool Active: 1;
00115 bool Temporary: 1;
00116 bool ShowName: 1;
00117 bool ShowDescription: 1;
00118 };
00119
00120
00121 inline CProject* __fastcall GetProject(void) const;
00122 __property CProject* Project = {read=FProject};
00123
00124
00125
00126 bool __fastcall ChangeName(const CSmallString& name);
00127
00128 bool __fastcall ChangeDescription(const CSmallString& name);
00129 bool __fastcall ChangeStatus(const CStatus& status);
00130
00131
00132
00133
00134 void __fastcall SetName(const CSmallString& name);
00135
00136 void __fastcall SetDescription(const CSmallString& name);
00137
00138
00139
00140 void __fastcall Lock(bool status,bool propagate=false);
00141 inline bool __fastcall IsLocked(void) const;
00142
00143
00144
00145 void __fastcall SetVisible(bool status,bool propagate=false);
00146 inline bool __fastcall IsVisible(void) const;
00147
00148
00149
00150 void __fastcall Highlight(bool status,bool propagate=false);
00151 inline __fastcall IsHighlighted(void) const;
00152
00153
00154
00155
00156
00157 void __fastcall SetStatus(const CStatus& status,const CStatus& mask,bool propagate=false);
00158 inline const CStatus& __fastcall GetStatus(void) const;
00159
00160 virtual CGeoDescriptor __fastcall GetGeoDescriptor(void);
00161
00162
00163 CObjectDesigner* __fastcall OpenObjectDesigner(bool unregistered=false);
00164
00165
00166
00167
00168 inline void __fastcall RegisterObject(CExtObject* p_ro);
00169 inline void __fastcall UnregisterObject(CExtObject* p_ro);
00170 void __fastcall UnregisterAllRegisteredObjects(CElementsRecord* history=NULL);
00171 virtual void __fastcall RemoveFromRegistered(CExtObject* object,CElementsRecord* history=NULL){};
00172 inline CExtObject* __fastcall RemoveFirstFromROList(void);
00173 inline CSimpleList<CExtObject>& __fastcall GetROList(void);
00174
00175
00176 bool __fastcall RegisterEventForServer(const CEventIdentifier& event,CExtObject* server);
00177 bool __fastcall UnregisterEventForServer(const CEventIdentifier& event,CExtObject* server);
00178 bool __fastcall UnregisterAllEvents(void);
00179
00180 bool __fastcall UnregisterAllEventsForClient(CExtObject* client);
00181 bool __fastcall UnregisterAllEventsForClient(CExtVisObject* client);
00182
00183
00184 void __fastcall ThrowEvent(const CEventIdentifier& event);
00185 void __fastcall ThrowEvent(const CEventIdentifier& event,void* p_data);
00186
00187
00188 virtual void __fastcall ProcessEvent(const CEventIdentifier& event,CExtObject* Sender,void* p_data);
00189
00190
00191 inline void __fastcall EnableEvents(bool status);
00192
00193
00194 private:
00195 class CEventRecievers;
00196 CProject* FProject;
00197 CStatus Status;
00198 CSimpleList<CEventRecievers> RegisteredEvents;
00199 CSimpleList<CExtObject> Servers;
00200 CEventRecievers* RunningEventReceiver;
00201 bool EnabledEvents;
00202 CSimpleList<CExtObject> RegisteredObjects;
00203 CObjectDesigner* ObjectDesigner;
00204
00205 virtual bool __fastcall PropagateStatus(const CStatus& status,const CStatus& mask);
00206 friend class CObjectDesigner;
00207 friend class CExtVisObject;
00208 friend class CEventRecievers;
00209 };
00210
00211
00212
00213
00214
00215
00216
00217 class CExtObject::CEventRecievers{
00218 public:
00219 __fastcall CEventRecievers(const CEventIdentifier& event);
00220
00221 bool __fastcall RegisterClient(CExtObject* client);
00222 bool __fastcall RegisterClient(CExtVisObject* client);
00223
00224 bool __fastcall UnregisterClient(CExtObject* client);
00225 bool __fastcall UnregisterClient(CExtVisObject* client);
00226
00227 bool __fastcall UnregisterClientOnServerSide(CExtObject* server);
00228
00229 void __fastcall ThrowEvent(CExtObject* object,void* p_data);
00230
00231 inline bool __fastcall IsEmpty(void) const;
00232
00233 inline const CEventIdentifier& __fastcall GetEvent(void);
00234 inline void __fastcall SetRemoveAfterThrowEvent(void);
00235
00236
00237 public:
00238 bool RemoveAfterThrowEvent;
00239
00240 private:
00241 const CEventIdentifier& Event;
00242 class CClientDescription{
00243 public:
00244 CExtObject* ExtClient;
00245 CExtVisObject* ExtVisClient;
00246 };
00247 CSimpleList<CClientDescription> Clients;
00248 CSimpleIterator<CClientDescription> TPH;
00249 bool MoveTPH;
00250 };
00251
00252
00253
00254
00255
00256 DECLARE_EVENT(ExtObject_SetName);
00257 DECLARE_EVENT(ExtObject_SetDescription);
00258 DECLARE_EVENT(ExtObject_SetStatus);
00259 DECLARE_EVENT(ExtObject_Delete);
00260 DECLARE_EVENT(ExtObject_SetGeoDescriptor);
00261
00262
00263
00264
00265
00266
00267
00268 class CExtObjectNameHistory:public CCoreElementsRecord{
00269 public:
00270
00271 __fastcall CExtObjectNameHistory(CExtObject* p_object,const CSmallString& newname);
00272
00273
00274 virtual CSmallString __fastcall GetDescription(const CSmallString& format);
00275
00276
00277 private:
00278 CProject* Project;
00279 CSmallString NewName;
00280 CSmallString OldName;
00281 CPluginObjectInfo* ObjectInfo;
00282 int ObjectIndex;
00283
00284 virtual void __fastcall Forward(void);
00285 virtual void __fastcall Backward(void);
00286 };
00287
00288
00289
00290
00291
00292
00293 class CExtObjectDescriptionHistory:public CCoreElementsRecord{
00294 public:
00295
00296 __fastcall CExtObjectDescriptionHistory(CExtObject* p_object,const CSmallString& newdescription);
00297
00298
00299 virtual CSmallString __fastcall GetDescription(const CSmallString& format);
00300
00301
00302 private:
00303 CProject* Project;
00304 CSmallString NewDescription;
00305 CSmallString OldDescription;
00306 int ObjectIndex;
00307 CPluginObjectInfo* ObjectInfo;
00308
00309 virtual void __fastcall Forward(void);
00310 virtual void __fastcall Backward(void);
00311 };
00312
00313
00314
00315
00316
00317
00318 class CExtObjectStatusHistory:public CCoreElementsRecord{
00319 public:
00320
00321 __fastcall CExtObjectStatusHistory(CExtObject* p_object,const CExtObject::CStatus& newstatus);
00322
00323
00324 virtual CSmallString __fastcall GetDescription(const CSmallString& format);
00325
00326
00327 private:
00328 CProject* Project;
00329 CExtObject::CStatus NewStatus;
00330 CExtObject::CStatus OldStatus;
00331 int ObjectIndex;
00332
00333 virtual void __fastcall Forward(void);
00334 virtual void __fastcall Backward(void);
00335 };
00336
00337
00338
00339 inline CProject* __fastcall CExtObject::GetProject(void) const
00340 {
00341 return(Project);
00342 }
00343
00344
00345
00346 inline bool __fastcall CExtObject::IsLocked(void) const
00347 {
00348 return(Status.Locked);
00349 }
00350
00351
00352
00353 inline bool __fastcall CExtObject::IsVisible(void) const
00354 {
00355 return(Status.Visible);
00356 }
00357
00358
00359
00360 inline __fastcall CExtObject::IsHighlighted(void) const
00361 {
00362 return(Status.Highlighted);
00363 }
00364
00365
00366
00367 inline const CExtObject::CStatus& __fastcall CExtObject::GetStatus(void) const
00368 {
00369 return(Status);
00370 }
00371
00372
00373 inline void __fastcall CExtObject::EnableEvents(bool status)
00374 {
00375 EnabledEvents = status;
00376 }
00377
00378
00379
00380
00381
00382 inline bool __fastcall CExtObject::CEventRecievers::IsEmpty(void) const
00383 {
00384 return(Clients.IsEmpty());
00385 }
00386
00387
00388
00389 inline const CEventIdentifier& __fastcall CExtObject::CEventRecievers::GetEvent(void)
00390 {
00391 return(Event);
00392 }
00393
00394
00395
00396 inline CExtObject* __fastcall CExtObject::RemoveFirstFromROList(void)
00397 {
00398 return(RegisteredObjects.RemoveFromBegin());
00399 }
00400
00401
00402
00403 inline void __fastcall CExtObject::RegisterObject(CExtObject* p_ro)
00404 {
00405 RegisteredObjects.InsertToEnd(p_ro);
00406 }
00407
00408
00409
00410 inline void __fastcall CExtObject::UnregisterObject(CExtObject* p_ro)
00411 {
00412 RegisteredObjects.Remove(p_ro);
00413 }
00414
00415
00416
00417 inline CSimpleList<CExtObject>& __fastcall CExtObject::GetROList(void)
00418 {
00419 return(RegisteredObjects);
00420 }
00421
00422
00423
00424
00425 #endif