[Settings] Shuffle some settings around

Took 21 minutes


Took 1 hour 25 minutes
This commit is contained in:
Lukas Brübach 2026-08-05 20:12:43 +02:00
parent 0d14fb77a0
commit e37cb5dadf
47 changed files with 1019 additions and 724 deletions

View file

@ -14,8 +14,8 @@
#include <QtConcurrent>
#include <libcockatrice/card/database/card_database.h>
#include <libcockatrice/card/database/card_database_manager.h>
#include <libcockatrice/settings/download_settings.h>
#include <libcockatrice/settings/paths_settings.h>
#include <libcockatrice/settings/personal_settings.h>
#include <version_string.h>
#define SPOILERS_STATUS_URL "https://raw.githubusercontent.com/Cockatrice/Magic-Spoiler/files/SpoilerSeasonEnabled"
@ -23,7 +23,7 @@
SpoilerBackgroundUpdater::SpoilerBackgroundUpdater(QObject *apParent) : QObject(apParent), cardUpdateProcess(nullptr)
{
isSpoilerDownloadEnabled = SettingsCache::instance().personal().getDownloadSpoilersStatus();
isSpoilerDownloadEnabled = SettingsCache::instance().downloads().getDownloadSpoilersStatus();
if (isSpoilerDownloadEnabled) {
// Start the process of checking if we're in spoiler season
// File exists means we're in spoiler season

View file

@ -11,18 +11,21 @@
#include <QGlobalStatic>
#include <QSettings>
#include <QStandardPaths>
#include <libcockatrice/settings/appearance_settings.h>
#include <libcockatrice/settings/cache_storage_settings.h>
#include <libcockatrice/settings/card_database_settings.h>
#include <libcockatrice/settings/card_override_settings.h>
#include <libcockatrice/settings/cards_display_settings.h>
#include <libcockatrice/settings/chat_settings.h>
#include <libcockatrice/settings/debug_settings.h>
#include <libcockatrice/settings/deck_editor_settings.h>
#include <libcockatrice/settings/download_settings.h>
#include <libcockatrice/settings/game_filters_settings.h>
#include <libcockatrice/settings/game_settings.h>
#include <libcockatrice/settings/interface_settings.h>
#include <libcockatrice/settings/layouts_settings.h>
#include <libcockatrice/settings/message_settings.h>
#include <libcockatrice/settings/network_settings.h>
#include <libcockatrice/settings/paths_settings.h>
#include <libcockatrice/settings/personal_settings.h>
#include <libcockatrice/settings/recents_settings.h>
@ -135,8 +138,11 @@ SettingsCache::SettingsCache()
personalSettings = new PersonalSettings(settingsPath, this);
cardsDisplaySettings = new CardsDisplaySettings(settingsPath, this);
interfaceSettings = new InterfaceSettings(settingsPath, this);
deckEditorSettings = new DeckEditorSettings(settingsPath, this);
pathsSettings = new PathsSettings(settingsPath, this);
visualDeckStorageSettings = new VisualDeckStorageSettings(settingsPath, this);
appearanceSettings = new AppearanceSettings(settingsPath, this);
networkSettings = new NetworkSettings(settingsPath, this);
// Forward ICardDatabasePathProvider signal from PathsSettings
connect(pathsSettings, &PathsSettings::cardDatabasePathChanged, this,
@ -147,7 +153,7 @@ SettingsCache::SettingsCache()
releaseChannels << new StableReleaseChannel();
releaseChannels << new BetaReleaseChannel();
themeName = personalSettings->getThemeName();
themeName = appearanceSettings->getThemeName();
loadPaths();
}
@ -155,7 +161,7 @@ SettingsCache::SettingsCache()
void SettingsCache::setThemeName(const QString &_themeName)
{
themeName = _themeName;
personalSettings->setThemeName(themeName);
appearanceSettings->setThemeName(themeName);
emit themeChanged();
}
@ -272,12 +278,12 @@ QString SettingsCache::getTokenDatabasePath() const
// INetworkSettingsProvider - delegate to sub-objects
int SettingsCache::getKeepAlive() const
{
return personalSettings->getKeepAlive();
return networkSettings->getKeepAlive();
}
int SettingsCache::getTimeOut() const
{
return personalSettings->getTimeOut();
return networkSettings->getTimeOut();
}
bool SettingsCache::getNotifyAboutUpdates() const
@ -287,17 +293,17 @@ bool SettingsCache::getNotifyAboutUpdates() const
void SettingsCache::setKnownMissingFeatures(const QString &_knownMissingFeatures)
{
interfaceSettings->setKnownMissingFeatures(_knownMissingFeatures);
networkSettings->setKnownMissingFeatures(_knownMissingFeatures);
}
QString SettingsCache::getKnownMissingFeatures()
{
return interfaceSettings->getKnownMissingFeatures();
return networkSettings->getKnownMissingFeatures();
}
QString SettingsCache::getClientID()
{
return personalSettings->getClientID();
return networkSettings->getClientID();
}
// Release channels
@ -422,7 +428,22 @@ PathsSettings &SettingsCache::paths() const
return *pathsSettings;
}
DeckEditorSettings &SettingsCache::deckEditor() const
{
return *deckEditorSettings;
}
VisualDeckStorageSettings &SettingsCache::visualDeckStorage() const
{
return *visualDeckStorageSettings;
}
AppearanceSettings &SettingsCache::appearance() const
{
return *appearanceSettings;
}
NetworkSettings &SettingsCache::network() const
{
return *networkSettings;
}

View file

@ -29,6 +29,7 @@ class CardOverrideSettings;
class CardsDisplaySettings;
class ChatSettings;
class DebugSettings;
class DeckEditorSettings;
class DownloadSettings;
class GameFiltersSettings;
class GameSettings;
@ -44,6 +45,8 @@ class SoundSettings;
class TabsSettings;
class UpdatesSettings;
class VisualDeckStorageSettings;
class AppearanceSettings;
class NetworkSettings;
class QSettings;
class SettingsCache : public ICardDatabasePathProvider, public INetworkSettingsProvider
@ -75,8 +78,11 @@ private:
PersonalSettings *personalSettings;
CardsDisplaySettings *cardsDisplaySettings;
InterfaceSettings *interfaceSettings;
DeckEditorSettings *deckEditorSettings;
PathsSettings *pathsSettings;
VisualDeckStorageSettings *visualDeckStorageSettings;
AppearanceSettings *appearanceSettings;
NetworkSettings *networkSettings;
QString themeName;
@ -139,8 +145,11 @@ public:
[[nodiscard]] PersonalSettings &personal() const;
[[nodiscard]] CardsDisplaySettings &cardsDisplay() const;
[[nodiscard]] InterfaceSettings &interface() const;
[[nodiscard]] DeckEditorSettings &deckEditor() const;
[[nodiscard]] PathsSettings &paths() const;
[[nodiscard]] VisualDeckStorageSettings &visualDeckStorage() const;
[[nodiscard]] AppearanceSettings &appearance() const;
[[nodiscard]] NetworkSettings &network() const;
[[nodiscard]] bool getIsPortableBuild() const
{

View file

@ -12,9 +12,9 @@
#include <algorithm>
#include <libcockatrice/card/database/card_database.h>
#include <libcockatrice/card/database/card_database_manager.h>
#include <libcockatrice/settings/appearance_settings.h>
#include <libcockatrice/settings/cards_display_settings.h>
#include <libcockatrice/settings/debug_settings.h>
#include <libcockatrice/settings/personal_settings.h>
AbstractCardItem::AbstractCardItem(QGraphicsItem *parent, const CardRef &cardRef, PlayerLogic *_owner, int _id)
: ArrowTarget(_owner, parent), id(_id), cardRef(cardRef), tapped(false), facedown(false), tapAngle(0),
@ -107,7 +107,7 @@ QSizeF AbstractCardItem::getTranslatedSize(QPainter *painter) const
void AbstractCardItem::transformPainter(QPainter *painter, const QSizeF &translatedSize, int angle)
{
const int MAX_FONT_SIZE = SettingsCache::instance().personal().getMaxFontSize();
const int MAX_FONT_SIZE = SettingsCache::instance().appearance().getMaxFontSize();
const int fontSize = std::max(9, MAX_FONT_SIZE);
QRectF totalBoundingRect = painter->combinedTransform().mapRect(boundingRect());

View file

@ -19,8 +19,8 @@
#include <QThread>
#include <algorithm>
#include <libcockatrice/settings/cache_storage_settings.h>
#include <libcockatrice/settings/download_settings.h>
#include <libcockatrice/settings/paths_settings.h>
#include <libcockatrice/settings/personal_settings.h>
#include <utility>
// never cache more than 300 cards at once for a single deck
@ -31,7 +31,7 @@ CardPictureLoader::CardPictureLoader() : QObject(nullptr)
worker = new CardPictureLoaderWorker;
connect(&SettingsCache::instance().paths(), &PathsSettings::picsPathChanged, this,
&CardPictureLoader::picsPathChanged);
connect(&SettingsCache::instance().personal(), &PersonalSettings::picDownloadChanged, this,
connect(&SettingsCache::instance().downloads(), &DownloadSettings::picDownloadChanged, this,
&CardPictureLoader::picDownloadChanged);
qRegisterMetaType<ExactCard>();

View file

@ -11,15 +11,15 @@
#include <QNetworkReply>
#include <QThread>
#include <libcockatrice/settings/cache_storage_settings.h>
#include <libcockatrice/settings/download_settings.h>
#include <libcockatrice/settings/paths_settings.h>
#include <libcockatrice/settings/personal_settings.h>
#include <utility>
#include <version_string.h>
static constexpr int MAX_REQUESTS_PER_SEC = 10;
CardPictureLoaderWorker::CardPictureLoaderWorker()
: QObject(nullptr), picDownload(SettingsCache::instance().personal().getPicDownload()),
: QObject(nullptr), picDownload(SettingsCache::instance().downloads().getPicDownload()),
requestQuota(MAX_REQUESTS_PER_SEC)
{
networkManager = new QNetworkAccessManager(this);

View file

@ -10,7 +10,7 @@
#include <QNetworkReply>
#include <QThread>
#include <QThreadPool>
#include <libcockatrice/settings/personal_settings.h>
#include <libcockatrice/settings/download_settings.h>
// Card back returned by gatherer when card is not found
static const QStringList MD5_BLACKLIST = {
@ -20,7 +20,7 @@ static const QStringList MD5_BLACKLIST = {
CardPictureLoaderWorkerWork::CardPictureLoaderWorkerWork(const CardPictureLoaderWorker *worker, const ExactCard &toLoad)
: QObject(nullptr), cardToDownload(CardPictureToLoad(toLoad)),
picDownload(SettingsCache::instance().personal().getPicDownload())
picDownload(SettingsCache::instance().downloads().getPicDownload())
{
// Hook up signals to the orchestrator
connect(this, &CardPictureLoaderWorkerWork::requestImageDownload, worker, &CardPictureLoaderWorker::queueRequest);
@ -32,7 +32,7 @@ CardPictureLoaderWorkerWork::CardPictureLoaderWorkerWork(const CardPictureLoader
&CardPictureLoaderWorker::imageRequestSucceeded);
// Hook up signals to settings
connect(&SettingsCache::instance().personal(), SIGNAL(picDownloadChanged()), this, SLOT(picDownloadChanged()));
connect(&SettingsCache::instance().downloads(), SIGNAL(picDownloadChanged()), this, SLOT(picDownloadChanged()));
startNextPicDownload();
}
@ -211,5 +211,5 @@ void CardPictureLoaderWorkerWork::concludeImageLoad(const QImage &image)
void CardPictureLoaderWorkerWork::picDownloadChanged()
{
picDownload = SettingsCache::instance().personal().getPicDownload();
picDownload = SettingsCache::instance().downloads().getPicDownload();
}

View file

@ -12,7 +12,7 @@
#include <QSplitter>
#include <QTextEdit>
#include <libcockatrice/card/database/card_database_manager.h>
#include <libcockatrice/settings/cards_display_settings.h>
#include <libcockatrice/settings/deck_editor_settings.h>
#include <libcockatrice/utility/macros.h>
#include <libcockatrice/utility/string_limits.h>
@ -111,20 +111,18 @@ void DeckEditorDeckDockWidget::createDeckDock()
showBannerCardCheckBox = new QCheckBox();
showBannerCardCheckBox->setObjectName("showBannerCardCheckBox");
showBannerCardCheckBox->setChecked(
SettingsCache::instance().cardsDisplay().getDeckEditorBannerCardComboBoxVisible());
connect(showBannerCardCheckBox, &QCheckBox::QT_STATE_CHANGED, &SettingsCache::instance().cardsDisplay(),
&CardsDisplaySettings::setDeckEditorBannerCardComboBoxVisible);
connect(&SettingsCache::instance().cardsDisplay(),
&CardsDisplaySettings::deckEditorBannerCardComboBoxVisibleChanged, this,
showBannerCardCheckBox->setChecked(SettingsCache::instance().deckEditor().getBannerCardComboBoxVisible());
connect(showBannerCardCheckBox, &QCheckBox::QT_STATE_CHANGED, &SettingsCache::instance().deckEditor(),
&DeckEditorSettings::setBannerCardComboBoxVisible);
connect(&SettingsCache::instance().deckEditor(), &DeckEditorSettings::bannerCardComboBoxVisibleChanged, this,
&DeckEditorDeckDockWidget::updateShowBannerCardComboBox);
showTagsWidgetCheckBox = new QCheckBox();
showTagsWidgetCheckBox->setObjectName("showTagsWidgetCheckBox");
showTagsWidgetCheckBox->setChecked(SettingsCache::instance().cardsDisplay().getDeckEditorTagsWidgetVisible());
connect(showTagsWidgetCheckBox, &QCheckBox::QT_STATE_CHANGED, &SettingsCache::instance().cardsDisplay(),
&CardsDisplaySettings::setDeckEditorTagsWidgetVisible);
connect(&SettingsCache::instance().cardsDisplay(), &CardsDisplaySettings::deckEditorTagsWidgetVisibleChanged, this,
showTagsWidgetCheckBox->setChecked(SettingsCache::instance().deckEditor().getTagsWidgetVisible());
connect(showTagsWidgetCheckBox, &QCheckBox::QT_STATE_CHANGED, &SettingsCache::instance().deckEditor(),
&DeckEditorSettings::setTagsWidgetVisible);
connect(&SettingsCache::instance().deckEditor(), &DeckEditorSettings::tagsWidgetVisibleChanged, this,
&DeckEditorDeckDockWidget::updateShowTagsWidget);
quickSettingsWidget->addSettingsWidget(showBannerCardCheckBox);
@ -156,7 +154,7 @@ void DeckEditorDeckDockWidget::createDeckDock()
bannerCardLabel = new QLabel();
bannerCardLabel->setObjectName("bannerCardLabel");
bannerCardLabel->setText(tr("Banner Card"));
bannerCardLabel->setHidden(!SettingsCache::instance().cardsDisplay().getDeckEditorBannerCardComboBoxVisible());
bannerCardLabel->setHidden(!SettingsCache::instance().deckEditor().getBannerCardComboBoxVisible());
bannerCardComboBox = new QComboBox(this);
connect(getModel(), &DeckListModel::cardNodesChanged, this, [this]() {
// Delay the update to avoid race conditions
@ -167,10 +165,10 @@ void DeckEditorDeckDockWidget::createDeckDock()
connect(bannerCardComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this,
&DeckEditorDeckDockWidget::writeBannerCard);
bannerCardComboBox->setHidden(!SettingsCache::instance().cardsDisplay().getDeckEditorBannerCardComboBoxVisible());
bannerCardComboBox->setHidden(!SettingsCache::instance().deckEditor().getBannerCardComboBoxVisible());
deckTagsDisplayWidget = new DeckPreviewDeckTagsDisplayWidget(this, {});
deckTagsDisplayWidget->setHidden(!SettingsCache::instance().cardsDisplay().getDeckEditorTagsWidgetVisible());
deckTagsDisplayWidget->setHidden(!SettingsCache::instance().deckEditor().getTagsWidgetVisible());
connect(deckTagsDisplayWidget, &DeckPreviewDeckTagsDisplayWidget::tagsChanged, deckStateManager,
&DeckStateManager::setTags);

View file

@ -14,8 +14,8 @@
#include <QVBoxLayout>
#include <libcockatrice/card/database/card_database_manager.h>
#include <libcockatrice/network/client/remote/remote_client.h>
#include <libcockatrice/settings/appearance_settings.h>
#include <libcockatrice/settings/paths_settings.h>
#include <libcockatrice/settings/personal_settings.h>
HomeWidget::HomeWidget(QWidget *parent, TabSupervisor *_tabSupervisor)
: QWidget(parent), tabSupervisor(_tabSupervisor), background("theme:backgrounds/home"), overlay("theme:cockatrice")
@ -43,12 +43,12 @@ HomeWidget::HomeWidget(QWidget *parent, TabSupervisor *_tabSupervisor)
updateConnectButton(tabSupervisor->getClient()->getStatus());
connect(tabSupervisor->getClient(), &RemoteClient::statusChanged, this, &HomeWidget::updateConnectButton);
connect(&SettingsCache::instance().personal(), &PersonalSettings::homeTabBackgroundSourceChanged, this,
connect(&SettingsCache::instance().appearance(), &AppearanceSettings::homeTabBackgroundSourceChanged, this,
&HomeWidget::initializeBackgroundFromSource);
connect(&SettingsCache::instance().personal(), &PersonalSettings::homeTabBackgroundShuffleFrequencyChanged, this,
&HomeWidget::onBackgroundShuffleFrequencyChanged);
connect(&SettingsCache::instance().appearance(), &AppearanceSettings::homeTabBackgroundShuffleFrequencyChanged,
this, &HomeWidget::onBackgroundShuffleFrequencyChanged);
// Lambda is cleaner to read than overloading this
connect(&SettingsCache::instance().personal(), &PersonalSettings::homeTabDisplayCardNameChanged, this,
connect(&SettingsCache::instance().appearance(), &AppearanceSettings::homeTabDisplayCardNameChanged, this,
[this] { repaint(); });
connect(&SettingsCache::instance(), &SettingsCache::themeChanged, this,
&HomeWidget::initializeBackgroundFromSource);
@ -65,7 +65,7 @@ void HomeWidget::initializeBackgroundFromSource()
}
auto backgroundSourceType =
BackgroundSources::fromId(SettingsCache::instance().personal().getHomeTabBackgroundSource());
BackgroundSources::fromId(SettingsCache::instance().appearance().getHomeTabBackgroundSource());
switch (backgroundSourceType) {
case BackgroundSources::Theme:
@ -113,7 +113,7 @@ void HomeWidget::setRandomCard(ExactCard &newCard)
void HomeWidget::updateRandomCard()
{
auto backgroundSourceType =
BackgroundSources::fromId(SettingsCache::instance().personal().getHomeTabBackgroundSource());
BackgroundSources::fromId(SettingsCache::instance().appearance().getHomeTabBackgroundSource());
ExactCard newCard;
@ -156,8 +156,8 @@ void HomeWidget::updateRandomCard()
void HomeWidget::onBackgroundShuffleFrequencyChanged()
{
cardChangeTimer->stop();
if (SettingsCache::instance().personal().getHomeTabBackgroundShuffleFrequency() > 0) {
cardChangeTimer->start(SettingsCache::instance().personal().getHomeTabBackgroundShuffleFrequency() * 1000);
if (SettingsCache::instance().appearance().getHomeTabBackgroundShuffleFrequency() > 0) {
cardChangeTimer->start(SettingsCache::instance().appearance().getHomeTabBackgroundShuffleFrequency() * 1000);
}
}
@ -265,7 +265,7 @@ void HomeWidget::updateConnectButton(const ClientStatus status)
QPair<QColor, QColor> HomeWidget::extractDominantColors(const QPixmap &pixmap)
{
if (themeManager->isBuiltInTheme() && SettingsCache::instance().personal().getHomeTabBackgroundSource() ==
if (themeManager->isBuiltInTheme() && SettingsCache::instance().appearance().getHomeTabBackgroundSource() ==
BackgroundSources::toId(BackgroundSources::Theme)) {
return QPair<QColor, QColor>(QColor::fromRgb(20, 140, 60), QColor::fromRgb(120, 200, 80));
}
@ -352,7 +352,7 @@ void HomeWidget::paintEvent(QPaintEvent *event)
}
}
if (!cardName.isEmpty() && SettingsCache::instance().personal().getHomeTabDisplayCardName()) {
if (!cardName.isEmpty() && SettingsCache::instance().appearance().getHomeTabDisplayCardName()) {
QFont font = painter.font();
font.setPointSize(14);
font.setBold(true);

View file

@ -22,6 +22,7 @@
#include <libcockatrice/protocol/pb/serverinfo_game.pb.h>
#include <libcockatrice/protocol/pending_command.h>
#include <libcockatrice/settings/cards_display_settings.h>
#include <libcockatrice/settings/interface_settings.h>
GameSelector::GameSelector(AbstractClient *_client,
TabSupervisor *_tabSupervisor,
@ -79,12 +80,12 @@ GameSelector::GameSelector(AbstractClient *_client,
if (showFilters && restoresettings) {
quickFilterToolBar = new GameSelectorQuickFilterToolBar(this, tabSupervisor, gameListProxyModel, gameTypeMap);
quickFilterToolBar->setVisible(showFilters && restoresettings &&
SettingsCache::instance().cardsDisplay().getShowGameSelectorFilterToolbar());
SettingsCache::instance().interface().getShowGameSelectorFilterToolbar());
connect(&SettingsCache::instance().cardsDisplay(), &CardsDisplaySettings::showGameSelectorFilterToolbarChanged,
this, [this] {
connect(&SettingsCache::instance().interface(), &InterfaceSettings::showGameSelectorFilterToolbarChanged, this,
[this] {
quickFilterToolBar->setVisible(
SettingsCache::instance().cardsDisplay().getShowGameSelectorFilterToolbar());
SettingsCache::instance().interface().getShowGameSelectorFilterToolbar());
});
} else {
quickFilterToolBar = nullptr;

View file

@ -30,7 +30,7 @@
#include <libcockatrice/protocol/pb/response_get_games_of_user.pb.h>
#include <libcockatrice/protocol/pb/response_get_user_info.pb.h>
#include <libcockatrice/protocol/pending_command.h>
#include <libcockatrice/settings/interface_settings.h>
#include <libcockatrice/settings/appearance_settings.h>
#include <libcockatrice/utility/string_limits.h>
BanDialog::BanDialog(const ServerInfo_User &info, QWidget *parent) : QDialog(parent)
@ -353,7 +353,7 @@ bool UserListItemDelegate::editorEvent(QEvent *event,
QSize UserListItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
{
if (!SettingsCache::instance().interface().getStyleUserList()) {
if (!SettingsCache::instance().appearance().getStyleUserList()) {
return QStyledItemDelegate::sizeHint(option, index);
}
return UserListPainter::sizeHint();
@ -361,7 +361,7 @@ QSize UserListItemDelegate::sizeHint(const QStyleOptionViewItem &option, const Q
void UserListItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
if (!SettingsCache::instance().interface().getStyleUserList()) {
if (!SettingsCache::instance().appearance().getStyleUserList()) {
QStyledItemDelegate::paint(painter, option, index);
return;
}
@ -525,7 +525,7 @@ UserListWidget::UserListWidget(TabSupervisor *_tabSupervisor,
// Pin on item click
connect(userTree, &QTreeWidget::itemClicked, this, [this](QTreeWidgetItem *item, int) {
if (!SettingsCache::instance().interface().getStyleUserList()) {
if (!SettingsCache::instance().appearance().getStyleUserList()) {
return;
}
const QString name = static_cast<UserListTWI *>(item)->getUserInfo().name().c_str();
@ -557,7 +557,7 @@ UserListWidget::UserListWidget(TabSupervisor *_tabSupervisor,
connect(cardArtProvider, &UserCardArtProvider::cardArtUpdated, this,
[this](const QString &) { userTree->viewport()->update(); });
connect(&SettingsCache::instance().interface(), &InterfaceSettings::styleUserListChanged, this,
connect(&SettingsCache::instance().appearance(), &AppearanceSettings::styleUserListChanged, this,
&UserListWidget::applyDisplayMode);
applyDisplayMode();
@ -663,7 +663,7 @@ void UserListWidget::hideEvent(QHideEvent *e)
void UserListWidget::applyDisplayMode()
{
const bool styled = SettingsCache::instance().interface().getStyleUserList();
const bool styled = SettingsCache::instance().appearance().getStyleUserList();
if (styled) {
userTree->header()->setSectionResizeMode(0, QHeaderView::Stretch);
@ -722,7 +722,7 @@ bool UserListWidget::eventFilter(QObject *obj, QEvent *event)
{
if (obj == userTree->viewport()) {
if (event->type() == QEvent::MouseMove) {
if (!SettingsCache::instance().interface().getStyleUserList()) {
if (!SettingsCache::instance().appearance().getStyleUserList()) {
return QGroupBox::eventFilter(obj, event);
}
auto *me = static_cast<QMouseEvent *>(event);

View file

@ -15,6 +15,7 @@
#include <QMessageBox>
#include <QStyleFactory>
#include <QTimer>
#include <libcockatrice/settings/appearance_settings.h>
#include <libcockatrice/settings/cards_display_settings.h>
#include <libcockatrice/settings/interface_settings.h>
#include <libcockatrice/settings/paths_settings.h>
@ -104,7 +105,7 @@ AppearanceSettingsPage::AppearanceSettingsPage()
homeTabBackgroundSourceBox.addItem(QObject::tr(entry.trKey), QVariant::fromValue(entry.type));
}
QString homeTabBackgroundSource = SettingsCache::instance().personal().getHomeTabBackgroundSource();
QString homeTabBackgroundSource = settings.appearance().getHomeTabBackgroundSource();
int homeTabBackgroundSourceId =
homeTabBackgroundSourceBox.findData(BackgroundSources::fromId(homeTabBackgroundSource));
if (homeTabBackgroundSourceId != -1) {
@ -113,20 +114,19 @@ AppearanceSettingsPage::AppearanceSettingsPage()
connect(&homeTabBackgroundSourceBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this, [this]() {
auto type = homeTabBackgroundSourceBox.currentData().value<BackgroundSources::Type>();
SettingsCache::instance().personal().setHomeTabBackgroundSource(BackgroundSources::toId(type));
SettingsCache::instance().appearance().setHomeTabBackgroundSource(BackgroundSources::toId(type));
updateHomeTabSettingsVisibility();
});
homeTabBackgroundShuffleFrequencySpinBox.setRange(0, 3600);
homeTabBackgroundShuffleFrequencySpinBox.setSuffix(tr(" seconds"));
homeTabBackgroundShuffleFrequencySpinBox.setValue(
SettingsCache::instance().personal().getHomeTabBackgroundShuffleFrequency());
connect(&homeTabBackgroundShuffleFrequencySpinBox, qOverload<int>(&QSpinBox::valueChanged), &settings.personal(),
&PersonalSettings::setHomeTabBackgroundShuffleFrequency);
homeTabBackgroundShuffleFrequencySpinBox.setValue(settings.appearance().getHomeTabBackgroundShuffleFrequency());
connect(&homeTabBackgroundShuffleFrequencySpinBox, qOverload<int>(&QSpinBox::valueChanged), &settings.appearance(),
&AppearanceSettings::setHomeTabBackgroundShuffleFrequency);
homeTabDisplayCardNameCheckBox.setChecked(settings.personal().getHomeTabDisplayCardName());
connect(&homeTabDisplayCardNameCheckBox, &QCheckBox::QT_STATE_CHANGED, &settings.personal(),
&PersonalSettings::setHomeTabDisplayCardName);
homeTabDisplayCardNameCheckBox.setChecked(settings.appearance().getHomeTabDisplayCardName());
connect(&homeTabDisplayCardNameCheckBox, &QCheckBox::QT_STATE_CHANGED, &settings.appearance(),
&AppearanceSettings::setHomeTabDisplayCardName);
updateHomeTabSettingsVisibility();
@ -140,9 +140,9 @@ AppearanceSettingsPage::AppearanceSettingsPage()
homeTabGroupBox = new QGroupBox;
homeTabGroupBox->setLayout(homeTabGrid);
styleUserListCheckBox.setChecked(settings.interface().getStyleUserList());
connect(&styleUserListCheckBox, &QCheckBox::QT_STATE_CHANGED, &settings.interface(),
&InterfaceSettings::setStyleUserList);
styleUserListCheckBox.setChecked(settings.appearance().getStyleUserList());
connect(&styleUserListCheckBox, &QCheckBox::QT_STATE_CHANGED, &settings.appearance(),
&AppearanceSettings::setStyleUserList);
auto stylingTabGrid = new QGridLayout;
stylingTabGrid->addWidget(&styleUserListCheckBox, 0, 0, 1, 2);
@ -150,21 +150,6 @@ AppearanceSettingsPage::AppearanceSettingsPage()
stylingGroupBox = new QGroupBox;
stylingGroupBox->setLayout(stylingTabGrid);
// Menu settings
showShortcutsCheckBox.setChecked(settings.cardsDisplay().getShowShortcuts());
connect(&showShortcutsCheckBox, &QCheckBox::QT_STATE_CHANGED, this, &AppearanceSettingsPage::showShortcutsChanged);
showGameSelectorFilterToolbarCheckBox.setChecked(settings.cardsDisplay().getShowGameSelectorFilterToolbar());
connect(&showGameSelectorFilterToolbarCheckBox, &QCheckBox::QT_STATE_CHANGED, &settings.cardsDisplay(),
&CardsDisplaySettings::setShowGameSelectorFilterToolbar);
auto *menuGrid = new QGridLayout;
menuGrid->addWidget(&showShortcutsCheckBox, 0, 0);
menuGrid->addWidget(&showGameSelectorFilterToolbarCheckBox, 1, 0);
menuGroupBox = new QGroupBox;
menuGroupBox->setLayout(menuGrid);
// Printings settings
overrideAllCardArtWithPersonalPreferenceCheckBox.setChecked(
settings.cardsDisplay().getOverrideAllCardArtWithPersonalPreference());
@ -199,9 +184,9 @@ AppearanceSettingsPage::AppearanceSettingsPage()
connect(&roundCardCornersCheckBox, &QAbstractButton::toggled, &settings.cardsDisplay(),
&CardsDisplaySettings::setRoundCardCorners);
connect(&maxFontSizeForCardsEdit, qOverload<int>(&QSpinBox::valueChanged), &settings.personal(),
&PersonalSettings::setMaxFontSize);
maxFontSizeForCardsEdit.setValue(settings.personal().getMaxFontSize());
connect(&maxFontSizeForCardsEdit, qOverload<int>(&QSpinBox::valueChanged), &settings.appearance(),
&AppearanceSettings::setMaxFontSize);
maxFontSizeForCardsEdit.setValue(settings.appearance().getMaxFontSize());
maxFontSizeForCardsLabel.setBuddy(&maxFontSizeForCardsEdit);
maxFontSizeForCardsEdit.setMinimum(9);
maxFontSizeForCardsEdit.setMaximum(100);
@ -330,7 +315,6 @@ AppearanceSettingsPage::AppearanceSettingsPage()
mainLayout->addWidget(themeGroupBox);
mainLayout->addWidget(homeTabGroupBox);
mainLayout->addWidget(stylingGroupBox);
mainLayout->addWidget(menuGroupBox);
mainLayout->addWidget(printingsGroupBox);
mainLayout->addWidget(cardsGroupBox);
mainLayout->addWidget(cardLayoutGroupBox);
@ -375,7 +359,7 @@ void AppearanceSettingsPage::editPalette()
void AppearanceSettingsPage::updateHomeTabSettingsVisibility()
{
bool visible = SettingsCache::instance().personal().getHomeTabBackgroundSource() !=
bool visible = SettingsCache::instance().appearance().getHomeTabBackgroundSource() !=
BackgroundSources::toId(BackgroundSources::Theme);
homeTabBackgroundShuffleFrequencyLabel.setVisible(visible);
@ -383,12 +367,6 @@ void AppearanceSettingsPage::updateHomeTabSettingsVisibility()
homeTabDisplayCardNameCheckBox.setVisible(visible);
}
void AppearanceSettingsPage::showShortcutsChanged(QT_STATE_CHANGED_T value)
{
SettingsCache::instance().cardsDisplay().setShowShortcuts(value);
qApp->setAttribute(Qt::AA_DontShowShortcutsInContextMenus, value == 0); // 0 = unchecked
}
void AppearanceSettingsPage::overrideAllCardArtWithPersonalPreferenceToggled(QT_STATE_CHANGED_T value)
{
bool enable = static_cast<bool>(value);
@ -450,10 +428,6 @@ void AppearanceSettingsPage::retranslateUi()
stylingGroupBox->setTitle(tr("Styling settings"));
styleUserListCheckBox.setText(tr("Style user list"));
menuGroupBox->setTitle(tr("Menu settings"));
showShortcutsCheckBox.setText(tr("Show keyboard shortcuts in right-click menus"));
showGameSelectorFilterToolbarCheckBox.setText(tr("Show game filter toolbar above list in room tab"));
printingsGroupBox->setTitle(tr("Card printings"));
overrideAllCardArtWithPersonalPreferenceCheckBox.setText(
tr("Override all card art with personal set preference (Pre-ProviderID change behavior)"));

View file

@ -19,7 +19,6 @@ private slots:
void openThemeLocation();
void editPalette();
void updateHomeTabSettingsVisibility();
void showShortcutsChanged(QT_STATE_CHANGED_T enabled);
void overrideAllCardArtWithPersonalPreferenceToggled(QT_STATE_CHANGED_T enabled);
void cardViewInitialRowsMaxChanged(int value);
@ -42,8 +41,6 @@ private:
QCheckBox styleUserListCheckBox;
QLabel minPlayersForMultiColumnLayoutLabel;
QLabel maxFontSizeForCardsLabel;
QCheckBox showShortcutsCheckBox;
QCheckBox showGameSelectorFilterToolbarCheckBox;
QCheckBox overrideAllCardArtWithPersonalPreferenceCheckBox;
QCheckBox bumpSetsWithCardsInDeckToTopCheckBox;
QCheckBox displayCardNamesCheckBox;
@ -62,7 +59,6 @@ private:
QGroupBox *themeGroupBox;
QGroupBox *homeTabGroupBox;
QGroupBox *stylingGroupBox;
QGroupBox *menuGroupBox;
QGroupBox *printingsGroupBox;
QGroupBox *cardsGroupBox;
QGroupBox *cardLayoutGroupBox;

View file

@ -17,9 +17,9 @@
DeckEditorSettingsPage::DeckEditorSettingsPage()
{
picDownloadCheckBox.setChecked(SettingsCache::instance().personal().getPicDownload());
connect(&picDownloadCheckBox, &QCheckBox::QT_STATE_CHANGED, &SettingsCache::instance().personal(),
&PersonalSettings::setPicDownload);
picDownloadCheckBox.setChecked(SettingsCache::instance().downloads().getPicDownload());
connect(&picDownloadCheckBox, &QCheckBox::QT_STATE_CHANGED, &SettingsCache::instance().downloads(),
&DownloadSettings::setPicDownload);
urlLinkLabel.setTextInteractionFlags(Qt::LinksAccessibleByMouse);
urlLinkLabel.setOpenExternalLinks(true);
@ -29,7 +29,7 @@ DeckEditorSettingsPage::DeckEditorSettingsPage()
auto *lpGeneralGrid = new QGridLayout;
auto *lpSpoilerGrid = new QGridLayout;
mcDownloadSpoilersCheckBox.setChecked(SettingsCache::instance().personal().getDownloadSpoilersStatus());
mcDownloadSpoilersCheckBox.setChecked(SettingsCache::instance().downloads().getDownloadSpoilersStatus());
mpSpoilerSavePathLineEdit = new QLineEdit(SettingsCache::instance().getSpoilerCardDatabasePath());
mpSpoilerSavePathLineEdit->setReadOnly(true);
@ -91,8 +91,8 @@ DeckEditorSettingsPage::DeckEditorSettingsPage()
lpSpoilerGrid->addWidget(&infoOnSpoilersLabel, 3, 0, 1, 3, Qt::AlignTop);
// On a change to the checkbox, hide/un-hide the other fields
connect(&mcDownloadSpoilersCheckBox, &QCheckBox::toggled, &SettingsCache::instance().personal(),
&PersonalSettings::setDownloadSpoilerStatus);
connect(&mcDownloadSpoilersCheckBox, &QCheckBox::toggled, &SettingsCache::instance().downloads(),
&DownloadSettings::setDownloadSpoilerStatus);
connect(&mcDownloadSpoilersCheckBox, &QCheckBox::toggled, this, &DeckEditorSettingsPage::setSpoilersEnabled);
mpGeneralGroupBox = new QGroupBox;

View file

@ -5,6 +5,7 @@
#include <QGridLayout>
#include <libcockatrice/settings/cards_display_settings.h>
#include <libcockatrice/settings/deck_editor_settings.h>
#include <libcockatrice/settings/interface_settings.h>
#include <libcockatrice/settings/personal_settings.h>
#include <libcockatrice/settings/visual_deck_storage_settings.h>
@ -85,6 +86,15 @@ UserInterfaceSettingsPage::UserInterfaceSettingsPage()
connect(&keepGameChatFocusCheckBox, &QCheckBox::QT_STATE_CHANGED, &SettingsCache::instance().interface(),
&InterfaceSettings::setKeepGameChatFocus);
showShortcutsCheckBox.setChecked(SettingsCache::instance().interface().getShowShortcuts());
connect(&showShortcutsCheckBox, &QCheckBox::QT_STATE_CHANGED, this,
&UserInterfaceSettingsPage::showShortcutsChanged);
showGameSelectorFilterToolbarCheckBox.setChecked(
SettingsCache::instance().interface().getShowGameSelectorFilterToolbar());
connect(&showGameSelectorFilterToolbarCheckBox, &QCheckBox::QT_STATE_CHANGED,
&SettingsCache::instance().interface(), &InterfaceSettings::setShowGameSelectorFilterToolbar);
auto *generalGrid = new QGridLayout;
generalGrid->addWidget(&doubleClickToPlayCheckBox, 0, 0);
generalGrid->addWidget(&clickPlaysAllSelectedCheckBox, 1, 0);
@ -97,6 +107,8 @@ UserInterfaceSettingsPage::UserInterfaceSettingsPage()
generalGrid->addWidget(&showTotalSelectionCountCheckBox, 8, 0);
generalGrid->addWidget(&useTearOffMenusCheckBox, 9, 0);
generalGrid->addWidget(&keepGameChatFocusCheckBox, 10, 0);
generalGrid->addWidget(&showShortcutsCheckBox, 11, 0);
generalGrid->addWidget(&showGameSelectorFilterToolbarCheckBox, 12, 0);
generalGroupBox = new QGroupBox;
generalGroupBox->setLayout(generalGrid);
@ -121,9 +133,9 @@ UserInterfaceSettingsPage::UserInterfaceSettingsPage()
animationGroupBox->setLayout(animationGrid);
// deck editor settings
openDeckInNewTabCheckBox.setChecked(SettingsCache::instance().interface().getOpenDeckInNewTab());
connect(&openDeckInNewTabCheckBox, &QCheckBox::QT_STATE_CHANGED, &SettingsCache::instance().interface(),
&InterfaceSettings::setOpenDeckInNewTab);
openDeckInNewTabCheckBox.setChecked(SettingsCache::instance().deckEditor().getOpenDeckInNewTab());
connect(&openDeckInNewTabCheckBox, &QCheckBox::QT_STATE_CHANGED, &SettingsCache::instance().deckEditor(),
&DeckEditorSettings::setOpenDeckInNewTab);
visualDeckStorageInGameCheckBox.setChecked(
SettingsCache::instance().visualDeckStorage().getVisualDeckStorageInGame());
@ -156,10 +168,9 @@ UserInterfaceSettingsPage::UserInterfaceSettingsPage()
defaultDeckEditorTypeSelector.addItem(""); // these will be set in retranslateUI
defaultDeckEditorTypeSelector.addItem("");
defaultDeckEditorTypeSelector.setCurrentIndex(
SettingsCache::instance().visualDeckStorage().getDefaultDeckEditorType());
defaultDeckEditorTypeSelector.setCurrentIndex(SettingsCache::instance().deckEditor().getDefaultDeckEditorType());
connect(&defaultDeckEditorTypeSelector, QOverload<int>::of(&QComboBox::currentIndexChanged),
&SettingsCache::instance().visualDeckStorage(), &VisualDeckStorageSettings::setDefaultDeckEditorType);
&SettingsCache::instance().deckEditor(), &DeckEditorSettings::setDefaultDeckEditorType);
auto *deckEditorGrid = new QGridLayout;
deckEditorGrid->addWidget(&openDeckInNewTabCheckBox, 0, 0);
@ -212,6 +223,12 @@ void UserInterfaceSettingsPage::setNotificationEnabled(QT_STATE_CHANGED_T i)
}
}
void UserInterfaceSettingsPage::showShortcutsChanged(QT_STATE_CHANGED_T value)
{
SettingsCache::instance().interface().setShowShortcuts(value);
qApp->setAttribute(Qt::AA_DontShowShortcutsInContextMenus, value == 0); // 0 = unchecked
}
void UserInterfaceSettingsPage::retranslateUi()
{
generalGroupBox->setTitle(tr("General interface settings"));
@ -227,6 +244,8 @@ void UserInterfaceSettingsPage::retranslateUi()
useTearOffMenusCheckBox.setText(tr("Use tear-off menus, allowing right click menus to persist on screen"));
keepGameChatFocusCheckBox.setText(
tr("Keep game chat focused when clicking in game (Note: disables card view search bar)"));
showShortcutsCheckBox.setText(tr("Show keyboard shortcuts in right-click menus"));
showGameSelectorFilterToolbarCheckBox.setText(tr("Show game filter toolbar above list in room tab"));
notificationsGroupBox->setTitle(tr("Notifications settings"));
notificationsEnabledCheckBox.setText(tr("Enable notifications in taskbar"));

View file

@ -15,6 +15,7 @@ class UserInterfaceSettingsPage : public AbstractSettingsPage
Q_OBJECT
private slots:
void setNotificationEnabled(QT_STATE_CHANGED_T);
void showShortcutsChanged(QT_STATE_CHANGED_T);
private:
QCheckBox notificationsEnabledCheckBox;
@ -31,6 +32,8 @@ private:
QCheckBox showTotalSelectionCountCheckBox;
QCheckBox useTearOffMenusCheckBox;
QCheckBox keepGameChatFocusCheckBox;
QCheckBox showShortcutsCheckBox;
QCheckBox showGameSelectorFilterToolbarCheckBox;
QCheckBox tapAnimationCheckBox;
QCheckBox openDeckInNewTabCheckBox;
QLabel visualDeckStoragePromptForConversionLabel;

View file

@ -44,7 +44,7 @@
#include <libcockatrice/protocol/pb/command_deck_upload.pb.h>
#include <libcockatrice/protocol/pb/response.pb.h>
#include <libcockatrice/protocol/pending_command.h>
#include <libcockatrice/settings/interface_settings.h>
#include <libcockatrice/settings/deck_editor_settings.h>
#include <libcockatrice/settings/paths_settings.h>
#include <libcockatrice/settings/recents_settings.h>
#include <libcockatrice/utility/string_limits.h>
@ -203,7 +203,7 @@ void AbstractTabDeckEditor::cleanDeckAndResetModified()
*/
AbstractTabDeckEditor::DeckOpenLocation AbstractTabDeckEditor::confirmOpen(const bool openInSameTabIfBlank)
{
if (SettingsCache::instance().interface().getOpenDeckInNewTab()) {
if (SettingsCache::instance().deckEditor().getOpenDeckInNewTab()) {
if (openInSameTabIfBlank && deckStateManager->isBlankNewDeck()) {
return SAME_TAB;
} else {

View file

@ -27,7 +27,7 @@
#include <libcockatrice/card/database/card_database_manager.h>
#include <libcockatrice/models/database/card/card_completer_proxy_model.h>
#include <libcockatrice/models/database/card/card_search_model.h>
#include <libcockatrice/settings/visual_deck_storage_settings.h>
#include <libcockatrice/settings/cards_display_settings.h>
#include <version_string.h>
TabArchidekt::TabArchidekt(TabSupervisor *_tabSupervisor)
@ -132,8 +132,8 @@ void TabArchidekt::initializeUi()
// Settings
settingsButton = new SettingsButtonWidget(primaryToolbar);
cardSizeSlider = new CardSizeWidget(primaryToolbar, nullptr,
SettingsCache::instance().visualDeckStorage().getArchidektPreviewSize());
cardSizeSlider =
new CardSizeWidget(primaryToolbar, nullptr, SettingsCache::instance().cardsDisplay().getArchidektPreviewSize());
settingsButton->addSettingsWidget(cardSizeSlider);
// Assemble primary toolbar
@ -339,8 +339,8 @@ void TabArchidekt::connectSignals()
doSearch();
});
connect(cardSizeSlider, &CardSizeWidget::cardSizeSettingUpdated, &SettingsCache::instance().visualDeckStorage(),
&VisualDeckStorageSettings::setArchidektPreviewCardSize);
connect(cardSizeSlider, &CardSizeWidget::cardSizeSettingUpdated, &SettingsCache::instance().cardsDisplay(),
&CardsDisplaySettings::setArchidektPreviewCardSize);
// Search button triggers immediate search
connect(searchButton, &QPushButton::clicked, this, &TabArchidekt::doSearchImmediate);

View file

@ -25,7 +25,7 @@
#include <libcockatrice/card/database/card_database_manager.h>
#include <libcockatrice/models/database/card/card_completer_proxy_model.h>
#include <libcockatrice/models/database/card/card_search_model.h>
#include <libcockatrice/settings/visual_deck_storage_settings.h>
#include <libcockatrice/settings/cards_display_settings.h>
#include <version_string.h>
static bool canBeCommander(const CardInfoPtr &cardInfo)
@ -95,10 +95,9 @@ TabEdhRecMain::TabEdhRecMain(TabSupervisor *_tabSupervisor) : Tab(_tabSupervisor
settingsButton = new SettingsButtonWidget(this);
cardSizeSlider =
new CardSizeWidget(this, nullptr, SettingsCache::instance().visualDeckStorage().getEDHRecCardSize());
connect(cardSizeSlider, &CardSizeWidget::cardSizeSettingUpdated, &SettingsCache::instance().visualDeckStorage(),
&VisualDeckStorageSettings::setEDHRecCardSize);
cardSizeSlider = new CardSizeWidget(this, nullptr, SettingsCache::instance().cardsDisplay().getEDHRecCardSize());
connect(cardSizeSlider, &CardSizeWidget::cardSizeSettingUpdated, &SettingsCache::instance().cardsDisplay(),
&CardsDisplaySettings::setEDHRecCardSize);
settingsButton->addSettingsWidget(cardSizeSlider);

View file

@ -39,9 +39,9 @@
#include <libcockatrice/protocol/pb/serverinfo_room.pb.h>
#include <libcockatrice/protocol/pb/serverinfo_user.pb.h>
#include <libcockatrice/settings/chat_settings.h>
#include <libcockatrice/settings/deck_editor_settings.h>
#include <libcockatrice/settings/interface_settings.h>
#include <libcockatrice/settings/tabs_settings.h>
#include <libcockatrice/settings/visual_deck_storage_settings.h>
QRect MacOSTabFixStyle::subElementRect(SubElement element, const QStyleOption *option, const QWidget *widget) const
{
@ -910,7 +910,7 @@ void TabSupervisor::talkLeft(TabMessage *tab)
*/
void TabSupervisor::openDeckInNewTab(const LoadedDeck &deckToOpen)
{
int type = SettingsCache::instance().visualDeckStorage().getDefaultDeckEditorType();
int type = SettingsCache::instance().deckEditor().getDefaultDeckEditorType();
switch (type) {
case ClassicDeckEditor:
addDeckEditorTab(deckToOpen);

View file

@ -20,7 +20,7 @@
#include <libcockatrice/card/card_info_comparator.h>
#include <libcockatrice/card/database/card_database.h>
#include <libcockatrice/card/database/card_database_manager.h>
#include <libcockatrice/settings/visual_deck_storage_settings.h>
#include <libcockatrice/settings/cards_display_settings.h>
#include <utility>
VisualDatabaseDisplayWidget::VisualDatabaseDisplayWidget(QWidget *parent,
@ -52,10 +52,10 @@ VisualDatabaseDisplayWidget::VisualDatabaseDisplayWidget(QWidget *parent,
mainLayout->setContentsMargins(0, 0, 0, 0);
flowWidget = new FlowWidget(this, Qt::Horizontal, Qt::ScrollBarAlwaysOff, Qt::ScrollBarPolicy::ScrollBarAsNeeded);
cardSizeWidget = new CardSizeWidget(
this, flowWidget, SettingsCache::instance().visualDeckStorage().getVisualDatabaseDisplayCardSize());
connect(cardSizeWidget, &CardSizeWidget::cardSizeSettingUpdated, &SettingsCache::instance().visualDeckStorage(),
&VisualDeckStorageSettings::setVisualDatabaseDisplayCardSize);
cardSizeWidget = new CardSizeWidget(this, flowWidget,
SettingsCache::instance().cardsDisplay().getVisualDatabaseDisplayCardSize());
connect(cardSizeWidget, &CardSizeWidget::cardSizeSettingUpdated, &SettingsCache::instance().cardsDisplay(),
&CardsDisplaySettings::setVisualDatabaseDisplayCardSize);
searchContainer = new FlowWidget(this, Qt::Horizontal, Qt::ScrollBarAlwaysOff, Qt::ScrollBarAlwaysOff);

View file

@ -8,7 +8,7 @@
#include <QSplitter>
#include <libcockatrice/card/database/card_database_manager.h>
#include <libcockatrice/settings/visual_deck_storage_settings.h>
#include <libcockatrice/settings/cards_display_settings.h>
#include <random>
VisualDeckEditorSampleHandWidget::VisualDeckEditorSampleHandWidget(QWidget *parent,
@ -34,10 +34,10 @@ VisualDeckEditorSampleHandWidget::VisualDeckEditorSampleHandWidget(QWidget *pare
resetAndHandSizeLayout->addWidget(resetButton);
handSizeSpinBox = new QSpinBox(this);
handSizeSpinBox->setValue(SettingsCache::instance().visualDeckStorage().getVisualDeckEditorSampleHandSize());
handSizeSpinBox->setValue(SettingsCache::instance().cardsDisplay().getSampleHandSize());
handSizeSpinBox->setMinimum(1);
connect(handSizeSpinBox, qOverload<int>(&QSpinBox::valueChanged), &SettingsCache::instance().visualDeckStorage(),
&VisualDeckStorageSettings::setVisualDeckEditorSampleHandSize);
connect(handSizeSpinBox, qOverload<int>(&QSpinBox::valueChanged), &SettingsCache::instance().cardsDisplay(),
&CardsDisplaySettings::setSampleHandSize);
connect(handSizeSpinBox, qOverload<int>(&QSpinBox::valueChanged), this,
&VisualDeckEditorSampleHandWidget::updateDisplay);
resetAndHandSizeLayout->addWidget(handSizeSpinBox);

View file

@ -25,7 +25,7 @@
#include <libcockatrice/models/database/card/card_search_model.h>
#include <libcockatrice/models/database/card_database_model.h>
#include <libcockatrice/models/deck_list/deck_list_model.h>
#include <libcockatrice/settings/visual_deck_storage_settings.h>
#include <libcockatrice/settings/cards_display_settings.h>
#include <qscrollarea.h>
VisualDeckEditorWidget::VisualDeckEditorWidget(QWidget *parent,
@ -45,9 +45,9 @@ VisualDeckEditorWidget::VisualDeckEditorWidget(QWidget *parent,
initializeScrollAreaAndZoneContainer();
cardSizeWidget =
new CardSizeWidget(this, nullptr, SettingsCache::instance().visualDeckStorage().getVisualDeckEditorCardSize());
connect(cardSizeWidget, &CardSizeWidget::cardSizeSettingUpdated, &SettingsCache::instance().visualDeckStorage(),
&VisualDeckStorageSettings::setVisualDeckEditorCardSize);
new CardSizeWidget(this, nullptr, SettingsCache::instance().cardsDisplay().getVisualDeckEditorCardSize());
connect(cardSizeWidget, &CardSizeWidget::cardSizeSettingUpdated, &SettingsCache::instance().cardsDisplay(),
&CardsDisplaySettings::setVisualDeckEditorCardSize);
mainLayout->addWidget(displayOptionsAndSearch);
mainLayout->addWidget(scrollArea);

View file

@ -6,6 +6,7 @@
#include <QCheckBox>
#include <QComboBox>
#include <QSpinBox>
#include <libcockatrice/settings/cards_display_settings.h>
#include <libcockatrice/settings/personal_settings.h>
#include <libcockatrice/settings/visual_deck_storage_settings.h>
@ -115,11 +116,11 @@ VisualDeckStorageQuickSettingsWidget::VisualDeckStorageQuickSettingsWidget(QWidg
// card size slider
cardSizeWidget =
new CardSizeWidget(this, nullptr, SettingsCache::instance().visualDeckStorage().getVisualDeckStorageCardSize());
new CardSizeWidget(this, nullptr, SettingsCache::instance().cardsDisplay().getVisualDeckStorageCardSize());
connect(cardSizeWidget->getSlider(), &QSlider::valueChanged, this,
&VisualDeckStorageQuickSettingsWidget::cardSizeChanged);
connect(cardSizeWidget, &CardSizeWidget::cardSizeSettingUpdated, &SettingsCache::instance().visualDeckStorage(),
&VisualDeckStorageSettings::setVisualDeckStorageCardSize);
connect(cardSizeWidget, &CardSizeWidget::cardSizeSettingUpdated, &SettingsCache::instance().cardsDisplay(),
&CardsDisplaySettings::setVisualDeckStorageCardSize);
// putting everything together
this->addSettingsWidget(showFoldersCheckBox);

View file

@ -70,7 +70,9 @@
#include <libcockatrice/settings/cache_storage_settings.h>
#include <libcockatrice/settings/debug_settings.h>
#include <libcockatrice/settings/download_settings.h>
#include <libcockatrice/settings/interface_settings.h>
#include <libcockatrice/settings/layouts_settings.h>
#include <libcockatrice/settings/network_settings.h>
#include <libcockatrice/settings/paths_settings.h>
#include <libcockatrice/settings/personal_settings.h>
#include <libcockatrice/settings/servers_settings.h>
@ -391,9 +393,9 @@ void MainWindow::createActions()
connect(aCheckCardUpdatesBackground, &QAction::triggered, this, &MainWindow::actCheckCardUpdatesBackground);
aStatusBar = new QAction(this);
aStatusBar->setCheckable(true);
aStatusBar->setChecked(SettingsCache::instance().personal().getShowStatusBar());
connect(aStatusBar, &QAction::triggered, &SettingsCache::instance().personal(),
&PersonalSettings::setShowStatusBar);
aStatusBar->setChecked(SettingsCache::instance().interface().getShowStatusBar());
connect(aStatusBar, &QAction::triggered, &SettingsCache::instance().interface(),
&InterfaceSettings::setShowStatusBar);
aViewLog = new QAction(this);
connect(aViewLog, &QAction::triggered, this, &MainWindow::actViewLog);
aOpenSettingsFolder = new QAction(this);
@ -518,9 +520,9 @@ MainWindow::MainWindow(QWidget *parent)
}
// status bar
connect(&SettingsCache::instance().personal(), &PersonalSettings::showStatusBarChanged, this,
connect(&SettingsCache::instance().interface(), &InterfaceSettings::showStatusBarChanged, this,
[this](bool show) { statusBar()->setVisible(show); });
statusBar()->setVisible(SettingsCache::instance().personal().getShowStatusBar());
statusBar()->setVisible(SettingsCache::instance().interface().getShowStatusBar());
connect(&SettingsCache::instance().shortcuts(), &ShortcutsSettings::shortCutChanged, this,
&MainWindow::refreshShortcuts);
@ -557,23 +559,23 @@ void MainWindow::startupConfigCheck()
actCheckClientUpdates();
}
if (SettingsCache::instance().personal().getClientVersion() == CLIENT_INFO_NOT_SET) {
if (SettingsCache::instance().network().getClientVersion() == CLIENT_INFO_NOT_SET) {
// no config found, 99% new clean install
qCInfo(WindowMainStartupVersionLog)
<< "Startup: old client version empty, assuming first start after clean install";
alertForcedOracleRun(VERSION_STRING, false);
SettingsCache::instance().downloads().resetToDefaultURLs(); // populate the download urls
SettingsCache::instance().personal().setClientVersion(VERSION_STRING);
SettingsCache::instance().network().setClientVersion(VERSION_STRING);
if (QString(VERSION_STRING).contains("custom", Qt::CaseInsensitive)) {
SettingsCache::instance().updates().setCheckUpdatesOnStartup(false);
} else if (QString(VERSION_STRING).contains("beta", Qt::CaseInsensitive)) {
SettingsCache::instance().updates().setUpdateReleaseChannelIndex(1);
}
} else if (SettingsCache::instance().personal().getClientVersion() != VERSION_STRING) {
} else if (SettingsCache::instance().network().getClientVersion() != VERSION_STRING) {
// config found, from another (presumably older) version
qCInfo(WindowMainStartupVersionLog)
<< "Startup: old client version" << SettingsCache::instance().personal().getClientVersion()
<< "Startup: old client version" << SettingsCache::instance().network().getClientVersion()
<< "differs, assuming first start after update";
if (SettingsCache::instance().updates().getNotifyAboutNewVersion()) {
alertForcedOracleRun(VERSION_STRING, true);
@ -598,7 +600,7 @@ void MainWindow::startupConfigCheck()
}
}
SettingsCache::instance().personal().setClientVersion(VERSION_STRING);
SettingsCache::instance().network().setClientVersion(VERSION_STRING);
} else {
// previous config from this version found
qCInfo(WindowMainStartupVersionLog) << "Startup: found config with current version";

View file

@ -41,8 +41,11 @@
#include <QTranslator>
#include <libcockatrice/card/database/card_database_manager.h>
#include <libcockatrice/rng/rng_sfmt.h>
#include <libcockatrice/settings/appearance_settings.h>
#include <libcockatrice/settings/card_database_settings.h>
#include <libcockatrice/settings/cards_display_settings.h>
#include <libcockatrice/settings/interface_settings.h>
#include <libcockatrice/settings/network_settings.h>
#include <libcockatrice/settings/personal_settings.h>
QTranslator *translator, *qtTranslator;
@ -281,7 +284,7 @@ int main(int argc, char *argv[])
// set name of the app desktop file; used by wayland to load the window icon
QGuiApplication::setDesktopFileName("cockatrice");
SettingsCache::instance().personal().setClientID(generateClientID());
SettingsCache::instance().network().setClientID(generateClientID());
// If spoiler mode is enabled, we will download the spoilers
// then reload the DB. otherwise just reload the DB
@ -292,7 +295,7 @@ int main(int argc, char *argv[])
// force shortcuts to be shown/hidden in right-click menus, regardless of system defaults
qApp->setAttribute(Qt::AA_DontShowShortcutsInContextMenus,
!SettingsCache::instance().cardsDisplay().getShowShortcuts());
!SettingsCache::instance().interface().getShowShortcuts());
#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
app.setAttribute(Qt::AA_UseHighDpiPixmaps);

View file

@ -9,6 +9,7 @@ set(HEADERS
libcockatrice/interfaces/interface_card_set_priority_controller.h
libcockatrice/interfaces/interface_cards_display_settings_provider.h
libcockatrice/interfaces/interface_chat_settings_provider.h
libcockatrice/interfaces/interface_deck_editor_settings_provider.h
libcockatrice/interfaces/interface_game_settings_provider.h
libcockatrice/interfaces/interface_interface_settings_provider.h
libcockatrice/interfaces/interface_network_settings_provider.h

View file

@ -14,15 +14,17 @@ public:
[[nodiscard]] virtual int getPrintingSelectorCardSize() const = 0;
[[nodiscard]] virtual bool getIncludeRebalancedCards() const = 0;
[[nodiscard]] virtual bool getPrintingSelectorNavigationButtonsVisible() const = 0;
[[nodiscard]] virtual bool getDeckEditorBannerCardComboBoxVisible() const = 0;
[[nodiscard]] virtual bool getDeckEditorTagsWidgetVisible() const = 0;
[[nodiscard]] virtual bool getTapAnimation() const = 0;
[[nodiscard]] virtual bool getAutoRotateSidewaysLayoutCards() const = 0;
[[nodiscard]] virtual bool getScaleCards() const = 0;
[[nodiscard]] virtual int getStackCardOverlapPercent() const = 0;
[[nodiscard]] virtual int getCardInfoViewMode() const = 0;
[[nodiscard]] virtual bool getShowShortcuts() const = 0;
[[nodiscard]] virtual bool getShowGameSelectorFilterToolbar() const = 0;
[[nodiscard]] virtual int getVisualDeckStorageCardSize() const = 0;
[[nodiscard]] virtual int getVisualDatabaseDisplayCardSize() const = 0;
[[nodiscard]] virtual int getVisualDeckEditorCardSize() const = 0;
[[nodiscard]] virtual int getEDHRecCardSize() const = 0;
[[nodiscard]] virtual int getArchidektPreviewSize() const = 0;
[[nodiscard]] virtual int getSampleHandSize() const = 0;
};
#endif // COCKATRICE_INTERFACE_CARDS_DISPLAY_SETTINGS_PROVIDER_H

View file

@ -29,15 +29,15 @@ public:
[[nodiscard]] virtual bool getHorizontalHand() const = 0;
[[nodiscard]] virtual bool getInvertVerticalCoordinate() const = 0;
[[nodiscard]] virtual int getMinPlayersForMultiColumnLayout() const = 0;
[[nodiscard]] virtual bool getOpenDeckInNewTab() const = 0;
[[nodiscard]] virtual int getRewindBufferingMs() const = 0;
[[nodiscard]] virtual qreal getFastForwardSpeed() const = 0;
[[nodiscard]] virtual bool getStyleUserList() const = 0;
[[nodiscard]] virtual bool getLeftJustified() const = 0;
[[nodiscard]] virtual int getZoneViewGroupByIndex() const = 0;
[[nodiscard]] virtual int getZoneViewSortByIndex() const = 0;
[[nodiscard]] virtual bool getZoneViewPileView() const = 0;
[[nodiscard]] virtual QString getKnownMissingFeatures() = 0;
[[nodiscard]] virtual bool getShowStatusBar() const = 0;
[[nodiscard]] virtual bool getShowShortcuts() const = 0;
[[nodiscard]] virtual bool getShowGameSelectorFilterToolbar() const = 0;
};
#endif // COCKATRICE_INTERFACE_INTERFACE_SETTINGS_PROVIDER_H

View file

@ -11,20 +11,8 @@ public:
virtual ~IPersonalSettingsProvider() = default;
[[nodiscard]] virtual QString getLang() const = 0;
[[nodiscard]] virtual QString getClientID() = 0;
[[nodiscard]] virtual QString getClientVersion() = 0;
[[nodiscard]] virtual int getKeepAlive() const = 0;
[[nodiscard]] virtual int getTimeOut() const = 0;
[[nodiscard]] virtual bool getPicDownload() const = 0;
[[nodiscard]] virtual bool getShowStatusBar() const = 0;
[[nodiscard]] virtual int getMaxFontSize() const = 0;
[[nodiscard]] virtual QString getHighlightWords() const = 0;
[[nodiscard]] virtual QString getHomeTabBackgroundSource() const = 0;
[[nodiscard]] virtual int getHomeTabBackgroundShuffleFrequency() const = 0;
[[nodiscard]] virtual bool getHomeTabDisplayCardName() const = 0;
[[nodiscard]] virtual bool getShowTipsOnStartup() const = 0;
[[nodiscard]] virtual QList<int> getSeenTips() const = 0;
[[nodiscard]] virtual bool getDownloadSpoilersStatus() const = 0;
};
#endif // COCKATRICE_INTERFACE_PERSONAL_SETTINGS_PROVIDER_H

View file

@ -16,7 +16,6 @@ public:
[[nodiscard]] virtual bool getVisualDeckStorageShowColorIdentity() const = 0;
[[nodiscard]] virtual bool getVisualDeckStorageShowBannerCardComboBox() const = 0;
[[nodiscard]] virtual bool getVisualDeckStorageShowTagsOnDeckPreviews() const = 0;
[[nodiscard]] virtual int getVisualDeckStorageCardSize() const = 0;
[[nodiscard]] virtual bool getVisualDeckStorageDrawUnusedColorIdentities() const = 0;
[[nodiscard]] virtual int getVisualDeckStorageUnusedColorIdentitiesOpacity() const = 0;
[[nodiscard]] virtual int getVisualDeckStorageTooltipType() const = 0;
@ -24,14 +23,8 @@ public:
[[nodiscard]] virtual bool getVisualDeckStorageAlwaysConvert() const = 0;
[[nodiscard]] virtual bool getVisualDeckStorageInGame() const = 0;
[[nodiscard]] virtual bool getVisualDeckStorageSelectionAnimation() const = 0;
[[nodiscard]] virtual int getVisualDeckEditorCardSize() const = 0;
[[nodiscard]] virtual int getVisualDeckEditorSampleHandSize() const = 0;
[[nodiscard]] virtual int getVisualDatabaseDisplayCardSize() const = 0;
[[nodiscard]] virtual bool getVisualDatabaseDisplayFilterToMostRecentSetsEnabled() const = 0;
[[nodiscard]] virtual int getVisualDatabaseDisplayFilterToMostRecentSetsAmount() const = 0;
[[nodiscard]] virtual int getEDHRecCardSize() const = 0;
[[nodiscard]] virtual int getArchidektPreviewSize() const = 0;
[[nodiscard]] virtual int getDefaultDeckEditorType() const = 0;
};
#endif // COCKATRICE_INTERFACE_VISUAL_DECK_STORAGE_SETTINGS_PROVIDER_H

View file

@ -3,18 +3,21 @@ set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
set(HEADERS
libcockatrice/settings/appearance_settings.h
libcockatrice/settings/cache_storage_settings.h
libcockatrice/settings/card_database_settings.h
libcockatrice/settings/card_override_settings.h
libcockatrice/settings/cards_display_settings.h
libcockatrice/settings/chat_settings.h
libcockatrice/settings/debug_settings.h
libcockatrice/settings/deck_editor_settings.h
libcockatrice/settings/download_settings.h
libcockatrice/settings/game_filters_settings.h
libcockatrice/settings/game_settings.h
libcockatrice/settings/interface_settings.h
libcockatrice/settings/layouts_settings.h
libcockatrice/settings/message_settings.h
libcockatrice/settings/network_settings.h
libcockatrice/settings/paths_settings.h
libcockatrice/settings/personal_settings.h
libcockatrice/settings/recents_settings.h
@ -36,18 +39,21 @@ endif()
add_library(
libcockatrice_settings STATIC
${MOC_SOURCES}
libcockatrice/settings/appearance_settings.cpp
libcockatrice/settings/cache_storage_settings.cpp
libcockatrice/settings/card_database_settings.cpp
libcockatrice/settings/card_override_settings.cpp
libcockatrice/settings/cards_display_settings.cpp
libcockatrice/settings/chat_settings.cpp
libcockatrice/settings/debug_settings.cpp
libcockatrice/settings/deck_editor_settings.cpp
libcockatrice/settings/download_settings.cpp
libcockatrice/settings/game_filters_settings.cpp
libcockatrice/settings/game_settings.cpp
libcockatrice/settings/interface_settings.cpp
libcockatrice/settings/layouts_settings.cpp
libcockatrice/settings/message_settings.cpp
libcockatrice/settings/network_settings.cpp
libcockatrice/settings/paths_settings.cpp
libcockatrice/settings/personal_settings.cpp
libcockatrice/settings/recents_settings.cpp

View file

@ -1,7 +1,7 @@
#include "cache_storage_settings.h"
CacheStorageSettings::CacheStorageSettings(const QString &settingPath, QObject *parent)
: SettingsManager(settingPath + "cache_storage.ini", "personal", QString(), parent)
: SettingsManager(settingPath + "cache_storage.ini", "cache_storage", QString(), parent)
{
}

View file

@ -27,12 +27,12 @@ bool CardsDisplaySettings::getBumpSetsWithCardsInDeckToTop() const
int CardsDisplaySettings::getPrintingSelectorSortOrder() const
{
return getValue("printingselectorsortorder", QString(), QString(), 1).toInt();
return getValue("sortOrder", "cards", "printingSelector", 1).toInt();
}
int CardsDisplaySettings::getPrintingSelectorCardSize() const
{
return getValue("printingselectorcardsize", QString(), QString(), 100).toInt();
return getValue("printingSelector", "cards", "cardSize", 100).toInt();
}
bool CardsDisplaySettings::getIncludeRebalancedCards() const
@ -42,17 +42,7 @@ bool CardsDisplaySettings::getIncludeRebalancedCards() const
bool CardsDisplaySettings::getPrintingSelectorNavigationButtonsVisible() const
{
return getValue("printingselectornavigationbuttonsvisible", QString(), QString(), true).toBool();
}
bool CardsDisplaySettings::getDeckEditorBannerCardComboBoxVisible() const
{
return getValue("deckeditorbannercardcomboboxvisible", "interface", QString(), true).toBool();
}
bool CardsDisplaySettings::getDeckEditorTagsWidgetVisible() const
{
return getValue("deckeditortagswidgetvisible", "interface", QString(), true).toBool();
return getValue("navigationButtonsVisible", "cards", "printingSelector", true).toBool();
}
bool CardsDisplaySettings::getTapAnimation() const
@ -80,14 +70,34 @@ int CardsDisplaySettings::getCardInfoViewMode() const
return getValue("cardinfoviewmode", QString(), QString(), 0).toInt();
}
bool CardsDisplaySettings::getShowShortcuts() const
int CardsDisplaySettings::getVisualDeckStorageCardSize() const
{
return getValue("showshortcuts", "menu", QString(), true).toBool();
return getValue("visualDeckStorage", "cards", "cardSize", 100).toInt();
}
bool CardsDisplaySettings::getShowGameSelectorFilterToolbar() const
int CardsDisplaySettings::getVisualDatabaseDisplayCardSize() const
{
return getValue("showgameselectorfiltertoolbar", "menu", QString(), true).toBool();
return getValue("visualDatabaseDisplay", "cards", "cardSize", 100).toInt();
}
int CardsDisplaySettings::getVisualDeckEditorCardSize() const
{
return getValue("visualDeckEditor", "cards", "cardSize", 100).toInt();
}
int CardsDisplaySettings::getEDHRecCardSize() const
{
return getValue("edhrec", "cards", "cardSize", 100).toInt();
}
int CardsDisplaySettings::getArchidektPreviewSize() const
{
return getValue("archidektPreview", "cards", "cardSize", 100).toInt();
}
int CardsDisplaySettings::getSampleHandSize() const
{
return getValue("sampleHandSize", "cards", "cardSize", 7).toInt();
}
void CardsDisplaySettings::setDisplayCardNames(bool _displayCardNames)
@ -119,13 +129,13 @@ void CardsDisplaySettings::setBumpSetsWithCardsInDeckToTop(bool _bumpSetsWithCar
void CardsDisplaySettings::setPrintingSelectorSortOrder(int _printingSelectorSortOrder)
{
setValue(_printingSelectorSortOrder, "printingselectorsortorder");
setValue(_printingSelectorSortOrder, "sortOrder", "cards", "printingSelector");
emit printingSelectorSortOrderChanged();
}
void CardsDisplaySettings::setPrintingSelectorCardSize(int _printingSelectorCardSize)
{
setValue(_printingSelectorCardSize, "printingselectorcardsize");
setValue(_printingSelectorCardSize, "printingSelector", "cards", "cardSize");
emit printingSelectorCardSizeChanged();
}
@ -140,22 +150,10 @@ void CardsDisplaySettings::setIncludeRebalancedCards(bool _includeRebalancedCard
void CardsDisplaySettings::setPrintingSelectorNavigationButtonsVisible(bool _navigationButtonsVisible)
{
setValue(_navigationButtonsVisible, "printingselectornavigationbuttonsvisible");
setValue(_navigationButtonsVisible, "navigationButtonsVisible", "cards", "printingSelector");
emit printingSelectorNavigationButtonsVisibleChanged();
}
void CardsDisplaySettings::setDeckEditorBannerCardComboBoxVisible(bool _deckEditorBannerCardComboBoxVisible)
{
setValue(_deckEditorBannerCardComboBoxVisible, "deckeditorbannercardcomboboxvisible", "interface");
emit deckEditorBannerCardComboBoxVisibleChanged(_deckEditorBannerCardComboBoxVisible);
}
void CardsDisplaySettings::setDeckEditorTagsWidgetVisible(bool _deckEditorTagsWidgetVisible)
{
setValue(_deckEditorTagsWidgetVisible, "deckeditortagswidgetvisible", "interface");
emit deckEditorTagsWidgetVisibleChanged(_deckEditorTagsWidgetVisible);
}
void CardsDisplaySettings::setTapAnimation(bool _tapAnimation)
{
setValue(_tapAnimation, "tapanimation");
@ -181,13 +179,38 @@ void CardsDisplaySettings::setCardInfoViewMode(int _viewMode)
setValue(_viewMode, "cardinfoviewmode");
}
void CardsDisplaySettings::setShowShortcuts(bool _showShortcuts)
void CardsDisplaySettings::setVisualDeckStorageCardSize(int _cardSize)
{
setValue(_showShortcuts, "showshortcuts", "menu");
setValue(_cardSize, "visualDeckStorage", "cards", "cardSize");
emit visualDeckStorageCardSizeChanged();
}
void CardsDisplaySettings::setShowGameSelectorFilterToolbar(bool _showGameSelectorFilterToolbar)
void CardsDisplaySettings::setVisualDatabaseDisplayCardSize(int _cardSize)
{
setValue(_showGameSelectorFilterToolbar, "showgameselectorfiltertoolbar", "menu");
emit showGameSelectorFilterToolbarChanged(_showGameSelectorFilterToolbar);
setValue(_cardSize, "visualDatabaseDisplay", "cards", "cardSize");
emit visualDatabaseDisplayCardSizeChanged();
}
void CardsDisplaySettings::setVisualDeckEditorCardSize(int _cardSize)
{
setValue(_cardSize, "visualDeckEditor", "cards", "cardSize");
emit visualDeckEditorCardSizeChanged();
}
void CardsDisplaySettings::setEDHRecCardSize(int _edhrecCardSize)
{
setValue(_edhrecCardSize, "edhrec", "cards", "cardSize");
emit edhRecCardSizeChanged();
}
void CardsDisplaySettings::setArchidektPreviewCardSize(int _archidektPreviewCardSize)
{
setValue(_archidektPreviewCardSize, "archidektPreview", "cards", "cardSize");
emit archidektPreviewSizeChanged();
}
void CardsDisplaySettings::setSampleHandSize(int _sampleHandSize)
{
setValue(_sampleHandSize, "sampleHandSize", "cards", "cardSize");
emit sampleHandSizeChanged(_sampleHandSize);
}

View file

@ -19,15 +19,17 @@ public:
[[nodiscard]] int getPrintingSelectorCardSize() const override;
[[nodiscard]] bool getIncludeRebalancedCards() const override;
[[nodiscard]] bool getPrintingSelectorNavigationButtonsVisible() const override;
[[nodiscard]] bool getDeckEditorBannerCardComboBoxVisible() const override;
[[nodiscard]] bool getDeckEditorTagsWidgetVisible() const override;
[[nodiscard]] bool getTapAnimation() const override;
[[nodiscard]] bool getAutoRotateSidewaysLayoutCards() const override;
[[nodiscard]] bool getScaleCards() const override;
[[nodiscard]] int getStackCardOverlapPercent() const override;
[[nodiscard]] int getCardInfoViewMode() const override;
[[nodiscard]] bool getShowShortcuts() const override;
[[nodiscard]] bool getShowGameSelectorFilterToolbar() const override;
[[nodiscard]] int getVisualDeckStorageCardSize() const override;
[[nodiscard]] int getVisualDatabaseDisplayCardSize() const override;
[[nodiscard]] int getVisualDeckEditorCardSize() const override;
[[nodiscard]] int getEDHRecCardSize() const override;
[[nodiscard]] int getArchidektPreviewSize() const override;
[[nodiscard]] int getSampleHandSize() const override;
void setDisplayCardNames(bool _displayCardNames);
void setRoundCardCorners(bool _roundCardCorners);
@ -37,15 +39,17 @@ public:
void setPrintingSelectorCardSize(int _printingSelectorCardSize);
void setIncludeRebalancedCards(bool _includeRebalancedCards);
void setPrintingSelectorNavigationButtonsVisible(bool _navigationButtonsVisible);
void setDeckEditorBannerCardComboBoxVisible(bool _deckEditorBannerCardComboBoxVisible);
void setDeckEditorTagsWidgetVisible(bool _deckEditorTagsWidgetVisible);
void setTapAnimation(bool _tapAnimation);
void setAutoRotateSidewaysLayoutCards(bool _autoRotateSidewaysLayoutCards);
void setCardScaling(bool _scaleCards);
void setStackCardOverlapPercent(int _verticalCardOverlapPercent);
void setCardInfoViewMode(int _viewMode);
void setShowShortcuts(bool _showShortcuts);
void setShowGameSelectorFilterToolbar(bool _showGameSelectorFilterToolbar);
void setVisualDeckStorageCardSize(int _cardSize);
void setVisualDatabaseDisplayCardSize(int _cardSize);
void setVisualDeckEditorCardSize(int _cardSize);
void setEDHRecCardSize(int _edhrecCardSize);
void setArchidektPreviewCardSize(int _archidektPreviewCardSize);
void setSampleHandSize(int _sampleHandSize);
signals:
void displayCardNamesChanged();
@ -56,12 +60,17 @@ signals:
void printingSelectorCardSizeChanged();
void includeRebalancedCardsChanged(bool _includeRebalancedCards);
void printingSelectorNavigationButtonsVisibleChanged();
void deckEditorBannerCardComboBoxVisibleChanged(bool _visible);
void deckEditorTagsWidgetVisibleChanged(bool _visible);
void showGameSelectorFilterToolbarChanged(bool state);
void visualDeckStorageCardSizeChanged();
void visualDatabaseDisplayCardSizeChanged();
void visualDeckEditorCardSizeChanged();
void edhRecCardSizeChanged();
void archidektPreviewSizeChanged();
void sampleHandSizeChanged(int amount);
public:
explicit CardsDisplaySettings(const QString &settingPath, QObject *parent = nullptr);
private:
explicit CardsDisplaySettings(const QString &settingPath, QObject *parent = nullptr);
CardsDisplaySettings(const CardsDisplaySettings & /*other*/);
};

View file

@ -27,3 +27,25 @@ void DownloadSettings::resetToDefaultURLs()
{
setValue(QVariant::fromValue(DEFAULT_DOWNLOAD_URLS), "urls");
}
bool DownloadSettings::getPicDownload() const
{
return getValue("picturedownload", QString(), QString(), true).toBool();
}
void DownloadSettings::setPicDownload(bool _picDownload)
{
setValue(_picDownload, "picturedownload");
emit picDownloadChanged();
}
bool DownloadSettings::getDownloadSpoilersStatus() const
{
return getValue("downloadspoilers", QString(), QString(), false).toBool();
}
void DownloadSettings::setDownloadSpoilerStatus(bool _spoilerStatus)
{
setValue(_spoilerStatus, "downloadspoilers");
emit downloadSpoilerStatusChanged();
}

View file

@ -22,6 +22,14 @@ public:
QStringList getAllURLs() const;
void setDownloadUrls(const QStringList &downloadURLs);
void resetToDefaultURLs();
[[nodiscard]] bool getPicDownload() const;
void setPicDownload(bool _picDownload);
[[nodiscard]] bool getDownloadSpoilersStatus() const;
void setDownloadSpoilerStatus(bool _spoilerStatus);
signals:
void picDownloadChanged();
void downloadSpoilerStatusChanged();
};
#endif // COCKATRICE_DOWNLOADSETTINGS_H

View file

@ -37,17 +37,17 @@ bool InterfaceSettings::getKeepGameChatFocus() const
bool InterfaceSettings::getNotificationsEnabled() const
{
return getValue("notificationsenabled", QString(), QString(), true).toBool();
return getValue("enabled", "interface", "notifications", true).toBool();
}
bool InterfaceSettings::getSpectatorNotificationsEnabled() const
{
return getValue("specnotificationsenabled", QString(), QString(), false).toBool();
return getValue("spectatorsEnabled", "interface", "notifications", false).toBool();
}
bool InterfaceSettings::getBuddyConnectNotificationsEnabled() const
{
return getValue("buddyconnectnotificationsenabled", QString(), QString(), true).toBool();
return getValue("buddyConnectEnabled", "interface", "notifications", true).toBool();
}
bool InterfaceSettings::getDoubleClickToPlay() const
@ -110,11 +110,6 @@ int InterfaceSettings::getMinPlayersForMultiColumnLayout() const
return getValue("min_players_multicolumn", QString(), QString(), 4).toInt();
}
bool InterfaceSettings::getOpenDeckInNewTab() const
{
return getValue("openDeckInNewTab", "editor", QString(), false).toBool();
}
int InterfaceSettings::getRewindBufferingMs() const
{
return getValue("rewindBufferingMs", "replay", QString(), 200).toInt();
@ -125,11 +120,6 @@ qreal InterfaceSettings::getFastForwardSpeed() const
return getValue("fastForwardSpeed", "replay", QString(), 10).toReal();
}
bool InterfaceSettings::getStyleUserList() const
{
return getValue("styleUserList", "appearance", QString(), true).toBool();
}
bool InterfaceSettings::getLeftJustified() const
{
return getValue("leftjustified", QString(), QString(), false).toBool();
@ -150,9 +140,19 @@ bool InterfaceSettings::getZoneViewPileView() const
return getValue("pileview", "zoneview", QString(), true).toBool();
}
QString InterfaceSettings::getKnownMissingFeatures()
bool InterfaceSettings::getShowStatusBar() const
{
return getValue("knownmissingfeatures", QString(), QString(), "").toString();
return getValue("showStatusBar", QString(), QString(), false).toBool();
}
bool InterfaceSettings::getShowShortcuts() const
{
return getValue("showShortcuts", QString(), QString(), true).toBool();
}
bool InterfaceSettings::getShowGameSelectorFilterToolbar() const
{
return getValue("showGameSelectorFilterToolbar", QString(), QString(), true).toBool();
}
void InterfaceSettings::setUseTearOffMenus(bool _useTearOffMenus)
@ -189,17 +189,17 @@ void InterfaceSettings::setKeepGameChatFocus(bool value)
void InterfaceSettings::setNotificationsEnabled(bool _notificationsEnabled)
{
setValue(_notificationsEnabled, "notificationsenabled");
setValue(_notificationsEnabled, "enabled", "interface", "notifications");
}
void InterfaceSettings::setSpectatorNotificationsEnabled(bool _spectatorNotificationsEnabled)
{
setValue(_spectatorNotificationsEnabled, "specnotificationsenabled");
setValue(_spectatorNotificationsEnabled, "spectatorsEnabled", "interface", "notifications");
}
void InterfaceSettings::setBuddyConnectNotificationsEnabled(bool _buddyConnectNotificationsEnabled)
{
setValue(_buddyConnectNotificationsEnabled, "buddyconnectnotificationsenabled");
setValue(_buddyConnectNotificationsEnabled, "buddyConnectEnabled", "interface", "notifications");
}
void InterfaceSettings::setDoubleClickToPlay(bool _doubleClickToPlay)
@ -269,11 +269,6 @@ void InterfaceSettings::setMinPlayersForMultiColumnLayout(int _minPlayersForMult
emit minPlayersForMultiColumnLayoutChanged();
}
void InterfaceSettings::setOpenDeckInNewTab(bool _openDeckInNewTab)
{
setValue(_openDeckInNewTab, "openDeckInNewTab", "editor");
}
void InterfaceSettings::setRewindBufferingMs(int _rewindBufferingMs)
{
setValue(_rewindBufferingMs, "rewindBufferingMs", "replay");
@ -284,12 +279,6 @@ void InterfaceSettings::setFastForwardSpeed(qreal _value)
setValue(_value, "fastForwardSpeed", "replay");
}
void InterfaceSettings::setStyleUserList(bool _styleUserList)
{
setValue(_styleUserList, "styleUserList", "appearance");
emit styleUserListChanged();
}
void InterfaceSettings::setLeftJustified(bool _leftJustified)
{
setValue(_leftJustified, "leftjustified");
@ -311,7 +300,19 @@ void InterfaceSettings::setZoneViewPileView(bool _zoneViewPileView)
setValue(_zoneViewPileView, "pileview", "zoneview");
}
void InterfaceSettings::setKnownMissingFeatures(const QString &_knownMissingFeatures)
void InterfaceSettings::setShowStatusBar(bool _showStatusBar)
{
setValue(_knownMissingFeatures, "knownmissingfeatures");
setValue(_showStatusBar, "showStatusBar");
emit showStatusBarChanged(_showStatusBar);
}
void InterfaceSettings::setShowShortcuts(bool _showShortcuts)
{
setValue(_showShortcuts, "showShortcuts");
}
void InterfaceSettings::setShowGameSelectorFilterToolbar(bool _showGameSelectorFilterToolbar)
{
setValue(_showGameSelectorFilterToolbar, "showGameSelectorFilterToolbar");
emit showGameSelectorFilterToolbarChanged(_showGameSelectorFilterToolbar);
}

View file

@ -32,15 +32,15 @@ public:
[[nodiscard]] bool getHorizontalHand() const override;
[[nodiscard]] bool getInvertVerticalCoordinate() const override;
[[nodiscard]] int getMinPlayersForMultiColumnLayout() const override;
[[nodiscard]] bool getOpenDeckInNewTab() const override;
[[nodiscard]] int getRewindBufferingMs() const override;
[[nodiscard]] qreal getFastForwardSpeed() const override;
[[nodiscard]] bool getStyleUserList() const override;
[[nodiscard]] bool getLeftJustified() const override;
[[nodiscard]] int getZoneViewGroupByIndex() const override;
[[nodiscard]] int getZoneViewSortByIndex() const override;
[[nodiscard]] bool getZoneViewPileView() const override;
[[nodiscard]] QString getKnownMissingFeatures() override;
[[nodiscard]] bool getShowStatusBar() const override;
[[nodiscard]] bool getShowShortcuts() const override;
[[nodiscard]] bool getShowGameSelectorFilterToolbar() const override;
void setUseTearOffMenus(bool _useTearOffMenus);
void setCardViewInitialRowsMax(int _cardViewInitialRowsMax);
@ -63,15 +63,15 @@ public:
void setHorizontalHand(bool _horizontalHand);
void setInvertVerticalCoordinate(bool _invertVerticalCoordinate);
void setMinPlayersForMultiColumnLayout(int _minPlayersForMultiColumnLayout);
void setOpenDeckInNewTab(bool _openDeckInNewTab);
void setRewindBufferingMs(int _rewindBufferingMs);
void setFastForwardSpeed(qreal _value);
void setStyleUserList(bool _styleUserList);
void setLeftJustified(bool _leftJustified);
void setZoneViewGroupByIndex(int _zoneViewGroupByIndex);
void setZoneViewSortByIndex(int _zoneViewSortByIndex);
void setZoneViewPileView(bool _zoneViewPileView);
void setKnownMissingFeatures(const QString &_knownMissingFeatures);
void setShowStatusBar(bool _showStatusBar);
void setShowShortcuts(bool _showShortcuts);
void setShowGameSelectorFilterToolbar(bool _showGameSelectorFilterToolbar);
signals:
void useTearOffMenusChanged(bool state);
@ -79,12 +79,15 @@ signals:
void horizontalHandChanged();
void invertVerticalCoordinateChanged();
void minPlayersForMultiColumnLayoutChanged();
void styleUserListChanged();
void handJustificationChanged();
void tallyTypeChanged(int type);
void showStatusBarChanged(bool state);
void showGameSelectorFilterToolbarChanged(bool state);
public:
explicit InterfaceSettings(const QString &settingPath, QObject *parent = nullptr);
private:
explicit InterfaceSettings(const QString &settingPath, QObject *parent = nullptr);
InterfaceSettings(const InterfaceSettings & /*other*/);
};

View file

@ -10,61 +10,6 @@ QString PersonalSettings::getLang() const
return getValue("lang", QString(), QString(), QString()).toString();
}
QString PersonalSettings::getClientID()
{
return getValue("clientid", QString(), QString(), "notset").toString();
}
QString PersonalSettings::getClientVersion()
{
return getValue("clientversion", QString(), QString(), "notset").toString();
}
int PersonalSettings::getKeepAlive() const
{
return getValue("keepalive", QString(), QString(), 3).toInt();
}
int PersonalSettings::getTimeOut() const
{
return getValue("timeout", QString(), QString(), 5).toInt();
}
bool PersonalSettings::getPicDownload() const
{
return getValue("picturedownload", QString(), QString(), true).toBool();
}
bool PersonalSettings::getShowStatusBar() const
{
return getValue("showStatusBar", QString(), QString(), false).toBool();
}
int PersonalSettings::getMaxFontSize() const
{
return getValue("maxfontsize", "game", QString(), 12).toInt();
}
QString PersonalSettings::getHighlightWords() const
{
return getValue("highlightWords", QString(), QString(), "").toString();
}
QString PersonalSettings::getHomeTabBackgroundSource() const
{
return getValue("background", "home", QString(), "themed").toString();
}
int PersonalSettings::getHomeTabBackgroundShuffleFrequency() const
{
return getValue("shuffleTimer", "home/background", QString(), 0).toInt();
}
bool PersonalSettings::getHomeTabDisplayCardName() const
{
return getValue("displayCardName", "home/background", QString(), true).toBool();
}
bool PersonalSettings::getShowTipsOnStartup() const
{
return getValue("showTips", "tipOfDay", QString(), true).toBool();
@ -80,78 +25,12 @@ QList<int> PersonalSettings::getSeenTips() const
return tips;
}
bool PersonalSettings::getDownloadSpoilersStatus() const
{
return getValue("downloadspoilers", QString(), QString(), false).toBool();
}
void PersonalSettings::setLang(const QString &_lang)
{
setValue(_lang, "lang");
emit langChanged();
}
void PersonalSettings::setClientID(const QString &_clientID)
{
setValue(_clientID, "clientid");
}
void PersonalSettings::setClientVersion(const QString &_clientVersion)
{
setValue(_clientVersion, "clientversion");
}
void PersonalSettings::setPicDownload(bool _picDownload)
{
setValue(_picDownload, "picturedownload");
emit picDownloadChanged();
}
void PersonalSettings::setShowStatusBar(bool value)
{
setValue(value, "showStatusBar");
emit showStatusBarChanged(value);
}
void PersonalSettings::setMaxFontSize(int _max)
{
setValue(_max, "maxfontsize", "game");
}
QString PersonalSettings::getThemeName() const
{
return getValue("themeName", QString(), QString()).toString();
}
void PersonalSettings::setThemeName(const QString &_themeName)
{
setValue(_themeName, "themeName");
emit themeNameChanged();
}
void PersonalSettings::setHighlightWords(const QString &_highlightWords)
{
setValue(_highlightWords, "highlightWords");
}
void PersonalSettings::setHomeTabBackgroundSource(const QString &_backgroundSource)
{
setValue(_backgroundSource, "background", "home");
emit homeTabBackgroundSourceChanged();
}
void PersonalSettings::setHomeTabBackgroundShuffleFrequency(int _frequency)
{
setValue(_frequency, "shuffleTimer", "home/background");
emit homeTabBackgroundShuffleFrequencyChanged();
}
void PersonalSettings::setHomeTabDisplayCardName(bool _displayCardName)
{
setValue(_displayCardName, "displayCardName", "home/background");
emit homeTabDisplayCardNameChanged();
}
void PersonalSettings::setShowTipsOnStartup(bool _showTipsOnStartup)
{
setValue(_showTipsOnStartup, "showTips", "tipOfDay");
@ -165,9 +44,3 @@ void PersonalSettings::setSeenTips(const QList<int> &_seenTips)
}
setValue(QVariant::fromValue(storedTipList), "seenTips", "tipOfDay");
}
void PersonalSettings::setDownloadSpoilerStatus(bool _spoilerStatus)
{
setValue(_spoilerStatus, "downloadspoilers");
emit downloadSpoilerStatusChanged();
}

View file

@ -14,46 +14,15 @@ class PersonalSettings : public SettingsManager, public IPersonalSettingsProvide
public:
[[nodiscard]] QString getLang() const override;
[[nodiscard]] QString getClientID() override;
[[nodiscard]] QString getClientVersion() override;
[[nodiscard]] int getKeepAlive() const override;
[[nodiscard]] int getTimeOut() const override;
[[nodiscard]] bool getPicDownload() const override;
[[nodiscard]] bool getShowStatusBar() const override;
[[nodiscard]] int getMaxFontSize() const override;
[[nodiscard]] QString getHighlightWords() const override;
[[nodiscard]] QString getHomeTabBackgroundSource() const override;
[[nodiscard]] int getHomeTabBackgroundShuffleFrequency() const override;
[[nodiscard]] QString getThemeName() const;
void setThemeName(const QString &_themeName);
[[nodiscard]] bool getHomeTabDisplayCardName() const override;
[[nodiscard]] bool getShowTipsOnStartup() const override;
[[nodiscard]] QList<int> getSeenTips() const override;
[[nodiscard]] bool getDownloadSpoilersStatus() const override;
void setLang(const QString &_lang);
void setClientID(const QString &_clientID);
void setClientVersion(const QString &_clientVersion);
void setPicDownload(bool _picDownload);
void setShowStatusBar(bool value);
void setMaxFontSize(int _max);
void setHighlightWords(const QString &_highlightWords);
void setHomeTabBackgroundSource(const QString &_backgroundSource);
void setHomeTabBackgroundShuffleFrequency(int _frequency);
void setHomeTabDisplayCardName(bool _displayCardName);
void setShowTipsOnStartup(bool _showTipsOnStartup);
void setSeenTips(const QList<int> &_seenTips);
void setDownloadSpoilerStatus(bool _spoilerStatus);
signals:
void langChanged();
void themeNameChanged();
void picDownloadChanged();
void showStatusBarChanged(bool state);
void homeTabBackgroundSourceChanged();
void homeTabBackgroundShuffleFrequencyChanged();
void homeTabDisplayCardNameChanged();
void downloadSpoilerStatusChanged();
public:
explicit PersonalSettings(const QString &settingPath, QObject *parent = nullptr);

View file

@ -77,7 +77,10 @@ static void migrateChatSettings(const QString &settingsPath, QSettings &globalIn
QStringList chatKeys = globalIni.childKeys();
globalIni.endGroup();
if (chatKeys.isEmpty()) {
// Legacy highlight words lived under [personal], but the chat settings
// class reads them from [chat]
bool hasHighlightWords = globalIni.contains("personal/highlightWords");
if (chatKeys.isEmpty() && !hasHighlightWords) {
return;
}
@ -85,16 +88,23 @@ static void migrateChatSettings(const QString &settingsPath, QSettings &globalIn
for (const auto &key : chatKeys) {
chatIni.setValue("chat/" + key, globalIni.value("chat/" + key));
}
if (hasHighlightWords) {
chatIni.setValue("chat/highlightwords", globalIni.value("personal/highlightWords"));
}
}
static void migrateCacheStorageSettings(const QString &settingsPath, QSettings &globalIni)
{
const QStringList cacheKeys = {"personal/pixmapCacheSize", "personal/networkCacheSize", "personal/redirectCacheTtl",
"personal/cardPictureLoaderCacheMethod",
"personal/localCardImageStorageNamingScheme"};
const QMap<QString, QString> cacheStorageKeyMap = {
{"personal/pixmapCacheSize", "cache_storage/pixmapCacheSize"},
{"personal/networkCacheSize", "cache_storage/networkCacheSize"},
{"personal/redirectCacheTtl", "cache_storage/redirectCacheTtl"},
{"personal/cardPictureLoaderCacheMethod", "cache_storage/cardPictureLoaderCacheMethod"},
{"personal/localCardImageStorageNamingScheme", "cache_storage/localCardImageStorageNamingScheme"},
};
bool hasAny = false;
for (const auto &key : cacheKeys) {
if (globalIni.contains(key)) {
for (auto it = cacheStorageKeyMap.constBegin(); it != cacheStorageKeyMap.constEnd(); ++it) {
if (globalIni.contains(it.key())) {
hasAny = true;
break;
}
@ -104,9 +114,9 @@ static void migrateCacheStorageSettings(const QString &settingsPath, QSettings &
}
QSettings cacheStorageIni(settingsPath + "cache_storage.ini", QSettings::IniFormat);
for (const auto &key : cacheKeys) {
if (globalIni.contains(key)) {
cacheStorageIni.setValue(key, globalIni.value(key));
for (auto it = cacheStorageKeyMap.constBegin(); it != cacheStorageKeyMap.constEnd(); ++it) {
if (globalIni.contains(it.key())) {
cacheStorageIni.setValue(it.value(), globalIni.value(it.key()));
}
}
}
@ -145,19 +155,7 @@ static void migrateUpdatesSettings(const QString &settingsPath, QSettings &globa
static void migratePersonalSettings(const QString &settingsPath, QSettings &globalIni)
{
const QStringList personalRootKeys = {"personal/lang", "personal/highlightWords"};
const QMap<QString, QString> personalKeyMap = {
{"theme/name", "personal/themeName"},
{"personal/clientid", "personal/clientid"},
{"personal/clientversion", "personal/clientversion"},
{"personal/keepalive", "personal/keepalive"},
{"personal/timeout", "personal/timeout"},
{"personal/picturedownload", "personal/picturedownload"},
{"personal/showStatusBar", "personal/showStatusBar"},
{"game/maxfontsize", "game/maxfontsize"},
{"personal/downloadspoilers", "personal/downloadspoilers"},
};
const QStringList homeKeys = {"home/background", "home/background/shuffleTimer", "home/background/displayCardName"};
const QStringList personalRootKeys = {"personal/lang"};
const QStringList tipKeys = {"tipOfDay/showTips", "tipOfDay/seenTips"};
bool hasAny = false;
@ -166,16 +164,6 @@ static void migratePersonalSettings(const QString &settingsPath, QSettings &glob
hasAny = true;
}
}
for (auto it = personalKeyMap.constBegin(); it != personalKeyMap.constEnd(); ++it) {
if (globalIni.contains(it.key())) {
hasAny = true;
}
}
for (const auto &key : homeKeys) {
if (globalIni.contains(key)) {
hasAny = true;
}
}
for (const auto &key : tipKeys) {
if (globalIni.contains(key)) {
hasAny = true;
@ -191,16 +179,6 @@ static void migratePersonalSettings(const QString &settingsPath, QSettings &glob
personalIni.setValue(key, globalIni.value(key));
}
}
for (auto it = personalKeyMap.constBegin(); it != personalKeyMap.constEnd(); ++it) {
if (globalIni.contains(it.key())) {
personalIni.setValue(it.value(), globalIni.value(it.key()));
}
}
for (const auto &key : homeKeys) {
if (globalIni.contains(key)) {
personalIni.setValue(key, globalIni.value(key));
}
}
for (const auto &key : tipKeys) {
if (globalIni.contains(key)) {
personalIni.setValue(key, globalIni.value(key));
@ -215,19 +193,24 @@ static void migrateCardsDisplaySettings(const QString &settingsPath, QSettings &
"cards/roundcardcorners",
"cards/overrideallcardartwithpersonalpreference",
"cards/bumpsetswithcardsindecktotop",
"cards/printingselectorsortorder",
"cards/printingselectorcardsize",
"cards/includerebalancedcards",
"cards/printingselectornavigationbuttonsvisible",
"cards/tapanimation",
"cards/autorotatesidewayslayoutcards",
"cards/scaleCards",
"cards/verticalCardOverlapPercent",
"cards/cardinfoviewmode",
};
const QStringList cardsInterfaceKeys = {"interface/deckeditorbannercardcomboboxvisible",
"interface/deckeditortagswidgetvisible"};
const QStringList menuKeys = {"menu/showshortcuts", "menu/showgameselectorfiltertoolbar"};
const QMap<QString, QString> cardsKeyMap = {
{"cards/printingselectorsortorder", "cards/printingSelector/sortOrder"},
{"cards/printingselectornavigationbuttonsvisible", "cards/printingSelector/navigationButtonsVisible"},
{"cards/printingselectorcardsize", "cards/cardSize/printingSelector"},
{"interface/visualdeckstoragecardsize", "cards/cardSize/visualDeckStorage"},
{"interface/visualdatabasedisplaycardsize", "cards/cardSize/visualDatabaseDisplay"},
{"interface/visualdeckeditorcardsize", "cards/cardSize/visualDeckEditor"},
{"interface/edhreccardsize", "cards/cardSize/edhrec"},
{"interface/archidektpreviewsize", "cards/cardSize/archidektPreview"},
{"interface/visualdeckeditorsamplehandsize", "cards/cardSize/sampleHandSize"},
};
bool hasAny = false;
for (const auto &key : cardsRootKeys) {
@ -235,13 +218,8 @@ static void migrateCardsDisplaySettings(const QString &settingsPath, QSettings &
hasAny = true;
}
}
for (const auto &key : cardsInterfaceKeys) {
if (globalIni.contains(key)) {
hasAny = true;
}
}
for (const auto &key : menuKeys) {
if (globalIni.contains(key)) {
for (auto it = cardsKeyMap.constBegin(); it != cardsKeyMap.constEnd(); ++it) {
if (globalIni.contains(it.key())) {
hasAny = true;
}
}
@ -255,14 +233,9 @@ static void migrateCardsDisplaySettings(const QString &settingsPath, QSettings &
cardsIni.setValue(key, globalIni.value(key));
}
}
for (const auto &key : cardsInterfaceKeys) {
if (globalIni.contains(key)) {
cardsIni.setValue(key, globalIni.value(key));
}
}
for (const auto &key : menuKeys) {
if (globalIni.contains(key)) {
cardsIni.setValue(key, globalIni.value(key));
for (auto it = cardsKeyMap.constBegin(); it != cardsKeyMap.constEnd(); ++it) {
if (globalIni.contains(it.key())) {
cardsIni.setValue(it.value(), globalIni.value(it.key()));
}
}
}
@ -276,9 +249,6 @@ static void migrateInterfaceSettings(const QString &settingsPath, QSettings &glo
"interface/closeEmptyCardView",
"interface/focusCardViewSearchBar",
"interface/keepGameChatFocus",
"interface/notificationsenabled",
"interface/specnotificationsenabled",
"interface/buddyconnectnotificationsenabled",
"interface/doubleclicktoplay",
"interface/clickPlaysAllSelected",
"interface/playtostack",
@ -287,14 +257,21 @@ static void migrateInterfaceSettings(const QString &settingsPath, QSettings &glo
"interface/annotatetokens",
"interface/showlassoselectioncount",
"interface/showpersistentselectioncount",
"interface/showsubtypeselectiontally",
"interface/tallyType",
"interface/leftjustified",
"interface/min_players_multicolumn",
"interface/knownmissingfeatures",
};
const QStringList interfaceSubKeys = {
"hand/horizontal", "table/invert_vertical", "editor/openDeckInNewTab", "replay/rewindBufferingMs",
"appearance/styleUserList", "zoneview/groupby", "zoneview/sortby", "zoneview/pileview"};
"hand/horizontal", "table/invert_vertical", "replay/rewindBufferingMs", "replay/fastForwardSpeed",
"zoneview/groupby", "zoneview/sortby", "zoneview/pileview"};
const QMap<QString, QString> interfaceKeyMap = {
{"personal/showStatusBar", "interface/showStatusBar"},
{"menu/showshortcuts", "interface/showShortcuts"},
{"menu/showgameselectorfiltertoolbar", "interface/showGameSelectorFilterToolbar"},
{"interface/notificationsenabled", "interface/notifications/enabled"},
{"interface/specnotificationsenabled", "interface/notifications/spectatorsEnabled"},
{"interface/buddyconnectnotificationsenabled", "interface/notifications/buddyConnectEnabled"},
};
bool hasAny = false;
for (const auto &key : interfaceRootKeys) {
if (globalIni.contains(key)) {
@ -306,6 +283,11 @@ static void migrateInterfaceSettings(const QString &settingsPath, QSettings &glo
hasAny = true;
}
}
for (auto it = interfaceKeyMap.constBegin(); it != interfaceKeyMap.constEnd(); ++it) {
if (globalIni.contains(it.key())) {
hasAny = true;
}
}
if (!hasAny) {
return;
}
@ -321,6 +303,93 @@ static void migrateInterfaceSettings(const QString &settingsPath, QSettings &glo
interfaceIni.setValue(key, globalIni.value(key));
}
}
for (auto it = interfaceKeyMap.constBegin(); it != interfaceKeyMap.constEnd(); ++it) {
if (globalIni.contains(it.key())) {
interfaceIni.setValue(it.value(), globalIni.value(it.key()));
}
}
}
static void migrateDownloadSettings(const QString &settingsPath, QSettings &globalIni)
{
const QMap<QString, QString> downloadKeyMap = {
{"personal/picturedownload", "downloads/picturedownload"},
{"personal/downloadspoilers", "downloads/downloadspoilers"},
};
bool hasAny = false;
for (auto it = downloadKeyMap.constBegin(); it != downloadKeyMap.constEnd(); ++it) {
if (globalIni.contains(it.key())) {
hasAny = true;
break;
}
}
if (!hasAny) {
return;
}
QSettings downloadsIni(settingsPath + "downloads.ini", QSettings::IniFormat);
for (auto it = downloadKeyMap.constBegin(); it != downloadKeyMap.constEnd(); ++it) {
if (globalIni.contains(it.key())) {
downloadsIni.setValue(it.value(), globalIni.value(it.key()));
}
}
}
static void migrateAppearanceSettings(const QString &settingsPath, QSettings &globalIni)
{
const QMap<QString, QString> appearanceKeyMap = {
{"theme/name", "appearance/themeName"},
{"game/maxfontsize", "appearance/maxFontSize"},
{"home/background", "appearance/homeTabBackgroundSource"},
{"home/background/shuffleTimer", "appearance/homeTabBackgroundShuffleFrequency"},
{"home/background/displayCardName", "appearance/homeTabDisplayCardName"},
{"appearance/styleUserList", "appearance/styleUserList"},
};
bool hasAny = false;
for (auto it = appearanceKeyMap.constBegin(); it != appearanceKeyMap.constEnd(); ++it) {
if (globalIni.contains(it.key())) {
hasAny = true;
break;
}
}
if (!hasAny) {
return;
}
QSettings appearanceIni(settingsPath + "appearance.ini", QSettings::IniFormat);
for (auto it = appearanceKeyMap.constBegin(); it != appearanceKeyMap.constEnd(); ++it) {
if (globalIni.contains(it.key())) {
appearanceIni.setValue(it.value(), globalIni.value(it.key()));
}
}
}
static void migrateNetworkSettings(const QString &settingsPath, QSettings &globalIni)
{
const QMap<QString, QString> networkKeyMap = {
{"personal/clientid", "network/clientid"},
{"personal/clientversion", "network/clientversion"},
{"personal/keepalive", "network/keepalive"},
{"personal/timeout", "network/timeout"},
{"interface/knownmissingfeatures", "network/knownmissingfeatures"},
};
bool hasAny = false;
for (auto it = networkKeyMap.constBegin(); it != networkKeyMap.constEnd(); ++it) {
if (globalIni.contains(it.key())) {
hasAny = true;
break;
}
}
if (!hasAny) {
return;
}
QSettings networkIni(settingsPath + "network.ini", QSettings::IniFormat);
for (auto it = networkKeyMap.constBegin(); it != networkKeyMap.constEnd(); ++it) {
if (globalIni.contains(it.key())) {
networkIni.setValue(it.value(), globalIni.value(it.key()));
}
}
}
static void migratePathsSettings(const QString &settingsPath, QSettings &globalIni)
@ -340,33 +409,32 @@ static void migratePathsSettings(const QString &settingsPath, QSettings &globalI
static void migrateVisualDeckStorageSettings(const QString &settingsPath, QSettings &globalIni)
{
const QStringList vdsKeys = {"interface/visualdeckstoragecardsize",
"interface/visualdeckstoragesortingorder",
"interface/visualdeckstorageshowfolders",
"interface/visualdeckstorageshowtagfilter",
"interface/visualdeckstoragedefaulttagslist",
"interface/visualdeckstoragesearchfoldernames",
"interface/visualdeckstorageshowcoloridentity",
"interface/visualdeckstorageshowbannercardcombobox",
"interface/visualdeckstorageshowtagsondeckpreviews",
"interface/visualdeckstoragedrawunusedcoloridentities",
"interface/visualdeckstorageunusedcoloridentitiesopacity",
"interface/visualdeckstoragetooltiptype",
"interface/visualdeckstoragepromptforconversion",
"interface/visualdeckstoragealwaysconvert",
"interface/visualdeckstorageingame",
"interface/visualdeckstorageselectionanimation",
"interface/defaultDeckEditorType",
"interface/visualdatabasedisplayfiltertomostrecentsetsenabled",
"interface/visualdatabasedisplayfiltertomostrecentsetsamount",
"interface/visualdeckeditorsamplehandsize",
"interface/visualdeckeditorcardsize",
"interface/visualdatabasedisplaycardsize",
"interface/edhreccardsize",
"interface/archidektpreviewsize"};
const QMap<QString, QString> vdsKeyMap = {
{"interface/visualdeckstoragesortingorder", "interface/visualDeckStorage/sortingOrder"},
{"interface/visualdeckstorageshowfolders", "interface/visualDeckStorage/showFolders"},
{"interface/visualdeckstorageshowtagfilter", "interface/visualDeckStorage/showTagFilter"},
{"interface/visualdeckstoragedefaulttagslist", "interface/visualDeckStorage/defaultTagsList"},
{"interface/visualdeckstoragesearchfoldernames", "interface/visualDeckStorage/searchFolderNames"},
{"interface/visualdeckstorageshowcoloridentity", "interface/visualDeckStorage/showColorIdentity"},
{"interface/visualdeckstorageshowbannercardcombobox", "interface/visualDeckStorage/showBannerCardComboBox"},
{"interface/visualdeckstorageshowtagsondeckpreviews", "interface/visualDeckStorage/showTagsOnDeckPreviews"},
{"interface/visualdeckstoragedrawunusedcoloridentities",
"interface/visualDeckStorage/drawUnusedColorIdentities"},
{"interface/visualdeckstorageunusedcoloridentitiesopacity",
"interface/visualDeckStorage/unusedColorIdentitiesOpacity"},
{"interface/visualdeckstoragetooltiptype", "interface/visualDeckStorage/tooltipType"},
{"interface/visualdeckstoragepromptforconversion", "interface/visualDeckStorage/promptForConversion"},
{"interface/visualdeckstoragealwaysconvert", "interface/visualDeckStorage/alwaysConvert"},
{"interface/visualdeckstorageingame", "interface/visualDeckStorage/inGame"},
{"interface/visualdeckstorageselectionanimation", "interface/visualDeckStorage/selectionAnimation"},
{"interface/visualdatabasedisplayfiltertomostrecentsetsenabled",
"interface/visualDatabaseDisplay/filterToMostRecentSetsEnabled"},
{"interface/visualdatabasedisplayfiltertomostrecentsetsamount",
"interface/visualDatabaseDisplay/filterToMostRecentSetsAmount"},
};
bool hasAny = false;
for (const auto &key : vdsKeys) {
if (globalIni.contains(key)) {
for (auto it = vdsKeyMap.constBegin(); it != vdsKeyMap.constEnd(); ++it) {
if (globalIni.contains(it.key())) {
hasAny = true;
}
}
@ -375,9 +443,36 @@ static void migrateVisualDeckStorageSettings(const QString &settingsPath, QSetti
}
QSettings vdsIni(settingsPath + "visual_deck_storage.ini", QSettings::IniFormat);
for (const auto &key : vdsKeys) {
if (globalIni.contains(key)) {
vdsIni.setValue(key, globalIni.value(key));
for (auto it = vdsKeyMap.constBegin(); it != vdsKeyMap.constEnd(); ++it) {
if (globalIni.contains(it.key())) {
vdsIni.setValue(it.value(), globalIni.value(it.key()));
}
}
}
static void migrateDeckEditorSettings(const QString &settingsPath, QSettings &globalIni)
{
const QMap<QString, QString> deckEditorKeyMap = {
{"editor/openDeckInNewTab", "deckeditor/openDeckInNewTab"},
{"interface/deckeditorbannercardcomboboxvisible", "deckeditor/bannerCardComboBoxVisible"},
{"interface/deckeditortagswidgetvisible", "deckeditor/tagsWidgetVisible"},
{"interface/defaultDeckEditorType", "deckeditor/defaultDeckEditorType"},
};
bool hasAny = false;
for (auto it = deckEditorKeyMap.constBegin(); it != deckEditorKeyMap.constEnd(); ++it) {
if (globalIni.contains(it.key())) {
hasAny = true;
break;
}
}
if (!hasAny) {
return;
}
QSettings deckEditorIni(settingsPath + "deck_editor.ini", QSettings::IniFormat);
for (auto it = deckEditorKeyMap.constBegin(); it != deckEditorKeyMap.constEnd(); ++it) {
if (globalIni.contains(it.key())) {
deckEditorIni.setValue(it.value(), globalIni.value(it.key()));
}
}
}
@ -503,10 +598,14 @@ bool SettingsMigration::migrateSettingsFromGlobalIni(const QString &settingsPath
migrateCacheStorageSettings(settingsPath, globalIni);
migrateUpdatesSettings(settingsPath, globalIni);
migratePersonalSettings(settingsPath, globalIni);
migrateDownloadSettings(settingsPath, globalIni);
migrateCardsDisplaySettings(settingsPath, globalIni);
migrateInterfaceSettings(settingsPath, globalIni);
migrateAppearanceSettings(settingsPath, globalIni);
migrateNetworkSettings(settingsPath, globalIni);
migratePathsSettings(settingsPath, globalIni);
migrateVisualDeckStorageSettings(settingsPath, globalIni);
migrateDeckEditorSettings(settingsPath, globalIni);
QFile::remove(settingsPath + "global.ini.old");
QFile::rename(settingsPath + "global.ini", settingsPath + "global.ini.old");

View file

@ -91,258 +91,182 @@ VisualDeckStorageSettings::VisualDeckStorageSettings(const QString &settingPath,
int VisualDeckStorageSettings::getVisualDeckStorageSortingOrder() const
{
return getValue("visualdeckstoragesortingorder", QString(), QString(), 0).toInt();
return getValue("sortingOrder", "interface", "visualDeckStorage", 0).toInt();
}
bool VisualDeckStorageSettings::getVisualDeckStorageShowFolders() const
{
return getValue("visualdeckstorageshowfolders", QString(), QString(), true).toBool();
return getValue("showFolders", "interface", "visualDeckStorage", true).toBool();
}
bool VisualDeckStorageSettings::getVisualDeckStorageShowTagFilter() const
{
return getValue("visualdeckstorageshowtagfilter", QString(), QString(), true).toBool();
return getValue("showTagFilter", "interface", "visualDeckStorage", true).toBool();
}
QStringList VisualDeckStorageSettings::getVisualDeckStorageDefaultTagsList() const
{
return getValue("visualdeckstoragedefaulttagslist", QString(), QString(), QVariant::fromValue(defaultTags))
return getValue("defaultTagsList", "interface", "visualDeckStorage", QVariant::fromValue(defaultTags))
.toStringList();
}
bool VisualDeckStorageSettings::getVisualDeckStorageSearchFolderNames() const
{
return getValue("visualdeckstoragesearchfoldernames", QString(), QString(), true).toBool();
return getValue("searchFolderNames", "interface", "visualDeckStorage", true).toBool();
}
bool VisualDeckStorageSettings::getVisualDeckStorageShowColorIdentity() const
{
return getValue("visualdeckstorageshowcoloridentity", QString(), QString(), true).toBool();
return getValue("showColorIdentity", "interface", "visualDeckStorage", true).toBool();
}
bool VisualDeckStorageSettings::getVisualDeckStorageShowBannerCardComboBox() const
{
return getValue("visualdeckstorageshowbannercardcombobox", QString(), QString(), true).toBool();
return getValue("showBannerCardComboBox", "interface", "visualDeckStorage", true).toBool();
}
bool VisualDeckStorageSettings::getVisualDeckStorageShowTagsOnDeckPreviews() const
{
return getValue("visualdeckstorageshowtagsondeckpreviews", QString(), QString(), true).toBool();
}
int VisualDeckStorageSettings::getVisualDeckStorageCardSize() const
{
return getValue("visualdeckstoragecardsize", QString(), QString(), 100).toInt();
return getValue("showTagsOnDeckPreviews", "interface", "visualDeckStorage", true).toBool();
}
bool VisualDeckStorageSettings::getVisualDeckStorageDrawUnusedColorIdentities() const
{
return getValue("visualdeckstoragedrawunusedcoloridentities", QString(), QString(), true).toBool();
return getValue("drawUnusedColorIdentities", "interface", "visualDeckStorage", true).toBool();
}
int VisualDeckStorageSettings::getVisualDeckStorageUnusedColorIdentitiesOpacity() const
{
return getValue("visualdeckstorageunusedcoloridentitiesopacity", QString(), QString(), 15).toInt();
return getValue("unusedColorIdentitiesOpacity", "interface", "visualDeckStorage", 15).toInt();
}
int VisualDeckStorageSettings::getVisualDeckStorageTooltipType() const
{
return getValue("visualdeckstoragetooltiptype", QString(), QString(), 0).toInt();
return getValue("tooltipType", "interface", "visualDeckStorage", 0).toInt();
}
bool VisualDeckStorageSettings::getVisualDeckStoragePromptForConversion() const
{
return getValue("visualdeckstoragepromptforconversion", QString(), QString(), true).toBool();
return getValue("promptForConversion", "interface", "visualDeckStorage", true).toBool();
}
bool VisualDeckStorageSettings::getVisualDeckStorageAlwaysConvert() const
{
return getValue("visualdeckstoragealwaysconvert", QString(), QString(), false).toBool();
return getValue("alwaysConvert", "interface", "visualDeckStorage", false).toBool();
}
bool VisualDeckStorageSettings::getVisualDeckStorageInGame() const
{
return getValue("visualdeckstorageingame", QString(), QString(), true).toBool();
return getValue("inGame", "interface", "visualDeckStorage", true).toBool();
}
bool VisualDeckStorageSettings::getVisualDeckStorageSelectionAnimation() const
{
return getValue("visualdeckstorageselectionanimation", QString(), QString(), true).toBool();
}
int VisualDeckStorageSettings::getVisualDeckEditorCardSize() const
{
return getValue("visualdeckeditorcardsize", QString(), QString(), 100).toInt();
}
int VisualDeckStorageSettings::getVisualDeckEditorSampleHandSize() const
{
return getValue("visualdeckeditorsamplehandsize", QString(), QString(), 7).toInt();
}
int VisualDeckStorageSettings::getVisualDatabaseDisplayCardSize() const
{
return getValue("visualdatabasedisplaycardsize", QString(), QString(), 100).toInt();
return getValue("selectionAnimation", "interface", "visualDeckStorage", true).toBool();
}
bool VisualDeckStorageSettings::getVisualDatabaseDisplayFilterToMostRecentSetsEnabled() const
{
return getValue("visualdatabasedisplayfiltertomostrecentsetsenabled", QString(), QString(), false).toBool();
return getValue("filterToMostRecentSetsEnabled", "interface", "visualDatabaseDisplay", false).toBool();
}
int VisualDeckStorageSettings::getVisualDatabaseDisplayFilterToMostRecentSetsAmount() const
{
return getValue("visualdatabasedisplayfiltertomostrecentsetsamount", QString(), QString(), 10).toInt();
}
int VisualDeckStorageSettings::getEDHRecCardSize() const
{
return getValue("edhreccardsize", QString(), QString(), 100).toInt();
}
int VisualDeckStorageSettings::getArchidektPreviewSize() const
{
return getValue("archidektpreviewsize", QString(), QString(), 100).toInt();
}
int VisualDeckStorageSettings::getDefaultDeckEditorType() const
{
return getValue("defaultDeckEditorType", QString(), QString(), 1).toInt();
return getValue("filterToMostRecentSetsAmount", "interface", "visualDatabaseDisplay", 10).toInt();
}
void VisualDeckStorageSettings::setVisualDeckStorageSortingOrder(int _sortingOrder)
{
setValue(_sortingOrder, "visualdeckstoragesortingorder");
setValue(_sortingOrder, "sortingOrder", "interface", "visualDeckStorage");
}
void VisualDeckStorageSettings::setVisualDeckStorageShowFolders(bool value)
{
setValue(value, "visualdeckstorageshowfolders");
setValue(value, "showFolders", "interface", "visualDeckStorage");
}
void VisualDeckStorageSettings::setVisualDeckStorageShowTagFilter(bool _showTags)
{
setValue(_showTags, "visualdeckstorageshowtagfilter");
setValue(_showTags, "showTagFilter", "interface", "visualDeckStorage");
emit visualDeckStorageShowTagFilterChanged(_showTags);
}
void VisualDeckStorageSettings::setVisualDeckStorageDefaultTagsList(QStringList _defaultTagsList)
{
setValue(QVariant::fromValue(_defaultTagsList), "visualdeckstoragedefaulttagslist");
setValue(QVariant::fromValue(_defaultTagsList), "defaultTagsList", "interface", "visualDeckStorage");
emit visualDeckStorageDefaultTagsListChanged();
}
void VisualDeckStorageSettings::setVisualDeckStorageSearchFolderNames(bool value)
{
setValue(value, "visualdeckstoragesearchfoldernames");
setValue(value, "searchFolderNames", "interface", "visualDeckStorage");
}
void VisualDeckStorageSettings::setVisualDeckStorageShowColorIdentity(bool value)
{
setValue(value, "visualdeckstorageshowcoloridentity");
setValue(value, "showColorIdentity", "interface", "visualDeckStorage");
emit visualDeckStorageShowColorIdentityChanged(value);
}
void VisualDeckStorageSettings::setVisualDeckStorageShowBannerCardComboBox(bool _showBannerCardComboBox)
{
setValue(_showBannerCardComboBox, "visualdeckstorageshowbannercardcombobox");
setValue(_showBannerCardComboBox, "showBannerCardComboBox", "interface", "visualDeckStorage");
emit visualDeckStorageShowBannerCardComboBoxChanged(_showBannerCardComboBox);
}
void VisualDeckStorageSettings::setVisualDeckStorageShowTagsOnDeckPreviews(bool _showTags)
{
setValue(_showTags, "visualdeckstorageshowtagsondeckpreviews");
setValue(_showTags, "showTagsOnDeckPreviews", "interface", "visualDeckStorage");
emit visualDeckStorageShowTagsOnDeckPreviewsChanged(_showTags);
}
void VisualDeckStorageSettings::setVisualDeckStorageCardSize(int _cardSize)
{
setValue(_cardSize, "visualdeckstoragecardsize");
emit visualDeckStorageCardSizeChanged();
}
void VisualDeckStorageSettings::setVisualDeckStorageDrawUnusedColorIdentities(bool _draw)
{
setValue(_draw, "visualdeckstoragedrawunusedcoloridentities");
setValue(_draw, "drawUnusedColorIdentities", "interface", "visualDeckStorage");
emit visualDeckStorageDrawUnusedColorIdentitiesChanged(_draw);
}
void VisualDeckStorageSettings::setVisualDeckStorageUnusedColorIdentitiesOpacity(int _opacity)
{
setValue(_opacity, "visualdeckstorageunusedcoloridentitiesopacity");
setValue(_opacity, "unusedColorIdentitiesOpacity", "interface", "visualDeckStorage");
emit visualDeckStorageUnusedColorIdentitiesOpacityChanged(_opacity);
}
void VisualDeckStorageSettings::setVisualDeckStorageTooltipType(int value)
{
setValue(value, "visualdeckstoragetooltiptype");
setValue(value, "tooltipType", "interface", "visualDeckStorage");
}
void VisualDeckStorageSettings::setVisualDeckStoragePromptForConversion(bool _prompt)
{
setValue(_prompt, "visualdeckstoragepromptforconversion");
setValue(_prompt, "promptForConversion", "interface", "visualDeckStorage");
}
void VisualDeckStorageSettings::setVisualDeckStorageAlwaysConvert(bool _always)
{
setValue(_always, "visualdeckstoragealwaysconvert");
setValue(_always, "alwaysConvert", "interface", "visualDeckStorage");
}
void VisualDeckStorageSettings::setVisualDeckStorageInGame(bool enabled)
{
setValue(enabled, "visualdeckstorageingame");
setValue(enabled, "inGame", "interface", "visualDeckStorage");
emit visualDeckStorageInGameChanged(enabled);
}
void VisualDeckStorageSettings::setVisualDeckStorageSelectionAnimation(bool enabled)
{
setValue(enabled, "visualdeckstorageselectionanimation");
setValue(enabled, "selectionAnimation", "interface", "visualDeckStorage");
emit visualDeckStorageSelectionAnimationChanged(enabled);
}
void VisualDeckStorageSettings::setVisualDeckEditorCardSize(int _cardSize)
{
setValue(_cardSize, "visualdeckeditorcardsize");
emit visualDeckEditorCardSizeChanged();
}
void VisualDeckStorageSettings::setVisualDeckEditorSampleHandSize(int _amount)
{
setValue(_amount, "visualdeckeditorsamplehandsize");
emit visualDeckEditorSampleHandSizeAmountChanged(_amount);
}
void VisualDeckStorageSettings::setVisualDatabaseDisplayCardSize(int _cardSize)
{
setValue(_cardSize, "visualdatabasedisplaycardsize");
emit visualDatabaseDisplayCardSizeChanged();
}
void VisualDeckStorageSettings::setVisualDatabaseDisplayFilterToMostRecentSetsEnabled(bool _enabled)
{
setValue(_enabled, "visualdatabasedisplayfiltertomostrecentsetsenabled");
setValue(_enabled, "filterToMostRecentSetsEnabled", "interface", "visualDatabaseDisplay");
emit visualDatabaseDisplayFilterToMostRecentSetsEnabledChanged(_enabled);
}
void VisualDeckStorageSettings::setVisualDatabaseDisplayFilterToMostRecentSetsAmount(int _amount)
{
setValue(_amount, "visualdatabasedisplayfiltertomostrecentsetsamount");
setValue(_amount, "filterToMostRecentSetsAmount", "interface", "visualDatabaseDisplay");
emit visualDatabaseDisplayFilterToMostRecentSetsAmountChanged(_amount);
}
void VisualDeckStorageSettings::setEDHRecCardSize(int _edhrecCardSize)
{
setValue(_edhrecCardSize, "edhreccardsize");
emit edhRecCardSizeChanged();
}
void VisualDeckStorageSettings::setArchidektPreviewCardSize(int _archidektPreviewCardSize)
{
setValue(_archidektPreviewCardSize, "archidektpreviewsize");
emit archidektPreviewSizeChanged();
}
void VisualDeckStorageSettings::setDefaultDeckEditorType(int value)
{
setValue(value, "defaultDeckEditorType");
}

View file

@ -20,7 +20,6 @@ public:
[[nodiscard]] bool getVisualDeckStorageShowColorIdentity() const override;
[[nodiscard]] bool getVisualDeckStorageShowBannerCardComboBox() const override;
[[nodiscard]] bool getVisualDeckStorageShowTagsOnDeckPreviews() const override;
[[nodiscard]] int getVisualDeckStorageCardSize() const override;
[[nodiscard]] bool getVisualDeckStorageDrawUnusedColorIdentities() const override;
[[nodiscard]] int getVisualDeckStorageUnusedColorIdentitiesOpacity() const override;
[[nodiscard]] int getVisualDeckStorageTooltipType() const override;
@ -28,14 +27,8 @@ public:
[[nodiscard]] bool getVisualDeckStorageAlwaysConvert() const override;
[[nodiscard]] bool getVisualDeckStorageInGame() const override;
[[nodiscard]] bool getVisualDeckStorageSelectionAnimation() const override;
[[nodiscard]] int getVisualDeckEditorCardSize() const override;
[[nodiscard]] int getVisualDeckEditorSampleHandSize() const override;
[[nodiscard]] int getVisualDatabaseDisplayCardSize() const override;
[[nodiscard]] bool getVisualDatabaseDisplayFilterToMostRecentSetsEnabled() const override;
[[nodiscard]] int getVisualDatabaseDisplayFilterToMostRecentSetsAmount() const override;
[[nodiscard]] int getEDHRecCardSize() const override;
[[nodiscard]] int getArchidektPreviewSize() const override;
[[nodiscard]] int getDefaultDeckEditorType() const override;
void setVisualDeckStorageSortingOrder(int _sortingOrder);
void setVisualDeckStorageShowFolders(bool value);
@ -45,7 +38,6 @@ public:
void setVisualDeckStorageShowColorIdentity(bool value);
void setVisualDeckStorageShowBannerCardComboBox(bool _showBannerCardComboBox);
void setVisualDeckStorageShowTagsOnDeckPreviews(bool _showTags);
void setVisualDeckStorageCardSize(int _cardSize);
void setVisualDeckStorageDrawUnusedColorIdentities(bool _draw);
void setVisualDeckStorageUnusedColorIdentitiesOpacity(int _opacity);
void setVisualDeckStorageTooltipType(int value);
@ -53,14 +45,8 @@ public:
void setVisualDeckStorageAlwaysConvert(bool _always);
void setVisualDeckStorageInGame(bool enabled);
void setVisualDeckStorageSelectionAnimation(bool enabled);
void setVisualDeckEditorCardSize(int _cardSize);
void setVisualDeckEditorSampleHandSize(int _amount);
void setVisualDatabaseDisplayCardSize(int _cardSize);
void setVisualDatabaseDisplayFilterToMostRecentSetsEnabled(bool _enabled);
void setVisualDatabaseDisplayFilterToMostRecentSetsAmount(int _amount);
void setEDHRecCardSize(int _edhrecCardSize);
void setArchidektPreviewCardSize(int _archidektPreviewCardSize);
void setDefaultDeckEditorType(int value);
signals:
void visualDeckStorageShowTagFilterChanged(bool _visible);
@ -68,18 +54,12 @@ signals:
void visualDeckStorageShowColorIdentityChanged(bool _visible);
void visualDeckStorageShowBannerCardComboBoxChanged(bool _visible);
void visualDeckStorageShowTagsOnDeckPreviewsChanged(bool _visible);
void visualDeckStorageCardSizeChanged();
void visualDeckStorageDrawUnusedColorIdentitiesChanged(bool _visible);
void visualDeckStorageUnusedColorIdentitiesOpacityChanged(bool value);
void visualDeckStorageInGameChanged(bool enabled);
void visualDeckStorageSelectionAnimationChanged(bool enabled);
void visualDatabaseDisplayFilterToMostRecentSetsEnabledChanged(bool enabled);
void visualDatabaseDisplayFilterToMostRecentSetsAmountChanged(int amount);
void visualDeckEditorSampleHandSizeAmountChanged(int amount);
void visualDeckEditorCardSizeChanged();
void visualDatabaseDisplayCardSizeChanged();
void edhRecCardSizeChanged();
void archidektPreviewSizeChanged();
public:
explicit VisualDeckStorageSettings(const QString &settingPath, QObject *parent = nullptr);

View file

@ -10,7 +10,7 @@
#include <server.h>
#include <server_database_interface.h>
#define DATABASE_SCHEMA_VERSION 35
#define DATABASE_SCHEMA_VERSION 37
class Servatrice;

View file

@ -1,9 +1,15 @@
#include "gtest/gtest.h"
#include <QSettings>
#include <QTemporaryDir>
#include <libcockatrice/settings/appearance_settings.h>
#include <libcockatrice/settings/cache_storage_settings.h>
#include <libcockatrice/settings/cards_display_settings.h>
#include <libcockatrice/settings/chat_settings.h>
#include <libcockatrice/settings/deck_editor_settings.h>
#include <libcockatrice/settings/download_settings.h>
#include <libcockatrice/settings/game_settings.h>
#include <libcockatrice/settings/interface_settings.h>
#include <libcockatrice/settings/network_settings.h>
#include <libcockatrice/settings/personal_settings.h>
#include <libcockatrice/settings/sound_settings.h>
#include <libcockatrice/settings/tabs_settings.h>
@ -258,66 +264,218 @@ TEST_F(SettingsDefaultsTest, Personal_Lang_Default)
ASSERT_EQ(s.getLang(), QString(""));
}
TEST_F(SettingsDefaultsTest, Personal_ClientID_Default)
{
PersonalSettings s(settingsPath, nullptr);
ASSERT_EQ(s.getClientID(), QString("notset"));
}
TEST_F(SettingsDefaultsTest, Personal_KeepAlive_Default)
{
PersonalSettings s(settingsPath, nullptr);
ASSERT_EQ(s.getKeepAlive(), 3);
}
TEST_F(SettingsDefaultsTest, Personal_TimeOut_Default)
{
PersonalSettings s(settingsPath, nullptr);
ASSERT_EQ(s.getTimeOut(), 5);
}
TEST_F(SettingsDefaultsTest, Personal_PicDownload_Default)
{
PersonalSettings s(settingsPath, nullptr);
ASSERT_EQ(s.getPicDownload(), true);
}
TEST_F(SettingsDefaultsTest, Personal_ShowStatusBar_Default)
{
PersonalSettings s(settingsPath, nullptr);
ASSERT_EQ(s.getShowStatusBar(), false);
}
TEST_F(SettingsDefaultsTest, Personal_MaxFontSize_Default)
{
PersonalSettings s(settingsPath, nullptr);
ASSERT_EQ(s.getMaxFontSize(), 12);
}
TEST_F(SettingsDefaultsTest, Personal_HomeTabBackgroundSource_Default)
{
PersonalSettings s(settingsPath, nullptr);
ASSERT_EQ(s.getHomeTabBackgroundSource(), QString("themed"));
}
TEST_F(SettingsDefaultsTest, Personal_HomeTabDisplayCardName_Default)
{
PersonalSettings s(settingsPath, nullptr);
ASSERT_EQ(s.getHomeTabDisplayCardName(), true);
}
TEST_F(SettingsDefaultsTest, Personal_ShowTipsOnStartup_Default)
{
PersonalSettings s(settingsPath, nullptr);
ASSERT_EQ(s.getShowTipsOnStartup(), true);
}
TEST_F(SettingsDefaultsTest, Personal_DownloadSpoilersStatus_Default)
// --- DownloadSettings ---
TEST_F(SettingsDefaultsTest, Download_PicDownload_Default)
{
PersonalSettings s(settingsPath, nullptr);
DownloadSettings s(settingsPath, nullptr);
ASSERT_EQ(s.getPicDownload(), true);
}
TEST_F(SettingsDefaultsTest, Download_DownloadSpoilersStatus_Default)
{
DownloadSettings s(settingsPath, nullptr);
ASSERT_EQ(s.getDownloadSpoilersStatus(), false);
}
// --- AppearanceSettings ---
TEST_F(SettingsDefaultsTest, Appearance_ThemeName_Default)
{
AppearanceSettings s(settingsPath, nullptr);
ASSERT_EQ(s.getThemeName(), QString(""));
}
TEST_F(SettingsDefaultsTest, Appearance_ThemeName_SetAndGet)
{
AppearanceSettings s(settingsPath, nullptr);
s.setThemeName("my_theme");
ASSERT_EQ(s.getThemeName(), QString("my_theme"));
}
TEST_F(SettingsDefaultsTest, Appearance_StyleUserList_Default)
{
AppearanceSettings s(settingsPath, nullptr);
ASSERT_EQ(s.getStyleUserList(), true);
}
TEST_F(SettingsDefaultsTest, Appearance_MaxFontSize_Default)
{
AppearanceSettings s(settingsPath, nullptr);
ASSERT_EQ(s.getMaxFontSize(), 12);
}
TEST_F(SettingsDefaultsTest, Appearance_MaxFontSize_SetAndGet)
{
AppearanceSettings s(settingsPath, nullptr);
s.setMaxFontSize(14);
ASSERT_EQ(s.getMaxFontSize(), 14);
}
TEST_F(SettingsDefaultsTest, Appearance_HomeTabBackgroundSource_Default)
{
AppearanceSettings s(settingsPath, nullptr);
ASSERT_EQ(s.getHomeTabBackgroundSource(), QString("themed"));
}
TEST_F(SettingsDefaultsTest, Appearance_HomeTabBackgroundShuffleFrequency_Default)
{
AppearanceSettings s(settingsPath, nullptr);
ASSERT_EQ(s.getHomeTabBackgroundShuffleFrequency(), 0);
}
TEST_F(SettingsDefaultsTest, Appearance_HomeTabDisplayCardName_Default)
{
AppearanceSettings s(settingsPath, nullptr);
ASSERT_EQ(s.getHomeTabDisplayCardName(), true);
}
// --- InterfaceSettings ---
TEST_F(SettingsDefaultsTest, Interface_ShowStatusBar_Default)
{
InterfaceSettings s(settingsPath, nullptr);
ASSERT_EQ(s.getShowStatusBar(), false);
}
TEST_F(SettingsDefaultsTest, Interface_ShowShortcuts_Default)
{
InterfaceSettings s(settingsPath, nullptr);
ASSERT_EQ(s.getShowShortcuts(), true);
}
TEST_F(SettingsDefaultsTest, Interface_ShowGameSelectorFilterToolbar_Default)
{
InterfaceSettings s(settingsPath, nullptr);
ASSERT_EQ(s.getShowGameSelectorFilterToolbar(), true);
}
TEST_F(SettingsDefaultsTest, Interface_NotificationsEnabled_Default)
{
InterfaceSettings s(settingsPath, nullptr);
ASSERT_EQ(s.getNotificationsEnabled(), true);
}
TEST_F(SettingsDefaultsTest, Interface_SpectatorNotificationsEnabled_Default)
{
InterfaceSettings s(settingsPath, nullptr);
ASSERT_EQ(s.getSpectatorNotificationsEnabled(), false);
}
TEST_F(SettingsDefaultsTest, Interface_BuddyConnectNotificationsEnabled_Default)
{
InterfaceSettings s(settingsPath, nullptr);
ASSERT_EQ(s.getBuddyConnectNotificationsEnabled(), true);
}
// --- DeckEditorSettings ---
TEST_F(SettingsDefaultsTest, DeckEditor_OpenDeckInNewTab_Default)
{
DeckEditorSettings s(settingsPath, nullptr);
ASSERT_EQ(s.getOpenDeckInNewTab(), false);
}
TEST_F(SettingsDefaultsTest, DeckEditor_BannerCardComboBoxVisible_Default)
{
DeckEditorSettings s(settingsPath, nullptr);
ASSERT_EQ(s.getBannerCardComboBoxVisible(), true);
}
TEST_F(SettingsDefaultsTest, DeckEditor_TagsWidgetVisible_Default)
{
DeckEditorSettings s(settingsPath, nullptr);
ASSERT_EQ(s.getTagsWidgetVisible(), true);
}
TEST_F(SettingsDefaultsTest, DeckEditor_DefaultDeckEditorType_Default)
{
DeckEditorSettings s(settingsPath, nullptr);
ASSERT_EQ(s.getDefaultDeckEditorType(), 1);
}
// --- NetworkSettings ---
TEST_F(SettingsDefaultsTest, Network_ClientID_Default)
{
NetworkSettings s(settingsPath, nullptr);
ASSERT_EQ(s.getClientID(), QString("notset"));
}
TEST_F(SettingsDefaultsTest, Network_ClientVersion_Default)
{
NetworkSettings s(settingsPath, nullptr);
ASSERT_EQ(s.getClientVersion(), QString("notset"));
}
TEST_F(SettingsDefaultsTest, Network_KeepAlive_Default)
{
NetworkSettings s(settingsPath, nullptr);
ASSERT_EQ(s.getKeepAlive(), 3);
}
TEST_F(SettingsDefaultsTest, Network_TimeOut_Default)
{
NetworkSettings s(settingsPath, nullptr);
ASSERT_EQ(s.getTimeOut(), 5);
}
TEST_F(SettingsDefaultsTest, Network_KnownMissingFeatures_Default)
{
NetworkSettings s(settingsPath, nullptr);
ASSERT_EQ(s.getKnownMissingFeatures(), QString(""));
}
// --- CardsDisplaySettings ---
TEST_F(SettingsDefaultsTest, CardsDisplay_PrintingSelectorCardSize_Default)
{
CardsDisplaySettings s(settingsPath, nullptr);
ASSERT_EQ(s.getPrintingSelectorCardSize(), 100);
}
TEST_F(SettingsDefaultsTest, CardsDisplay_VisualDeckStorageCardSize_Default)
{
CardsDisplaySettings s(settingsPath, nullptr);
ASSERT_EQ(s.getVisualDeckStorageCardSize(), 100);
}
TEST_F(SettingsDefaultsTest, CardsDisplay_VisualDatabaseDisplayCardSize_Default)
{
CardsDisplaySettings s(settingsPath, nullptr);
ASSERT_EQ(s.getVisualDatabaseDisplayCardSize(), 100);
}
TEST_F(SettingsDefaultsTest, CardsDisplay_VisualDeckEditorCardSize_Default)
{
CardsDisplaySettings s(settingsPath, nullptr);
ASSERT_EQ(s.getVisualDeckEditorCardSize(), 100);
}
TEST_F(SettingsDefaultsTest, CardsDisplay_EDHRecCardSize_Default)
{
CardsDisplaySettings s(settingsPath, nullptr);
ASSERT_EQ(s.getEDHRecCardSize(), 100);
}
TEST_F(SettingsDefaultsTest, CardsDisplay_ArchidektPreviewSize_Default)
{
CardsDisplaySettings s(settingsPath, nullptr);
ASSERT_EQ(s.getArchidektPreviewSize(), 100);
}
TEST_F(SettingsDefaultsTest, CardsDisplay_SampleHandSize_Default)
{
CardsDisplaySettings s(settingsPath, nullptr);
ASSERT_EQ(s.getSampleHandSize(), 7);
}
// --- VisualDeckStorageSettings ---
TEST_F(SettingsDefaultsTest, VisualDeckStorage_SortingOrder_Default)

View file

@ -1,5 +1,6 @@
#include "gtest/gtest.h"
#include <QCoreApplication>
#include <QDate>
#include <QDir>
#include <QFile>
#include <QSettings>
@ -95,6 +96,8 @@ TEST_F(SettingsMigrationTest, MigratesAllSettingsGroups)
g.setValue("maxplayers", 4);
g.setValue("gamedescription", "test game");
g.setValue("remembergamesettings", false);
g.setValue("gametypes", "commander");
g.setValue("onlybuddies", true);
g.endGroup();
// localgameoptions
@ -108,44 +111,117 @@ TEST_F(SettingsMigrationTest, MigratesAllSettingsGroups)
g.setValue("mention", false);
g.setValue("mentioncolor", "FF0000");
g.setValue("showmessagepopups", false);
g.setValue("mentioncompleter", false);
g.setValue("roomhistory", false);
g.setValue("highlightcolor", "00FF00");
g.endGroup();
// legacy highlight words (under [personal])
g.setValue("personal/highlightWords", "alpha beta");
// cache storage (under [personal] group)
g.setValue("personal/pixmapCacheSize", 1024);
g.setValue("personal/networkCacheSize", 2048);
g.setValue("personal/redirectCacheTtl", 5);
g.setValue("personal/cardPictureLoaderCacheMethod", 1);
g.setValue("personal/localCardImageStorageNamingScheme", 2);
// updates (under [personal] group)
g.setValue("personal/startupUpdateCheck", false);
g.setValue("personal/startupCardUpdateCheckPromptForUpdate", false);
g.setValue("personal/startupCardUpdateCheckAlwaysUpdate", true);
g.setValue("personal/cardUpdateCheckInterval", 14);
g.setValue("personal/lastCardUpdateCheck", QDate(2024, 1, 1));
g.setValue("personal/alwaysEnableNewSets", true);
g.setValue("personal/updatenotification", false);
g.setValue("personal/newversionnotification", false);
// personal
g.setValue("personal/lang", "de");
g.setValue("personal/keepalive", 10);
g.setValue("personal/timeout", 30);
g.setValue("personal/clientid", "test-client-id");
// downloads (previously under [personal])
g.setValue("personal/picturedownload", true);
g.setValue("personal/downloadspoilers", true);
// interface (previously under [personal])
g.setValue("personal/showStatusBar", true);
// theme
g.setValue("theme/name", "custom_theme");
g.setValue("game/maxfontsize", 14);
// appearance
g.setValue("appearance/styleUserList", false);
g.setValue("home/background/displayCardName", false);
g.setValue("menu/showshortcuts", false);
g.setValue("menu/showgameselectorfiltertoolbar", false);
// deck editor
g.setValue("editor/openDeckInNewTab", false);
g.setValue("interface/deckeditortagswidgetvisible", false);
g.setValue("interface/defaultDeckEditorType", 0);
g.setValue("interface/visualdeckeditorsamplehandsize", 5);
// personal home
g.setValue("home/background", "custom_bg");
g.setValue("home/background/shuffleTimer", 30);
// personal tipOfDay
g.setValue("tipOfDay/showTips", false);
g.setValue("tipOfDay/seenTips", QStringList{"1", "2", "3"});
// network
g.setValue("personal/keepalive", 10);
g.setValue("personal/timeout", 30);
g.setValue("personal/clientid", "test-client-id");
g.setValue("personal/clientversion", "test-client-version");
g.setValue("interface/knownmissingfeatures", "feature1,feature2");
// cards
g.setValue("cards/displaycardnames", false);
g.setValue("cards/roundcardcorners", false);
g.setValue("cards/overrideallcardartwithpersonalpreference", true);
g.setValue("cards/bumpsetswithcardsindecktotop", false);
g.setValue("cards/includerebalancedcards", false);
g.setValue("cards/autorotatesidewayslayoutcards", false);
g.setValue("cards/tapanimation", true);
g.setValue("cards/scaleCards", false);
g.setValue("cards/verticalCardOverlapPercent", 42);
g.setValue("cards/cardinfoviewmode", 1);
g.setValue("cards/printingselectorcardsize", 90);
g.setValue("cards/printingselectorsortorder", 3);
g.setValue("cards/printingselectornavigationbuttonsvisible", false);
// interface
g.setValue("interface/usetearoffmenus", true);
g.setValue("interface/cardViewInitialRowsMax", 8);
g.setValue("interface/cardViewExpandedRowsMax", 12);
g.setValue("interface/closeEmptyCardView", false);
g.setValue("interface/focusCardViewSearchBar", false);
g.setValue("interface/keepGameChatFocus", true);
g.setValue("interface/notificationsenabled", false);
g.setValue("interface/specnotificationsenabled", true);
g.setValue("interface/buddyconnectnotificationsenabled", false);
g.setValue("interface/doubleclicktoplay", false);
g.setValue("interface/clickPlaysAllSelected", false);
g.setValue("interface/playtostack", false);
g.setValue("interface/doNotDeleteArrowsInSubPhases", false);
g.setValue("interface/startinghandsize", 5);
// hand/table
g.setValue("interface/annotatetokens", true);
g.setValue("interface/showlassoselectioncount", false);
g.setValue("interface/showpersistentselectioncount", false);
g.setValue("interface/tallyType", 2);
g.setValue("interface/leftjustified", true);
g.setValue("interface/min_players_multicolumn", 6);
g.setValue("interface/deckeditorbannercardcomboboxvisible", false);
// hand/table/replay/zoneview
g.setValue("hand/horizontal", true);
g.setValue("table/invert_vertical", true);
g.setValue("replay/rewindBufferingMs", 6000);
g.setValue("replay/fastForwardSpeed", 5);
g.setValue("zoneview/groupby", 2);
g.setValue("zoneview/sortby", 1);
g.setValue("zoneview/pileview", false);
// paths
g.beginGroup("paths");
@ -155,8 +231,29 @@ TEST_F(SettingsMigrationTest, MigratesAllSettingsGroups)
// visual deck storage (under [interface] group)
g.setValue("interface/visualdeckstoragecardsize", 150);
g.setValue("interface/visualdeckstoragesortingorder", 2);
g.setValue("interface/visualdeckstorageshowfolders", false);
g.setValue("interface/visualdeckstorageshowtagfilter", false);
g.setValue("interface/visualdeckstoragedefaulttagslist", QStringList{"Alpha", "Beta"});
g.setValue("interface/visualdeckstoragesearchfoldernames", false);
g.setValue("interface/visualdeckstorageshowcoloridentity", false);
g.setValue("interface/visualdeckstorageshowbannercardcombobox", false);
g.setValue("interface/visualdeckstorageshowtagsondeckpreviews", false);
g.setValue("interface/visualdeckstoragedrawunusedcoloridentities", false);
g.setValue("interface/visualdeckstorageunusedcoloridentitiesopacity", 35);
g.setValue("interface/visualdeckstoragetooltiptype", 1);
g.setValue("interface/visualdeckstoragepromptforconversion", false);
g.setValue("interface/visualdeckstoragealwaysconvert", true);
g.setValue("interface/visualdeckstorageingame", false);
g.setValue("interface/visualdeckstorageselectionanimation", false);
g.setValue("interface/visualdatabasedisplayfiltertomostrecentsetsenabled", true);
g.setValue("interface/visualdatabasedisplayfiltertomostrecentsetsamount", 25);
// card sizes (migrate into cards_display.ini)
g.setValue("interface/visualdatabasedisplaycardsize", 80);
g.setValue("interface/visualdeckeditorcardsize", 70);
g.setValue("interface/edhreccardsize", 60);
g.setValue("interface/archidektpreviewsize", 50);
g.sync();
}
@ -182,6 +279,8 @@ TEST_F(SettingsMigrationTest, MigratesAllSettingsGroups)
ASSERT_EQ(readFromIni("game.ini", "game/maxplayers"), QVariant(4));
ASSERT_EQ(readFromIni("game.ini", "game/gamedescription"), QVariant("test game"));
ASSERT_EQ(readFromIni("game.ini", "game/remembergamesettings"), QVariant(false));
ASSERT_EQ(readFromIni("game.ini", "game/gametypes"), QVariant("commander"));
ASSERT_EQ(readFromIni("game.ini", "game/onlybuddies"), QVariant(true));
ASSERT_EQ(readFromIni("game.ini", "localgameoptions/maxplayers"), QVariant(2));
ASSERT_EQ(readFromIni("game.ini", "localgameoptions/startinglifetotal"), QVariant(40));
@ -189,41 +288,151 @@ TEST_F(SettingsMigrationTest, MigratesAllSettingsGroups)
ASSERT_EQ(readFromIni("chat.ini", "chat/mention"), QVariant(false));
ASSERT_EQ(readFromIni("chat.ini", "chat/mentioncolor"), QVariant("FF0000"));
ASSERT_EQ(readFromIni("chat.ini", "chat/showmessagepopups"), QVariant(false));
ASSERT_EQ(readFromIni("chat.ini", "chat/mentioncompleter"), QVariant(false));
ASSERT_EQ(readFromIni("chat.ini", "chat/roomhistory"), QVariant(false));
ASSERT_EQ(readFromIni("chat.ini", "chat/highlightcolor"), QVariant("00FF00"));
ASSERT_EQ(readFromIni("chat.ini", "chat/highlightwords"), QVariant("alpha beta"));
ASSERT_TRUE(fileExists("cache_storage.ini"));
ASSERT_EQ(readFromIni("cache_storage.ini", "personal/pixmapCacheSize"), QVariant(1024));
ASSERT_EQ(readFromIni("cache_storage.ini", "personal/networkCacheSize"), QVariant(2048));
ASSERT_EQ(readFromIni("cache_storage.ini", "cache_storage/pixmapCacheSize"), QVariant(1024));
ASSERT_EQ(readFromIni("cache_storage.ini", "cache_storage/networkCacheSize"), QVariant(2048));
ASSERT_EQ(readFromIni("cache_storage.ini", "cache_storage/redirectCacheTtl"), QVariant(5));
ASSERT_EQ(readFromIni("cache_storage.ini", "cache_storage/cardPictureLoaderCacheMethod"), QVariant(1));
ASSERT_EQ(readFromIni("cache_storage.ini", "cache_storage/localCardImageStorageNamingScheme"), QVariant(2));
ASSERT_TRUE(fileExists("updates.ini"));
ASSERT_EQ(readFromIni("updates.ini", "updates/startupUpdateCheck"), QVariant(false));
ASSERT_EQ(readFromIni("updates.ini", "updates/startupCardUpdateCheckPromptForUpdate"), QVariant(false));
ASSERT_EQ(readFromIni("updates.ini", "updates/startupCardUpdateCheckAlwaysUpdate"), QVariant(true));
ASSERT_EQ(readFromIni("updates.ini", "updates/cardUpdateCheckInterval"), QVariant(14));
ASSERT_EQ(readFromIni("updates.ini", "updates/lastCardUpdateCheck"), QVariant(QDate(2024, 1, 1)));
ASSERT_EQ(readFromIni("updates.ini", "updates/alwaysEnableNewSets"), QVariant(true));
ASSERT_EQ(readFromIni("updates.ini", "updates/updatenotification"), QVariant(false));
ASSERT_EQ(readFromIni("updates.ini", "updates/newversionnotification"), QVariant(false));
ASSERT_TRUE(fileExists("personal.ini"));
ASSERT_EQ(readFromIni("personal.ini", "personal/lang"), QVariant("de"));
ASSERT_EQ(readFromIni("personal.ini", "personal/keepalive"), QVariant(10));
ASSERT_EQ(readFromIni("personal.ini", "personal/clientid"), QVariant("test-client-id"));
ASSERT_EQ(readFromIni("personal.ini", "personal/showStatusBar"), QVariant(true));
ASSERT_EQ(readFromIni("personal.ini", "home/background"), QVariant("custom_bg"));
ASSERT_EQ(readFromIni("personal.ini", "tipOfDay/showTips"), QVariant(false));
ASSERT_EQ(readFromIni("personal.ini", "tipOfDay/seenTips"), QVariant(QStringList{"1", "2", "3"}));
ASSERT_TRUE(fileExists("downloads.ini"));
ASSERT_EQ(readFromIni("downloads.ini", "downloads/picturedownload"), QVariant(true));
ASSERT_EQ(readFromIni("downloads.ini", "downloads/downloadspoilers"), QVariant(true));
ASSERT_TRUE(fileExists("appearance.ini"));
ASSERT_EQ(readFromIni("appearance.ini", "appearance/themeName"), QVariant("custom_theme"));
ASSERT_EQ(readFromIni("appearance.ini", "appearance/maxFontSize"), QVariant(14));
ASSERT_EQ(readFromIni("appearance.ini", "appearance/styleUserList"), QVariant(false));
ASSERT_EQ(readFromIni("appearance.ini", "appearance/homeTabBackgroundSource"), QVariant("custom_bg"));
ASSERT_EQ(readFromIni("appearance.ini", "appearance/homeTabBackgroundShuffleFrequency"), QVariant(30));
ASSERT_EQ(readFromIni("appearance.ini", "appearance/homeTabDisplayCardName"), QVariant(false));
ASSERT_TRUE(fileExists("network.ini"));
ASSERT_EQ(readFromIni("network.ini", "network/keepalive"), QVariant(10));
ASSERT_EQ(readFromIni("network.ini", "network/timeout"), QVariant(30));
ASSERT_EQ(readFromIni("network.ini", "network/clientid"), QVariant("test-client-id"));
ASSERT_EQ(readFromIni("network.ini", "network/clientversion"), QVariant("test-client-version"));
ASSERT_EQ(readFromIni("network.ini", "network/knownmissingfeatures"), QVariant("feature1,feature2"));
ASSERT_TRUE(fileExists("cards_display.ini"));
ASSERT_EQ(readFromIni("cards_display.ini", "cards/displaycardnames"), QVariant(false));
ASSERT_EQ(readFromIni("cards_display.ini", "cards/roundcardcorners"), QVariant(false));
ASSERT_EQ(readFromIni("cards_display.ini", "cards/overrideallcardartwithpersonalpreference"), QVariant(true));
ASSERT_EQ(readFromIni("cards_display.ini", "cards/bumpsetswithcardsindecktotop"), QVariant(false));
ASSERT_EQ(readFromIni("cards_display.ini", "cards/includerebalancedcards"), QVariant(false));
ASSERT_EQ(readFromIni("cards_display.ini", "cards/autorotatesidewayslayoutcards"), QVariant(false));
ASSERT_EQ(readFromIni("cards_display.ini", "cards/tapanimation"), QVariant(true));
ASSERT_EQ(readFromIni("cards_display.ini", "cards/scaleCards"), QVariant(false));
ASSERT_EQ(readFromIni("cards_display.ini", "cards/verticalCardOverlapPercent"), QVariant(42));
ASSERT_EQ(readFromIni("cards_display.ini", "cards/cardinfoviewmode"), QVariant(1));
ASSERT_EQ(readFromIni("cards_display.ini", "cards/cardSize/printingSelector"), QVariant(90));
ASSERT_EQ(readFromIni("cards_display.ini", "cards/printingSelector/sortOrder"), QVariant(3));
ASSERT_EQ(readFromIni("cards_display.ini", "cards/printingSelector/navigationButtonsVisible"), QVariant(false));
ASSERT_EQ(readFromIni("cards_display.ini", "cards/cardSize/visualDeckStorage"), QVariant(150));
ASSERT_EQ(readFromIni("cards_display.ini", "cards/cardSize/visualDatabaseDisplay"), QVariant(80));
ASSERT_EQ(readFromIni("cards_display.ini", "cards/cardSize/visualDeckEditor"), QVariant(70));
ASSERT_EQ(readFromIni("cards_display.ini", "cards/cardSize/edhrec"), QVariant(60));
ASSERT_EQ(readFromIni("cards_display.ini", "cards/cardSize/archidektPreview"), QVariant(50));
ASSERT_EQ(readFromIni("cards_display.ini", "cards/cardSize/sampleHandSize"), QVariant(5));
ASSERT_TRUE(fileExists("interface.ini"));
ASSERT_EQ(readFromIni("interface.ini", "interface/usetearoffmenus"), QVariant(true));
ASSERT_EQ(readFromIni("interface.ini", "interface/notificationsenabled"), QVariant(false));
ASSERT_EQ(readFromIni("interface.ini", "interface/cardViewInitialRowsMax"), QVariant(8));
ASSERT_EQ(readFromIni("interface.ini", "interface/cardViewExpandedRowsMax"), QVariant(12));
ASSERT_EQ(readFromIni("interface.ini", "interface/closeEmptyCardView"), QVariant(false));
ASSERT_EQ(readFromIni("interface.ini", "interface/focusCardViewSearchBar"), QVariant(false));
ASSERT_EQ(readFromIni("interface.ini", "interface/keepGameChatFocus"), QVariant(true));
ASSERT_EQ(readFromIni("interface.ini", "interface/notifications/enabled"), QVariant(false));
ASSERT_EQ(readFromIni("interface.ini", "interface/notifications/spectatorsEnabled"), QVariant(true));
ASSERT_EQ(readFromIni("interface.ini", "interface/notifications/buddyConnectEnabled"), QVariant(false));
ASSERT_EQ(readFromIni("interface.ini", "interface/doubleclicktoplay"), QVariant(false));
ASSERT_EQ(readFromIni("interface.ini", "interface/clickPlaysAllSelected"), QVariant(false));
ASSERT_EQ(readFromIni("interface.ini", "interface/playtostack"), QVariant(false));
ASSERT_EQ(readFromIni("interface.ini", "interface/doNotDeleteArrowsInSubPhases"), QVariant(false));
ASSERT_EQ(readFromIni("interface.ini", "interface/startinghandsize"), QVariant(5));
ASSERT_EQ(readFromIni("interface.ini", "interface/annotatetokens"), QVariant(true));
ASSERT_EQ(readFromIni("interface.ini", "interface/showlassoselectioncount"), QVariant(false));
ASSERT_EQ(readFromIni("interface.ini", "interface/showpersistentselectioncount"), QVariant(false));
ASSERT_EQ(readFromIni("interface.ini", "interface/tallyType"), QVariant(2));
ASSERT_EQ(readFromIni("interface.ini", "interface/leftjustified"), QVariant(true));
ASSERT_EQ(readFromIni("interface.ini", "interface/min_players_multicolumn"), QVariant(6));
ASSERT_EQ(readFromIni("interface.ini", "interface/showStatusBar"), QVariant(true));
ASSERT_EQ(readFromIni("interface.ini", "interface/showShortcuts"), QVariant(false));
ASSERT_EQ(readFromIni("interface.ini", "interface/showGameSelectorFilterToolbar"), QVariant(false));
ASSERT_EQ(readFromIni("interface.ini", "hand/horizontal"), QVariant(true));
ASSERT_EQ(readFromIni("interface.ini", "table/invert_vertical"), QVariant(true));
ASSERT_EQ(readFromIni("interface.ini", "replay/rewindBufferingMs"), QVariant(6000));
ASSERT_EQ(readFromIni("interface.ini", "replay/fastForwardSpeed"), QVariant(5));
ASSERT_EQ(readFromIni("interface.ini", "zoneview/groupby"), QVariant(2));
ASSERT_EQ(readFromIni("interface.ini", "zoneview/sortby"), QVariant(1));
ASSERT_EQ(readFromIni("interface.ini", "zoneview/pileview"), QVariant(false));
ASSERT_TRUE(fileExists("deck_editor.ini"));
ASSERT_EQ(readFromIni("deck_editor.ini", "deckeditor/openDeckInNewTab"), QVariant(false));
ASSERT_EQ(readFromIni("deck_editor.ini", "deckeditor/bannerCardComboBoxVisible"), QVariant(false));
ASSERT_EQ(readFromIni("deck_editor.ini", "deckeditor/tagsWidgetVisible"), QVariant(false));
ASSERT_EQ(readFromIni("deck_editor.ini", "deckeditor/defaultDeckEditorType"), QVariant(0));
ASSERT_TRUE(fileExists("paths.ini"));
ASSERT_EQ(readFromIni("paths.ini", "paths/decks"), QVariant("/custom/decks"));
ASSERT_EQ(readFromIni("paths.ini", "paths/pics"), QVariant("/custom/pics"));
ASSERT_TRUE(fileExists("visual_deck_storage.ini"));
ASSERT_EQ(readFromIni("visual_deck_storage.ini", "interface/visualdeckstoragecardsize"), QVariant(150));
ASSERT_EQ(readFromIni("visual_deck_storage.ini", "interface/visualdeckstorageshowfolders"), QVariant(false));
ASSERT_EQ(readFromIni("visual_deck_storage.ini", "interface/visualDeckStorage/sortingOrder"), QVariant(2));
ASSERT_EQ(readFromIni("visual_deck_storage.ini", "interface/visualDeckStorage/showFolders"), QVariant(false));
ASSERT_EQ(readFromIni("visual_deck_storage.ini", "interface/visualDeckStorage/showTagFilter"), QVariant(false));
ASSERT_EQ(readFromIni("visual_deck_storage.ini", "interface/visualDeckStorage/defaultTagsList"),
QVariant(QStringList{"Alpha", "Beta"}));
ASSERT_EQ(readFromIni("visual_deck_storage.ini", "interface/visualDeckStorage/searchFolderNames"), QVariant(false));
ASSERT_EQ(readFromIni("visual_deck_storage.ini", "interface/visualDeckStorage/showColorIdentity"), QVariant(false));
ASSERT_EQ(readFromIni("visual_deck_storage.ini", "interface/visualDeckStorage/showBannerCardComboBox"),
QVariant(false));
ASSERT_EQ(readFromIni("visual_deck_storage.ini", "interface/visualDeckStorage/showTagsOnDeckPreviews"),
QVariant(false));
ASSERT_EQ(readFromIni("visual_deck_storage.ini", "interface/visualDeckStorage/drawUnusedColorIdentities"),
QVariant(false));
ASSERT_EQ(readFromIni("visual_deck_storage.ini", "interface/visualDeckStorage/unusedColorIdentitiesOpacity"),
QVariant(35));
ASSERT_EQ(readFromIni("visual_deck_storage.ini", "interface/visualDeckStorage/tooltipType"), QVariant(1));
ASSERT_EQ(readFromIni("visual_deck_storage.ini", "interface/visualDeckStorage/promptForConversion"),
QVariant(false));
ASSERT_EQ(readFromIni("visual_deck_storage.ini", "interface/visualDeckStorage/alwaysConvert"), QVariant(true));
ASSERT_EQ(readFromIni("visual_deck_storage.ini", "interface/visualDeckStorage/inGame"), QVariant(false));
ASSERT_EQ(readFromIni("visual_deck_storage.ini", "interface/visualDeckStorage/selectionAnimation"),
QVariant(false));
ASSERT_EQ(readFromIni("visual_deck_storage.ini", "interface/visualDatabaseDisplay/filterToMostRecentSetsEnabled"),
QVariant(true));
ASSERT_EQ(readFromIni("visual_deck_storage.ini", "interface/visualDatabaseDisplay/filterToMostRecentSetsAmount"),
QVariant(25));
// No legacy flat keys should remain in the per-file INIs
ASSERT_FALSE(readFromIni("visual_deck_storage.ini", "interface/visualdeckstorageshowfolders").isValid());
ASSERT_FALSE(readFromIni("visual_deck_storage.ini", "interface/visualdeckstoragecardsize").isValid());
ASSERT_FALSE(readFromIni("deck_editor.ini", "deckeditor/sampleHandSize").isValid());
ASSERT_FALSE(readFromIni("deck_editor.ini", "deckeditor/cardSize").isValid());
ASSERT_FALSE(readFromIni("interface.ini", "interface/notificationsenabled").isValid());
ASSERT_FALSE(readFromIni("cards_display.ini", "cards/printingselectorsortorder").isValid());
ASSERT_FALSE(readFromIni("cards_display.ini", "cards/visualDeckStorage/cardSize").isValid());
// Verify sentinel was written
ASSERT_EQ(readFromIni("global.ini", "migration/perfile_complete"), QVariant(true));
@ -319,10 +528,11 @@ TEST_F(SettingsMigrationTest, CardsKeysKeepGroupPrefix)
ASSERT_TRUE(fileExists("global.ini.old"));
ASSERT_TRUE(fileExists("cards_display.ini"));
ASSERT_TRUE(fileExists("deck_editor.ini"));
// "cards/displaycardnames" should be stored with its group prefix
ASSERT_EQ(readFromIni("cards_display.ini", "cards/displaycardnames"), QVariant(false));
// "interface/..." keys should keep their full path
ASSERT_EQ(readFromIni("cards_display.ini", "interface/deckeditorbannercardcomboboxvisible"), QVariant(true));
// deck editor keys belong to the deck editor settings now
ASSERT_EQ(readFromIni("deck_editor.ini", "deckeditor/bannerCardComboBoxVisible"), QVariant(true));
}
TEST_F(SettingsMigrationTest, LegacyMigrationIsIdempotent)