diff --git a/cockatrice/src/interface/widgets/tabs/tab_game.cpp b/cockatrice/src/interface/widgets/tabs/tab_game.cpp index fae9dffe5..ef75bf817 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_game.cpp +++ b/cockatrice/src/interface/widgets/tabs/tab_game.cpp @@ -31,6 +31,7 @@ #include #include #include +#include #include #include #include @@ -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; diff --git a/cockatrice/src/interface/widgets/tabs/tab_game.h b/cockatrice/src/interface/widgets/tabs/tab_game.h index c35557743..dd7290297 100644 --- a/cockatrice/src/interface/widgets/tabs/tab_game.h +++ b/cockatrice/src/interface/widgets/tabs/tab_game.h @@ -76,7 +76,7 @@ private: QMap 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);