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