00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00102 #ifndef __vtkSMProxy_h
00103 #define __vtkSMProxy_h
00104
00105 #include "vtkSMObject.h"
00106 #include "vtkClientServerID.h"
00107
00108
00109 struct vtkSMProxyInternals;
00110
00111 class vtkPVXMLElement;
00112 class vtkSMProperty;
00113 class vtkSMPropertyIterator;
00114 class vtkSMProxyManager;
00115
00116 class VTK_EXPORT vtkSMProxy : public vtkSMObject
00117 {
00118 public:
00119 static vtkSMProxy* New();
00120 vtkTypeRevisionMacro(vtkSMProxy, vtkSMObject);
00121 void PrintSelf(ostream& os, vtkIndent indent);
00122
00124
00127 vtkSetStringMacro(Name);
00128 vtkGetStringMacro(Name);
00130
00135 void AddProperty(const char* name, vtkSMProperty* prop);
00136
00138
00140 vtkSMProperty* GetProperty(const char* name)
00141 {
00142 return this->GetProperty(name, 0);
00143 }
00145
00149 virtual void UpdateVTKObjects();
00150
00162 virtual void UpdateSelfAndAllInputs();
00163
00165
00166 vtkGetStringMacro(VTKClassName);
00168
00170
00173 vtkSetStringMacro(VTKClassName);
00175
00178 virtual void UnRegister(vtkObjectBase* obj);
00179
00181 vtkClientServerID GetID(unsigned int idx);
00182
00184 vtkClientServerID GetSelfID() { return this->SelfID; }
00185
00188 unsigned int GetNumberOfIDs();
00189
00191 vtkSMPropertyIterator* NewPropertyIterator();
00192
00195 unsigned int GetNumberOfConsumers();
00196
00199 vtkSMProxy* GetConsumerProxy(unsigned int idx);
00200
00204 vtkSMProperty* GetConsumerProperty(unsigned int idx);
00205
00207
00209 vtkGetStringMacro(XMLName);
00211
00213
00216 vtkGetStringMacro(XMLGroup);
00218
00223 virtual void UpdateInformation();
00224
00227 virtual void UpdatePropertyInformation(vtkSMProperty* prop);
00228
00234 virtual void MarkAllPropertiesAsModified();
00235
00236
00238 void SetServers(vtkTypeUInt32 servers);
00239
00241 vtkTypeUInt32 GetServers();
00242
00244
00245 enum
00246 {
00247 COPY_PROXY_PROPERTY_VALUES_BY_REFERENCE=0,
00248 COPY_PROXY_PROPERTY_VALUES_BY_CLONING
00249 };
00251
00252
00254
00262 void Copy(vtkSMProxy* src);
00263 void Copy(vtkSMProxy* src, const char* exceptionClass);
00264 virtual void Copy(vtkSMProxy* src, const char* exceptionClass,
00265 int proxyPropertyCopyFlag);
00267
00270 virtual void MarkConsumersAsModified();
00271
00272 protected:
00273 vtkSMProxy();
00274 ~vtkSMProxy();
00275
00278 vtkSMProperty* GetExposedProperty(const char* name);
00279
00281 void ExposeProperty(const char* name);
00282
00283
00284
00285
00286
00287
00288 friend class vtkSMProperty;
00289 friend class vtkSMProxyManager;
00290 friend class vtkSMInputProperty;
00291 friend class vtkSMProxyProperty;
00292 friend class vtkSMPropertyIterator;
00293 friend class vtkSMProxyObserver;
00294 friend class vtkSMSourceProxy;
00295
00296
00298
00300 vtkSetStringMacro(XMLName);
00302
00304
00307 vtkSetStringMacro(XMLGroup);
00309
00313 virtual void CreateVTKObjects(int numObjects);
00314
00317 void UnRegisterVTKObjects();
00318
00319
00320
00321
00322
00323
00329 virtual void SetID(unsigned int idx, vtkClientServerID id);
00330
00331
00332
00333
00334
00335
00336
00337
00338
00340 void SetServersSelf(vtkTypeUInt32 servers);
00341
00342
00343
00344
00345
00346
00347
00348 void PushProperty(const char* name,
00349 vtkClientServerID id,
00350 vtkTypeUInt32 servers);
00351
00352
00353
00354
00355
00356
00357
00358
00359
00360
00361
00362
00363
00364
00365
00366
00367
00368
00369
00370
00371
00374 void RemoveAllObservers();
00375
00377 void SetPropertyModifiedFlag(const char* name, int flag);
00378
00380
00385 void AddProperty(const char* subProxyName,
00386 const char* name,
00387 vtkSMProperty* prop);
00389
00391 void RemoveProperty(const char* name);
00392
00394 void AddPropertyToSelf(const char* name, vtkSMProperty* prop);
00395
00397 void AddSubProxy(const char* name, vtkSMProxy* proxy);
00398
00400 void RemoveSubProxy(const char* name);
00401
00403 vtkSMProxy* GetSubProxy(const char* name);
00404
00407 void AddConsumer(vtkSMProperty* property, vtkSMProxy* proxy);
00408
00410 void RemoveConsumer(vtkSMProperty* property, vtkSMProxy* proxy);
00411
00413 void RemoveAllConsumers();
00414
00416
00418 vtkSMProperty* NewProperty(const char* name);
00419 vtkSMProperty* NewProperty(const char* name, vtkPVXMLElement* propElement);
00421
00424 virtual vtkSMProperty* GetProperty(const char* name, int selfOnly);
00425
00427 virtual int ReadXMLAttributes(vtkSMProxyManager* pm, vtkPVXMLElement* element);
00428
00429 int CreateSubProxiesAndProperties(vtkSMProxyManager* pm,
00430 vtkPVXMLElement *element);
00431
00432 char* Name;
00433 char* VTKClassName;
00434 char* XMLGroup;
00435 char* XMLName;
00436 int ObjectsCreated;
00437 vtkTypeUInt32 Servers;
00438 int DoNotModifyProperty;
00439
00440
00441
00442
00443 int InUpdateVTKObjects;
00444
00445
00446
00447 int SelfPropertiesModified;
00448
00449 int ArePropertiesModified(int selfOnly = 0);
00450
00451 vtkClientServerID SelfID;
00452
00453 void SetXMLElement(vtkPVXMLElement* element);
00454 vtkPVXMLElement* XMLElement;
00455
00456
00457
00458
00459 virtual void SaveState(const char* name, ostream* file, vtkIndent indent);
00460
00461 void SetupSharedProperties(vtkSMProxy* subproxy, vtkPVXMLElement *element);
00462 void SetupExposedProperties(vtkSMProxy* subproxy, vtkPVXMLElement *element);
00463
00464
00465 int CreateProxyHierarchy(vtkSMProxyManager* pm, vtkPVXMLElement* element);
00466
00467 private:
00468 vtkSMProxyInternals* Internals;
00469
00470 vtkSMProxy(const vtkSMProxy&);
00471 void operator=(const vtkSMProxy&);
00472 };
00473
00474 #endif