Files
ThirdParty-6/ParaView-5.0.1/ParaViewCore/ServerManager/Core/vtkSMSettings.h

237 lines
9.3 KiB
C++

/*=========================================================================
Program: ParaView
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 vtkSMSettings
// .SECTION Description
// vtkSMSettings provides the underlying mechanism for setting default property
// values in ParaView.
//
// This class is a singleton class. Instances should be retrieved with the
// GetInstance() method.
//
// This class provides the facilities for defining a
// linear hierarchy of setting collections. A setting collection is a group of
// not-necessarily-related settings defined in a string or text file. The text
// defining a setting collection is formatted in JSON. Collections can be added
// using the methods AddSettingsFromString() and AddSettingsFromFile().
//
// Each setting collection has an associated priority. The priority is used
// to select the collection from which a setting should be retrieved when
// more than one collection has the same definition. A setting in a collection
// with a higher priority than another collection with the same setting
// has precedence and will be returned by the "Get*" methods in this class.
//
// Settings for proxies and proxy properties are defined by specifying the
// XML names of the proxy group, proxies, and properties in a three-level
// hierarchy. For example, the Sphere Source settings can be defined by the
// following:
//
// \pre{
// \{
// "sources" : \{
// "SphereSource" : \{
// "Radius" : 2.5,
// "Center" : [0.0, 1.0, 0.0]
// \}
// /}
// \}
// }
//
// In this example, "sources" is the proxy group, "SphereSource" is the name of
// a proxy, and "Radius" and "Center" are properties of the proxy.
//
// Vector properties with a single element can be defined as a single element
// (e.g., 2.5) or as a single-element array (e.g., [2.5]). Multi-element vector
// properties are specified as arrays (e.g., [0.0, 1.0, 0.0]).
//
// The "Set*" and "Get*" methods of this class take a character string specifying
// the setting name. This string has the format ".level1.level2.level3[index]".
// For example, to retrieve the y-component of the sphere center in the example
// JSON above, one would write ".sources.SphereSource.Center[1]". Only literal
// values (int, double, and string) are available through this interface;
// access to non-leaf nodes in the JSON format is not provided.
//
// This class supports setting setting values. Settings modified through the
// "Set*" methods modify thet setting collection that has priority
// over all other collections. This collection can be saved to a text file in
// JSON format using the SaveSettingsToFile() method.
//
// Some convenience methods for getting and setting proxy property values are
// provided. GetProxySettings() sets the values of proxy properties that are
// defined in the setting collections. SetProxySettings() saves the non-default
// proxy properties in the highest-priority collection.
#ifndef vtkSMSettings_h
#define vtkSMSettings_h
#include "vtkObject.h"
#include "vtkPVServerManagerCoreModule.h" //needed for exports
#include "vtkStdString.h" // needed for vtkStdString.
#include <vector> // needed for vector.
namespace Json
{
class Value;
}
class vtkSMProxy;
class vtkSMPropertyIterator;
class VTKPVSERVERMANAGERCORE_EXPORT vtkSMSettings : public vtkObject
{
public:
static vtkSMSettings* New();
vtkTypeMacro(vtkSMSettings, vtkObject);
void PrintSelf(ostream& os, vtkIndent indent);
// Description:
// Get singleton instance.
static vtkSMSettings* GetInstance();
// Description:
// Add settings from a string. The string should contain valid JSON-formatted
// text. The "priority" indicates how to treat a setting that has definitions
// in more than one setting collections. If two setting collections
// contain values for the same setting, then the setting from the
// collection with higher priority will be used.
bool AddCollectionFromString(const std::string & settings, double priority);
// Description:
// The same as AddCollectionFromString, but this method reads the settings
// string from the named file. The fileName should be a full path.
bool AddCollectionFromFile(const std::string & fileName, double priority);
// Description:
// Clear out all settings, deleting all collections.
void ClearAllSettings();
// Description:
// Distribute setting collections to all processes if in batch symmetric mode.
bool DistributeSettings();
// Description:
// Save highest priority setting collection to file.
bool SaveSettingsToFile(const std::string & filePath);
// Description:
// Check whether a setting is defined for the requested names.
bool HasSetting(const char* settingName);
// Description:
// Get the number of elements in a setting.
unsigned int GetSettingNumberOfElements(const char* settingName);
// Description:
// Get a vector setting as a scalar value.
// Shortcut for GetSettingAs...(settingName, 0, defaultValue)
int GetSettingAsInt(const char* settingName,
int defaultValue);
double GetSettingAsDouble(const char* settingName,
double defaultValue);
std::string GetSettingAsString(const char* settingName,
const std::string & defaultValue);
// Description:
// Get a single element of a vector setting.
int GetSettingAsInt(const char* settingName,
unsigned int index,
int defaultValue);
double GetSettingAsDouble(const char* settingName,
unsigned int index,
double defaultValue);
std::string GetSettingAsString(const char* settingName,
unsigned int index,
const std::string & defaultValue);
// Description:
// Set the property values in a vtkSMProxy from the setting collections.
bool GetProxySettings(vtkSMProxy* proxy);
// Description:
// Set the property values in a vtkSMProxy from the settings collections
// under the given prefix.
bool GetProxySettings(const char* prefix, vtkSMProxy* proxy);
// Description:
// Get description for a setting.
std::string GetSettingDescription(const char* settingName);
// Description:
// Set setting of a given name in the highest priority collection.
// Shortcut for SetSetting(settingName, 0, value). Useful for setting scalar values.
void SetSetting(const char* settingName, int value);
void SetSetting(const char* settingName, double value);
void SetSetting(const char* settingName, const std::string & value);
// Description:
// Set element of a vector setting at a location given by the setting name.
void SetSetting(const char* settingName, unsigned int index, int value);
void SetSetting(const char* settingName, unsigned int index, double value);
void SetSetting(const char* settingName, unsigned int index, const std::string & value);
// Description:
// Save non-default settings in the current user settings.
// Use the optional 'propertyIt' to limit the serialization to a subset of
// properties (typically using vtkSMPropertyIterator subclasses like
// vtkSMNamedPropertyIterator).
// \c skipPropertiesWithDynamicDomains when true (default) ensures that we
// skip serializing properties that have domains whose values change at
// runtime.
void SetProxySettings(vtkSMProxy* proxy,
vtkSMPropertyIterator* propertyIt = NULL,
bool skipPropertiesWithDynamicDomains=true);
// Description:
// Save non-default settings in the current user settings under the given prefix.
// Use the optional 'propertyIt' to limit the serialization to a subset of
// properties (typically using vtkSMPropertyIterator subclasses like
// vtkSMNamedPropertyIterator).
// \c skipPropertiesWithDynamicDomains when true (default) ensures that we
// skip serializing properties that have domains whose values change at
// runtime.
void SetProxySettings(const char* prefix, vtkSMProxy* proxy,
vtkSMPropertyIterator* propertyIt = NULL,
bool skipPropertiesWithDynamicDomains=true);
// Description:
// Set the description of a setting.
void SetSettingDescription(const char* settingName, const char* description);
// Description:
// Saves the state of the proxy as JSON. The implementation simply
// converts the state XML to JSON.
static Json::Value SerializeAsJSON(
vtkSMProxy* proxy, vtkSMPropertyIterator* iter=NULL);
// Description:
// Restores a proxy state using the JSON equivalent. The implementation
// converts JSON to XML state for the proxy and then attempts to restore the
// XML state.
static bool DeserializeFromJSON(
vtkSMProxy* proxy, const Json::Value& value);
protected:
vtkSMSettings();
virtual ~vtkSMSettings();
private:
vtkSMSettings(const vtkSMSettings&); // Not implemented
void operator=(const vtkSMSettings&); // Not implemented
class vtkSMSettingsInternal;
vtkSMSettingsInternal * Internal;
};
#endif