Clean track lists view when removing a track list
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -133,6 +133,7 @@ namespace UserInterface
|
||||
}
|
||||
|
||||
clear();
|
||||
trackListDeleted.emit(*trackListId);
|
||||
LmsApp->setInternalPath("/tracklists", true);
|
||||
|
||||
LmsApp->getModalManager().dispose(modalPtr);
|
||||
|
||||
@@ -38,6 +38,8 @@ namespace UserInterface
|
||||
PlayQueueActionTrackListSignal trackListAction;
|
||||
PlayQueueActionTrackSignal tracksAction;
|
||||
|
||||
Wt::Signal<Database::TrackListId> trackListDeleted;
|
||||
|
||||
private:
|
||||
void refreshView();
|
||||
void addSome();
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user