+ add new class ParameterSerializer to load and save parameter files
This commit is contained in:
parent
af72ae09c1
commit
00eaab0522
|
@ -904,15 +904,31 @@ void Application::destruct(void)
|
|||
{
|
||||
// saving system parameter
|
||||
Console().Log("Saving system parameter...\n");
|
||||
_pcSysParamMngr->SaveDocument(mConfig["SystemParameter"].c_str());
|
||||
_pcSysParamMngr->SaveDocument();
|
||||
// saving the User parameter
|
||||
Console().Log("Saving system parameter...done\n");
|
||||
Console().Log("Saving user parameter...\n");
|
||||
_pcUserParamMngr->SaveDocument(mConfig["UserParameter"].c_str());
|
||||
_pcUserParamMngr->SaveDocument();
|
||||
Console().Log("Saving user parameter...done\n");
|
||||
// clean up
|
||||
delete _pcSysParamMngr;
|
||||
delete _pcUserParamMngr;
|
||||
|
||||
// now save all other parameter files
|
||||
std::map<std::string,ParameterManager *>& paramMgr = _pcSingleton->mpcPramManager;
|
||||
for (std::map<std::string,ParameterManager *>::iterator it = paramMgr.begin(); it != paramMgr.end(); ++it) {
|
||||
if ((it->second != _pcSysParamMngr) && (it->second != _pcUserParamMngr)) {
|
||||
if (it->second->HasSerializer()) {
|
||||
Console().Log("Saving %s...\n", it->first.c_str());
|
||||
it->second->SaveDocument();
|
||||
Console().Log("Saving %s...done\n", it->first.c_str());
|
||||
}
|
||||
}
|
||||
|
||||
// clean up
|
||||
delete it->second;
|
||||
}
|
||||
|
||||
paramMgr.clear();
|
||||
_pcSysParamMngr = 0;
|
||||
_pcUserParamMngr = 0;
|
||||
|
||||
// not initialized or doubel destruct!
|
||||
assert(_pcSingleton);
|
||||
|
@ -1455,10 +1471,6 @@ void Application::logStatus()
|
|||
|
||||
void Application::LoadParameters(void)
|
||||
{
|
||||
// create standard parameter sets
|
||||
_pcSysParamMngr = new ParameterManager();
|
||||
_pcUserParamMngr = new ParameterManager();
|
||||
|
||||
// Init parameter sets ===========================================================
|
||||
//
|
||||
if (mConfig.find("UserParameter") == mConfig.end())
|
||||
|
@ -1466,9 +1478,15 @@ void Application::LoadParameters(void)
|
|||
if (mConfig.find("SystemParameter") == mConfig.end())
|
||||
mConfig["SystemParameter"] = mConfig["UserAppData"] + "system.cfg";
|
||||
|
||||
// create standard parameter sets
|
||||
_pcSysParamMngr = new ParameterManager();
|
||||
_pcSysParamMngr->SetSerializer(new ParameterSerializer(mConfig["SystemParameter"]));
|
||||
|
||||
_pcUserParamMngr = new ParameterManager();
|
||||
_pcUserParamMngr->SetSerializer(new ParameterSerializer(mConfig["UserParameter"]));
|
||||
|
||||
try {
|
||||
if (_pcSysParamMngr->LoadOrCreateDocument(mConfig["SystemParameter"].c_str()) && !(mConfig["Verbose"] == "Strict")) {
|
||||
if (_pcSysParamMngr->LoadOrCreateDocument() && !(mConfig["Verbose"] == "Strict")) {
|
||||
// Configuration file optional when using as Python module
|
||||
if (!Py_IsInitialized()) {
|
||||
Console().Warning(" Parameter does not exist, writing initial one\n");
|
||||
|
@ -1487,7 +1505,7 @@ void Application::LoadParameters(void)
|
|||
}
|
||||
|
||||
try {
|
||||
if (_pcUserParamMngr->LoadOrCreateDocument(mConfig["UserParameter"].c_str()) && !(mConfig["Verbose"] == "Strict")) {
|
||||
if (_pcUserParamMngr->LoadOrCreateDocument() && !(mConfig["Verbose"] == "Strict")) {
|
||||
// The user parameter file doesn't exist. When an alternative parameter file is offered
|
||||
// this will be used.
|
||||
std::map<std::string, std::string>::iterator it = mConfig.find("UserParameterTemplate");
|
||||
|
|
|
@ -957,6 +957,34 @@ void ParameterGrp::NotifyAll()
|
|||
Notify(It5->first.c_str());
|
||||
}
|
||||
|
||||
//**************************************************************************
|
||||
//**************************************************************************
|
||||
// ParameterSerializer
|
||||
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
ParameterSerializer::ParameterSerializer(const std::string& fn)
|
||||
: filename(fn)
|
||||
{
|
||||
}
|
||||
|
||||
ParameterSerializer::~ParameterSerializer()
|
||||
{
|
||||
}
|
||||
|
||||
void ParameterSerializer::SaveDocument(const ParameterManager& mgr)
|
||||
{
|
||||
mgr.SaveDocument(filename.c_str());
|
||||
}
|
||||
|
||||
int ParameterSerializer::LoadDocument(ParameterManager& mgr)
|
||||
{
|
||||
return mgr.LoadDocument(filename.c_str());
|
||||
}
|
||||
|
||||
bool ParameterSerializer::LoadOrCreateDocument(ParameterManager& mgr)
|
||||
{
|
||||
return mgr.LoadOrCreateDocument(filename.c_str());
|
||||
}
|
||||
|
||||
//**************************************************************************
|
||||
//**************************************************************************
|
||||
// ParameterManager
|
||||
|
@ -970,7 +998,7 @@ static XercesDOMParser::ValSchemes gValScheme = XercesDOMParser::Val_Au
|
|||
/** Default construction
|
||||
*/
|
||||
ParameterManager::ParameterManager()
|
||||
: ParameterGrp(), _pDocument(0)
|
||||
: ParameterGrp(), _pDocument(0), paramSerializer(0)
|
||||
{
|
||||
// initialize the XML system
|
||||
Init();
|
||||
|
@ -1036,6 +1064,7 @@ ParameterManager::ParameterManager()
|
|||
ParameterManager::~ParameterManager()
|
||||
{
|
||||
delete _pDocument;
|
||||
delete paramSerializer;
|
||||
}
|
||||
|
||||
void ParameterManager::Init(void)
|
||||
|
@ -1069,6 +1098,43 @@ void ParameterManager::Terminate(void)
|
|||
XMLPlatformUtils::Terminate();
|
||||
}
|
||||
|
||||
//**************************************************************************
|
||||
// Serializer handling
|
||||
|
||||
void ParameterManager::SetSerializer(ParameterSerializer* ps)
|
||||
{
|
||||
if (paramSerializer != ps)
|
||||
delete paramSerializer;
|
||||
paramSerializer = ps;
|
||||
}
|
||||
|
||||
bool ParameterManager::HasSerializer() const
|
||||
{
|
||||
return (paramSerializer != 0);
|
||||
}
|
||||
|
||||
int ParameterManager::LoadDocument()
|
||||
{
|
||||
if (paramSerializer)
|
||||
return paramSerializer->LoadDocument(*this);
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
|
||||
bool ParameterManager::LoadOrCreateDocument()
|
||||
{
|
||||
if (paramSerializer)
|
||||
return paramSerializer->LoadOrCreateDocument(*this);
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
void ParameterManager::SaveDocument() const
|
||||
{
|
||||
if (paramSerializer)
|
||||
paramSerializer->SaveDocument(*this);
|
||||
}
|
||||
|
||||
//**************************************************************************
|
||||
// Document handling
|
||||
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
|
||||
#ifndef BASE__PARAMETER_H
|
||||
#define BASE__PARAMETER_H
|
||||
|
||||
|
||||
// (re-)defined in pyconfig.h
|
||||
#if defined (_POSIX_C_SOURCE)
|
||||
# undef _POSIX_C_SOURCE
|
||||
|
@ -264,13 +264,33 @@ protected:
|
|||
|
||||
};
|
||||
|
||||
/** The parameter serializer class
|
||||
* This is a helper class to serialize a parameter XML document.
|
||||
* Does loading and saving the DOM document from and to files.
|
||||
* In sub-classes the load and saving of XML documents can be
|
||||
* customized.
|
||||
* @see ParameterManager
|
||||
*/
|
||||
class BaseExport ParameterSerializer
|
||||
{
|
||||
public:
|
||||
ParameterSerializer(const std::string& fn);
|
||||
virtual ~ParameterSerializer();
|
||||
|
||||
virtual void SaveDocument(const ParameterManager&);
|
||||
virtual int LoadDocument(ParameterManager&);
|
||||
virtual bool LoadOrCreateDocument(ParameterManager&);
|
||||
|
||||
protected:
|
||||
std::string filename;
|
||||
};
|
||||
|
||||
/** The parameter manager class
|
||||
* This class manages a parameter XML document.
|
||||
* Does loding, saving and handling the DOM document.
|
||||
* Does loading, saving and handling the DOM document.
|
||||
* @see ParameterGrp
|
||||
*/
|
||||
class BaseExport ParameterManager : public ParameterGrp
|
||||
class BaseExport ParameterManager : public ParameterGrp
|
||||
{
|
||||
public:
|
||||
ParameterManager();
|
||||
|
@ -286,9 +306,24 @@ public:
|
|||
void CreateDocument(void);
|
||||
void CheckDocument() const;
|
||||
|
||||
/** @name Parameter serialization */
|
||||
//@{
|
||||
/// Sets a serializer. The ParameterManager takes ownership of the serializer.
|
||||
void SetSerializer(ParameterSerializer*);
|
||||
/// Returns true if a serializer is set, otherwise false is returned.
|
||||
bool HasSerializer() const;
|
||||
/// Loads an XML document by calling the serializer's load method.
|
||||
int LoadDocument();
|
||||
/// Loads or creates an XML document by calling the serializer's load method.
|
||||
bool LoadOrCreateDocument();
|
||||
/// Saves an XML document by calling the serializer's save method.
|
||||
void SaveDocument() const;
|
||||
//@}
|
||||
|
||||
private:
|
||||
|
||||
XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument *_pDocument;
|
||||
ParameterSerializer * paramSerializer;
|
||||
|
||||
bool gDoNamespaces ;
|
||||
bool gDoSchema ;
|
||||
|
|
|
@ -237,6 +237,16 @@ void DlgParameterImp::onGroupSelected( QTreeWidgetItem * item )
|
|||
}
|
||||
}
|
||||
|
||||
/** Switches the type of parameters with name @a config. */
|
||||
void DlgParameterImp::activateParameterSet(const char* config)
|
||||
{
|
||||
int index = ui->parameterSet->findData(QByteArray(config));
|
||||
if (index != -1) {
|
||||
ui->parameterSet->setCurrentIndex(index);
|
||||
onChangeParameterSet(index);
|
||||
}
|
||||
}
|
||||
|
||||
/** Switches the type of parameters either to user or system parameters. */
|
||||
void DlgParameterImp::onChangeParameterSet(int index)
|
||||
{
|
||||
|
@ -244,12 +254,7 @@ void DlgParameterImp::onChangeParameterSet(int index)
|
|||
if (!rcParMngr)
|
||||
return;
|
||||
|
||||
if (rcParMngr == App::GetApplication().GetParameterSet("System parameter"))
|
||||
ui->buttonSaveToDisk->setEnabled(true);
|
||||
else if (rcParMngr == App::GetApplication().GetParameterSet("User parameter"))
|
||||
ui->buttonSaveToDisk->setEnabled(true);
|
||||
else
|
||||
ui->buttonSaveToDisk->setEnabled(false);
|
||||
ui->buttonSaveToDisk->setEnabled(rcParMngr->HasSerializer());
|
||||
|
||||
// remove all labels
|
||||
paramGroup->clear();
|
||||
|
@ -302,11 +307,10 @@ void DlgParameterImp::on_buttonSaveToDisk_clicked()
|
|||
{
|
||||
int index = ui->parameterSet->currentIndex();
|
||||
ParameterManager* parmgr = App::GetApplication().GetParameterSet(ui->parameterSet->itemData(index).toByteArray());
|
||||
if (!parmgr) return;
|
||||
if (parmgr == App::GetApplication().GetParameterSet("System parameter"))
|
||||
parmgr->SaveDocument(App::Application::Config()["SystemParameter"].c_str());
|
||||
else if (parmgr == App::GetApplication().GetParameterSet("User parameter"))
|
||||
parmgr->SaveDocument(App::Application::Config()["UserParameter"].c_str());
|
||||
if (!parmgr)
|
||||
return;
|
||||
|
||||
parmgr->SaveDocument();
|
||||
}
|
||||
|
||||
namespace Gui {
|
||||
|
|
|
@ -49,6 +49,8 @@ public:
|
|||
void accept();
|
||||
void reject();
|
||||
|
||||
void activateParameterSet(const char*);
|
||||
|
||||
protected Q_SLOTS:
|
||||
void onChangeParameterSet(int);
|
||||
void on_buttonSaveToDisk_clicked();
|
||||
|
|
Loading…
Reference in New Issue
Block a user