Clean track lists view when removing a track list

This commit is contained in:
emeric
2022-07-01 13:30:20 +02:00
parent 169a5f5d08
commit 42fb1a2665
6 changed files with 40 additions and 11 deletions
+15 -11
View File
@@ -52,8 +52,8 @@ handleContentsPathChange(Wt::WStackedWidget* stack)
{
IdxArtists = 0,
IdxArtist,
IdxTracklists,
IdxTracklist,
IdxTrackLists,
IdxTrackList,
IdxReleases,
IdxRelease,
IdxSearch,
@@ -64,8 +64,8 @@ handleContentsPathChange(Wt::WStackedWidget* stack)
{
{ "/artists", IdxArtists },
{ "/artist", IdxArtist },
{ "/tracklists", IdxTracklists },
{ "/tracklist", IdxTracklist },
{ "/tracklists", IdxTrackLists },
{ "/tracklist", IdxTrackList },
{ "/releases", IdxReleases },
{ "/release", IdxRelease },
{ "/search", IdxSearch },
@@ -103,14 +103,18 @@ Explore::Explore(Filters* filters)
artist->tracksAction.connect(this, &Explore::handleTracksAction);
contentsStack->addWidget(std::move(artist));
auto tracklists {std::make_unique<TrackLists>(*_filters)};
tracklists->trackListAction.connect(this, &Explore::handleTrackListAction);
contentsStack->addWidget(std::move(tracklists));
auto trackLists {std::make_unique<TrackLists>(*_filters)};
TrackLists* trackListsPtr {trackLists.get()};
trackLists->trackListAction.connect(this, &Explore::handleTrackListAction);
contentsStack->addWidget(std::move(trackLists));
auto tracklist {std::make_unique<TrackList>(*_filters)};
tracklist->trackListAction.connect(this, &Explore::handleTrackListAction);
tracklist->tracksAction.connect(this, &Explore::handleTracksAction);
contentsStack->addWidget(std::move(tracklist));
auto trackList {std::make_unique<TrackList>(*_filters)};
TrackList* trackListPtr {trackList.get()};
trackList->trackListAction.connect(this, &Explore::handleTrackListAction);
trackList->tracksAction.connect(this, &Explore::handleTracksAction);
contentsStack->addWidget(std::move(trackList));
trackListPtr->trackListDeleted.connect(trackListsPtr, &TrackLists::onTrackListDeleted);
auto releases = std::make_unique<Releases>(*_filters);
releases->releasesAction.connect(this, &Explore::handleReleasesAction);
+1
View File
@@ -133,6 +133,7 @@ namespace UserInterface
}
clear();
trackListDeleted.emit(*trackListId);
LmsApp->setInternalPath("/tracklists", true);
LmsApp->getModalManager().dispose(modalPtr);
+2
View File
@@ -38,6 +38,8 @@ namespace UserInterface
PlayQueueActionTrackListSignal trackListAction;
PlayQueueActionTrackSignal tracksAction;
Wt::Signal<Database::TrackListId> trackListDeleted;
private:
void refreshView();
void addSome();
+16
View File
@@ -78,10 +78,23 @@ namespace UserInterface
refreshView();
}
void
TrackLists::onTrackListDeleted(Database::TrackListId trackListId)
{
auto itTrackList {_trackListWidgets.find(trackListId)};
if (itTrackList == std::end(_trackListWidgets))
return;
_container->remove(*itTrackList->second);
_trackListWidgets.erase(itTrackList);
}
void
TrackLists::refreshView()
{
_container->clear();
_trackListWidgets.clear();
addSome();
}
@@ -125,6 +138,9 @@ namespace UserInterface
WTemplate* entry {_container->addNew<Template>(Wt::WString::tr("Lms.Explore.TrackLists.template.entry"))};
entry->bindWidget("name", LmsApplication::createTrackListAnchor(trackList));
assert(_trackListWidgets.find(trackListId) == std::cend(_trackListWidgets));
_trackListWidgets.emplace(trackListId, entry);
}
} // namespace UserInterface
+5
View File
@@ -19,9 +19,11 @@
#pragma once
#include <unordered_map>
#include <Wt/WTemplate.h>
#include "services/database/Object.hpp"
#include "services/database/TrackListId.hpp"
#include "services/database/Types.hpp"
#include "common/Template.hpp"
@@ -44,6 +46,8 @@ namespace UserInterface
PlayQueueActionTrackListSignal trackListAction;
void onTrackListDeleted(Database::TrackListId trackListId);
private:
enum class Mode
{
@@ -62,6 +66,7 @@ namespace UserInterface
Filters& _filters;
Wt::WWidget* _currentActiveItem {};
InfiniteScrollingContainer* _container {};
std::unordered_map<Database::TrackListId, Wt::WWidget*> _trackListWidgets;
};
} // namespace UserInterface