diff --git a/vkconfig_core/layer_manager.cpp b/vkconfig_core/layer_manager.cpp index 6b7ca517a9..b8170fd902 100644 --- a/vkconfig_core/layer_manager.cpp +++ b/vkconfig_core/layer_manager.cpp @@ -180,7 +180,7 @@ bool LayerManager::Load(const QJsonObject &json_root_object) { LayersPathInfo info; info.path = json_paths_keys[i].toStdString(); info.enabled = json_paths_object.value(json_paths_keys[i].toStdString().c_str()).toBool(); - this->AddPath(info); + this->AppendPath(info); } } } @@ -351,7 +351,7 @@ void LayerManager::LoadLayersFromPath(const Path &layers_path, LayerType type) { } } -void LayerManager::AddPath(const LayersPathInfo &info) { +void LayerManager::AppendPath(const LayersPathInfo &info) { LayersPathInfo *existing_info = FindPathInfo(this->paths, info.path.RelativePath()); if (existing_info != nullptr) { existing_info->enabled = info.enabled; @@ -389,7 +389,16 @@ void LayerManager::RemovePath(const LayersPathInfo &path_info) { } } -void LayerManager::UpdatePath(const LayersPathInfo &path_info) { +void LayerManager::UpdatePathEnabled(const LayersPathInfo &path_info) { + for (int paths_type_index = LAYERS_PATHS_FIRST; paths_type_index <= LAYERS_PATHS_LAST; ++paths_type_index) { + for (std::size_t i = 0, n = this->paths[paths_type_index].size(); i < n; ++i) { + if (path_info.path == this->paths[paths_type_index][i].path) { + this->paths[paths_type_index][i].enabled = path_info.enabled; + break; + } + } + } + const std::vector &layers_paths = CollectFilePaths(path_info.path); for (std::size_t i = 0, n = layers_paths.size(); i < n; ++i) { diff --git a/vkconfig_core/layer_manager.h b/vkconfig_core/layer_manager.h index c35e3c6918..063b18a6e9 100644 --- a/vkconfig_core/layer_manager.h +++ b/vkconfig_core/layer_manager.h @@ -62,15 +62,15 @@ class LayerManager : public Serialize { void LoadAllInstalledLayers(); void LoadLayersFromPath(const Path& layers_path, LayerType type = LAYER_TYPE_EXPLICIT); - void AddPath(const LayersPathInfo& path_info); + void AppendPath(const LayersPathInfo& path_info); void RemovePath(const LayersPathInfo& path_info); - void UpdatePath(const LayersPathInfo& path_info); + void UpdatePathEnabled(const LayersPathInfo& path_info); std::vector BuildLayerNameList() const; std::vector selected_layers; std::array, LAYERS_PATHS_COUNT> paths; - std::vector removed_paths; + std::vector removed_paths; // TODO: Remove? private: std::map layers_validated; diff --git a/vkconfig_core/test/test_layer_manager.cpp b/vkconfig_core/test/test_layer_manager.cpp index e987c32ee1..8abc82489d 100644 --- a/vkconfig_core/test/test_layer_manager.cpp +++ b/vkconfig_core/test/test_layer_manager.cpp @@ -186,3 +186,72 @@ TEST(test_layer_manager, avoid_duplicate) { EXPECT_EQ(first_load_count, second_load_count); } + +TEST(test_layer_manager, custom_path_append_remove) { + LayerManager layer_manager; + + LayersPathInfo infoA; + infoA.path = ":/layers"; + LayersPathInfo infoB; + infoB.path = ":/layersB"; + LayersPathInfo infoC; + infoC.path = ":/layersC"; + + layer_manager.AppendPath(infoA); + layer_manager.AppendPath(infoB); + layer_manager.AppendPath(infoC); + + EXPECT_EQ(layer_manager.paths[LAYERS_PATHS_GUI].size(), 3); + + layer_manager.AppendPath(infoA); + EXPECT_EQ(layer_manager.paths[LAYERS_PATHS_GUI].size(), 3); + + layer_manager.RemovePath(infoA); + EXPECT_EQ(layer_manager.paths[LAYERS_PATHS_GUI].size(), 2); + + layer_manager.AppendPath(infoA); + EXPECT_EQ(layer_manager.paths[LAYERS_PATHS_GUI].size(), 3); + + layer_manager.RemovePath(infoA); + EXPECT_EQ(layer_manager.paths[LAYERS_PATHS_GUI].size(), 2); + + layer_manager.RemovePath(infoA); // Check that removing an already removed path doesn't cause any issue + EXPECT_EQ(layer_manager.paths[LAYERS_PATHS_GUI].size(), 2); + + layer_manager.RemovePath(infoB); + layer_manager.RemovePath(infoC); + + EXPECT_TRUE(layer_manager.paths[LAYERS_PATHS_GUI].empty()); +} + +TEST(test_layer_manager, custom_path_update_layers) { + LayerManager layer_manager; + layer_manager.LoadLayersFromPath(":/layers"); + + LayersPathInfo info; + info.path = ":/layers"; + // info.enabled = true; default value + + layer_manager.AppendPath(info); + EXPECT_EQ(layer_manager.paths[LAYERS_PATHS_GUI].size(), 1); + EXPECT_EQ(layer_manager.paths[LAYERS_PATHS_GUI][0].enabled, true); + for (std::size_t i = 0, n = layer_manager.selected_layers.size(); i < n; ++i) { + EXPECT_TRUE(layer_manager.selected_layers[i].visible); + } + + info.enabled = false; + layer_manager.UpdatePathEnabled(info); + EXPECT_EQ(layer_manager.paths[LAYERS_PATHS_GUI][0].enabled, false); + for (std::size_t i = 0, n = layer_manager.selected_layers.size(); i < n; ++i) { + EXPECT_FALSE(layer_manager.selected_layers[i].visible); + } + + info.enabled = true; + layer_manager.UpdatePathEnabled(info); + EXPECT_EQ(layer_manager.paths[LAYERS_PATHS_GUI][0].enabled, true); + for (std::size_t i = 0, n = layer_manager.selected_layers.size(); i < n; ++i) { + EXPECT_TRUE(layer_manager.selected_layers[i].visible); + } + + EXPECT_EQ(layer_manager.paths[LAYERS_PATHS_GUI].size(), 1); +} diff --git a/vkconfig_gui/tab_layers.cpp b/vkconfig_gui/tab_layers.cpp index da37364063..d6e2bbc798 100644 --- a/vkconfig_gui/tab_layers.cpp +++ b/vkconfig_gui/tab_layers.cpp @@ -108,7 +108,7 @@ void TabLayers::on_layers_add_pushButton_pressed() { Configurator &configurator = Configurator::Get(); LayersPathInfo info; info.path = ui->layers_lineEdit->text().toStdString(); - configurator.layers.AddPath(info); + configurator.layers.AppendPath(info); configurator.layers.LoadLayersFromPath(info.path); this->UpdateUI_LayersPaths(UPDATE_REBUILD_UI); @@ -125,7 +125,7 @@ void TabLayers::on_layers_browse_pushButton_pressed() { info.path = selected_path.toStdString(); Configurator &configurator = Configurator::Get(); - configurator.layers.AddPath(info); + configurator.layers.AppendPath(info); configurator.layers.LoadLayersFromPath(info.path); this->UpdateUI_LayersPaths(UPDATE_REBUILD_UI); diff --git a/vkconfig_gui/widget_tab_layers_path.cpp b/vkconfig_gui/widget_tab_layers_path.cpp index 48986020f5..1a71c8c5f8 100644 --- a/vkconfig_gui/widget_tab_layers_path.cpp +++ b/vkconfig_gui/widget_tab_layers_path.cpp @@ -59,5 +59,5 @@ void LayersPathWidget::on_toggled(bool checked) { this->path_info->enabled = checked; Configurator& configurator = Configurator::Get(); - configurator.layers.UpdatePath(*this->path_info); + configurator.layers.UpdatePathEnabled(*this->path_info); }