Skip to content

Commit

Permalink
Add settings for window title
Browse files Browse the repository at this point in the history
  • Loading branch information
kraxarn committed Jan 27, 2024
1 parent f743132 commit b598efd
Show file tree
Hide file tree
Showing 4 changed files with 146 additions and 0 deletions.
120 changes: 120 additions & 0 deletions src/settingspage/application.cpp
Original file line number Diff line number Diff line change
@@ -1,10 +1,42 @@
#include "settingspage/application.hpp"

#include <util/font.hpp>

#include "mainwindow.hpp"

SettingsPage::Application::Application(lib::settings &settings, QWidget *parent)
: SettingsPage::Base(settings, parent)
{
addTab(app(), "General");

if (lib::developer_mode::enabled)
{
addTab(windowTitle(), QStringLiteral("Window title"));
}
}

void SettingsPage::Application::hideEvent(QHideEvent *event)
{
Base::hideEvent(event);

const auto *mainWindow = MainWindow::find(parent());
if (mainWindow != nullptr)
{
disconnect(mainWindow, &MainWindow::playbackRefreshed,
this, &Application::onPlaybackRefreshed);
}
}

void SettingsPage::Application::showEvent(QShowEvent *event)
{
Base::showEvent(event);

const auto *mainWindow = MainWindow::find(parent());
if (mainWindow != nullptr)
{
connect(mainWindow, &MainWindow::playbackRefreshed,
this, &Application::onPlaybackRefreshed);
}
}

auto SettingsPage::Application::app() -> QWidget *
Expand Down Expand Up @@ -84,6 +116,60 @@ auto SettingsPage::Application::app() -> QWidget *
return Widget::layoutToWidget(layout, this);
}

auto SettingsPage::Application::windowTitle() -> QWidget *
{
auto *layout = new QVBoxLayout();

auto *formatLayout = new QGridLayout();
formatLayout->setVerticalSpacing(0);

auto *titleFormatTitle = new QLabel(QStringLiteral("Format"), this);
formatLayout->addWidget(titleFormatTitle, 0, 0);

titleFormat = new QLineEdit(this);
titleFormat->setFont(Font::monospace());
titleFormat->setPlaceholderText(QStringLiteral("{artist} - {track}"));
formatLayout->addWidget(titleFormat, 0, 1);

connect(titleFormat, &QLineEdit::textEdited,
this, &Application::onTitleFormatEdited);

titlePreview = new QLabel(this);
titlePreview->setFont(Font::italic());
formatLayout->addWidget(titlePreview, 1, 1);

layout->addLayout(formatLayout);

const QMap<QString, QString> options{
{QStringLiteral("{artist}"), QStringLiteral("Name of primary artist")},
{QStringLiteral("{artists}"), QStringLiteral("All artists, seperated by commas")},
{QStringLiteral("{track}"), QStringLiteral("Name of track")},
};

auto *infoLayout = new QGridLayout();
infoLayout->setRowStretch(static_cast<int>(options.size()), 1);
QMapIterator<QString, QString> iter(options);
auto row = 0;

while (iter.hasNext())
{
iter.next();

auto *key = new QLabel(iter.key(), this);
key->setFont(Font::monospace());
infoLayout->addWidget(key, row, 0);

auto *value = new QLabel(iter.value(), this);
infoLayout->addWidget(value, row++, 1);
}

auto *infoBox = new QGroupBox(QStringLiteral("Possible values"), this);
infoBox->setLayout(infoLayout);
layout->addWidget(infoBox, 1);

return Widget::layoutToWidget(layout, this);
}

auto SettingsPage::Application::icon() -> QIcon
{
return Icon::get(QStringLiteral("document-properties"));
Expand Down Expand Up @@ -169,3 +255,37 @@ auto SettingsPage::Application::save() -> bool

return success;
}

void SettingsPage::Application::updatePreview()
{
if (titleFormat == nullptr
|| titlePreview == nullptr
|| !currentTrack.is_valid())
{
return;
}

const auto format = titleFormat->text().isEmpty()
? titleFormat->placeholderText()
: titleFormat->text();

const auto title = lib::format::title(currentTrack, format.toStdString());
titlePreview->setText(QString::fromStdString(title));
}

void SettingsPage::Application::onPlaybackRefreshed(const lib::spt::playback &current,
const lib::spt::playback &/*previous*/)
{
if (currentTrack.id == current.item.id)
{
return;
}

currentTrack = current.item;
updatePreview();
}

void SettingsPage::Application::onTitleFormatEdited(const QString &/*text*/)
{
updatePreview();
}
18 changes: 18 additions & 0 deletions src/settingspage/application.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

#include "util/icon.hpp"
#include "lib/settings.hpp"
#include "lib/spotify/playback.hpp"
#include "settingspage/base.hpp"
#include "util/widget.hpp"

Expand All @@ -16,6 +17,10 @@ namespace SettingsPage
auto title() -> QString override;
auto save() -> bool override;

protected:
void hideEvent(QHideEvent *event) override;
void showEvent(QShowEvent *event) override;

private:
QCheckBox *appMedia = nullptr;
QCheckBox *appHotkeys = nullptr;
Expand All @@ -25,12 +30,25 @@ namespace SettingsPage
QCheckBox *appUpdates = nullptr;
QCheckBox *ignoreUnavailableIndex = nullptr;

QLineEdit *titleFormat;
QLabel *titlePreview;

lib::spt::track currentTrack;

static constexpr int minRefreshInterval = 1;
static constexpr int maxRefreshInterval = 60;

static constexpr int minMaxQueue = 1;
static constexpr int maxMaxQueue = 1000;

auto app() -> QWidget *;
auto windowTitle() -> QWidget *;

void updatePreview();

void onPlaybackRefreshed(const lib::spt::playback &current,
const lib::spt::playback &previous);

void onTitleFormatEdited(const QString &text);
};
}
7 changes: 7 additions & 0 deletions src/util/font.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,13 @@ auto Font::monospace() -> QFont
return QFontDatabase::systemFont(QFontDatabase::FixedFont);
}

auto Font::italic() -> QFont
{
QFont font;
font.setItalic(true);
return font;
}

auto Font::numberWidth() -> int
{
QFont font;
Expand Down
1 change: 1 addition & 0 deletions src/util/font.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ class Font
{
public:
static auto monospace() -> QFont;
static auto italic() -> QFont;
static auto numberWidth() -> int;

static void setFontWeight(QAction *action, QFont::Weight weight);
Expand Down

0 comments on commit b598efd

Please sign in to comment.