mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-07-08 17:13:57 -07:00
feat(game): add persistent selection counter overlay.
Display total count of selected cards in bottom-right corner when multiple cards are selected. Updates on selection changes and window resize. The counter connects to QGraphicsScene::selectionChanged to stay up-to-date without requiring manual refresh. Adds user setting to enable/disable the total count overlay.
This commit is contained in:
parent
8b20fa0425
commit
6d4bcc6664
6 changed files with 54 additions and 1 deletions
|
|
@ -285,6 +285,7 @@ SettingsCache::SettingsCache()
|
||||||
focusCardViewSearchBar = settings->value("interface/focusCardViewSearchBar", true).toBool();
|
focusCardViewSearchBar = settings->value("interface/focusCardViewSearchBar", true).toBool();
|
||||||
|
|
||||||
showDragSelectionCount = settings->value("interface/showlassoselectioncount", true).toBool();
|
showDragSelectionCount = settings->value("interface/showlassoselectioncount", true).toBool();
|
||||||
|
showTotalSelectionCount = settings->value("interface/showpersistentselectioncount", true).toBool();
|
||||||
|
|
||||||
showShortcuts = settings->value("menu/showshortcuts", true).toBool();
|
showShortcuts = settings->value("menu/showshortcuts", true).toBool();
|
||||||
showGameSelectorFilterToolbar = settings->value("menu/showgameselectorfiltertoolbar", true).toBool();
|
showGameSelectorFilterToolbar = settings->value("menu/showgameselectorfiltertoolbar", true).toBool();
|
||||||
|
|
@ -1316,6 +1317,12 @@ void SettingsCache::setShowDragSelectionCount(QT_STATE_CHANGED_T _showDragSelect
|
||||||
settings->setValue("interface/showlassoselectioncount", showDragSelectionCount);
|
settings->setValue("interface/showlassoselectioncount", showDragSelectionCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SettingsCache::setShowTotalSelectionCount(QT_STATE_CHANGED_T _showTotalSelectionCount)
|
||||||
|
{
|
||||||
|
showTotalSelectionCount = static_cast<bool>(_showTotalSelectionCount);
|
||||||
|
settings->setValue("interface/showpersistentselectioncount", showTotalSelectionCount);
|
||||||
|
}
|
||||||
|
|
||||||
void SettingsCache::loadPaths()
|
void SettingsCache::loadPaths()
|
||||||
{
|
{
|
||||||
QString dataPath = getDataPath();
|
QString dataPath = getDataPath();
|
||||||
|
|
|
||||||
|
|
@ -341,6 +341,7 @@ private:
|
||||||
bool roundCardCorners;
|
bool roundCardCorners;
|
||||||
bool showStatusBar;
|
bool showStatusBar;
|
||||||
bool showDragSelectionCount;
|
bool showDragSelectionCount;
|
||||||
|
bool showTotalSelectionCount;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
SettingsCache();
|
SettingsCache();
|
||||||
|
|
@ -460,6 +461,10 @@ public:
|
||||||
{
|
{
|
||||||
return showDragSelectionCount;
|
return showDragSelectionCount;
|
||||||
}
|
}
|
||||||
|
[[nodiscard]] bool getShowTotalSelectionCount() const
|
||||||
|
{
|
||||||
|
return showTotalSelectionCount;
|
||||||
|
}
|
||||||
[[nodiscard]] bool getNotificationsEnabled() const
|
[[nodiscard]] bool getNotificationsEnabled() const
|
||||||
{
|
{
|
||||||
return notificationsEnabled;
|
return notificationsEnabled;
|
||||||
|
|
@ -1126,5 +1131,6 @@ public slots:
|
||||||
void setMaxFontSize(int _max);
|
void setMaxFontSize(int _max);
|
||||||
void setRoundCardCorners(bool _roundCardCorners);
|
void setRoundCardCorners(bool _roundCardCorners);
|
||||||
void setShowDragSelectionCount(QT_STATE_CHANGED_T _showDragSelectionCount);
|
void setShowDragSelectionCount(QT_STATE_CHANGED_T _showDragSelectionCount);
|
||||||
|
void setShowTotalSelectionCount(QT_STATE_CHANGED_T _showTotalSelectionCount);
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,7 @@ GameView::GameView(GameScene *scene, QWidget *parent) : QGraphicsView(scene, par
|
||||||
connect(scene, &GameScene::sigStartRubberBand, this, &GameView::startRubberBand);
|
connect(scene, &GameScene::sigStartRubberBand, this, &GameView::startRubberBand);
|
||||||
connect(scene, &GameScene::sigResizeRubberBand, this, &GameView::resizeRubberBand);
|
connect(scene, &GameScene::sigResizeRubberBand, this, &GameView::resizeRubberBand);
|
||||||
connect(scene, &GameScene::sigStopRubberBand, this, &GameView::stopRubberBand);
|
connect(scene, &GameScene::sigStopRubberBand, this, &GameView::stopRubberBand);
|
||||||
|
connect(scene, &QGraphicsScene::selectionChanged, this, [this]() { updateTotalSelectionCount(); });
|
||||||
|
|
||||||
aCloseMostRecentZoneView = new QAction(this);
|
aCloseMostRecentZoneView = new QAction(this);
|
||||||
|
|
||||||
|
|
@ -63,6 +64,10 @@ GameView::GameView(GameScene *scene, QWidget *parent) : QGraphicsView(scene, par
|
||||||
dragCountLabel->setStyleSheet(countLabelStyle);
|
dragCountLabel->setStyleSheet(countLabelStyle);
|
||||||
dragCountLabel->hide();
|
dragCountLabel->hide();
|
||||||
dragCountLabel->raise();
|
dragCountLabel->raise();
|
||||||
|
|
||||||
|
totalCountLabel = new QLabel(this);
|
||||||
|
totalCountLabel->setStyleSheet(countLabelStyle);
|
||||||
|
totalCountLabel->hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GameView::resizeEvent(QResizeEvent *event)
|
void GameView::resizeEvent(QResizeEvent *event)
|
||||||
|
|
@ -74,6 +79,7 @@ void GameView::resizeEvent(QResizeEvent *event)
|
||||||
s->processViewSizeChange(event->size());
|
s->processViewSizeChange(event->size());
|
||||||
|
|
||||||
updateSceneRect(scene()->sceneRect());
|
updateSceneRect(scene()->sceneRect());
|
||||||
|
updateTotalSelectionCount(event->size());
|
||||||
}
|
}
|
||||||
|
|
||||||
void GameView::updateSceneRect(const QRectF &rect)
|
void GameView::updateSceneRect(const QRectF &rect)
|
||||||
|
|
@ -151,3 +157,28 @@ void GameView::refreshShortcuts()
|
||||||
aCloseMostRecentZoneView->setShortcuts(
|
aCloseMostRecentZoneView->setShortcuts(
|
||||||
SettingsCache::instance().shortcuts().getShortcut("Player/aCloseMostRecentZoneView"));
|
SettingsCache::instance().shortcuts().getShortcut("Player/aCloseMostRecentZoneView"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GameView::updateTotalSelectionCount(const QSize &viewSize)
|
||||||
|
{
|
||||||
|
if (!SettingsCache::instance().getShowTotalSelectionCount()) {
|
||||||
|
totalCountLabel->hide();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int count = scene()->selectedItems().count();
|
||||||
|
|
||||||
|
if (count > 1) {
|
||||||
|
totalCountLabel->setText(QString::number(count));
|
||||||
|
totalCountLabel->adjustSize();
|
||||||
|
|
||||||
|
constexpr int kMarginInPixels = 10;
|
||||||
|
int availableWidth = viewSize.isValid() ? viewSize.width() : viewport()->width();
|
||||||
|
int availableHeight = viewSize.isValid() ? viewSize.height() : viewport()->height();
|
||||||
|
int x = availableWidth - totalCountLabel->width() - kMarginInPixels;
|
||||||
|
int y = availableHeight - totalCountLabel->height() - kMarginInPixels;
|
||||||
|
totalCountLabel->move(x, y);
|
||||||
|
totalCountLabel->show();
|
||||||
|
} else {
|
||||||
|
totalCountLabel->hide();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@ private:
|
||||||
QAction *aCloseMostRecentZoneView;
|
QAction *aCloseMostRecentZoneView;
|
||||||
QRubberBand *rubberBand;
|
QRubberBand *rubberBand;
|
||||||
QLabel *dragCountLabel;
|
QLabel *dragCountLabel;
|
||||||
|
QLabel *totalCountLabel;
|
||||||
QPointF selectionOrigin;
|
QPointF selectionOrigin;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
@ -29,6 +30,7 @@ private slots:
|
||||||
void resizeRubberBand(const QPointF &cursorPoint, int selectedCount);
|
void resizeRubberBand(const QPointF &cursorPoint, int selectedCount);
|
||||||
void stopRubberBand();
|
void stopRubberBand();
|
||||||
void refreshShortcuts();
|
void refreshShortcuts();
|
||||||
|
void updateTotalSelectionCount(const QSize &viewSize = QSize());
|
||||||
public slots:
|
public slots:
|
||||||
void updateSceneRect(const QRectF &rect);
|
void updateSceneRect(const QRectF &rect);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -825,6 +825,10 @@ UserInterfaceSettingsPage::UserInterfaceSettingsPage()
|
||||||
connect(&showDragSelectionCountCheckBox, &QCheckBox::QT_STATE_CHANGED, &SettingsCache::instance(),
|
connect(&showDragSelectionCountCheckBox, &QCheckBox::QT_STATE_CHANGED, &SettingsCache::instance(),
|
||||||
&SettingsCache::setShowDragSelectionCount);
|
&SettingsCache::setShowDragSelectionCount);
|
||||||
|
|
||||||
|
showTotalSelectionCountCheckBox.setChecked(SettingsCache::instance().getShowTotalSelectionCount());
|
||||||
|
connect(&showTotalSelectionCountCheckBox, &QCheckBox::QT_STATE_CHANGED, &SettingsCache::instance(),
|
||||||
|
&SettingsCache::setShowTotalSelectionCount);
|
||||||
|
|
||||||
useTearOffMenusCheckBox.setChecked(SettingsCache::instance().getUseTearOffMenus());
|
useTearOffMenusCheckBox.setChecked(SettingsCache::instance().getUseTearOffMenus());
|
||||||
connect(&useTearOffMenusCheckBox, &QCheckBox::QT_STATE_CHANGED, &SettingsCache::instance(),
|
connect(&useTearOffMenusCheckBox, &QCheckBox::QT_STATE_CHANGED, &SettingsCache::instance(),
|
||||||
[](const QT_STATE_CHANGED_T state) { SettingsCache::instance().setUseTearOffMenus(state == Qt::Checked); });
|
[](const QT_STATE_CHANGED_T state) { SettingsCache::instance().setUseTearOffMenus(state == Qt::Checked); });
|
||||||
|
|
@ -838,7 +842,8 @@ UserInterfaceSettingsPage::UserInterfaceSettingsPage()
|
||||||
generalGrid->addWidget(&focusCardViewSearchBarCheckBox, 5, 0);
|
generalGrid->addWidget(&focusCardViewSearchBarCheckBox, 5, 0);
|
||||||
generalGrid->addWidget(&annotateTokensCheckBox, 6, 0);
|
generalGrid->addWidget(&annotateTokensCheckBox, 6, 0);
|
||||||
generalGrid->addWidget(&showDragSelectionCountCheckBox, 7, 0);
|
generalGrid->addWidget(&showDragSelectionCountCheckBox, 7, 0);
|
||||||
generalGrid->addWidget(&useTearOffMenusCheckBox, 8, 0);
|
generalGrid->addWidget(&showTotalSelectionCountCheckBox, 8, 0);
|
||||||
|
generalGrid->addWidget(&useTearOffMenusCheckBox, 9, 0);
|
||||||
|
|
||||||
generalGroupBox = new QGroupBox;
|
generalGroupBox = new QGroupBox;
|
||||||
generalGroupBox->setLayout(generalGrid);
|
generalGroupBox->setLayout(generalGrid);
|
||||||
|
|
@ -961,6 +966,7 @@ void UserInterfaceSettingsPage::retranslateUi()
|
||||||
focusCardViewSearchBarCheckBox.setText(tr("Auto focus search bar when card view window is opened"));
|
focusCardViewSearchBarCheckBox.setText(tr("Auto focus search bar when card view window is opened"));
|
||||||
annotateTokensCheckBox.setText(tr("Annotate card text on tokens"));
|
annotateTokensCheckBox.setText(tr("Annotate card text on tokens"));
|
||||||
showDragSelectionCountCheckBox.setText(tr("Show selection counter during drag selection"));
|
showDragSelectionCountCheckBox.setText(tr("Show selection counter during drag selection"));
|
||||||
|
showTotalSelectionCountCheckBox.setText(tr("Show total selection counter"));
|
||||||
useTearOffMenusCheckBox.setText(tr("Use tear-off menus, allowing right click menus to persist on screen"));
|
useTearOffMenusCheckBox.setText(tr("Use tear-off menus, allowing right click menus to persist on screen"));
|
||||||
notificationsGroupBox->setTitle(tr("Notifications settings"));
|
notificationsGroupBox->setTitle(tr("Notifications settings"));
|
||||||
notificationsEnabledCheckBox.setText(tr("Enable notifications in taskbar"));
|
notificationsEnabledCheckBox.setText(tr("Enable notifications in taskbar"));
|
||||||
|
|
|
||||||
|
|
@ -172,6 +172,7 @@ private:
|
||||||
QCheckBox focusCardViewSearchBarCheckBox;
|
QCheckBox focusCardViewSearchBarCheckBox;
|
||||||
QCheckBox annotateTokensCheckBox;
|
QCheckBox annotateTokensCheckBox;
|
||||||
QCheckBox showDragSelectionCountCheckBox;
|
QCheckBox showDragSelectionCountCheckBox;
|
||||||
|
QCheckBox showTotalSelectionCountCheckBox;
|
||||||
QCheckBox useTearOffMenusCheckBox;
|
QCheckBox useTearOffMenusCheckBox;
|
||||||
QCheckBox tapAnimationCheckBox;
|
QCheckBox tapAnimationCheckBox;
|
||||||
QCheckBox openDeckInNewTabCheckBox;
|
QCheckBox openDeckInNewTabCheckBox;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue