mirror of
https://github.com/ciphervance/supercell-wx.git
synced 2025-10-30 16:30:05 +00:00
Synchronize placefile layers with placefile manager after initialization
This commit is contained in:
parent
b6aef07af4
commit
ba75326c0c
3 changed files with 44 additions and 0 deletions
|
|
@ -162,6 +162,7 @@ PlacefileManager::PlacefileManager() : p(std::make_unique<Impl>(this))
|
|||
// Read placefile settings on startup
|
||||
main::Application::WaitForInitialization();
|
||||
p->ReadPlacefileSettings();
|
||||
Q_EMIT PlacefilesInitialized();
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@ public:
|
|||
static std::shared_ptr<PlacefileManager> Instance();
|
||||
|
||||
signals:
|
||||
void PlacefilesInitialized();
|
||||
void PlacefileEnabled(const std::string& name, bool enabled);
|
||||
void PlacefileRemoved(const std::string& name);
|
||||
void PlacefileRenamed(const std::string& oldName,
|
||||
|
|
|
|||
|
|
@ -99,6 +99,7 @@ public:
|
|||
void AddPlacefile(const std::string& name);
|
||||
void InitializeLayerSettings();
|
||||
void ReadLayerSettings();
|
||||
void SynchronizePlacefileLayers();
|
||||
void WriteLayerSettings();
|
||||
|
||||
static void ValidateLayerSettings(LayerVector& layers);
|
||||
|
|
@ -107,6 +108,9 @@ public:
|
|||
|
||||
std::string layerSettingsPath_ {};
|
||||
|
||||
bool placefilesInitialized_ {false};
|
||||
std::vector<std::string> initialPlacefiles_ {};
|
||||
|
||||
std::shared_ptr<manager::PlacefileManager> placefileManager_ {
|
||||
manager::PlacefileManager::Instance()};
|
||||
|
||||
|
|
@ -116,6 +120,11 @@ public:
|
|||
LayerModel::LayerModel(QObject* parent) :
|
||||
QAbstractTableModel(parent), p(std::make_unique<Impl>(this))
|
||||
{
|
||||
connect(p->placefileManager_.get(),
|
||||
&manager::PlacefileManager::PlacefilesInitialized,
|
||||
this,
|
||||
[this]() { p->SynchronizePlacefileLayers(); });
|
||||
|
||||
connect(p->placefileManager_.get(),
|
||||
&manager::PlacefileManager::PlacefileEnabled,
|
||||
this,
|
||||
|
|
@ -430,6 +439,34 @@ void LayerModel::ResetLayers()
|
|||
endResetModel();
|
||||
}
|
||||
|
||||
void LayerModel::Impl::SynchronizePlacefileLayers()
|
||||
{
|
||||
placefilesInitialized_ = true;
|
||||
|
||||
int row = 0;
|
||||
for (auto it = layers_.begin(); it != layers_.end();)
|
||||
{
|
||||
if (it->type_ == types::LayerType::Placefile &&
|
||||
std::find(initialPlacefiles_.begin(),
|
||||
initialPlacefiles_.end(),
|
||||
std::get<std::string>(it->description_)) ==
|
||||
initialPlacefiles_.end())
|
||||
{
|
||||
// If the placefile layer was not loaded by the placefile manager,
|
||||
// erase it
|
||||
self_->beginRemoveRows(QModelIndex(), row, row);
|
||||
it = layers_.erase(it);
|
||||
self_->endRemoveRows();
|
||||
continue;
|
||||
}
|
||||
|
||||
++it;
|
||||
++row;
|
||||
}
|
||||
|
||||
initialPlacefiles_.clear();
|
||||
}
|
||||
|
||||
int LayerModel::rowCount(const QModelIndex& parent) const
|
||||
{
|
||||
return parent.isValid() ? 0 : static_cast<int>(p->layers_.size());
|
||||
|
|
@ -973,6 +1010,11 @@ void LayerModel::HandlePlacefileRenamed(const std::string& oldName,
|
|||
|
||||
void LayerModel::HandlePlacefileUpdate(const std::string& name)
|
||||
{
|
||||
if (!p->placefilesInitialized_)
|
||||
{
|
||||
p->initialPlacefiles_.push_back(name);
|
||||
}
|
||||
|
||||
auto it =
|
||||
std::find_if(p->layers_.begin(),
|
||||
p->layers_.end(),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue