diff --git a/cockatrice/src/dialogs/dlg_settings.cpp b/cockatrice/src/dialogs/dlg_settings.cpp index 0b241c2ab..f90fe8d4a 100644 --- a/cockatrice/src/dialogs/dlg_settings.cpp +++ b/cockatrice/src/dialogs/dlg_settings.cpp @@ -346,11 +346,18 @@ AppearanceSettingsPage::AppearanceSettingsPage() connect(&verticalCardOverlapPercentBox, SIGNAL(valueChanged(int)), &settings, SLOT(setStackCardOverlapPercent(int))); + cardViewInitialRowsMaxBox.setRange(1, 999); + cardViewInitialRowsMaxBox.setValue(SettingsCache::instance().getCardViewInitialRowsMax()); + connect(&cardViewInitialRowsMaxBox, qOverload(&QSpinBox::valueChanged), &SettingsCache::instance(), + &SettingsCache::setCardViewInitialRowsMax); + auto *cardsGrid = new QGridLayout; cardsGrid->addWidget(&displayCardNamesCheckBox, 0, 0, 1, 2); cardsGrid->addWidget(&cardScalingCheckBox, 1, 0, 1, 2); cardsGrid->addWidget(&verticalCardOverlapPercentLabel, 2, 0, 1, 1); cardsGrid->addWidget(&verticalCardOverlapPercentBox, 2, 1, 1, 1); + cardsGrid->addWidget(&cardViewInitialRowsMaxLabel, 3, 0); + cardsGrid->addWidget(&cardViewInitialRowsMaxBox, 3, 1); cardsGroupBox = new QGroupBox; cardsGroupBox->setLayout(cardsGrid); @@ -448,6 +455,8 @@ void AppearanceSettingsPage::retranslateUi() cardScalingCheckBox.setText(tr("Scale cards on mouse over")); verticalCardOverlapPercentLabel.setText( tr("Minimum overlap percentage of cards on the stack and in vertical hand")); + cardViewInitialRowsMaxLabel.setText(tr("Maximum initial height for card view window:")); + cardViewInitialRowsMaxBox.setSuffix(tr(" rows")); handGroupBox->setTitle(tr("Hand layout")); horizontalHandCheckBox.setText(tr("Display hand horizontally (wastes space)")); diff --git a/cockatrice/src/dialogs/dlg_settings.h b/cockatrice/src/dialogs/dlg_settings.h index 078c0f9b3..2a3f7bf0b 100644 --- a/cockatrice/src/dialogs/dlg_settings.h +++ b/cockatrice/src/dialogs/dlg_settings.h @@ -96,6 +96,8 @@ private: QCheckBox cardScalingCheckBox; QLabel verticalCardOverlapPercentLabel; QSpinBox verticalCardOverlapPercentBox; + QLabel cardViewInitialRowsMaxLabel; + QSpinBox cardViewInitialRowsMaxBox; QCheckBox horizontalHandCheckBox; QCheckBox leftJustifiedHandCheckBox; QCheckBox invertVerticalCoordinateCheckBox; diff --git a/cockatrice/src/game/zones/view_zone_widget.cpp b/cockatrice/src/game/zones/view_zone_widget.cpp index 57455fc49..8514aa60d 100644 --- a/cockatrice/src/game/zones/view_zone_widget.cpp +++ b/cockatrice/src/game/zones/view_zone_widget.cpp @@ -254,6 +254,16 @@ void ZoneViewWidget::resizeEvent(QGraphicsSceneResizeEvent *event) scrollBar->setMaximum(totalZoneHeight - newZoneHeight); } +/** + * Calculates the max initial height from the settings. + * The max initial height setting is given as number of rows, so we need to map it to a height. + **/ +static qreal calcMaxInitialHeight() +{ + const qreal cardsHeight = (SettingsCache::instance().getCardViewInitialRowsMax() + 1) * (CARD_HEIGHT / 3); + return cardsHeight + 5; // +5 padding to make the cutoff look nicer +} + void ZoneViewWidget::resizeToZoneContents() { QRectF zoneRect = zone->getOptimumRect(); @@ -265,7 +275,7 @@ void ZoneViewWidget::resizeToZoneContents() QSizeF maxSize(width, zoneRect.height() + extraHeight + 10); setMaximumSize(maxSize); - qreal initialZoneHeight = qMin(zoneRect.height(), 500.0); + qreal initialZoneHeight = qMin(zoneRect.height(), calcMaxInitialHeight()); QSizeF initialSize(width, initialZoneHeight + extraHeight + 10); resize(initialSize); diff --git a/cockatrice/src/settings/cache_settings.cpp b/cockatrice/src/settings/cache_settings.cpp index d01742327..5c8d50e0b 100644 --- a/cockatrice/src/settings/cache_settings.cpp +++ b/cockatrice/src/settings/cache_settings.cpp @@ -238,6 +238,7 @@ SettingsCache::SettingsCache() tabGameSplitterSizes = settings->value("interface/tabgame_splittersizes").toByteArray(); knownMissingFeatures = settings->value("interface/knownmissingfeatures", "").toString(); useTearOffMenus = settings->value("interface/usetearoffmenus", true).toBool(); + cardViewInitialRowsMax = settings->value("interface/cardViewInitialRowsMax", 14).toInt(); showShortcuts = settings->value("menu/showshortcuts", true).toBool(); displayCardNames = settings->value("cards/displaycardnames", true).toBool(); @@ -300,6 +301,12 @@ void SettingsCache::setUseTearOffMenus(bool _useTearOffMenus) emit useTearOffMenusChanged(useTearOffMenus); } +void SettingsCache::setCardViewInitialRowsMax(int _cardViewInitialRowsMax) +{ + cardViewInitialRowsMax = _cardViewInitialRowsMax; + settings->setValue("interface/cardViewInitialRowsMax", cardViewInitialRowsMax); +} + void SettingsCache::setKnownMissingFeatures(const QString &_knownMissingFeatures) { knownMissingFeatures = _knownMissingFeatures; diff --git a/cockatrice/src/settings/cache_settings.h b/cockatrice/src/settings/cache_settings.h index 7c8cc2ec7..0f46adb41 100644 --- a/cockatrice/src/settings/cache_settings.h +++ b/cockatrice/src/settings/cache_settings.h @@ -123,6 +123,7 @@ private: QString clientVersion; QString knownMissingFeatures; bool useTearOffMenus; + int cardViewInitialRowsMax; int pixmapCacheSize; int networkCacheSize; int redirectCacheTtl; @@ -485,6 +486,7 @@ public: void setClientVersion(const QString &clientVersion); void setKnownMissingFeatures(const QString &_knownMissingFeatures); void setUseTearOffMenus(bool _useTearOffMenus); + void setCardViewInitialRowsMax(int _cardViewInitialRowsMax); QString getClientID() { return clientID; @@ -501,6 +503,10 @@ public: { return useTearOffMenus; } + int getCardViewInitialRowsMax() const + { + return cardViewInitialRowsMax; + } ShortcutsSettings &shortcuts() const { return *shortcutsSettings; diff --git a/dbconverter/src/mocks.cpp b/dbconverter/src/mocks.cpp index 98ac958eb..6419f267a 100644 --- a/dbconverter/src/mocks.cpp +++ b/dbconverter/src/mocks.cpp @@ -55,6 +55,9 @@ SettingsCache::SettingsCache() void SettingsCache::setUseTearOffMenus(bool /* _useTearOffMenus */) { } +void SettingsCache::setCardViewInitialRowsMax(int /* _cardViewInitialRowsMax */) +{ +} void SettingsCache::setKnownMissingFeatures(const QString & /* _knownMissingFeatures */) { } diff --git a/tests/carddatabase/mocks.cpp b/tests/carddatabase/mocks.cpp index 8f05f7360..5e42ccc44 100644 --- a/tests/carddatabase/mocks.cpp +++ b/tests/carddatabase/mocks.cpp @@ -59,6 +59,9 @@ SettingsCache::SettingsCache() void SettingsCache::setUseTearOffMenus(bool /* _useTearOffMenus */) { } +void SettingsCache::setCardViewInitialRowsMax(int /* _cardViewInitialRowsMax */) +{ +} void SettingsCache::setKnownMissingFeatures(const QString & /* _knownMissingFeatures */) { }