mirror of
https://github.com/OpenFOAM/ThirdParty-6.git
synced 2025-12-08 06:57:43 +00:00
193 lines
6.7 KiB
C++
193 lines
6.7 KiB
C++
/*=========================================================================
|
|
|
|
Program: ParaView
|
|
Module: vtkSMRemoteObject.h
|
|
|
|
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.
|
|
|
|
=========================================================================*/
|
|
// .NAME vtkSMRemoteObject - baseclass for all proxy-objects that have counter
|
|
// parts on server as well as client processes.
|
|
// .SECTION Description
|
|
// Abstract class involved in ServerManager class hierarchy that has a
|
|
// corresponding SIObject which can be local or remote.
|
|
|
|
#ifndef vtkSMRemoteObject_h
|
|
#define vtkSMRemoteObject_h
|
|
|
|
#include "vtkPVServerManagerCoreModule.h" //needed for exports
|
|
#include "vtkSMSessionObject.h"
|
|
#include "vtkSMMessageMinimal.h" // needed for vtkSMMessage
|
|
#include "vtkWeakPointer.h" // needed for vtkWeakPointer
|
|
|
|
class vtkClientServerStream;
|
|
class vtkSMSession;
|
|
class vtkSMProxyLocator;
|
|
class vtkSMLoadStateContext;
|
|
|
|
class VTKPVSERVERMANAGERCORE_EXPORT vtkSMRemoteObject : public vtkSMSessionObject
|
|
{
|
|
// My friends are...
|
|
friend class vtkSMStateHelper; // To pull state
|
|
friend class vtkSMStateLoader; // To set GlobalId as the originals
|
|
|
|
public:
|
|
vtkTypeMacro(vtkSMRemoteObject,vtkSMSessionObject);
|
|
void PrintSelf(ostream& os, vtkIndent indent);
|
|
|
|
// Description:
|
|
// Get/Set the location where the underlying VTK-objects are created. The
|
|
// value can be contructed by or-ing vtkSMSession::ServerFlags
|
|
vtkSetMacro(Location, vtkTypeUInt32);
|
|
vtkGetMacro(Location, vtkTypeUInt32);
|
|
|
|
// Description:
|
|
// Override the SetSession so if the object already have an ID
|
|
// we automatically register it to the associated session
|
|
virtual void SetSession(vtkSMSession*);
|
|
|
|
// Description:
|
|
// Get the global unique id for this object. If none is set and the session is
|
|
// valid, a new global id will be assigned automatically.
|
|
virtual vtkTypeUInt32 GetGlobalID();
|
|
const char* GetGlobalIDAsString();
|
|
|
|
// Description:
|
|
// Allow the user to test if the RemoteObject has already a GlobalID without
|
|
// assigning a new one to it.
|
|
bool HasGlobalID();
|
|
|
|
// Description:
|
|
// Allow user to set the remote object to be discard for Undo/Redo
|
|
// action. By default, any remote object is Undoable.
|
|
vtkBooleanMacro(Prototype, bool);
|
|
bool IsPrototype() {return this->Prototype;}
|
|
vtkSetMacro(Prototype, bool);
|
|
|
|
//BTX
|
|
|
|
// Description:
|
|
// This method return the full object state that can be used to create that
|
|
// object from scratch.
|
|
// This method will be used to fill the undo stack.
|
|
// If not overriden this will return NULL.
|
|
virtual const vtkSMMessage* GetFullState()
|
|
{ return NULL; }
|
|
|
|
// Description:
|
|
// This method is used to initialise the object to the given state
|
|
// If the definitionOnly Flag is set to True the proxy won't load the
|
|
// properties values and just setup the new proxy hierarchy with all subproxy
|
|
// globalID set. This allow to split the load process in 2 step to prevent
|
|
// invalid state when property refere to a sub-proxy that does not exist yet.
|
|
virtual void LoadState( const vtkSMMessage* msg, vtkSMProxyLocator* locator)
|
|
{
|
|
(void) msg;
|
|
(void) locator;
|
|
}
|
|
|
|
// Description:
|
|
// Allow to switch off any push of state change to the server for that
|
|
// particular object.
|
|
// This is used when we load a state based on a server notification. In that
|
|
// particular case, the server is already aware of that new state, so we keep
|
|
// those changes local.
|
|
virtual void EnableLocalPushOnly();
|
|
|
|
// Description:
|
|
// Enable the given remote object to communicate its state normaly to the
|
|
// server location.
|
|
virtual void DisableLocalPushOnly();
|
|
|
|
// Description:
|
|
// Let the session be aware that even if the Location is client only,
|
|
// the message should not be send to the server for a general broadcast
|
|
virtual bool IsLocalPushOnly() { return this->ClientOnlyLocationFlag; }
|
|
|
|
protected:
|
|
// Description:
|
|
// Default constructor.
|
|
vtkSMRemoteObject();
|
|
|
|
// Description:
|
|
// Destructor.
|
|
virtual ~vtkSMRemoteObject();
|
|
|
|
// Description:
|
|
// Subclasses can call this method to send a message to its state
|
|
// object on the server processes specified.
|
|
void PushState(vtkSMMessage* msg);
|
|
|
|
// Description:
|
|
// Subclasses can call this method to pull the state from the
|
|
// state-object on the server processes specified. Returns true on successful
|
|
// fetch. The message is updated with the fetched state.
|
|
bool PullState(vtkSMMessage* msg);
|
|
|
|
// Description:
|
|
// Set the GlobalUniqueId
|
|
void SetGlobalID(vtkTypeUInt32 guid);
|
|
|
|
// Global-ID for this vtkSMRemoteObject. This is assigned when needed.
|
|
// Assigned at :
|
|
// - First push
|
|
// - or when the RemoteObject is created by the ProcessModule remotely.
|
|
// - or when state is loaded from protobuf messages
|
|
vtkTypeUInt32 GlobalID;
|
|
|
|
// Location flag identify the processes on which the vtkSIObject
|
|
// corresponding to this vtkSMRemoteObject exist.
|
|
vtkTypeUInt32 Location;
|
|
|
|
// Allow remote object to be discard for any state management such as
|
|
// Undo/Redo, Register/UnRegister (in ProxyManager) and so on...
|
|
bool Prototype;
|
|
|
|
// Field that store the Disable/EnableLocalPushOnly() state information
|
|
bool ClientOnlyLocationFlag;
|
|
|
|
// Convenient method used to return either the local Location or a filtered
|
|
// version of it based on the ClientOnlyLocationFlag
|
|
vtkTypeUInt32 GetFilteredLocation();
|
|
|
|
private:
|
|
vtkSMRemoteObject(const vtkSMRemoteObject&); // Not implemented
|
|
void operator=(const vtkSMRemoteObject&); // Not implemented
|
|
|
|
char* GlobalIDString;
|
|
//ETX
|
|
};
|
|
|
|
/// This defines a manipulator for the vtkClientServerStream that can be used
|
|
/// to indicate to the interpreter that the placeholder is to be replaced by
|
|
/// the vtkSIProxy instance for the given vtkSMProxy instance.
|
|
/// e.g.
|
|
/// \code
|
|
/// vtkClientServerStream stream;
|
|
/// stream << vtkClientServerStream::Invoke
|
|
/// << SIOBJECT(proxyA)
|
|
/// << "MethodName"
|
|
/// << vtkClientServerStream::End;
|
|
/// \endcode
|
|
/// Will result in calling the vtkSIProxy::MethodName() when the stream in
|
|
/// interpreted.
|
|
class VTKPVSERVERMANAGERCORE_EXPORT SIOBJECT
|
|
{
|
|
vtkSMRemoteObject* Reference;
|
|
friend VTKPVSERVERMANAGERCORE_EXPORT vtkClientServerStream& operator<<(
|
|
vtkClientServerStream& stream, const SIOBJECT& manipulator);
|
|
public:
|
|
SIOBJECT(vtkSMRemoteObject* rmobject) : Reference(rmobject) {}
|
|
};
|
|
|
|
VTKPVSERVERMANAGERCORE_EXPORT vtkClientServerStream& operator<< (vtkClientServerStream& stream,
|
|
const SIOBJECT& manipulator);
|
|
|
|
#endif // #ifndef vtkSMRemoteObject_h
|