Base/App/Gui: force using Base::Handle for ParameterManager

For reference counting
This commit is contained in:
Zheng, Lei
2023-01-06 14:32:01 +08:00
committed by Chris Hennes
parent a5d320f753
commit e4aa389cc4
5 changed files with 39 additions and 40 deletions

View File

@@ -1233,7 +1233,7 @@ void Application::AddParameterSet(const char* sName)
auto it = mpcPramManager.find(sName);
if ( it != mpcPramManager.end() )
return;
mpcPramManager[sName] = new ParameterManager();
mpcPramManager[sName] = ParameterManager::Create();
}
void Application::RemoveParameterSet(const char* sName)
@@ -2870,10 +2870,10 @@ void Application::LoadParameters()
mConfig["SystemParameter"] = mConfig["UserConfigPath"] + "system.cfg";
// create standard parameter sets
_pcSysParamMngr = new ParameterManager();
_pcSysParamMngr = ParameterManager::Create();
_pcSysParamMngr->SetSerializer(new ParameterSerializer(mConfig["SystemParameter"]));
_pcUserParamMngr = new ParameterManager();
_pcUserParamMngr = ParameterManager::Create();
_pcUserParamMngr->SetSerializer(new ParameterSerializer(mConfig["UserParameter"]));
try {

View File

@@ -261,53 +261,44 @@ void ParameterGrp::insertTo(Base::Reference<ParameterGrp> Grp)
void ParameterGrp::exportTo(const char* FileName)
{
ParameterManager Mngr;
auto Mngr = ParameterManager::Create();
Mngr.CreateDocument();
Mngr.ref();
Mngr->CreateDocument();
// copy all into the new document
insertTo(&Mngr);
insertTo(Base::Reference<ParameterGrp>(Mngr));
Mngr.SaveDocument(FileName);
Mngr.unrefNoDelete();
Mngr->SaveDocument(FileName);
}
void ParameterGrp::importFrom(const char* FileName)
{
ParameterManager Mngr;
auto Mngr = ParameterManager::Create();
if (Mngr.LoadDocument(FileName) != 1)
if (Mngr->LoadDocument(FileName) != 1)
throw FileException("ParameterGrp::import() cannot load document", FileName);
ref();
Mngr.copyTo(Base::Reference<ParameterGrp>(this));
unrefNoDelete();
Mngr->copyTo(Base::Reference<ParameterGrp>(this));
}
void ParameterGrp::insert(const char* FileName)
{
ParameterManager Mngr;
auto Mngr = ParameterManager::Create();
if (Mngr.LoadDocument(FileName) != 1)
if (Mngr->LoadDocument(FileName) != 1)
throw FileException("ParameterGrp::import() cannot load document", FileName);
ref();
Mngr.insertTo(Base::Reference<ParameterGrp>(this));
unrefNoDelete();
Mngr->insertTo(Base::Reference<ParameterGrp>(this));
}
void ParameterGrp::revert(const char* FileName)
{
ParameterManager Mngr;
auto Mngr = ParameterManager::Create();
if (Mngr.LoadDocument(FileName) != 1)
if (Mngr->LoadDocument(FileName) != 1)
throw FileException("ParameterGrp::revert() cannot load document", FileName);
Mngr.ref();
revert(Base::Reference<ParameterGrp>(&Mngr));
Mngr.unrefNoDelete();
revert(Base::Reference<ParameterGrp>(Mngr));
}
void ParameterGrp::revert(Base::Reference<ParameterGrp> Grp)
@@ -1526,6 +1517,11 @@ ParameterManager::~ParameterManager()
delete paramSerializer;
}
Base::Reference<ParameterManager> ParameterManager::Create()
{
return Base::Reference<ParameterManager>(new ParameterManager());
}
void ParameterManager::Init()
{
static bool Init = false;

View File

@@ -356,8 +356,8 @@ protected:
class BaseExport ParameterManager : public ParameterGrp
{
public:
ParameterManager();
~ParameterManager() override;
/// Create a reference counted ParameterManager
static Base::Reference<ParameterManager> Create();
static void Init();
static void Terminate();
@@ -431,6 +431,9 @@ private:
bool gUseFilter ;
bool gFormatPrettyPrint ;
private:
ParameterManager();
~ParameterManager() override;
};
/** python wrapper function

View File

@@ -98,10 +98,10 @@ void DlgRevertToBackupConfigImp::accept()
auto item = items[0];
auto path = item->data(Qt::UserRole).toString().toStdString();
if (fs::exists(path)) {
ParameterManager newParameters;
newParameters.LoadDocument(path.c_str());
auto newParameters = ParameterManager::Create();
newParameters->LoadDocument(path.c_str());
auto baseAppGroup = App::GetApplication().GetUserParameter().GetGroup("BaseApp");
newParameters.GetGroup("BaseApp")->copyTo(baseAppGroup);
newParameters->GetGroup("BaseApp")->copyTo(baseAppGroup);
}
else {
Base::Console().Error("Preference Pack Internal Error: Invalid backup file location");

View File

@@ -123,10 +123,10 @@ void PreferencePack::applyConfigChanges() const
{
auto configFile = _path / (_metadata.name() + ".cfg");
if (fs::exists(configFile)) {
ParameterManager newParameters;
newParameters.LoadDocument(configFile.string().c_str());
auto newParameters = ParameterManager::Create();
newParameters->LoadDocument(configFile.string().c_str());
auto baseAppGroup = App::GetApplication().GetUserParameter().GetGroup("BaseApp");
newParameters.GetGroup("BaseApp")->insertTo(baseAppGroup);
newParameters->GetGroup("BaseApp")->insertTo(baseAppGroup);
}
}
@@ -434,17 +434,17 @@ void PreferencePackManager::save(const std::string& name, const std::vector<Temp
AddPackToMetadata(name);
// Create the config file
ParameterManager outputParameterManager;
outputParameterManager.CreateDocument();
auto outputParameterManager = ParameterManager::Create();
outputParameterManager->CreateDocument();
for (const auto& t : templates) {
ParameterManager templateParameterManager;
templateParameterManager.LoadDocument(t.path.string().c_str());
copyTemplateParameters(templateParameterManager, outputParameterManager);
auto templateParameterManager = ParameterManager::Create();
templateParameterManager->LoadDocument(t.path.string().c_str());
copyTemplateParameters(*templateParameterManager, *outputParameterManager);
}
auto savedPreferencePacksDirectory =
fs::path(App::Application::getUserAppDataDir()) / "SavedPreferencePacks";
auto cfgFilename = savedPreferencePacksDirectory / name / (name + ".cfg");
outputParameterManager.SaveDocument(cfgFilename.string().c_str());
outputParameterManager->SaveDocument(cfgFilename.string().c_str());
}
// Needed until we support only C++20 and above and can use std::string's built-in ends_with()
@@ -573,4 +573,4 @@ std::vector<boost::filesystem::path> Gui::PreferencePackManager::configBackups()
}
}
return results;
}
}