[TabGame] Notes dockWidget

This commit is contained in:
RickyRister 2026-02-26 00:11:47 -08:00
parent 9794893b63
commit 4d26bc9f82
2 changed files with 35 additions and 16 deletions

View file

@ -31,6 +31,7 @@
#include <QLabel>
#include <QMenu>
#include <QMessageBox>
#include <QPlainTextEdit>
#include <QStackedWidget>
#include <QTimer>
#include <QWidget>
@ -51,6 +52,7 @@ TabGame::TabGame(TabSupervisor *_tabSupervisor, GameReplay *_replay)
createCardInfoDock(true);
createPlayerListDock(true);
createNotesDock(true);
createMessageDock(true);
createPlayAreaWidget(true);
createDeckViewContainerWidget(true);
@ -58,6 +60,7 @@ TabGame::TabGame(TabSupervisor *_tabSupervisor, GameReplay *_replay)
addDockWidget(Qt::RightDockWidgetArea, cardInfoDock);
addDockWidget(Qt::RightDockWidgetArea, playerListDock);
addDockWidget(Qt::RightDockWidgetArea, notesDock);
addDockWidget(Qt::RightDockWidgetArea, messageLayoutDock);
addDockWidget(Qt::BottomDockWidgetArea, replayDock);
@ -95,6 +98,7 @@ TabGame::TabGame(TabSupervisor *_tabSupervisor,
createCardInfoDock();
createPlayerListDock();
createNotesDock();
createMessageDock();
createPlayAreaWidget();
createDeckViewContainerWidget();
@ -102,6 +106,7 @@ TabGame::TabGame(TabSupervisor *_tabSupervisor,
addDockWidget(Qt::RightDockWidgetArea, cardInfoDock);
addDockWidget(Qt::RightDockWidgetArea, playerListDock);
addDockWidget(Qt::RightDockWidgetArea, notesDock);
addDockWidget(Qt::RightDockWidgetArea, messageLayoutDock);
mainWidget = new QStackedWidget(this);
@ -278,6 +283,7 @@ void TabGame::retranslateUi()
updatePlayerListDockTitle();
cardInfoDock->setWindowTitle(tr("Card Info") + (cardInfoDock->isWindow() ? tabText : QString()));
notesDock->setWindowTitle(tr("Notes") + (notesDock->isWindow() ? tabText : QString()));
messageLayoutDock->setWindowTitle(tr("Messages") + (messageLayoutDock->isWindow() ? tabText : QString()));
if (replayDock)
replayDock->setWindowTitle(tr("Replay Timeline") + (replayDock->isWindow() ? tabText : QString()));
@ -341,6 +347,7 @@ void TabGame::retranslateUi()
dockToActions[cardInfoDock].menu->setTitle(tr("Card Info"));
dockToActions[messageLayoutDock].menu->setTitle(tr("Messages"));
dockToActions[notesDock].menu->setTitle(tr("Notes"));
dockToActions[playerListDock].menu->setTitle(tr("Player List"));
if (replayDock) {
@ -1035,6 +1042,7 @@ void TabGame::createViewMenuItems()
registerDockWidget(viewMenu, cardInfoDock, {250, 360});
registerDockWidget(viewMenu, messageLayoutDock, {250, 200});
registerDockWidget(viewMenu, playerListDock, {250, 50});
registerDockWidget(viewMenu, notesDock, {250, 50});
if (replayDock) {
registerDockWidget(viewMenu, replayDock, {900, 100});
@ -1124,36 +1132,31 @@ void TabGame::actResetLayout()
{
cardInfoDock->setVisible(true);
playerListDock->setVisible(true);
notesDock->setVisible(false);
messageLayoutDock->setVisible(true);
cardInfoDock->setFloating(false);
playerListDock->setFloating(false);
notesDock->setFloating(false);
messageLayoutDock->setFloating(false);
addDockWidget(Qt::RightDockWidgetArea, cardInfoDock);
addDockWidget(Qt::RightDockWidgetArea, playerListDock);
addDockWidget(Qt::RightDockWidgetArea, notesDock);
addDockWidget(Qt::RightDockWidgetArea, messageLayoutDock);
if (replayDock) {
replayDock->setVisible(true);
replayDock->setFloating(false);
addDockWidget(Qt::BottomDockWidgetArea, replayDock);
}
cardInfoDock->setMinimumSize(250, 360);
cardInfoDock->setMaximumSize(250, 360);
messageLayoutDock->setMinimumSize(250, 200);
messageLayoutDock->setMaximumSize(250, 200);
playerListDock->setMinimumSize(250, 50);
playerListDock->setMaximumSize(250, 50);
replayDock->setMinimumSize(900, 100);
replayDock->setMaximumSize(900, 100);
} else {
cardInfoDock->setMinimumSize(250, 360);
cardInfoDock->setMaximumSize(250, 360);
messageLayoutDock->setMinimumSize(250, 250);
messageLayoutDock->setMaximumSize(250, 250);
playerListDock->setMinimumSize(250, 50);
playerListDock->setMaximumSize(250, 50);
for (auto i = dockToActions.cbegin(); i != dockToActions.cend(); ++i) {
QDockWidget *dock = i.key();
QSize defaultSize = i.value().defaultSize;
dock->setMinimumSize(defaultSize);
dock->setMaximumSize(defaultSize);
}
QTimer::singleShot(100, this, &TabGame::freeDocksSize);
@ -1248,6 +1251,21 @@ void TabGame::createPlayerListDock(bool bReplay)
playerListDock->setFloating(false);
}
void TabGame::createNotesDock(bool bReplay)
{
Q_UNUSED(bReplay);
auto textEdit = new QPlainTextEdit(this);
notesDock = new QDockWidget(this);
notesDock->setObjectName("notesDock");
notesDock->setFeatures(QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetFloatable |
QDockWidget::DockWidgetMovable);
notesDock->setWidget(textEdit);
// Prevent text from autofocusing if there are no other focusable widgets (such as when loading replay)
QTimer::singleShot(1, textEdit, &QWidget::clearFocus);
}
void TabGame::createMessageDock(bool bReplay)
{
auto messageLogLayout = new QVBoxLayout;

View file

@ -76,7 +76,7 @@ private:
QMap<int, TabbedDeckViewContainer *> deckViewContainers;
QVBoxLayout *deckViewContainerLayout;
QWidget *gamePlayAreaWidget, *deckViewContainerWidget;
QDockWidget *cardInfoDock, *messageLayoutDock, *playerListDock, *replayDock;
QDockWidget *cardInfoDock, *playerListDock, *notesDock, *messageLayoutDock, *replayDock;
QAction *playersSeparator;
QMenu *gameMenu, *viewMenu;
TearOffMenu *phasesMenu;
@ -121,6 +121,7 @@ private:
void registerDockWidget(QMenu *_viewMenu, QDockWidget *widget, const QSize &defaultSize);
void createCardInfoDock(bool bReplay = false);
void createPlayerListDock(bool bReplay = false);
void createNotesDock(bool bReplay = false);
void createMessageDock(bool bReplay = false);
void createPlayAreaWidget(bool bReplay = false);
void createDeckViewContainerWidget(bool bReplay = false);