Still converting to bootstrap 5. Updated filter badges
This commit is contained in:
+18
-8
@@ -8,20 +8,21 @@ body {
|
||||
padding-bottom: 78px;
|
||||
}
|
||||
|
||||
a img:hover {
|
||||
filter: brightness(85%);
|
||||
}
|
||||
|
||||
.Lms-badge-cluster:hover {
|
||||
filter: brightness(85%);
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.Lms-notification-container {
|
||||
position: fixed;
|
||||
bottom: 78px;
|
||||
right: 0px;
|
||||
}
|
||||
|
||||
.Lms-player {
|
||||
height: 70px;
|
||||
}
|
||||
|
||||
.fixed-bottom.Lms-player {
|
||||
z-index: 999;
|
||||
}
|
||||
|
||||
.Lms-entry-playing {
|
||||
background-color: var(--bs-dark);
|
||||
}
|
||||
@@ -57,6 +58,15 @@ body {
|
||||
min-width: 64px;
|
||||
}
|
||||
|
||||
.Lms-player {
|
||||
height: 70px;
|
||||
}
|
||||
|
||||
.fixed-bottom.Lms-player {
|
||||
z-index: 999;
|
||||
}
|
||||
|
||||
|
||||
.Lms-responsive-square {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
@@ -300,35 +300,6 @@ LmsApplication::createReleaseAnchor(Database::Release::pointer release, bool add
|
||||
return res;
|
||||
}
|
||||
|
||||
std::unique_ptr<Wt::WText>
|
||||
LmsApplication::createCluster(Database::Cluster::pointer cluster, bool canDelete)
|
||||
{
|
||||
auto getStyleClass = [](const Database::Cluster::pointer cluster)
|
||||
{
|
||||
switch (cluster->getType()->getId().getValue() % 8)
|
||||
{
|
||||
case 0: return "bg-primary";
|
||||
case 1: return "bg-secondary";
|
||||
case 2: return "bg-success";
|
||||
case 3: return "bg-danger";
|
||||
case 4: return "bg-warning text-dark";
|
||||
case 5: return "bg-info text-dark";
|
||||
case 6: return "bg-light text-dark";
|
||||
case 7: return "bg-dark";
|
||||
}
|
||||
return "bg-primary";
|
||||
};
|
||||
|
||||
const std::string styleClass {getStyleClass(cluster)};
|
||||
auto res {std::make_unique<Wt::WText>(std::string {} + (canDelete ? "<i class=\"fa fa-times-circle\"></i> " : "") + Wt::WString::fromUTF8(cluster->getName()), Wt::TextFormat::UnsafeXHTML)};
|
||||
|
||||
res->setStyleClass("badge me-1 " + styleClass);
|
||||
res->setToolTip(cluster->getType()->getName(), Wt::TextFormat::Plain);
|
||||
res->setInline(true);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
void
|
||||
LmsApplication::handleException(LmsApplicationException& e)
|
||||
{
|
||||
|
||||
@@ -83,7 +83,6 @@ class LmsApplication : public Wt::WApplication
|
||||
static std::unique_ptr<Wt::WAnchor> createArtistAnchor(Database::ObjectPtr<Database::Artist> artist, bool addText = true);
|
||||
static Wt::WLink createReleaseLink(Database::ObjectPtr<Database::Release> release);
|
||||
static std::unique_ptr<Wt::WAnchor> createReleaseAnchor(Database::ObjectPtr<Database::Release> release, bool addText = true);
|
||||
static std::unique_ptr<Wt::WText> createCluster(Database::ObjectPtr<Database::Cluster> cluster, bool canDelete = false);
|
||||
|
||||
MediaPlayer& getMediaPlayer() const { return *_mediaPlayer; }
|
||||
PlayQueue& getPlayQueue() const { return *_playQueue; }
|
||||
|
||||
@@ -22,6 +22,10 @@
|
||||
#include <iomanip>
|
||||
#include <sstream>
|
||||
|
||||
#include <Wt/WText.h>
|
||||
|
||||
#include "services/database/Cluster.hpp"
|
||||
#include "services/database/Session.hpp"
|
||||
#include "LmsApplication.hpp"
|
||||
|
||||
namespace UserInterface::Utils
|
||||
@@ -60,4 +64,40 @@ namespace UserInterface::Utils
|
||||
cover->setAttributeValue("onload", LmsApp->javaScriptClass() + ".onLoadCover(this)"); // HACK
|
||||
return cover;
|
||||
}
|
||||
|
||||
std::unique_ptr<Wt::WInteractWidget>
|
||||
createCluster(Database::ClusterId clusterId, bool canDelete)
|
||||
{
|
||||
auto transaction {LmsApp->getDbSession().createSharedTransaction()};
|
||||
|
||||
const Database::Cluster::pointer cluster {Database::Cluster::find(LmsApp->getDbSession(), clusterId)};
|
||||
if (!cluster)
|
||||
return {};
|
||||
|
||||
auto getStyleClass {[](const Database::Cluster::pointer& cluster) -> const char*
|
||||
{
|
||||
switch (cluster->getType()->getId().getValue() % 8)
|
||||
{
|
||||
case 0: return "bg-primary";
|
||||
case 1: return "bg-secondary";
|
||||
case 2: return "bg-success";
|
||||
case 3: return "bg-danger";
|
||||
case 4: return "bg-warning text-dark";
|
||||
case 5: return "bg-info text-dark";
|
||||
case 6: return "bg-light text-dark";
|
||||
case 7: return "bg-dark";
|
||||
}
|
||||
|
||||
return "bg-primary";
|
||||
}};
|
||||
|
||||
const std::string styleClass {getStyleClass(cluster)};
|
||||
auto res {std::make_unique<Wt::WText>(std::string {} + (canDelete ? "<i class=\"fa fa-times-circle\"></i> " : "") + Wt::WString::fromUTF8(cluster->getName()), Wt::TextFormat::UnsafeXHTML)};
|
||||
|
||||
res->setStyleClass("Lms-badge-cluster badge me-1 " + styleClass); // HACK
|
||||
res->setToolTip(cluster->getType()->getName(), Wt::TextFormat::Plain);
|
||||
res->setInline(true);
|
||||
|
||||
return res;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,7 +23,9 @@
|
||||
#include <string>
|
||||
|
||||
#include <Wt/WImage.h>
|
||||
#include <Wt/WInteractWidget.h>
|
||||
|
||||
#include "services/database/ClusterId.hpp"
|
||||
#include "services/database/ReleaseId.hpp"
|
||||
#include "services/database/TrackId.hpp"
|
||||
|
||||
@@ -36,5 +38,6 @@ namespace UserInterface::Utils
|
||||
|
||||
std::unique_ptr<Wt::WImage> createCover(Database::ReleaseId releaseId, CoverResource::Size size);
|
||||
std::unique_ptr<Wt::WImage> createCover(Database::TrackId trackId, CoverResource::Size size);
|
||||
}
|
||||
|
||||
std::unique_ptr<Wt::WInteractWidget> createCluster(Database::ClusterId clusterId, bool canDelete = false);
|
||||
}
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
#include "LmsApplicationException.hpp"
|
||||
#include "ReleaseListHelpers.hpp"
|
||||
#include "TrackListHelpers.hpp"
|
||||
#include "Utils.hpp"
|
||||
|
||||
using namespace Database;
|
||||
|
||||
@@ -115,7 +116,7 @@ Artist::refreshView()
|
||||
refreshLinks(artist);
|
||||
refreshSimilarArtists(similarArtistIds);
|
||||
|
||||
Wt::WContainerWidget* clusterContainers = bindNew<Wt::WContainerWidget>("clusters");
|
||||
Wt::WContainerWidget* clusterContainers {bindNew<Wt::WContainerWidget>("clusters")};
|
||||
|
||||
{
|
||||
auto clusterTypes = ScanSettings::get(LmsApp->getDbSession())->getClusterTypes();
|
||||
@@ -123,10 +124,10 @@ Artist::refreshView()
|
||||
|
||||
for (auto clusters : clusterGroups)
|
||||
{
|
||||
for (auto cluster : clusters)
|
||||
for (const Database::Cluster::pointer& cluster : clusters)
|
||||
{
|
||||
auto clusterId = cluster->getId();
|
||||
auto entry = clusterContainers->addWidget(LmsApp->createCluster(cluster));
|
||||
const Database::ClusterId clusterId = cluster->getId();
|
||||
Wt::WInteractWidget* entry {clusterContainers->addWidget(Utils::createCluster(clusterId))};
|
||||
entry->clicked().connect([=]
|
||||
{
|
||||
_filters->add(clusterId);
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
#include "services/database/Session.hpp"
|
||||
|
||||
#include "LmsApplication.hpp"
|
||||
#include "Utils.hpp"
|
||||
#include "ModalManager.hpp"
|
||||
|
||||
namespace UserInterface {
|
||||
@@ -124,23 +125,21 @@ void
|
||||
Filters::add(ClusterId clusterId)
|
||||
{
|
||||
|
||||
if (std::find(std::cbegin(_clusterIds), std::cend(_clusterIds), clusterId) != std::cend(_clusterIds))
|
||||
return;
|
||||
|
||||
Wt::WInteractWidget* filter {};
|
||||
|
||||
{
|
||||
auto transaction {LmsApp->getDbSession().createSharedTransaction()};
|
||||
|
||||
Cluster::pointer cluster {Cluster::find(LmsApp->getDbSession(), clusterId)};
|
||||
auto cluster {Utils::createCluster(clusterId, true)};
|
||||
if (!cluster)
|
||||
return;
|
||||
|
||||
if (std::find(std::cbegin(_clusterIds), std::cend(_clusterIds), clusterId) != std::cend(_clusterIds))
|
||||
return;
|
||||
|
||||
_clusterIds.push_back(clusterId);
|
||||
|
||||
filter = _filters->addWidget(LmsApp->createCluster(cluster, true));
|
||||
filter = _filters->addWidget(std::move(cluster));
|
||||
}
|
||||
|
||||
_clusterIds.push_back(clusterId);
|
||||
|
||||
filter->clicked().connect([=]
|
||||
{
|
||||
_filters->removeWidget(filter);
|
||||
|
||||
@@ -139,10 +139,10 @@ Release::refreshView()
|
||||
|
||||
for (const auto& clusters : clusterGroups)
|
||||
{
|
||||
for (const auto& cluster : clusters)
|
||||
for (const Database::Cluster::pointer& cluster : clusters)
|
||||
{
|
||||
const ClusterId clusterId {cluster->getId()};
|
||||
auto entry {clusterContainers->addWidget(LmsApp->createCluster(cluster))};
|
||||
Wt::WInteractWidget* entry {clusterContainers->addWidget(Utils::createCluster(clusterId))};
|
||||
entry->clicked().connect([=]
|
||||
{
|
||||
_filters->add(clusterId);
|
||||
|
||||
Reference in New Issue
Block a user