Added interactions for clusters/filters

This commit is contained in:
emeric
2018-05-07 14:04:03 +02:00
parent eedcb1c2b5
commit 87c2f2936f
6 changed files with 50 additions and 13 deletions
+6
View File
@@ -232,6 +232,12 @@ Cluster::getAll(Wt::Dbo::Session& session)
return std::vector<Cluster::pointer>(res.begin(), res.end()); return std::vector<Cluster::pointer>(res.begin(), res.end());
} }
Cluster::pointer
Cluster::getById(Wt::Dbo::Session& session, id_type id)
{
return session.find<Cluster>().where("id = ?").bind(id);
}
ClusterType::ClusterType(std::string name) ClusterType::ClusterType(std::string name)
: _name(name) : _name(name)
{ {
+1
View File
@@ -51,6 +51,7 @@ class Cluster : public Wt::Dbo::Dbo<Cluster>
// Find utility // Find utility
static std::vector<pointer> getAll(Wt::Dbo::Session& session); static std::vector<pointer> getAll(Wt::Dbo::Session& session);
static pointer getById(Wt::Dbo::Session& session, id_type id);
// Create utility // Create utility
static pointer create(Wt::Dbo::Session& session, Wt::Dbo::ptr<ClusterType> type, std::string name); static pointer create(Wt::Dbo::Session& session, Wt::Dbo::ptr<ClusterType> type, std::string name);
+8 -1
View File
@@ -79,7 +79,14 @@ Artist::refresh()
auto clusters = artist->getClusters(3); auto clusters = artist->getClusters(3);
for (auto cluster : clusters) for (auto cluster : clusters)
clusterContainers->addWidget(LmsApp->createCluster(cluster)); {
auto clusterId = cluster.id();
auto entry = clusterContainers->addWidget(LmsApp->createCluster(cluster));
entry->clicked().connect([=]
{
_filters->add(clusterId);
});
}
} }
t->bindString("name", Wt::WString::fromUTF8(artist->getName()), Wt::TextFormat::Plain); t->bindString("name", Wt::WString::fromUTF8(artist->getName()), Wt::TextFormat::Plain);
+25 -11
View File
@@ -109,22 +109,36 @@ Filters::showDialog()
if (!cluster) if (!cluster)
return; return;
auto clusterId = cluster.id(); add(cluster.id());
_filterIds.insert(clusterId);
_sigUpdated.emit();
auto filter = _filters->addWidget(LmsApp->createCluster(cluster, true));
filter->clicked().connect(std::bind([=]
{
_filters->removeWidget(filter);
_filterIds.erase(clusterId);
_sigUpdated.emit();
}));
})); }));
dialog->show(); dialog->show();
} }
void
Filters::add(Database::Cluster::id_type clusterId)
{
Wt::Dbo::Transaction transaction(LmsApp->getDboSession());
auto cluster = Database::Cluster::getById(LmsApp->getDboSession(), clusterId);
if (!cluster)
return;
auto res = _filterIds.insert(clusterId);
if (!res.second)
return;
auto filter = _filters->addWidget(LmsApp->createCluster(cluster, true));
filter->clicked().connect(std::bind([=]
{
_filters->removeWidget(filter);
_filterIds.erase(clusterId);
_sigUpdated.emit();
}));
_sigUpdated.emit();
}
Filters::Filters() Filters::Filters()
: Wt::WTemplate(Wt::WString::tr("Lms.Explore.template.filters")) : Wt::WTemplate(Wt::WString::tr("Lms.Explore.template.filters"))
{ {
+2
View File
@@ -34,6 +34,8 @@ class Filters : public Wt::WTemplate
public: public:
Filters(); Filters();
void add(Database::Cluster::id_type clusterId);
std::set<Database::Cluster::id_type> getClusterIds() const { return _filterIds; } std::set<Database::Cluster::id_type> getClusterIds() const { return _filterIds; }
Wt::Signal<>& updated() { return _sigUpdated; } Wt::Signal<>& updated() { return _sigUpdated; }
+8 -1
View File
@@ -112,7 +112,14 @@ Release::refresh()
auto clusters = release->getClusters(3); auto clusters = release->getClusters(3);
for (auto cluster : clusters) for (auto cluster : clusters)
clusterContainers->addWidget(LmsApp->createCluster(cluster)); {
auto clusterId = cluster.id();
auto entry = clusterContainers->addWidget(LmsApp->createCluster(cluster));
entry->clicked().connect([=]
{
_filters->add(clusterId);
});
}
} }
{ {