#include "interface_settings.h" namespace { const QChar PLAYMAT_FIELD_SEP = QChar(0x1F); ///< Separator between StoredPlaymat fields. QString encodeStoredPlaymat(const StoredPlaymat &stored) { return stored.name + PLAYMAT_FIELD_SEP + stored.providerId + PLAYMAT_FIELD_SEP + QString::number(stored.marginPctL, 'f', 4) + PLAYMAT_FIELD_SEP + QString::number(stored.marginPctR, 'f', 4) + PLAYMAT_FIELD_SEP + QString::number(stored.verticalOffset, 'f', 4) + PLAYMAT_FIELD_SEP + QString::number(stored.zoom, 'f', 4); } StoredPlaymat decodeStoredPlaymat(const QString &encoded) { const QStringList fields = encoded.split(PLAYMAT_FIELD_SEP); if (fields.size() != 6) { return {}; } StoredPlaymat stored; stored.name = fields.at(0); stored.providerId = fields.at(1); stored.marginPctL = fields.at(2).toDouble(); stored.marginPctR = fields.at(3).toDouble(); stored.verticalOffset = fields.at(4).toDouble(); stored.zoom = fields.at(5).toDouble(); return stored; } } // namespace InterfaceSettings::InterfaceSettings(const QString &settingPath, QObject *parent) : SettingsManager(settingPath + "interface.ini", "interface", QString(), parent) { } bool InterfaceSettings::getUseTearOffMenus() const { return getValue("useTearOffMenus", QString(), QString(), true).toBool(); } int InterfaceSettings::getCardViewInitialRowsMax() const { return getValue("cardViewInitialRowsMax", QString(), QString(), 14).toInt(); } int InterfaceSettings::getCardViewExpandedRowsMax() const { return getValue("cardViewExpandedRowsMax", QString(), QString(), 20).toInt(); } bool InterfaceSettings::getCloseEmptyCardView() const { return getValue("closeEmptyCardView", QString(), QString(), true).toBool(); } bool InterfaceSettings::getFocusCardViewSearchBar() const { return getValue("focusCardViewSearchBar", QString(), QString(), true).toBool(); } bool InterfaceSettings::getKeepGameChatFocus() const { return getValue("keepGameChatFocus", QString(), QString(), false).toBool(); } bool InterfaceSettings::getNotificationsEnabled() const { return getValue("enabled", "interface", "notifications", true).toBool(); } bool InterfaceSettings::getSpectatorNotificationsEnabled() const { return getValue("spectatorsEnabled", "interface", "notifications", false).toBool(); } bool InterfaceSettings::getBuddyConnectNotificationsEnabled() const { return getValue("buddyConnectEnabled", "interface", "notifications", true).toBool(); } bool InterfaceSettings::getDoubleClickToPlay() const { return getValue("doubleClickToPlay", QString(), QString(), true).toBool(); } bool InterfaceSettings::getClickPlaysAllSelected() const { return getValue("clickPlaysAllSelected", QString(), QString(), true).toBool(); } bool InterfaceSettings::getPlayToStack() const { return getValue("playToStack", QString(), QString(), true).toBool(); } bool InterfaceSettings::getDoNotDeleteArrowsInSubPhases() const { return getValue("doNotDeleteArrowsInSubPhases", QString(), QString(), true).toBool(); } int InterfaceSettings::getStartingHandSize() const { return getValue("startingHandSize", QString(), QString(), 7).toInt(); } bool InterfaceSettings::getAnnotateTokens() const { return getValue("annotateTokens", QString(), QString(), false).toBool(); } bool InterfaceSettings::getShowDragSelectionCount() const { return getValue("showLassoSelectionCount", QString(), QString(), true).toBool(); } bool InterfaceSettings::getShowTotalSelectionCount() const { return getValue("showPersistentSelectionCount", QString(), QString(), true).toBool(); } int InterfaceSettings::getTallyType() const { return getValue("tallyType", QString(), QString(), 0).toInt(); } bool InterfaceSettings::getHorizontalHand() const { return getValue("horizontal", "hand", QString(), true).toBool(); } bool InterfaceSettings::getInvertVerticalCoordinate() const { return getValue("invertVertical", "table", QString(), false).toBool(); } int InterfaceSettings::getMinPlayersForMultiColumnLayout() const { return getValue("minPlayersMulticolumn", QString(), QString(), 4).toInt(); } int InterfaceSettings::getRewindBufferingMs() const { return getValue("rewindBufferingMs", "replay", QString(), 200).toInt(); } qreal InterfaceSettings::getFastForwardSpeed() const { return getValue("fastForwardSpeed", "replay", QString(), 10).toReal(); } bool InterfaceSettings::getSkipEmptySections() const { return getValue("skipEmptySections", "replay", QString(), false).toBool(); } bool InterfaceSettings::getLeftJustified() const { return getValue("leftJustified", QString(), QString(), false).toBool(); } int InterfaceSettings::getZoneViewGroupByIndex() const { return getValue("groupBy", "zoneview", QString(), 1).toInt(); } int InterfaceSettings::getZoneViewSortByIndex() const { return getValue("sortBy", "zoneview", QString(), 1).toInt(); } bool InterfaceSettings::getZoneViewPileView() const { return getValue("pileView", "zoneview", QString(), true).toBool(); } bool InterfaceSettings::getShowStatusBar() const { 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(); } int InterfaceSettings::getPlaymatVisibility() const { return getValue("playmatvisibility", QString(), QString(), 2).toInt(); } QList InterfaceSettings::getPlaymatFallbackList() const { const QStringList entries = getValue("playmatFallbackList", QString(), QString(), QStringList()).toStringList(); QList result; result.reserve(entries.size()); for (const QString &entry : entries) { const StoredPlaymat stored = decodeStoredPlaymat(entry); if (!stored.isEmpty()) { result.append(stored); } } return result; } StoredPlaymat InterfaceSettings::getPlaymatOverride() const { return decodeStoredPlaymat(getValue("playmatOverride", QString(), QString(), QString()).toString()); } int InterfaceSettings::getPlaymatFallbackMode() const { return qBound(0, getValue("playmatFallbackMode", QString(), QString(), 1).toInt(), 2); } bool InterfaceSettings::getLifeCounterAnimationsEnabled() const { return getValue("lifeCounterAnimationsEnabled", QString(), QString(), true).toBool(); } bool InterfaceSettings::getBattlefieldFlashEnabled() const { return getValue("battlefieldFlashEnabled", QString(), QString(), true).toBool(); } QStringList InterfaceSettings::getUserListExpandedSections() const { return getValue("userListExpandedSections", QString(), QString(), QStringList({"buddy", "online", "ignore"})) .toStringList(); } void InterfaceSettings::setUseTearOffMenus(bool _useTearOffMenus) { setValue(_useTearOffMenus, "useTearOffMenus"); emit useTearOffMenusChanged(_useTearOffMenus); } void InterfaceSettings::setCardViewInitialRowsMax(int _cardViewInitialRowsMax) { setValue(_cardViewInitialRowsMax, "cardViewInitialRowsMax"); } void InterfaceSettings::setCardViewExpandedRowsMax(int value) { setValue(value, "cardViewExpandedRowsMax"); } void InterfaceSettings::setCloseEmptyCardView(bool value) { setValue(value, "closeEmptyCardView"); } void InterfaceSettings::setFocusCardViewSearchBar(bool value) { setValue(value, "focusCardViewSearchBar"); } void InterfaceSettings::setKeepGameChatFocus(bool value) { setValue(value, "keepGameChatFocus"); emit keepGameChatFocusChanged(value); } void InterfaceSettings::setNotificationsEnabled(bool _notificationsEnabled) { setValue(_notificationsEnabled, "enabled", "interface", "notifications"); } void InterfaceSettings::setSpectatorNotificationsEnabled(bool _spectatorNotificationsEnabled) { setValue(_spectatorNotificationsEnabled, "spectatorsEnabled", "interface", "notifications"); } void InterfaceSettings::setBuddyConnectNotificationsEnabled(bool _buddyConnectNotificationsEnabled) { setValue(_buddyConnectNotificationsEnabled, "buddyConnectEnabled", "interface", "notifications"); } void InterfaceSettings::setDoubleClickToPlay(bool _doubleClickToPlay) { setValue(_doubleClickToPlay, "doubleClickToPlay"); } void InterfaceSettings::setClickPlaysAllSelected(bool _clickPlaysAllSelected) { setValue(_clickPlaysAllSelected, "clickPlaysAllSelected"); } void InterfaceSettings::setPlayToStack(bool _playToStack) { setValue(_playToStack, "playToStack"); } void InterfaceSettings::setDoNotDeleteArrowsInSubPhases(bool _doNotDeleteArrowsInSubPhases) { setValue(_doNotDeleteArrowsInSubPhases, "doNotDeleteArrowsInSubPhases"); } void InterfaceSettings::setStartingHandSize(int _startingHandSize) { setValue(_startingHandSize, "startingHandSize"); } void InterfaceSettings::setAnnotateTokens(bool _annotateTokens) { setValue(_annotateTokens, "annotateTokens"); } void InterfaceSettings::setShowDragSelectionCount(bool _showDragSelectionCount) { setValue(_showDragSelectionCount, "showLassoSelectionCount"); } void InterfaceSettings::setShowTotalSelectionCount(bool _showTotalSelectionCount) { setValue(_showTotalSelectionCount, "showPersistentSelectionCount"); } void InterfaceSettings::setTallyType(int value) { if (getTallyType() == value) { return; } setValue(value, "tallyType"); emit tallyTypeChanged(value); } void InterfaceSettings::setHorizontalHand(bool _horizontalHand) { setValue(_horizontalHand, "horizontal", "hand"); emit horizontalHandChanged(); } void InterfaceSettings::setInvertVerticalCoordinate(bool _invertVerticalCoordinate) { setValue(_invertVerticalCoordinate, "invertVertical", "table"); emit invertVerticalCoordinateChanged(); } void InterfaceSettings::setMinPlayersForMultiColumnLayout(int _minPlayersForMultiColumnLayout) { setValue(_minPlayersForMultiColumnLayout, "minPlayersMulticolumn"); emit minPlayersForMultiColumnLayoutChanged(); } void InterfaceSettings::setRewindBufferingMs(int _rewindBufferingMs) { setValue(_rewindBufferingMs, "rewindBufferingMs", "replay"); } void InterfaceSettings::setFastForwardSpeed(qreal _value) { setValue(_value, "fastForwardSpeed", "replay"); } void InterfaceSettings::setSkipEmptySections(bool _value) { setValue(_value, "skipEmptySections", "replay"); } void InterfaceSettings::setLeftJustified(bool _leftJustified) { setValue(_leftJustified, "leftJustified"); emit handJustificationChanged(); } void InterfaceSettings::setZoneViewGroupByIndex(int _zoneViewGroupByIndex) { setValue(_zoneViewGroupByIndex, "groupBy", "zoneview"); } void InterfaceSettings::setZoneViewSortByIndex(int _zoneViewSortByIndex) { setValue(_zoneViewSortByIndex, "sortBy", "zoneview"); } void InterfaceSettings::setZoneViewPileView(bool _zoneViewPileView) { setValue(_zoneViewPileView, "pileView", "zoneview"); } void InterfaceSettings::setShowStatusBar(bool _showStatusBar) { 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); } void InterfaceSettings::setPlaymatVisibility(int _visibility) { if (getPlaymatVisibility() == _visibility) { return; } setValue(_visibility, "playmatvisibility"); emit playmatVisibilityChanged(_visibility); } void InterfaceSettings::setPlaymatFallbackList(const QList &_fallbackList) { QStringList entries; entries.reserve(_fallbackList.size()); for (const StoredPlaymat &stored : _fallbackList) { entries.append(encodeStoredPlaymat(stored)); } setValue(entries, "playmatFallbackList"); emit playmatSettingsChanged(); } void InterfaceSettings::setPlaymatOverride(const StoredPlaymat &_override) { setValue(_override.isEmpty() ? QString() : encodeStoredPlaymat(_override), "playmatOverride"); emit playmatSettingsChanged(); } void InterfaceSettings::setPlaymatFallbackMode(int _fallbackMode) { const int mode = qBound(0, _fallbackMode, 2); if (getPlaymatFallbackMode() == mode) { return; } setValue(mode, "playmatFallbackMode"); emit playmatSettingsChanged(); } void InterfaceSettings::setLifeCounterAnimationsEnabled(bool _lifeCounterAnimationsEnabled) { setValue(_lifeCounterAnimationsEnabled, "lifeCounterAnimationsEnabled"); emit lifeCounterAnimationsEnabledChanged(_lifeCounterAnimationsEnabled); } void InterfaceSettings::setBattlefieldFlashEnabled(bool _battlefieldFlashEnabled) { setValue(_battlefieldFlashEnabled, "battlefieldFlashEnabled"); emit battlefieldFlashEnabledChanged(_battlefieldFlashEnabled); } void InterfaceSettings::setUserListExpandedSections(const QStringList §ions) { setValue(sections, "userListExpandedSections"); }