Files
ThirdParty-6/ParaView-5.0.1/ParaViewCore/ServerManager/Core/vtkSMSettingsProxy.cxx

131 lines
3.5 KiB
C++

/*=========================================================================
Program: ParaView
Module: vtkSMSettingsProxy.cxx
Copyright (c) Kitware, Inc.
All rights reserved.
See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
#include "vtkSMSettingsProxy.h"
#include "vtkCommand.h"
#include "vtkObjectFactory.h"
#include "vtkPVSession.h"
#include "vtkSmartPointer.h"
#include "vtkSMProperty.h"
#include "vtkSMPropertyIterator.h"
#include "vtkSMSettings.h"
class vtkSMSettingsObserver : public vtkCommand
{
public:
static vtkSMSettingsObserver *New()
{ return new vtkSMSettingsObserver; }
virtual void Execute(vtkObject*, unsigned long eventId, void*)
{
if (this->Proxy)
{
this->Proxy->ExecuteEvent(eventId);
}
}
vtkSMSettingsObserver() : Proxy(NULL) {}
vtkSMSettingsProxy* Proxy;
};
vtkStandardNewMacro(vtkSMSettingsProxy);
//----------------------------------------------------------------------------
vtkSMSettingsProxy::vtkSMSettingsProxy()
{
this->SetLocation(vtkPVSession::CLIENT);
this->Observer = vtkSMSettingsObserver::New();
this->Observer->Proxy = this;
}
//----------------------------------------------------------------------------
vtkSMSettingsProxy::~vtkSMSettingsProxy()
{
if (this->ObjectsCreated)
{
vtkObject* object = vtkObject::SafeDownCast(this->GetClientSideObject());
if (object)
{
object->RemoveObserver(this->Observer);
}
}
this->Observer->Proxy = NULL;
this->Observer->Delete();
}
//----------------------------------------------------------------------------
int vtkSMSettingsProxy::ReadXMLAttributes(
vtkSMSessionProxyManager* pm, vtkPVXMLElement* element)
{
if (!this->Superclass::ReadXMLAttributes(pm, element))
{
return 0;
}
// Now link information properties that provide the current value of the VTK
// object with the corresponding proxy property
vtkSmartPointer<vtkSMPropertyIterator> iter;
iter.TakeReference(this->NewPropertyIterator());
for (iter->Begin(); !iter->IsAtEnd(); iter->Next() )
{
vtkSMProperty* property = iter->GetProperty();
if (property)
{
vtkSMProperty* infoProperty = property->GetInformationProperty();
if (infoProperty)
{
this->LinkProperty(infoProperty, property);
}
}
}
return 1;
}
//----------------------------------------------------------------------------
void vtkSMSettingsProxy::CreateVTKObjects()
{
if (this->ObjectsCreated)
{
return;
}
this->Superclass::CreateVTKObjects();
vtkObject* object = vtkObject::SafeDownCast(this->GetClientSideObject());
if (object)
{
object->AddObserver(vtkCommand::ModifiedEvent, this->Observer);
}
}
//----------------------------------------------------------------------------
void vtkSMSettingsProxy::ExecuteEvent(unsigned long eventId)
{
this->UpdatePropertyInformation();
this->InvokeEvent(eventId);
vtkSMSettings* settings = vtkSMSettings::GetInstance();
settings->SetProxySettings(this);
}
//----------------------------------------------------------------------------
void vtkSMSettingsProxy::PrintSelf(ostream& os, vtkIndent indent)
{
this->Superclass::PrintSelf(os, indent);
}