mirror of
https://github.com/OpenFOAM/ThirdParty-6.git
synced 2025-12-08 06:57:43 +00:00
335 lines
10 KiB
C++
335 lines
10 KiB
C++
/*=========================================================================
|
|
|
|
Program: ParaView
|
|
Module: vtkSMProxyManager.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 "vtkSMProxyManager.h"
|
|
|
|
#include "vtkCommand.h"
|
|
#include "vtkObjectFactory.h"
|
|
#include "vtkProcessModule.h"
|
|
#include "vtkPVConfig.h" // for PARAVIEW_VERSION_*
|
|
#include "vtkPVXMLElement.h"
|
|
#include "vtkSessionIterator.h"
|
|
#include "vtkSIProxyDefinitionManager.h"
|
|
#include "vtkSmartPointer.h"
|
|
#include "vtkSMPluginManager.h"
|
|
#include "vtkSMReaderFactory.h"
|
|
#include "vtkSMSession.h"
|
|
#include "vtkSMSessionProxyManager.h"
|
|
#include "vtkSMUndoStackBuilder.h"
|
|
#include "vtkSMWriterFactory.h"
|
|
#include "vtkWeakPointer.h"
|
|
|
|
#include <map>
|
|
|
|
#define PARAVIEW_SOURCE_VERSION "paraview version " PARAVIEW_VERSION_FULL
|
|
//***************************************************************************
|
|
class vtkSMProxyManager::vtkPXMInternal
|
|
{
|
|
public:
|
|
vtkPXMInternal()
|
|
: ActiveSessionID(0)
|
|
{
|
|
}
|
|
~vtkPXMInternal()
|
|
{
|
|
}
|
|
vtkIdType ActiveSessionID;
|
|
};
|
|
|
|
//***************************************************************************
|
|
// Statics...
|
|
vtkSmartPointer<vtkSMProxyManager> vtkSMProxyManager::Singleton;
|
|
|
|
vtkCxxSetObjectMacro(vtkSMProxyManager, UndoStackBuilder,
|
|
vtkSMUndoStackBuilder);
|
|
//***************************************************************************
|
|
vtkSMProxyManager* vtkSMProxyManager::New()
|
|
{
|
|
vtkObject* ret = vtkObjectFactory::CreateInstance("vtkSMProxyManager");
|
|
if (ret)
|
|
{
|
|
return static_cast<vtkSMProxyManager*>(ret);
|
|
}
|
|
return new vtkSMProxyManager;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------
|
|
vtkSMProxyManager::vtkSMProxyManager()
|
|
{
|
|
this->PXMStorage = new vtkPXMInternal();
|
|
this->PluginManager = vtkSMPluginManager::New();
|
|
this->UndoStackBuilder = NULL;
|
|
|
|
this->ReaderFactory = vtkSMReaderFactory::New();
|
|
// Keep track of when proxy definitions change and then if it's a new
|
|
// reader we add it to ReaderFactory.
|
|
this->AddObserver(vtkSIProxyDefinitionManager::ProxyDefinitionsUpdated,
|
|
this->ReaderFactory,
|
|
&vtkSMReaderFactory::UpdateAvailableReaders);
|
|
this->AddObserver(vtkSIProxyDefinitionManager::CompoundProxyDefinitionsUpdated,
|
|
this->ReaderFactory,
|
|
&vtkSMReaderFactory::UpdateAvailableReaders);
|
|
|
|
this->WriterFactory = vtkSMWriterFactory::New();
|
|
// Keep track of when proxy definitions change and then if it's a new
|
|
// writer we add it to WriterFactory.
|
|
this->AddObserver(vtkSIProxyDefinitionManager::ProxyDefinitionsUpdated,
|
|
this->WriterFactory,
|
|
&vtkSMWriterFactory::UpdateAvailableWriters);
|
|
this->AddObserver(vtkSIProxyDefinitionManager::CompoundProxyDefinitionsUpdated,
|
|
this->WriterFactory,
|
|
&vtkSMWriterFactory::UpdateAvailableWriters);
|
|
|
|
// Monitor session creations. If a new session is created and we don't have an
|
|
// active one, we make that new session active.
|
|
vtkProcessModule* pm = vtkProcessModule::GetProcessModule();
|
|
if (pm)
|
|
{
|
|
pm->AddObserver(vtkCommand::ConnectionCreatedEvent,
|
|
this, &vtkSMProxyManager::ConnectionsUpdated);
|
|
pm->AddObserver(vtkCommand::ConnectionClosedEvent,
|
|
this, &vtkSMProxyManager::ConnectionsUpdated);
|
|
}
|
|
}
|
|
|
|
//---------------------------------------------------------------------------
|
|
vtkSMProxyManager::~vtkSMProxyManager()
|
|
{
|
|
this->SetUndoStackBuilder(NULL);
|
|
|
|
this->PluginManager->Delete();
|
|
this->PluginManager = NULL;
|
|
|
|
this->ReaderFactory->Delete();
|
|
this->ReaderFactory = 0;
|
|
|
|
this->WriterFactory->Delete();
|
|
this->WriterFactory = 0;
|
|
|
|
delete this->PXMStorage;
|
|
this->PXMStorage = NULL;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
vtkSMProxyManager* vtkSMProxyManager::GetProxyManager()
|
|
{
|
|
if(!vtkSMProxyManager::Singleton)
|
|
{
|
|
vtkSMProxyManager* pxm = vtkSMProxyManager::New();
|
|
vtkSMProxyManager::Singleton.TakeReference(pxm);
|
|
}
|
|
return vtkSMProxyManager::Singleton.GetPointer();
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
void vtkSMProxyManager::Finalize()
|
|
{
|
|
vtkSMProxyManager::Singleton = NULL;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------
|
|
bool vtkSMProxyManager::IsInitialized()
|
|
{
|
|
return (vtkSMProxyManager::Singleton != NULL);
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
const char* vtkSMProxyManager::GetParaViewSourceVersion()
|
|
{
|
|
return PARAVIEW_SOURCE_VERSION;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
int vtkSMProxyManager::GetVersionMajor()
|
|
{
|
|
return PARAVIEW_VERSION_MAJOR;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
int vtkSMProxyManager::GetVersionMinor()
|
|
{
|
|
return PARAVIEW_VERSION_MINOR;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
int vtkSMProxyManager::GetVersionPatch()
|
|
{
|
|
return PARAVIEW_VERSION_PATCH;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
vtkSMSession* vtkSMProxyManager::GetActiveSession()
|
|
{
|
|
vtkProcessModule* pm = vtkProcessModule::GetProcessModule();
|
|
return pm? vtkSMSession::SafeDownCast(
|
|
pm->GetSession(this->PXMStorage->ActiveSessionID)) : NULL;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
void vtkSMProxyManager::ConnectionsUpdated(
|
|
vtkObject*, unsigned long eventid, void* calldata)
|
|
{
|
|
// Callback called when a new session is registered. Update active session
|
|
// accordingly.
|
|
if (eventid == vtkCommand::ConnectionCreatedEvent)
|
|
{
|
|
// A new session always becomes active.
|
|
vtkIdType sid = *(reinterpret_cast<vtkIdType*>(calldata));
|
|
this->SetActiveSession(sid);
|
|
}
|
|
else if (eventid == vtkCommand::ConnectionClosedEvent)
|
|
{
|
|
vtkIdType sid = *(reinterpret_cast<vtkIdType*>(calldata));
|
|
if (this->PXMStorage->ActiveSessionID == sid)
|
|
{
|
|
vtkIdType newSID = 0;
|
|
|
|
// Find another session, if available, and make that active.
|
|
vtkProcessModule* pm = vtkProcessModule::GetProcessModule();
|
|
vtkSessionIterator* iter = pm->NewSessionIterator();
|
|
for (iter->InitTraversal(); !iter->IsDoneWithTraversal();
|
|
iter->GoToNextItem())
|
|
{
|
|
if (iter->GetCurrentSession() != NULL &&
|
|
iter->GetCurrentSessionId() != sid)
|
|
{
|
|
newSID = iter->GetCurrentSessionId();
|
|
break;
|
|
}
|
|
}
|
|
iter->Delete();
|
|
|
|
this->SetActiveSession(newSID);
|
|
}
|
|
}
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
void vtkSMProxyManager::SetActiveSession(vtkIdType sid)
|
|
{
|
|
if (this->PXMStorage->ActiveSessionID != sid)
|
|
{
|
|
this->PXMStorage->ActiveSessionID = sid;
|
|
vtkSMSession* session = this->GetActiveSession();
|
|
this->InvokeEvent(vtkSMProxyManager::ActiveSessionChanged, session);
|
|
}
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
void vtkSMProxyManager::SetActiveSession(vtkSMSession* session)
|
|
{
|
|
vtkProcessModule* pm = vtkProcessModule::GetProcessModule();
|
|
vtkIdType sid = session? pm->GetSessionID(session) : 0;
|
|
this->SetActiveSession(sid);
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
vtkSMSessionProxyManager* vtkSMProxyManager::GetActiveSessionProxyManager()
|
|
{
|
|
return this->GetSessionProxyManager(this->GetActiveSession());
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
vtkSMSessionProxyManager* vtkSMProxyManager::GetSessionProxyManager(vtkSMSession* session)
|
|
{
|
|
return session? session->GetSessionProxyManager() : NULL;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
void vtkSMProxyManager::PrintSelf(ostream& os, vtkIndent indent)
|
|
{
|
|
this->Superclass::PrintSelf(os, indent);
|
|
os << indent << "UndoStackBuilder: " << this->UndoStackBuilder << endl;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------
|
|
vtkSMProxy* vtkSMProxyManager::NewProxy(const char* groupName,
|
|
const char* proxyName, const char* subProxyName)
|
|
{
|
|
if (vtkSMSessionProxyManager* pxm = this->GetActiveSessionProxyManager())
|
|
{
|
|
return pxm->NewProxy(groupName, proxyName, subProxyName);
|
|
}
|
|
vtkErrorMacro("No active session found.");
|
|
return NULL;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------
|
|
void vtkSMProxyManager::RegisterProxy(
|
|
const char* groupname, const char* name, vtkSMProxy* proxy)
|
|
{
|
|
if (vtkSMSessionProxyManager* pxm = this->GetActiveSessionProxyManager())
|
|
{
|
|
pxm->RegisterProxy(groupname, name, proxy);
|
|
}
|
|
else
|
|
{
|
|
vtkErrorMacro("No active session found.");
|
|
}
|
|
}
|
|
|
|
//---------------------------------------------------------------------------
|
|
vtkSMProxy* vtkSMProxyManager::GetProxy(const char* groupname, const char* name)
|
|
{
|
|
if (vtkSMSessionProxyManager* pxm = this->GetActiveSessionProxyManager())
|
|
{
|
|
return pxm->GetProxy(groupname, name);
|
|
}
|
|
vtkErrorMacro("No active session found.");
|
|
return NULL;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------
|
|
void vtkSMProxyManager::UnRegisterProxy(
|
|
const char* groupname, const char* name, vtkSMProxy* proxy)
|
|
{
|
|
if (vtkSMSessionProxyManager* pxm = this->GetActiveSessionProxyManager())
|
|
{
|
|
pxm->UnRegisterProxy(groupname, name, proxy);
|
|
}
|
|
else
|
|
{
|
|
vtkErrorMacro("No active session found.");
|
|
}
|
|
}
|
|
|
|
//---------------------------------------------------------------------------
|
|
const char* vtkSMProxyManager::GetProxyName(const char* groupname, unsigned int idx)
|
|
{
|
|
if (vtkSMSessionProxyManager* pxm = this->GetActiveSessionProxyManager())
|
|
{
|
|
return pxm->GetProxyName(groupname, idx);
|
|
}
|
|
else
|
|
{
|
|
vtkErrorMacro("No active session found.");
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------
|
|
const char* vtkSMProxyManager::GetProxyName(
|
|
const char* groupname, vtkSMProxy* pxy)
|
|
{
|
|
if (vtkSMSessionProxyManager* pxm = this->GetActiveSessionProxyManager())
|
|
{
|
|
return pxm->GetProxyName(groupname, pxy);
|
|
}
|
|
else
|
|
{
|
|
vtkErrorMacro("No active session found.");
|
|
}
|
|
return NULL;
|
|
}
|