mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-11-10 03:53:26 -08:00
[Replay] Show the history sidebar in replay tabs
Add the Game History dock to the left of replay tabs, wire it to the replay timeline, and register it with the View menu and layout reset.
This commit is contained in:
parent
71aaf8f821
commit
9335011e37
2 changed files with 39 additions and 2 deletions
|
|
@ -32,6 +32,7 @@
|
||||||
#include "../interface/widgets/utility/line_edit_completer.h"
|
#include "../interface/widgets/utility/line_edit_completer.h"
|
||||||
#include "../main.h"
|
#include "../main.h"
|
||||||
#include "../menus/tearoff_menu.h"
|
#include "../menus/tearoff_menu.h"
|
||||||
|
#include "../replay/replay_event_sidebar.h"
|
||||||
#include "../replay/replay_widget.h"
|
#include "../replay/replay_widget.h"
|
||||||
#include "../utility/visibility_change_listener.h"
|
#include "../utility/visibility_change_listener.h"
|
||||||
#include "card/card_completer_proxy_model.h"
|
#include "card/card_completer_proxy_model.h"
|
||||||
|
|
@ -93,7 +94,7 @@ class Message;
|
||||||
} // namespace google
|
} // namespace google
|
||||||
|
|
||||||
TabGame::TabGame(TabSupervisor *_tabSupervisor, GameReplay *_replay)
|
TabGame::TabGame(TabSupervisor *_tabSupervisor, GameReplay *_replay)
|
||||||
: Tab(_tabSupervisor), sayLabel(nullptr), sayEdit(nullptr)
|
: Tab(_tabSupervisor), sayLabel(nullptr), sayEdit(nullptr), replayDock(nullptr), historyDock(nullptr)
|
||||||
{
|
{
|
||||||
// THIS CTOR IS USED ON REPLAY
|
// THIS CTOR IS USED ON REPLAY
|
||||||
game = new Replay(this, _replay, tabSupervisor->getIsLocalGame());
|
game = new Replay(this, _replay, tabSupervisor->getIsLocalGame());
|
||||||
|
|
@ -108,6 +109,7 @@ TabGame::TabGame(TabSupervisor *_tabSupervisor, GameReplay *_replay)
|
||||||
addDockWidget(Qt::RightDockWidgetArea, cardInfoDock);
|
addDockWidget(Qt::RightDockWidgetArea, cardInfoDock);
|
||||||
addDockWidget(Qt::RightDockWidgetArea, playerListDock);
|
addDockWidget(Qt::RightDockWidgetArea, playerListDock);
|
||||||
addDockWidget(Qt::RightDockWidgetArea, messageLayoutDock);
|
addDockWidget(Qt::RightDockWidgetArea, messageLayoutDock);
|
||||||
|
addDockWidget(Qt::LeftDockWidgetArea, historyDock);
|
||||||
addDockWidget(Qt::BottomDockWidgetArea, replayDock);
|
addDockWidget(Qt::BottomDockWidgetArea, replayDock);
|
||||||
|
|
||||||
mainWidget = new QStackedWidget(this);
|
mainWidget = new QStackedWidget(this);
|
||||||
|
|
@ -148,6 +150,7 @@ TabGame::TabGame(TabSupervisor *_tabSupervisor,
|
||||||
createPlayAreaWidget();
|
createPlayAreaWidget();
|
||||||
createDeckViewContainerWidget();
|
createDeckViewContainerWidget();
|
||||||
replayDock = nullptr;
|
replayDock = nullptr;
|
||||||
|
historyDock = nullptr;
|
||||||
|
|
||||||
addDockWidget(Qt::RightDockWidgetArea, cardInfoDock);
|
addDockWidget(Qt::RightDockWidgetArea, cardInfoDock);
|
||||||
addDockWidget(Qt::RightDockWidgetArea, playerListDock);
|
addDockWidget(Qt::RightDockWidgetArea, playerListDock);
|
||||||
|
|
@ -339,6 +342,9 @@ void TabGame::retranslateUi()
|
||||||
}
|
}
|
||||||
cardInfoDock->setWindowTitle(tr("Card Info") + (cardInfoDock->isWindow() ? tabText : QString()));
|
cardInfoDock->setWindowTitle(tr("Card Info") + (cardInfoDock->isWindow() ? tabText : QString()));
|
||||||
messageLayoutDock->setWindowTitle(tr("Messages") + (messageLayoutDock->isWindow() ? tabText : QString()));
|
messageLayoutDock->setWindowTitle(tr("Messages") + (messageLayoutDock->isWindow() ? tabText : QString()));
|
||||||
|
if (historyDock) {
|
||||||
|
historyDock->setWindowTitle(tr("Game History") + (historyDock->isWindow() ? tabText : QString()));
|
||||||
|
}
|
||||||
if (replayDock) {
|
if (replayDock) {
|
||||||
replayDock->setWindowTitle(tr("Replay Timeline") + (replayDock->isWindow() ? tabText : QString()));
|
replayDock->setWindowTitle(tr("Replay Timeline") + (replayDock->isWindow() ? tabText : QString()));
|
||||||
}
|
}
|
||||||
|
|
@ -412,6 +418,9 @@ void TabGame::retranslateUi()
|
||||||
dockToActions[messageLayoutDock].menu->setTitle(tr("Messages"));
|
dockToActions[messageLayoutDock].menu->setTitle(tr("Messages"));
|
||||||
dockToActions[playerListDock].menu->setTitle(tr("Player List"));
|
dockToActions[playerListDock].menu->setTitle(tr("Player List"));
|
||||||
|
|
||||||
|
if (historyDock) {
|
||||||
|
dockToActions[historyDock].menu->setTitle(tr("Game History"));
|
||||||
|
}
|
||||||
if (replayDock) {
|
if (replayDock) {
|
||||||
dockToActions[replayDock].menu->setTitle(tr("Replay Timeline"));
|
dockToActions[replayDock].menu->setTitle(tr("Replay Timeline"));
|
||||||
}
|
}
|
||||||
|
|
@ -1187,6 +1196,10 @@ void TabGame::createViewMenuItems()
|
||||||
registerDockWidget(viewMenu, messageLayoutDock, {250, 200});
|
registerDockWidget(viewMenu, messageLayoutDock, {250, 200});
|
||||||
registerDockWidget(viewMenu, playerListDock, {250, 50});
|
registerDockWidget(viewMenu, playerListDock, {250, 50});
|
||||||
|
|
||||||
|
if (historyDock) {
|
||||||
|
registerDockWidget(viewMenu, historyDock, {280, 400});
|
||||||
|
}
|
||||||
|
|
||||||
if (replayDock) {
|
if (replayDock) {
|
||||||
registerDockWidget(viewMenu, replayDock, {900, 100});
|
registerDockWidget(viewMenu, replayDock, {900, 100});
|
||||||
}
|
}
|
||||||
|
|
@ -1256,6 +1269,12 @@ void TabGame::actResetLayout()
|
||||||
addDockWidget(Qt::RightDockWidgetArea, playerListDock);
|
addDockWidget(Qt::RightDockWidgetArea, playerListDock);
|
||||||
addDockWidget(Qt::RightDockWidgetArea, messageLayoutDock);
|
addDockWidget(Qt::RightDockWidgetArea, messageLayoutDock);
|
||||||
|
|
||||||
|
if (historyDock) {
|
||||||
|
historyDock->setVisible(true);
|
||||||
|
historyDock->setFloating(false);
|
||||||
|
addDockWidget(Qt::LeftDockWidgetArea, historyDock);
|
||||||
|
}
|
||||||
|
|
||||||
if (replayDock) {
|
if (replayDock) {
|
||||||
replayDock->setVisible(true);
|
replayDock->setVisible(true);
|
||||||
replayDock->setFloating(false);
|
replayDock->setFloating(false);
|
||||||
|
|
@ -1264,6 +1283,9 @@ void TabGame::actResetLayout()
|
||||||
cardInfoDock->resize(250, 360);
|
cardInfoDock->resize(250, 360);
|
||||||
messageLayoutDock->resize(250, 200);
|
messageLayoutDock->resize(250, 200);
|
||||||
playerListDock->resize(250, 50);
|
playerListDock->resize(250, 50);
|
||||||
|
if (historyDock) {
|
||||||
|
historyDock->resize(280, 400);
|
||||||
|
}
|
||||||
replayDock->resize(900, 100);
|
replayDock->resize(900, 100);
|
||||||
} else {
|
} else {
|
||||||
cardInfoDock->resize(250, 360);
|
cardInfoDock->resize(250, 360);
|
||||||
|
|
@ -1312,6 +1334,20 @@ void TabGame::createReplayDock(GameReplay *replay)
|
||||||
[this](const auto &event, auto options) {
|
[this](const auto &event, auto options) {
|
||||||
game->getGameEventHandler()->processGameEventContainer(event, nullptr, options);
|
game->getGameEventHandler()->processGameEventContainer(event, nullptr, options);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
auto *historySidebar = new ReplayEventSidebar(nullptr, replay, replayWidget->getReplayTimeline());
|
||||||
|
historyDock = new QDockWidget(this);
|
||||||
|
historyDock->setObjectName("historyDock");
|
||||||
|
historyDock->setFeatures(QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetFloatable |
|
||||||
|
QDockWidget::DockWidgetMovable);
|
||||||
|
historyDock->setWidget(historySidebar);
|
||||||
|
historyDock->setFloating(false);
|
||||||
|
|
||||||
|
connect(historySidebar, &ReplayEventSidebar::eventSelected, replayWidget, &ReplayWidget::seekToEvent);
|
||||||
|
connect(replayWidget, &ReplayWidget::timeChanged, historySidebar, &ReplayEventSidebar::setCurrentTime);
|
||||||
|
|
||||||
|
// The replay manager is already at time 0 before the sidebar is connected, so apply the initial time explicitly.
|
||||||
|
historySidebar->setCurrentTime(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TabGame::createDeckViewContainerWidget(bool bReplay)
|
void TabGame::createDeckViewContainerWidget(bool bReplay)
|
||||||
|
|
|
||||||
|
|
@ -50,6 +50,7 @@ class AbstractClient;
|
||||||
class GameView;
|
class GameView;
|
||||||
class GameScene;
|
class GameScene;
|
||||||
class ReplayWidget;
|
class ReplayWidget;
|
||||||
|
class ReplayEventSidebar;
|
||||||
class CardInfoFrameWidget;
|
class CardInfoFrameWidget;
|
||||||
class QLabel;
|
class QLabel;
|
||||||
class QPushButton;
|
class QPushButton;
|
||||||
|
|
@ -89,7 +90,7 @@ private:
|
||||||
QMap<int, TabbedDeckViewContainer *> deckViewContainers;
|
QMap<int, TabbedDeckViewContainer *> deckViewContainers;
|
||||||
QVBoxLayout *deckViewContainerLayout;
|
QVBoxLayout *deckViewContainerLayout;
|
||||||
QWidget *gamePlayAreaWidget, *deckViewContainerWidget;
|
QWidget *gamePlayAreaWidget, *deckViewContainerWidget;
|
||||||
QDockWidget *cardInfoDock, *messageLayoutDock, *playerListDock, *replayDock;
|
QDockWidget *cardInfoDock, *messageLayoutDock, *playerListDock, *replayDock, *historyDock;
|
||||||
QAction *playersSeparator;
|
QAction *playersSeparator;
|
||||||
QMenu *gameMenu, *viewMenu;
|
QMenu *gameMenu, *viewMenu;
|
||||||
TearOffMenu *phasesMenu;
|
TearOffMenu *phasesMenu;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue