diff --git a/cockatrice/src/abstractcarditem.cpp b/cockatrice/src/abstractcarditem.cpp index 020b6dfc..20e7c8e9 100644 --- a/cockatrice/src/abstractcarditem.cpp +++ b/cockatrice/src/abstractcarditem.cpp @@ -26,6 +26,7 @@ AbstractCardItem::AbstractCardItem(const QString &_name, Player *_owner, QGraphi AbstractCardItem::~AbstractCardItem() { qDebug() << "AbstractCardItem destructor:" << name; + emit deleteCardInfoPopup(name); } QRectF AbstractCardItem::boundingRect() const @@ -157,6 +158,10 @@ void AbstractCardItem::paint(QPainter *painter, const QStyleOptionGraphicsItem * void AbstractCardItem::setName(const QString &_name) { + if (name == _name) + return; + + emit deleteCardInfoPopup(name); disconnect(info, 0, this, 0); name = _name; info = db->getCard(name); @@ -213,7 +218,7 @@ void AbstractCardItem::mousePressEvent(QGraphicsSceneMouseEvent *event) void AbstractCardItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { if (event->button() == Qt::MidButton) - emit deleteCardInfoPopup(); + emit deleteCardInfoPopup(name); // This function ensures the parent function doesn't mess around with our selection. event->accept(); diff --git a/cockatrice/src/abstractcarditem.h b/cockatrice/src/abstractcarditem.h index c1345564..e11bdf85 100644 --- a/cockatrice/src/abstractcarditem.h +++ b/cockatrice/src/abstractcarditem.h @@ -30,7 +30,7 @@ private slots: signals: void hovered(AbstractCardItem *card); void showCardInfoPopup(QPoint pos, QString cardName); - void deleteCardInfoPopup(); + void deleteCardInfoPopup(QString cardName); public: enum { Type = typeCard }; int type() const { return Type; } @@ -50,6 +50,7 @@ public: bool getTapped() const { return tapped; } void setTapped(bool _tapped, bool canAnimate = false); void processHoverEvent(); + void deleteCardInfoPopup() { emit deleteCardInfoPopup(name); } protected: QSizeF getTranslatedSize(QPainter *painter) const; void transformPainter(QPainter *painter, const QSizeF &translatedSize, int angle); diff --git a/cockatrice/src/cardinfowidget.cpp b/cockatrice/src/cardinfowidget.cpp index 37b14edf..1ce584b2 100644 --- a/cockatrice/src/cardinfowidget.cpp +++ b/cockatrice/src/cardinfowidget.cpp @@ -172,8 +172,7 @@ void CardInfoWidget::resizeEvent(QResizeEvent * /*event*/) } } -void CardInfoWidget::mouseReleaseEvent(QMouseEvent *event) +QString CardInfoWidget::getCardName() const { - if ((event->button() == Qt::MidButton) && (mode == ModePopUp)) - emit mouseReleased(); -} + return nameLabel2->text(); +} \ No newline at end of file diff --git a/cockatrice/src/cardinfowidget.h b/cockatrice/src/cardinfowidget.h index 819f514b..21ee7ccd 100644 --- a/cockatrice/src/cardinfowidget.h +++ b/cockatrice/src/cardinfowidget.h @@ -39,6 +39,7 @@ private: public: CardInfoWidget(ResizeMode _mode, QWidget *parent = 0, Qt::WindowFlags f = 0); void retranslateUi(); + QString getCardName() const; public slots: void setCard(CardInfo *card); @@ -50,12 +51,8 @@ private slots: void updatePixmap(); void minimizeClicked(int newMinimized); -signals: - void mouseReleased(); - protected: void resizeEvent(QResizeEvent *event); - void mouseReleaseEvent(QMouseEvent *event); }; #endif diff --git a/cockatrice/src/chatview.cpp b/cockatrice/src/chatview.cpp index 700313ee..1b5b1e0f 100644 --- a/cockatrice/src/chatview.cpp +++ b/cockatrice/src/chatview.cpp @@ -15,7 +15,7 @@ ChatView::ChatView(const QString &_ownName, bool _showTimestamps, QWidget *paren connect(this, SIGNAL(anchorClicked(const QUrl &)), this, SLOT(openLink(const QUrl &))); } -void ChatView::appendMessage(QString sender, QString message) +void ChatView::appendMessage(QString sender, QString message, QColor playerColor, bool playerBold) { QTextCursor cursor(document()->lastBlock()); cursor.movePosition(QTextCursor::End); @@ -35,8 +35,14 @@ void ChatView::appendMessage(QString sender, QString message) if (sender == ownName) { senderFormat.setFontWeight(QFont::Bold); senderFormat.setForeground(Qt::red); - } else - senderFormat.setForeground(QColor(0, 0, 254)); + } else { + if (playerColor == QColor()) + senderFormat.setForeground(QColor(0, 0, 254)); + else + senderFormat.setForeground(playerColor); + if (playerBold) + senderFormat.setFontWeight(QFont::Bold); + } cursor.setCharFormat(senderFormat); if (!sender.isEmpty()) sender.append(": "); @@ -156,7 +162,7 @@ void ChatView::mousePressEvent(QMouseEvent *event) void ChatView::mouseReleaseEvent(QMouseEvent *event) { if (event->button() == Qt::MidButton) - emit deleteCardInfoPopup(); + emit deleteCardInfoPopup(QString("_")); QTextBrowser::mouseReleaseEvent(event); } diff --git a/cockatrice/src/chatview.h b/cockatrice/src/chatview.h index c17f2375..5f944532 100644 --- a/cockatrice/src/chatview.h +++ b/cockatrice/src/chatview.h @@ -3,6 +3,7 @@ #include #include +#include class QTextTable; class QMouseEvent; @@ -20,7 +21,7 @@ private slots: void openLink(const QUrl &link); public: ChatView(const QString &_ownName, bool _showTimestamps, QWidget *parent = 0); - void appendMessage(QString sender, QString message); + void appendMessage(QString sender, QString message, QColor playerColor = QColor(), bool playerBold = false); protected: void enterEvent(QEvent *event); void leaveEvent(QEvent *event); @@ -30,7 +31,7 @@ protected: signals: void cardNameHovered(QString cardName); void showCardInfoPopup(QPoint pos, QString cardName); - void deleteCardInfoPopup(); + void deleteCardInfoPopup(QString cardName); }; #endif \ No newline at end of file diff --git a/cockatrice/src/messagelogwidget.cpp b/cockatrice/src/messagelogwidget.cpp index fa69419f..9b5f92bb 100644 --- a/cockatrice/src/messagelogwidget.cpp +++ b/cockatrice/src/messagelogwidget.cpp @@ -139,7 +139,7 @@ void MessageLogWidget::logConnectionStateChanged(Player *player, bool connection void MessageLogWidget::logSay(Player *player, QString message) { - appendMessage(player->getName(), message); + appendMessage(player->getName(), message, QColor(), true); } void MessageLogWidget::logSpectatorSay(QString spectatorName, QString message) diff --git a/cockatrice/src/player.cpp b/cockatrice/src/player.cpp index 6dc53152..fc794bd3 100644 --- a/cockatrice/src/player.cpp +++ b/cockatrice/src/player.cpp @@ -867,6 +867,8 @@ void Player::eventMoveCard(Event_MoveCard *event, GameEventContext *context) CardItem *card = startZone->takeCard(position, event->getCardId(), startZone != targetZone); if (!card) return; + if (startZone != targetZone) + card->deleteCardInfoPopup(); card->setName(event->getCardName()); if (card->getAttachedTo() && (startZone != targetZone)) { diff --git a/cockatrice/src/tab.cpp b/cockatrice/src/tab.cpp index e85d4091..2eed9b54 100644 --- a/cockatrice/src/tab.cpp +++ b/cockatrice/src/tab.cpp @@ -21,10 +21,12 @@ void Tab::showCardInfoPopup(const QPoint &pos, const QString &cardName) infoPopup->show(); } -void Tab::deleteCardInfoPopup() +void Tab::deleteCardInfoPopup(const QString &cardName) { if (infoPopup) { - infoPopup->deleteLater(); - infoPopup = 0; + if ((infoPopup->getCardName() == cardName) || (cardName == "_")) { + infoPopup->deleteLater(); + infoPopup = 0; + } } } diff --git a/cockatrice/src/tab.h b/cockatrice/src/tab.h index ac4b0ea5..3fefde1a 100644 --- a/cockatrice/src/tab.h +++ b/cockatrice/src/tab.h @@ -16,7 +16,7 @@ protected: TabSupervisor *tabSupervisor; protected slots: void showCardInfoPopup(const QPoint &pos, const QString &cardName); - void deleteCardInfoPopup(); + void deleteCardInfoPopup(const QString &cardName); private: bool contentsChanged; CardInfoWidget *infoPopup; diff --git a/cockatrice/src/tab_game.cpp b/cockatrice/src/tab_game.cpp index 04c15c50..2e38baf7 100644 --- a/cockatrice/src/tab_game.cpp +++ b/cockatrice/src/tab_game.cpp @@ -179,7 +179,7 @@ TabGame::TabGame(TabSupervisor *_tabSupervisor, QList &_client messageLog = new MessageLogWidget(_userName); connect(messageLog, SIGNAL(cardNameHovered(QString)), cardInfo, SLOT(setCard(QString))); connect(messageLog, SIGNAL(showCardInfoPopup(QPoint, QString)), this, SLOT(showCardInfoPopup(QPoint, QString))); - connect(messageLog, SIGNAL(deleteCardInfoPopup()), this, SLOT(deleteCardInfoPopup())); + connect(messageLog, SIGNAL(deleteCardInfoPopup(QString)), this, SLOT(deleteCardInfoPopup(QString))); sayLabel = new QLabel; sayEdit = new QLineEdit; sayLabel->setBuddy(sayEdit); @@ -745,7 +745,7 @@ void TabGame::newCardAdded(AbstractCardItem *card) { connect(card, SIGNAL(hovered(AbstractCardItem *)), cardInfo, SLOT(setCard(AbstractCardItem *))); connect(card, SIGNAL(showCardInfoPopup(QPoint, QString)), this, SLOT(showCardInfoPopup(QPoint, QString))); - connect(card, SIGNAL(deleteCardInfoPopup()), this, SLOT(deleteCardInfoPopup())); + connect(card, SIGNAL(deleteCardInfoPopup(QString)), this, SLOT(deleteCardInfoPopup(QString))); } CardItem *TabGame::getCard(int playerId, const QString &zoneName, int cardId) const diff --git a/cockatrice/src/tab_message.cpp b/cockatrice/src/tab_message.cpp index c79fbfee..f4efd7f5 100644 --- a/cockatrice/src/tab_message.cpp +++ b/cockatrice/src/tab_message.cpp @@ -13,7 +13,7 @@ TabMessage::TabMessage(TabSupervisor *_tabSupervisor, AbstractClient *_client, c { chatView = new ChatView(_ownName, true); connect(chatView, SIGNAL(showCardInfoPopup(QPoint, QString)), this, SLOT(showCardInfoPopup(QPoint, QString))); - connect(chatView, SIGNAL(deleteCardInfoPopup()), this, SLOT(deleteCardInfoPopup())); + connect(chatView, SIGNAL(deleteCardInfoPopup(QString)), this, SLOT(deleteCardInfoPopup(QString))); sayEdit = new QLineEdit; connect(sayEdit, SIGNAL(returnPressed()), this, SLOT(sendMessage())); diff --git a/cockatrice/src/tab_room.cpp b/cockatrice/src/tab_room.cpp index 621b4b08..b1d23c93 100644 --- a/cockatrice/src/tab_room.cpp +++ b/cockatrice/src/tab_room.cpp @@ -139,7 +139,7 @@ TabRoom::TabRoom(TabSupervisor *_tabSupervisor, AbstractClient *_client, const Q chatView = new ChatView(ownName, true); connect(chatView, SIGNAL(showCardInfoPopup(QPoint, QString)), this, SLOT(showCardInfoPopup(QPoint, QString))); - connect(chatView, SIGNAL(deleteCardInfoPopup()), this, SLOT(deleteCardInfoPopup())); + connect(chatView, SIGNAL(deleteCardInfoPopup(QString)), this, SLOT(deleteCardInfoPopup(QString))); sayLabel = new QLabel; sayEdit = new QLineEdit; sayLabel->setBuddy(sayEdit);