Skip to content

Commit

Permalink
Add disallow dialog for testing
Browse files Browse the repository at this point in the history
  • Loading branch information
kraxarn committed Feb 11, 2023
1 parent 6dbe6ec commit cb992be
Show file tree
Hide file tree
Showing 3 changed files with 98 additions and 0 deletions.
68 changes: 68 additions & 0 deletions src/dialog/disallows.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
#include "dialog/disallows.hpp"
#include "mainwindow.hpp"

Dialog::Disallows::Disallows(QWidget *parent)
: Base(parent)
{
auto *layout = Base::layout<QVBoxLayout>();

list = new QListWidget(this);
list->setSelectionMode(QAbstractItemView::NoSelection);
layout->addWidget(list);

Base::addAction(DialogAction::Ok);
}

void Dialog::Disallows::showEvent(QShowEvent *event)
{
constexpr int min = static_cast<int>(lib::player_action::interrupting_playback);
constexpr int max = static_cast<int>(lib::player_action::transferring_playback);

list->clear();

auto *mainWindow = MainWindow::find(parentWidget());
auto actions = mainWindow != nullptr
? mainWindow->currentPlayback().disallowed_actions
: std::unordered_set<lib::player_action>();

for (auto i = min; i <= max; i++)
{
const auto value = static_cast<lib::player_action>(i);
const auto str = lib::enums<lib::player_action>::to_string(value);

auto *item = new QListWidgetItem(list);
item->setText(QString::fromStdString(str));
item->setData(actionRole, static_cast<int>(value));
item->setCheckState(actions.find(value) != actions.end()
? Qt::Checked
: Qt::Unchecked);
}

QDialog::showEvent(event);
}

void Dialog::Disallows::onOk(bool checked)
{
auto *mainWindow = MainWindow::find(parentWidget());
if (mainWindow != nullptr)
{
auto playback = mainWindow->currentPlayback();
std::unordered_set<lib::player_action> actions;

for (int i = 0; i < list->count(); i++)
{
auto *item = list->item(i);
if (item->checkState() == Qt::Checked)
{
const auto data = item->data(actionRole);
const auto action = static_cast<lib::player_action>(data.value<int>());
actions.insert(action);
}
}

playback.disallowed_actions = actions;
mainWindow->refreshed(playback);
}

Base::onOk(checked);
}
25 changes: 25 additions & 0 deletions src/dialog/disallows.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#pragma once

#include "dialog/base.hpp"

#include <QListWidget>

namespace Dialog
{
class Disallows: public Base
{
Q_OBJECT

public:
explicit Disallows(QWidget *parent);

protected:
void showEvent(QShowEvent *event) override;
void onOk(bool checked) override;

private:
static constexpr int actionRole = 0x100;

QListWidget *list;
};
}
5 changes: 5 additions & 0 deletions src/menu/developermenu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
#include "dialog/passwordentry.hpp"
#include "dialog/memory.hpp"
#include "dialog/lyricssearch.hpp"
#include "dialog/disallows.hpp"

DeveloperMenu::DeveloperMenu(lib::settings &settings, lib::spt::api &spotify,
lib::cache &cache, const lib::http_client &httpClient, QWidget *parent)
Expand Down Expand Up @@ -236,6 +237,10 @@ void DeveloperMenu::onDialogMenuAboutToShow()
{
return new Dialog::LyricsSearch(httpClient, mainWindow);
}},
{QStringLiteral("Disallowed actions"), [mainWindow]
{
return new Dialog::Disallows(mainWindow);
}}
};

QMapIterator<QString, std::function<QDialog *()>> iter(dialogs);
Expand Down

0 comments on commit cb992be

Please sign in to comment.