1 #ifndef MESSAGELOGWIDGET_H
2 #define MESSAGELOGWIDGET_H
3 
4 #include "chatview/chatview.h"
5 #include "translation.h"
6 #include "user_level.h"
7 
8 class Player;
9 class CardZone;
10 class GameEventContext;
11 class CardItem;
12 
13 class MessageLogWidget : public ChatView
14 {
15     Q_OBJECT
16 private:
17     enum MessageContext
18     {
19         MessageContext_None,
20         MessageContext_MoveCard,
21         MessageContext_Mulligan
22     };
23 
24     int mulliganNumber;
25     Player *mulliganPlayer;
26     MessageContext currentContext;
27     QString messagePrefix, messageSuffix;
28 
29     const QString &tableConstant() const;
30     const QString &graveyardConstant() const;
31     const QString &exileConstant() const;
32     const QString &handConstant() const;
33     const QString &deckConstant() const;
34     const QString &sideboardConstant() const;
35     const QString &stackConstant() const;
36 
37     QString sanitizeHtml(QString dirty) const;
38     QString cardLink(QString cardName) const;
39     QPair<QString, QString> getFromStr(CardZone *zone, QString cardName, int position, bool ownerChange) const;
40 
41 public slots:
42     void containerProcessingDone();
43     void containerProcessingStarted(const GameEventContext &context);
44     void logAlwaysRevealTopCard(Player *player, CardZone *zone, bool reveal);
45     void logAttachCard(Player *player, QString cardName, Player *targetPlayer, QString targetCardName);
46     void logConcede(Player *player);
47     void logUnconcede(Player *player);
48     void logConnectionStateChanged(Player *player, bool connectionState);
49     void logCreateArrow(Player *player,
50                         Player *startPlayer,
51                         QString startCard,
52                         Player *targetPlayer,
53                         QString targetCard,
54                         bool playerTarget);
55     void logCreateToken(Player *player, QString cardName, QString pt);
56     void logDeckSelect(Player *player, QString deckHash, int sideboardSize);
57     void logDestroyCard(Player *player, QString cardName);
58     void logDrawCards(Player *player, int number);
59     void logDumpZone(Player *player, CardZone *zone, int numberCards);
60     void logFlipCard(Player *player, QString cardName, bool faceDown);
61     void logGameClosed();
62     void logGameStart();
63     void logJoin(Player *player);
64     void logJoinSpectator(QString name);
65     void logKicked();
66     void logLeave(Player *player, QString reason);
67     void logLeaveSpectator(QString name, QString reason);
68     void logNotReadyStart(Player *player);
69     void logMoveCard(Player *player, CardItem *card, CardZone *startZone, int oldX, CardZone *targetZone, int newX);
70     void logMulligan(Player *player, int number);
71     void logReplayStarted(int gameId);
72     void logReadyStart(Player *player);
73     void logRevealCards(Player *player,
74                         CardZone *zone,
75                         int cardId,
76                         QString cardName,
77                         Player *otherPlayer,
78                         bool faceDown,
79                         int amount);
80     void logReverseTurn(Player *player, bool reversed);
81     void logRollDie(Player *player, int sides, int roll);
82     void logSay(Player *player, QString message);
83     void logSetActivePhase(int phase);
84     void logSetActivePlayer(Player *player);
85     void logSetAnnotation(Player *player, CardItem *card, QString newAnnotation);
86     void logSetCardCounter(Player *player, QString cardName, int counterId, int value, int oldValue);
87     void logSetCounter(Player *player, QString counterName, int value, int oldValue);
88     void logSetDoesntUntap(Player *player, CardItem *card, bool doesntUntap);
89     void logSetPT(Player *player, CardItem *card, QString newPT);
90     void logSetSideboardLock(Player *player, bool locked);
91     void logSetTapped(Player *player, CardItem *card, bool tapped);
92     void logShuffle(Player *player, CardZone *zone, int start, int end);
93     void
94     logSpectatorSay(QString spectatorName, UserLevelFlags spectatorUserLevel, QString userPrivLevel, QString message);
95     void logStopDumpZone(Player *player, CardZone *zone);
96     void logUnattachCard(Player *player, QString cardName);
97     void logUndoDraw(Player *player, QString cardName);
98     void setContextJudgeName(QString player);
99     void appendHtmlServerMessage(const QString &html,
100                                  bool optionalIsBold = false,
101                                  QString optionalFontColor = QString()) override;
102 
103 public:
104     void connectToPlayer(Player *player);
105     MessageLogWidget(const TabSupervisor *_tabSupervisor,
106                      const UserlistProxy *_userlistProxy,
107                      TabGame *_game,
108                      QWidget *parent = nullptr);
109 };
110 
111 #endif
112