Commit adbb6077 authored by Max-Wilhelm Bruker's avatar Max-Wilhelm Bruker
Browse files

Revealing a library to a player now grants that player permission to drag...

Revealing a library to a player now grants that player permission to drag cards out of that library onto his own table. This permission is revoked by shuffling the library. The zone view window tracks content changes of the zone for as long as the permission lasts so that card ID changes are kept track of. This hopefully fixes issues #5 and #12.
parent 2ce18a82
...@@ -31,6 +31,7 @@ signals: ...@@ -31,6 +31,7 @@ signals:
void hovered(AbstractCardItem *card); void hovered(AbstractCardItem *card);
void showCardInfoPopup(QPoint pos, QString cardName); void showCardInfoPopup(QPoint pos, QString cardName);
void deleteCardInfoPopup(QString cardName); void deleteCardInfoPopup(QString cardName);
void updateCardMenu(AbstractCardItem *card, QMenu *cardMenu, QMenu *ptMenu, QMenu *moveMenu);
public: public:
enum { Type = typeCard }; enum { Type = typeCard };
int type() const { return Type; } int type() const { return Type; }
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include "carddragitem.h" #include "carddragitem.h"
#include "carddatabase.h" #include "carddatabase.h"
#include "cardzone.h" #include "cardzone.h"
#include "zoneviewzone.h"
#include "tablezone.h" #include "tablezone.h"
#include "player.h" #include "player.h"
#include "arrowitem.h" #include "arrowitem.h"
...@@ -26,7 +27,7 @@ CardItem::CardItem(Player *_owner, const QString &_name, int _cardid, bool _reve ...@@ -26,7 +27,7 @@ CardItem::CardItem(Player *_owner, const QString &_name, int _cardid, bool _reve
moveMenu = new QMenu; moveMenu = new QMenu;
retranslateUi(); retranslateUi();
owner->updateCardMenu(this, cardMenu, ptMenu, moveMenu); emit updateCardMenu(this, cardMenu, ptMenu, moveMenu);
} }
CardItem::~CardItem() CardItem::~CardItem()
...@@ -45,7 +46,7 @@ void CardItem::prepareDelete() ...@@ -45,7 +46,7 @@ void CardItem::prepareDelete()
if (owner) { if (owner) {
if (owner->getCardMenu() == cardMenu) { if (owner->getCardMenu() == cardMenu) {
owner->setCardMenu(0); owner->setCardMenu(0);
owner->setActiveCard(0); owner->getGame()->setActiveCard(0);
} }
owner = 0; owner = 0;
} }
...@@ -70,7 +71,7 @@ void CardItem::deleteLater() ...@@ -70,7 +71,7 @@ void CardItem::deleteLater()
void CardItem::setZone(CardZone *_zone) void CardItem::setZone(CardZone *_zone)
{ {
zone = _zone; zone = _zone;
owner->updateCardMenu(this, cardMenu, ptMenu, moveMenu); emit updateCardMenu(this, cardMenu, ptMenu, moveMenu);
} }
void CardItem::retranslateUi() void CardItem::retranslateUi()
...@@ -183,7 +184,7 @@ void CardItem::setAttachedTo(CardItem *_attachedTo) ...@@ -183,7 +184,7 @@ void CardItem::setAttachedTo(CardItem *_attachedTo)
if (zone) if (zone)
zone->reorganizeCards(); zone->reorganizeCards();
owner->updateCardMenu(this, cardMenu, ptMenu, moveMenu); emit updateCardMenu(this, cardMenu, ptMenu, moveMenu);
} }
void CardItem::resetState() void CardItem::resetState()
...@@ -283,7 +284,11 @@ void CardItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) ...@@ -283,7 +284,11 @@ void CardItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
} else if (event->buttons().testFlag(Qt::LeftButton)) { } else if (event->buttons().testFlag(Qt::LeftButton)) {
if ((event->screenPos() - event->buttonDownScreenPos(Qt::LeftButton)).manhattanLength() < 2 * QApplication::startDragDistance()) if ((event->screenPos() - event->buttonDownScreenPos(Qt::LeftButton)).manhattanLength() < 2 * QApplication::startDragDistance())
return; return;
if (!owner->getLocal()) if (zone->getIsView()) {
const ZoneViewZone *const view = static_cast<const ZoneViewZone *const>(zone);
if (view->getRevealZone() && !view->getWriteableRevealZone())
return;
} else if (!owner->getLocal())
return; return;
bool forceFaceDown = event->modifiers().testFlag(Qt::ShiftModifier); bool forceFaceDown = event->modifiers().testFlag(Qt::ShiftModifier);
...@@ -332,7 +337,14 @@ void CardItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) ...@@ -332,7 +337,14 @@ void CardItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
cardMenu->exec(event->screenPos()); cardMenu->exec(event->screenPos());
} else if ((event->button() == Qt::LeftButton) && !settingsCache->getDoubleClickToPlay()) { } else if ((event->button() == Qt::LeftButton) && !settingsCache->getDoubleClickToPlay()) {
setCursor(Qt::OpenHandCursor); setCursor(Qt::OpenHandCursor);
if (revealedCard)
bool hideCard = false;
if (zone->getIsView()) {
ZoneViewZone *view = static_cast<ZoneViewZone *>(zone);
if (view->getRevealZone() && !view->getWriteableRevealZone())
hideCard = true;
}
if (hideCard)
zone->removeCard(this); zone->removeCard(this);
else else
playCard(event->modifiers().testFlag(Qt::ShiftModifier)); playCard(event->modifiers().testFlag(Qt::ShiftModifier));
...@@ -374,10 +386,10 @@ QVariant CardItem::itemChange(GraphicsItemChange change, const QVariant &value) ...@@ -374,10 +386,10 @@ QVariant CardItem::itemChange(GraphicsItemChange change, const QVariant &value)
if ((change == ItemSelectedHasChanged) && owner) { if ((change == ItemSelectedHasChanged) && owner) {
if (value == true) { if (value == true) {
owner->setCardMenu(cardMenu); owner->setCardMenu(cardMenu);
owner->setActiveCard(this); owner->getGame()->setActiveCard(this);
} else if (owner->getCardMenu() == cardMenu) { } else if (owner->getCardMenu() == cardMenu) {
owner->setCardMenu(0); owner->setCardMenu(0);
owner->setActiveCard(0); owner->getGame()->setActiveCard(0);
} }
} }
return QGraphicsItem::itemChange(change, value); return QGraphicsItem::itemChange(change, value);
......
...@@ -74,7 +74,6 @@ public: ...@@ -74,7 +74,6 @@ public:
const QList<CardItem *> &getAttachedCards() const { return attachedCards; } const QList<CardItem *> &getAttachedCards() const { return attachedCards; }
void resetState(); void resetState();
void processCardInfo(const ServerInfo_Card &info); void processCardInfo(const ServerInfo_Card &info);
void updateCardMenu();
bool animationEvent(); bool animationEvent();
CardDragItem *createDragItem(int _id, const QPointF &_pos, const QPointF &_scenePos, bool faceDown); CardDragItem *createDragItem(int _id, const QPointF &_pos, const QPointF &_scenePos, bool faceDown);
......
...@@ -9,8 +9,8 @@ ...@@ -9,8 +9,8 @@
#include "pb/command_move_card.pb.h" #include "pb/command_move_card.pb.h"
#include "pb/serverinfo_user.pb.h" #include "pb/serverinfo_user.pb.h"
CardZone::CardZone(Player *_p, const QString &_name, bool _hasCardAttr, bool _isShufflable, bool _contentsKnown, QGraphicsItem *parent, bool isView) CardZone::CardZone(Player *_p, const QString &_name, bool _hasCardAttr, bool _isShufflable, bool _contentsKnown, QGraphicsItem *parent, bool _isView)
: AbstractGraphicsItem(parent), player(_p), name(_name), cards(_contentsKnown), view(NULL), menu(NULL), doubleClickAction(0), hasCardAttr(_hasCardAttr), isShufflable(_isShufflable) : AbstractGraphicsItem(parent), player(_p), name(_name), cards(_contentsKnown), view(NULL), menu(NULL), doubleClickAction(0), hasCardAttr(_hasCardAttr), isShufflable(_isShufflable), isView(_isView)
{ {
if (!isView) if (!isView)
player->addZone(this); player->addZone(this);
......
...@@ -24,6 +24,7 @@ protected: ...@@ -24,6 +24,7 @@ protected:
QAction *doubleClickAction; QAction *doubleClickAction;
bool hasCardAttr; bool hasCardAttr;
bool isShufflable; bool isShufflable;
bool isView;
void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event); void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event);
void mousePressEvent(QGraphicsSceneMouseEvent *event); void mousePressEvent(QGraphicsSceneMouseEvent *event);
virtual void addCardImpl(CardItem *card, int x, int y) = 0; virtual void addCardImpl(CardItem *card, int x, int y) = 0;
...@@ -36,7 +37,7 @@ public: ...@@ -36,7 +37,7 @@ public:
enum { Type = typeZone }; enum { Type = typeZone };
int type() const { return Type; } int type() const { return Type; }
virtual void handleDropEvent(const QList<CardDragItem *> &dragItem, CardZone *startZone, const QPoint &dropPoint) = 0; virtual void handleDropEvent(const QList<CardDragItem *> &dragItem, CardZone *startZone, const QPoint &dropPoint) = 0;
CardZone(Player *_player, const QString &_name, bool _hasCardAttr, bool _isShufflable, bool _contentsKnown, QGraphicsItem *parent = 0, bool isView = false); CardZone(Player *_player, const QString &_name, bool _hasCardAttr, bool _isShufflable, bool _contentsKnown, QGraphicsItem *parent = 0, bool _isView = false);
~CardZone(); ~CardZone();
void retranslateUi(); void retranslateUi();
void clearContents(); void clearContents();
...@@ -59,6 +60,7 @@ public: ...@@ -59,6 +60,7 @@ public:
void setView(ZoneViewZone *_view) { view = _view; } void setView(ZoneViewZone *_view) { view = _view; }
virtual void reorganizeCards() = 0; virtual void reorganizeCards() = 0;
virtual QPointF closestGridPoint(const QPointF &point); virtual QPointF closestGridPoint(const QPointF &point);
bool getIsView() const { return isView; }
}; };
#endif #endif
...@@ -128,9 +128,9 @@ void GameScene::toggleZoneView(Player *player, const QString &zoneName, int numb ...@@ -128,9 +128,9 @@ void GameScene::toggleZoneView(Player *player, const QString &zoneName, int numb
item->setPos(50, 50); item->setPos(50, 50);
} }
void GameScene::addRevealedZoneView(Player *player, CardZone *zone, const QList<const ServerInfo_Card *> &cardList) void GameScene::addRevealedZoneView(Player *player, CardZone *zone, const QList<const ServerInfo_Card *> &cardList, bool withWritePermission)
{ {
ZoneViewWidget *item = new ZoneViewWidget(player, zone, -2, true, cardList); ZoneViewWidget *item = new ZoneViewWidget(player, zone, -2, true, withWritePermission, cardList);
zoneViews.append(item); zoneViews.append(item);
connect(item, SIGNAL(closePressed(ZoneViewWidget *)), this, SLOT(removeZoneView(ZoneViewWidget *))); connect(item, SIGNAL(closePressed(ZoneViewWidget *)), this, SLOT(removeZoneView(ZoneViewWidget *)));
addItem(item); addItem(item);
......
...@@ -45,7 +45,7 @@ public: ...@@ -45,7 +45,7 @@ public:
void unregisterAnimationItem(AbstractCardItem *card); void unregisterAnimationItem(AbstractCardItem *card);
public slots: public slots:
void toggleZoneView(Player *player, const QString &zoneName, int numberCards); void toggleZoneView(Player *player, const QString &zoneName, int numberCards);
void addRevealedZoneView(Player *player, CardZone *zone, const QList<const ServerInfo_Card *> &cardList); void addRevealedZoneView(Player *player, CardZone *zone, const QList<const ServerInfo_Card *> &cardList, bool withWritePermission);
void removeZoneView(ZoneViewWidget *item); void removeZoneView(ZoneViewWidget *item);
void addPlayer(Player *player); void addPlayer(Player *player);
void removePlayer(Player *player); void removePlayer(Player *player);
......
...@@ -42,6 +42,7 @@ void HandZone::addCardImpl(CardItem *card, int x, int /*y*/) ...@@ -42,6 +42,7 @@ void HandZone::addCardImpl(CardItem *card, int x, int /*y*/)
void HandZone::handleDropEvent(const QList<CardDragItem *> &dragItems, CardZone *startZone, const QPoint &/*dropPoint*/) void HandZone::handleDropEvent(const QList<CardDragItem *> &dragItems, CardZone *startZone, const QPoint &/*dropPoint*/)
{ {
Command_MoveCard cmd; Command_MoveCard cmd;
cmd.set_start_player_id(startZone->getPlayer()->getId());
cmd.set_start_zone(startZone->getName().toStdString()); cmd.set_start_zone(startZone->getName().toStdString());
cmd.set_target_player_id(player->getId()); cmd.set_target_player_id(player->getId());
cmd.set_target_zone(getName().toStdString()); cmd.set_target_zone(getName().toStdString());
......
...@@ -171,7 +171,7 @@ void MessageLogWidget::logUndoDraw(Player *player, QString cardName) ...@@ -171,7 +171,7 @@ void MessageLogWidget::logUndoDraw(Player *player, QString cardName)
appendHtml((isFemale(player) ? tr("%1 undoes her last draw (%2).") : tr("%1 undoes his last draw (%2).")).arg(sanitizeHtml(player->getName())).arg(QString("<font color=\"blue\">%1</font>").arg(sanitizeHtml(cardName)))); appendHtml((isFemale(player) ? tr("%1 undoes her last draw (%2).") : tr("%1 undoes his last draw (%2).")).arg(sanitizeHtml(player->getName())).arg(QString("<font color=\"blue\">%1</font>").arg(sanitizeHtml(cardName))));
} }
QPair<QString, QString> MessageLogWidget::getFromStr(CardZone *zone, QString cardName, int position) const QPair<QString, QString> MessageLogWidget::getFromStr(CardZone *zone, QString cardName, int position, bool ownerChange) const
{ {
bool cardNameContainsStartZone = false; bool cardNameContainsStartZone = false;
QString fromStr; QString fromStr;
...@@ -188,18 +188,36 @@ QPair<QString, QString> MessageLogWidget::getFromStr(CardZone *zone, QString car ...@@ -188,18 +188,36 @@ QPair<QString, QString> MessageLogWidget::getFromStr(CardZone *zone, QString car
else if (startName == "deck") { else if (startName == "deck") {
if (position >= zone->getCards().size() - 1) { if (position >= zone->getCards().size() - 1) {
if (cardName.isEmpty()) { if (cardName.isEmpty()) {
cardName = isFemale(zone->getPlayer()) ? tr("the bottom card of her library") : tr("the bottom card of his library"); if (ownerChange)
cardName = tr("the bottom card of %1's library").arg(zone->getPlayer()->getName());
else
cardName = isFemale(zone->getPlayer()) ? tr("the bottom card of her library") : tr("the bottom card of his library");
cardNameContainsStartZone = true; cardNameContainsStartZone = true;
} else } else {
fromStr = isFemale(zone->getPlayer()) ? tr(" from the bottom of her library") : tr(" from the bottom of his library"); if (ownerChange)
fromStr = tr(" from the bottom of %1's library").arg(zone->getPlayer()->getName());
else
fromStr = isFemale(zone->getPlayer()) ? tr(" from the bottom of her library") : tr(" from the bottom of his library");
}
} else if (position == 0) { } else if (position == 0) {
if (cardName.isEmpty()) { if (cardName.isEmpty()) {
cardName = isFemale(zone->getPlayer()) ? tr("the top card of her library") : tr("the top card of his library"); if (ownerChange)
cardName = tr("the top card of %1's library").arg(zone->getPlayer()->getName());
else
cardName = isFemale(zone->getPlayer()) ? tr("the top card of her library") : tr("the top card of his library");
cardNameContainsStartZone = true; cardNameContainsStartZone = true;
} else } else {
fromStr = isFemale(zone->getPlayer()) ? tr(" from the top of her library") : tr(" from the top of his library"); if (ownerChange)
} else fromStr = tr(" from the top of %1's library").arg(zone->getPlayer()->getName());
fromStr = tr(" from library"); else
fromStr = isFemale(zone->getPlayer()) ? tr(" from the top of her library") : tr(" from the top of his library");
}
} else {
if (ownerChange)
fromStr = tr(" from %1's library").arg(zone->getPlayer()->getName());
else
fromStr = tr(" from library");
}
} else if (startName == "sb") } else if (startName == "sb")
fromStr = tr(" from sideboard"); fromStr = tr(" from sideboard");
else if (startName == "stack") else if (startName == "stack")
...@@ -212,12 +230,13 @@ QPair<QString, QString> MessageLogWidget::getFromStr(CardZone *zone, QString car ...@@ -212,12 +230,13 @@ QPair<QString, QString> MessageLogWidget::getFromStr(CardZone *zone, QString car
void MessageLogWidget::doMoveCard(LogMoveCard &attributes) void MessageLogWidget::doMoveCard(LogMoveCard &attributes)
{ {
bool ownerChange = attributes.startZone->getPlayer() != attributes.targetZone->getPlayer();
QString startName = attributes.startZone->getName(); QString startName = attributes.startZone->getName();
QString targetName = attributes.targetZone->getName(); QString targetName = attributes.targetZone->getName();
if (((startName == "table") && (targetName == "table") && (attributes.startZone == attributes.targetZone)) || ((startName == "hand") && (targetName == "hand"))) if (((startName == "table") && (targetName == "table") && (attributes.startZone == attributes.targetZone)) || ((startName == "hand") && (targetName == "hand")))
return; return;
QString cardName = attributes.cardName; QString cardName = attributes.cardName;
QPair<QString, QString> temp = getFromStr(attributes.startZone, cardName, attributes.oldX); QPair<QString, QString> temp = getFromStr(attributes.startZone, cardName, attributes.oldX, ownerChange);
bool cardNameContainsStartZone = false; bool cardNameContainsStartZone = false;
if (!temp.first.isEmpty()) { if (!temp.first.isEmpty()) {
cardNameContainsStartZone = true; cardNameContainsStartZone = true;
...@@ -231,8 +250,8 @@ void MessageLogWidget::doMoveCard(LogMoveCard &attributes) ...@@ -231,8 +250,8 @@ void MessageLogWidget::doMoveCard(LogMoveCard &attributes)
cardStr = tr("a card"); cardStr = tr("a card");
else else
cardStr = QString("<font color=\"blue\">%1</font>").arg(sanitizeHtml(cardName)); cardStr = QString("<font color=\"blue\">%1</font>").arg(sanitizeHtml(cardName));
if (attributes.startZone->getPlayer() != attributes.targetZone->getPlayer()) { if (ownerChange && (attributes.startZone->getPlayer() == attributes.player)) {
appendHtml(tr("%1 gives %2 control over %3.").arg(sanitizeHtml(attributes.player->getName())).arg(sanitizeHtml(attributes.targetZone->getPlayer()->getName())).arg(cardStr)); appendHtml(tr("%1 gives %2 control over %3.").arg(sanitizeHtml(attributes.player->getName())).arg(sanitizeHtml(attributes.targetZone->getPlayer()->getName())).arg(cardStr));
return; return;
} }
...@@ -627,7 +646,7 @@ void MessageLogWidget::logStopDumpZone(Player *player, CardZone *zone) ...@@ -627,7 +646,7 @@ void MessageLogWidget::logStopDumpZone(Player *player, CardZone *zone)
void MessageLogWidget::logRevealCards(Player *player, CardZone *zone, int cardId, QString cardName, Player *otherPlayer) void MessageLogWidget::logRevealCards(Player *player, CardZone *zone, int cardId, QString cardName, Player *otherPlayer)
{ {
QPair<QString, QString> temp = getFromStr(zone, cardName, cardId); QPair<QString, QString> temp = getFromStr(zone, cardName, cardId, false);
bool cardNameContainsStartZone = false; bool cardNameContainsStartZone = false;
if (!temp.first.isEmpty()) { if (!temp.first.isEmpty()) {
cardNameContainsStartZone = true; cardNameContainsStartZone = true;
......
...@@ -28,7 +28,7 @@ private: ...@@ -28,7 +28,7 @@ private:
QString sanitizeHtml(QString dirty) const; QString sanitizeHtml(QString dirty) const;
bool isFemale(Player *player) const; bool isFemale(Player *player) const;
QPair<QString, QString> getFromStr(CardZone *zone, QString cardName, int position) const; QPair<QString, QString> getFromStr(CardZone *zone, QString cardName, int position, bool ownerChange) const;
MessageContext currentContext; MessageContext currentContext;
bool female; bool female;
......
...@@ -53,6 +53,7 @@ void PileZone::addCardImpl(CardItem *card, int x, int /*y*/) ...@@ -53,6 +53,7 @@ void PileZone::addCardImpl(CardItem *card, int x, int /*y*/)
void PileZone::handleDropEvent(const QList<CardDragItem *> &dragItems, CardZone *startZone, const QPoint &/*dropPoint*/) void PileZone::handleDropEvent(const QList<CardDragItem *> &dragItems, CardZone *startZone, const QPoint &/*dropPoint*/)
{ {
Command_MoveCard cmd; Command_MoveCard cmd;
cmd.set_start_player_id(startZone->getPlayer()->getId());
cmd.set_start_zone(startZone->getName().toStdString()); cmd.set_start_zone(startZone->getName().toStdString());
cmd.set_target_player_id(player->getId()); cmd.set_target_player_id(player->getId());
cmd.set_target_zone(getName().toStdString()); cmd.set_target_zone(getName().toStdString());
......
...@@ -93,7 +93,7 @@ void PlayerArea::setSize(qreal width, qreal height) ...@@ -93,7 +93,7 @@ void PlayerArea::setSize(qreal width, qreal height)
} }
Player::Player(const ServerInfo_User &info, int _id, bool _local, TabGame *_parent) Player::Player(const ServerInfo_User &info, int _id, bool _local, TabGame *_parent)
: QObject(_parent), activeCard(0), shortcutsActive(false), defaultNumberTopCards(3), lastTokenDestroy(true), id(_id), active(false), local(_local), mirrored(false), handVisible(false), conceded(false), dialogSemaphore(false) : QObject(_parent), game(_parent), shortcutsActive(false), defaultNumberTopCards(3), lastTokenDestroy(true), id(_id), active(false), local(_local), mirrored(false), handVisible(false), conceded(false), dialogSemaphore(false)
{ {
userInfo = new ServerInfo_User; userInfo = new ServerInfo_User;
userInfo->CopyFrom(info); userInfo->CopyFrom(info);
...@@ -392,7 +392,7 @@ Player::Player(const ServerInfo_User &info, int _id, bool _local, TabGame *_pare ...@@ -392,7 +392,7 @@ Player::Player(const ServerInfo_User &info, int _id, bool _local, TabGame *_pare
connect(tempSetCounter, SIGNAL(triggered()), this, SLOT(actCardCounterTrigger())); connect(tempSetCounter, SIGNAL(triggered()), this, SLOT(actCardCounterTrigger()));
} }
const QList<Player *> &players = _parent->getPlayers().values(); const QList<Player *> &players = game->getPlayers().values();
for (int i = 0; i < players.size(); ++i) for (int i = 0; i < players.size(); ++i)
addPlayer(players[i]); addPlayer(players[i]);
...@@ -460,9 +460,10 @@ void Player::playerListActionTriggered() ...@@ -460,9 +460,10 @@ void Player::playerListActionTriggered()
if (otherPlayerId != -1) if (otherPlayerId != -1)
cmd.set_player_id(otherPlayerId); cmd.set_player_id(otherPlayerId);
if (menu == mRevealLibrary) if (menu == mRevealLibrary) {
cmd.set_zone_name("deck"); cmd.set_zone_name("deck");
else if (menu == mRevealTopCard) { cmd.set_grant_write_access(true);
} else if (menu == mRevealTopCard) {
cmd.set_zone_name("deck"); cmd.set_zone_name("deck");
cmd.set_card_id(0); cmd.set_card_id(0);
} else if (menu == mRevealHand) } else if (menu == mRevealHand)
...@@ -937,6 +938,9 @@ void Player::eventShuffle(const Event_Shuffle &event) ...@@ -937,6 +938,9 @@ void Player::eventShuffle(const Event_Shuffle &event)
CardZone *zone = zones.value(QString::fromStdString(event.zone_name())); CardZone *zone = zones.value(QString::fromStdString(event.zone_name()));
if (!zone) if (!zone)
return; return;
if (zone->getView())
if (zone->getView()->getRevealZone())
zone->getView()->setWriteableRevealZone(false);
emit logShuffle(this, zone); emit logShuffle(this, zone);
} }
...@@ -1040,7 +1044,7 @@ void Player::eventDelCounter(const Event_DelCounter &event) ...@@ -1040,7 +1044,7 @@ void Player::eventDelCounter(const Event_DelCounter &event)
void Player::eventDumpZone(const Event_DumpZone &event) void Player::eventDumpZone(const Event_DumpZone &event)
{ {
Player *zoneOwner = static_cast<TabGame *>(parent())->getPlayers().value(event.zone_owner_id(), 0); Player *zoneOwner = game->getPlayers().value(event.zone_owner_id(), 0);
if (!zoneOwner) if (!zoneOwner)
return; return;
CardZone *zone = zoneOwner->getZones().value(QString::fromStdString(event.zone_name()), 0); CardZone *zone = zoneOwner->getZones().value(QString::fromStdString(event.zone_name()), 0);
...@@ -1051,7 +1055,7 @@ void Player::eventDumpZone(const Event_DumpZone &event) ...@@ -1051,7 +1055,7 @@ void Player::eventDumpZone(const Event_DumpZone &event)
void Player::eventStopDumpZone(const Event_StopDumpZone &event) void Player::eventStopDumpZone(const Event_StopDumpZone &event)
{ {
Player *zoneOwner = static_cast<TabGame *>(parent())->getPlayers().value(event.zone_owner_id(), 0); Player *zoneOwner = game->getPlayers().value(event.zone_owner_id(), 0);
if (!zoneOwner) if (!zoneOwner)
return; return;
CardZone *zone = zoneOwner->getZones().value(QString::fromStdString(event.zone_name()), 0); CardZone *zone = zoneOwner->getZones().value(QString::fromStdString(event.zone_name()), 0);
...@@ -1062,8 +1066,11 @@ void Player::eventStopDumpZone(const Event_StopDumpZone &event) ...@@ -1062,8 +1066,11 @@ void Player::eventStopDumpZone(const Event_StopDumpZone &event)
void Player::eventMoveCard(const Event_MoveCard &event, const GameEventContext &context) void Player::eventMoveCard(const Event_MoveCard &event, const GameEventContext &context)
{ {
CardZone *startZone = zones.value(QString::fromStdString(event.start_zone()), 0); Player *startPlayer = game->getPlayers().value(event.start_player_id());
Player *targetPlayer = static_cast<TabGame *>(parent())->getPlayers().value(event.target_player_id()); if (!startPlayer)
return;
CardZone *startZone = startPlayer->getZones().value(QString::fromStdString(event.start_zone()), 0);
Player *targetPlayer = game->getPlayers().value(event.target_player_id());
if (!targetPlayer) if (!targetPlayer)
return; return;
CardZone *targetZone; CardZone *targetZone;
...@@ -1122,7 +1129,7 @@ void Player::eventMoveCard(const Event_MoveCard &event, const GameEventContext & ...@@ -1122,7 +1129,7 @@ void Player::eventMoveCard(const Event_MoveCard &event, const GameEventContext &
// Look at all arrows from and to the card. // Look at all arrows from and to the card.
// If the card was moved to another zone, delete the arrows, otherwise update them. // If the card was moved to another zone, delete the arrows, otherwise update them.
QMapIterator<int, Player *> playerIterator(static_cast<TabGame *>(parent())->getPlayers()); QMapIterator<int, Player *> playerIterator(game->getPlayers());
while (playerIterator.hasNext()) { while (playerIterator.hasNext()) {
Player *p = playerIterator.next().value(); Player *p = playerIterator.next().value();
...@@ -1176,7 +1183,7 @@ void Player::eventDestroyCard(const Event_DestroyCard &event) ...@@ -1176,7 +1183,7 @@ void Player::eventDestroyCard(const Event_DestroyCard &event)
void Player::eventAttachCard(const Event_AttachCard &event) void Player::eventAttachCard(const Event_AttachCard &event)
{ {
const QMap<int, Player *> &playerList = static_cast<TabGame *>(parent())->getPlayers(); const QMap<int, Player *> &playerList = game->getPlayers();
Player *targetPlayer = 0; Player *targetPlayer = 0;
CardZone *targetZone = 0; CardZone *targetZone = 0;
CardItem *targetCard = 0; CardItem *targetCard = 0;
...@@ -1244,7 +1251,7 @@ void Player::eventRevealCards(const Event_RevealCards &event) ...@@ -1244,7 +1251,7 @@ void Player::eventRevealCards(const Event_RevealCards &event)
return; return;
Player *otherPlayer = 0; Player *otherPlayer = 0;
if (event.has_other_player_id()) { if (event.has_other_player_id()) {
otherPlayer = static_cast<TabGame *>(parent())->getPlayers().value(event.other_player_id()); otherPlayer = game->getPlayers().value(event.other_player_id());
if (!otherPlayer) if (!otherPlayer)
return; return;
} }
...@@ -1256,7 +1263,7 @@ void Player::eventRevealCards(const Event_RevealCards &event) ...@@ -1256,7 +1263,7 @@ void Player::eventRevealCards(const Event_RevealCards &event)
cardList.append(temp); cardList.append(temp);
} }
if (!cardList.isEmpty()) if (!cardList.isEmpty())
static_cast<GameScene *>(scene())->addRevealedZoneView(this, zone, cardList); static_cast<GameScene *>(scene())->addRevealedZoneView(this, zone, cardList, event.grant_write_access());
QString cardName; QString cardName;
if (cardList.size() == 1) if (cardList.size() == 1)
...@@ -1364,7 +1371,7 @@ void Player::processCardAttachment(const ServerInfo_Player &info) ...@@ -1364,7 +1371,7 @@ void Player::processCardAttachment(const ServerInfo_Player &info)
const ServerInfo_Card &cardInfo = zoneInfo.card_list(j); const ServerInfo_Card &cardInfo = zoneInfo.card_list(j);
if (cardInfo.has_attach_player_id()) { if (cardInfo.has_attach_player_id()) {
CardItem *startCard = zone->getCard(cardInfo.id(), QString()); CardItem *startCard = zone->getCard(cardInfo.id(), QString());
CardItem *targetCard = static_cast<TabGame *>(parent())->getCard(cardInfo.attach_player_id(), QString::fromStdString(cardInfo.attach_zone()), cardInfo.attach_card_id()); CardItem *targetCard = game->getCard(cardInfo.attach_player_id(), QString::fromStdString(cardInfo.attach_zone()), cardInfo.attach_card_id());
if (!targetCard) if (!targetCard)
continue; continue;
...@@ -1377,6 +1384,7 @@ void Player::processCardAttachment(const ServerInfo_Player &info) ...@@ -1377,6 +1384,7 @@ void Player::processCardAttachment(const ServerInfo_Player &info)
void Player::playCard(CardItem *c, bool faceDown, bool tapped) void Player::playCard(CardItem *c, bool faceDown, bool tapped)
{ {
Command_MoveCard cmd; Command_MoveCard cmd;
cmd.set_start_player_id(c->getZone()->getPlayer()->getId());
cmd.set_start_zone(c->getZone()->getName().toStdString()); cmd.set_start_zone(c->getZone()->getName().toStdString());
cmd.set_target_player_id(getId()); cmd.set_target_player_id(getId());
CardToMove *cardToMove = cmd.mutable_cards_to_move()->add_card(); CardToMove *cardToMove = cmd.mutable_cards_to_move()->add_card();
...@@ -1465,7 +1473,7 @@ void Player::clearCounters() ...@@ -1465,7 +1473,7 @@ void Player::clearCounters()
ArrowItem *Player::addArrow(const ServerInfo_Arrow &arrow) ArrowItem *Player::addArrow(const ServerInfo_Arrow &arrow)
{ {
const QMap<int, Player *> &playerList = static_cast<TabGame *>(parent())->getPlayers(); const QMap<int, Player *> &playerList = game->getPlayers();
Player *startPlayer = playerList.value(arrow.start_player_id(), 0); Player *startPlayer = playerList.value(arrow.start_player_id(), 0);
Player *targetPlayer = playerList.value(arrow.target_player_id(), 0); Player *targetPlayer = playerList.value(arrow.target_player_id(), 0);
if (!startPlayer || !targetPlayer) if (!startPlayer || !targetPlayer)
...@@ -1552,22 +1560,22 @@ void Player::rearrangeCounters() ...@@ -1552,22 +1560,22 @@ void Player::rearrangeCounters()
PendingCommand * Player::prepareGameCommand(const google::protobuf::Message &cmd) PendingCommand * Player::prepareGameCommand(const google::protobuf::Message &cmd)
{ {
return static_cast<TabGame *>(parent())->prepareGameCommand(cmd); return game->prepareGameCommand(cmd);
} }
PendingCommand * Player::prepareGameCommand(const QList<const::google::protobuf::Message *> &cmdList) PendingCommand * Player::prepareGameCommand(const QList<const::google::protobuf::Message *> &cmdList)
{ {
return static_cast<TabGame *>(parent())->prepareGameCommand(cmdList); return game->prepareGameCommand(cmdList);
} }
void Player::sendGameCommand(const google::protobuf::Message &command) void Player::sendGameCommand(const google::protobuf::Message &command)
{ {
static_cast<TabGame *>(parent())->sendGameCommand(command, id); game->sendGameCommand(command, id);
} }
void Player::sendGameCommand(PendingCommand *pend) void Player::sendGameCommand(PendingCommand *pend)
{ {
static_cast<TabGame *>(parent())->sendGameCommand(pend, id); game->sendGameCommand(pend, id);
} }
bool Player::clearCardsToDelete() bool Player::clearCardsToDelete()
...@@ -1651,11 +1659,13 @@ void Player::cardMenuAction() ...@@ -1651,11 +1659,13 @@ void Player::cardMenuAction()
ListOfCardsToMove idList; ListOfCardsToMove idList;
for (int i = 0; i < cardList.size(); ++i) for (int i = 0; i < cardList.size(); ++i)
idList.add_card()->set_card_id(cardList[i]->getId()); idList.add_card()->set_card_id(cardList[i]->getId());
int startPlayerId = cardList[0]->getZone()->getPlayer()->getId();
QString startZone = cardList[0]->getZone()->getName(); QString startZone = cardList[0]->getZone()->getName();
switch (a->data().toInt()) { switch (a->data().toInt()) {
case 5: { case 5: {
Command_MoveCard *cmd = new Command_MoveCard; Command_MoveCard *cmd = new Command_MoveCard;
cmd->set_start_player_id(startPlayerId);
cmd->set_start_zone(startZone.toStdString()); cmd->set_start_zone(startZone.toStdString());
cmd->mutable_cards_to_move()->CopyFrom(idList); cmd->mutable_cards_to_move()->CopyFrom(idList);
cmd->set_target_player_id(getId()); cmd->set_target_player_id(getId());
...@@ -1667,6 +1677,7 @@ void Player::cardMenuAction() ...@@ -1667,6 +1677,7 @@ void Player::cardMenuAction()
} }
case 6: { case 6: {
Command_MoveCard *cmd = new Command_MoveCard; Command_MoveCard *cmd = new Command_MoveCard;
cmd->set_start_player_id(startPlayerId);
cmd->set_start_zone(startZone.toStdString()); cmd->set_start_zone(startZone.toStdString());
cmd->mutable_cards_to_move()->CopyFrom(idList); cmd->mutable_cards_to_move()->CopyFrom(idList);
cmd->set_target_player_id(getId()); cmd->set_target_player_id(getId());
...@@ -1678,6 +1689,7 @@ void Player::cardMenuAction() ...@@ -1678,6 +1689,7 @@ void Player::cardMenuAction()
} }
case 7: { case 7: {
Command_MoveCard *cmd = new Command_MoveCard; Command_MoveCard *cmd = new Command_MoveCard;
cmd->set_start_player_id(startPlayerId);
cmd->set_start_zone(startZone.toStdString()); cmd->set_start_zone(startZone.toStdString());
cmd->mutable_cards_to_move()->CopyFrom(idList); cmd->mutable_cards_to_move()->CopyFrom(idList);
cmd->set_target_player_id(getId()); cmd->set_target_player_id(getId());
...@@ -1689,6 +1701,7 @@ void Player::cardMenuAction() ...@@ -1689,6 +1701,7 @@ void Player::cardMenuAction()
} }
case 8: { case 8: {
Command_MoveCard *cmd = new Command_MoveCard; Command_MoveCard *cmd = new Command_MoveCard;
cmd->set_start_player_id(startPlayerId);
cmd->set_start_zone(startZone.toStdString()); cmd->set_start_zone(startZone.toStdString());
cmd->mutable_cards_to_move()->CopyFrom(idList); cmd->mutable_cards_to_move()->CopyFrom(idList);
cmd->set_target_player_id(getId()); cmd->set_target_player_id(getId());
...@@ -1701,7 +1714,7 @@ void Player::cardMenuAction() ...@@ -1701,7 +1714,7 @@ void Player::cardMenuAction()
default: ; default: ;
} }
} }
static_cast<TabGame *>(parent())->sendGameCommand(prepareGameCommand(commandList)); game->sendGameCommand(prepareGameCommand(commandList));
} }
void Player::actIncPT(int deltaP, int deltaT) void Player::actIncPT(int deltaP, int deltaT)
...@@ -1756,7 +1769,7 @@ void Player::actSetPT() ...@@ -1756,7 +1769,7 @@ void Player::actSetPT()
void Player::actDrawArrow() void Player::actDrawArrow()
{ {
activeCard->drawArrow(Qt::red); game->getActiveCard()->drawArrow(Qt::red);
} }
void Player::actIncP() void Player::actIncP()
...@@ -1824,7 +1837,7 @@ void Player::actSetAnnotation() ...@@ -1824,7 +1837,7 @@ void Player::actSetAnnotation()
void Player::actAttach() void Player::actAttach()
{ {
ArrowAttachItem *arrow = new ArrowAttachItem(activeCard); ArrowAttachItem *arrow = new ArrowAttachItem(game->getActiveCard());
scene()->addItem(arrow); scene()->addItem(arrow);
arrow->grabMouse(); arrow->grabMouse();
} }
...@@ -1832,8 +1845,8 @@ void Player::actAttach() ...@@ -1832,8 +1845,8 @@ void Player::actAttach()
void Player::actUnattach() void Player::actUnattach()
{ {
Command_AttachCard cmd; Command_AttachCard cmd;
cmd.set_start_zone(activeCard->getZone()->getName().toStdString()); cmd.set_start_zone(game->getActiveCard()->getZone()->getName().toStdString());
cmd.set_card_id(activeCard->getId()); cmd.set_card_id(game->getActiveCard()->getId());
sendGameCommand(cmd); sendGameCommand(cmd);
} }
...@@ -1903,21 +1916,34 @@ void Player::actCardCounterTrigger() ...@@ -1903,21 +1916,34 @@ void Player::actCardCounterTrigger()
void Player::actPlay() void Player::actPlay()
{ {
activeCard->playCard(false); playCard(game->getActiveCard(), false, game->getActiveCard()->getInfo()->getCipt());
} }
void Player::actHide() void Player::actHide()
{ {
activeCard->getZone()->removeCard(activeCard); game->getActiveCard()->getZone()->removeCard(game->getActiveCard());
} }
void Player::updateCardMenu(CardItem *card, QMenu *cardMenu, QMenu *ptMenu, QMenu *moveMenu) void Player::updateCardMenu(CardItem *card, QMenu *cardMenu, QMenu *ptMenu, QMenu *moveMenu)
{ {
cardMenu->clear(); cardMenu->clear();
if (card->getRevealedCard()) bool revealedCard = false;
bool writeableCard = getLocal();
if (card->getZone())
if (card->getZone()->getIsView()) {
ZoneViewZone *view = static_cast<ZoneViewZone *>(card->getZone());
if (view->getRevealZone()) {
if (view->getWriteableRevealZone())
writeableCard = true;
else
revealedCard = true;
}
}
if (revealedCard)
cardMenu->addAction(aHide); cardMenu->addAction(aHide);
else if (getLocal()) { else if (writeableCard) {
if (moveMenu->isEmpty()) { if (moveMenu->isEmpty()) {
moveMenu->addAction(aMoveToTopLibrary); moveMenu->addAction(aMoveToTopLibrary);
moveMenu->addAction(aMoveToBottomLibrary); moveMenu->addAction(aMoveToBottomLibrary);
......
...@@ -148,6 +148,7 @@ private slots: ...@@ -148,6 +148,7 @@ private slots:
void actHide(); void actHide();
private: private:
TabGame *game;
QMenu *playerMenu, *handMenu, *graveMenu, *rfgMenu, *libraryMenu, *sbMenu, *countersMenu, *sayMenu, QMenu *playerMenu, *handMenu, *graveMenu, *rfgMenu, *libraryMenu, *sbMenu, *countersMenu, *sayMenu,
*mRevealLibrary, *mRevealTopCard, *mRevealHand, *mRevealRandomHandCard; *mRevealLibrary, *mRevealTopCard, *mRevealHand, *mRevealRandomHandCard;
QList<QMenu *> playerLists; QList<QMenu *> playerLists;
...@@ -160,7 +161,6 @@ private: ...@@ -160,7 +161,6 @@ private:
*aDrawCard, *aDrawCards, *aUndoDraw, *aMulligan, *aShuffle, *aDrawCard, *aDrawCards, *aUndoDraw, *aMulligan, *aShuffle,
*aUntapAll, *aRollDie, *aCreateToken, *aCreateAnotherToken, *aUntapAll, *aRollDie, *aCreateToken, *aCreateAnotherToken,
*aCardMenu; *aCardMenu;
CardItem *activeCard;
QList<QAction *> aAddCounter, aSetCounter, aRemoveCounter; QList<QAction *> aAddCounter, aSetCounter, aRemoveCounter;
QAction *aPlay, QAction *aPlay,
...@@ -250,6 +250,7 @@ public: ...@@ -250,6 +250,7 @@ public:
~Player(); ~Player();
void retranslateUi(); void retranslateUi();
void clear(); void clear();
TabGame *getGame() const { return game; }
QMenu *getPlayerMenu() const { return playerMenu; } QMenu *getPlayerMenu() const { return playerMenu; }
int getId() const { return id; } int getId() const { return id; }
QString getName() const; QString getName() const;
...@@ -260,7 +261,6 @@ public: ...@@ -260,7 +261,6 @@ public:
const QMap<int, ArrowItem *> &getArrows() const { return arrows; } const QMap<int, ArrowItem *> &getArrows() const { return arrows; }
void setCardMenu(QMenu *menu); void setCardMenu(QMenu *menu);
QMenu *getCardMenu() const; QMenu *getCardMenu() const;
void setActiveCard(CardItem *card) { activeCard = card; }
void updateCardMenu(CardItem *card, QMenu *cardMenu, QMenu *ptMenu, QMenu *moveMenu); void updateCardMenu(CardItem *card, QMenu *cardMenu, QMenu *ptMenu, QMenu *moveMenu);
bool getActive() const { return active; } bool getActive() const { return active; }
void setActive(bool _active); void setActive(bool _active);
......
...@@ -60,6 +60,7 @@ void StackZone::handleDropEvent(const QList<CardDragItem *> &dragItems, CardZone ...@@ -60,6 +60,7 @@ void StackZone::handleDropEvent(const QList<CardDragItem *> &dragItems, CardZone
return; return;
Command_MoveCard cmd; Command_MoveCard cmd;
cmd.set_start_player_id(startZone->getPlayer()->getId());
cmd.set_start_zone(startZone->getName().toStdString()); cmd.set_start_zone(startZone->getName().toStdString());
cmd.set_target_player_id(player->getId()); cmd.set_target_player_id(player->getId());
cmd.set_target_zone(getName().toStdString()); cmd.set_target_zone(getName().toStdString());
......
...@@ -210,6 +210,7 @@ TabGame::TabGame(GameReplay *_replay) ...@@ -210,6 +210,7 @@ TabGame::TabGame(GameReplay *_replay)
started(false), started(false),
resuming(false), resuming(false),
currentPhase(-1), currentPhase(-1),
activeCard(0),
replay(_replay), replay(_replay),
currentReplayStep(0) currentReplayStep(0)
{ {
...@@ -355,6 +356,7 @@ TabGame::TabGame(TabSupervisor *_tabSupervisor, QList<AbstractClient *> &_client ...@@ -355,6 +356,7 @@ TabGame::TabGame(TabSupervisor *_tabSupervisor, QList<AbstractClient *> &_client
started(false), started(false),
resuming(event.resuming()), resuming(event.resuming()),
currentPhase(-1), currentPhase(-1),
activeCard(0),
replay(0) replay(0)
{ {
gameTimer = new QTimer(this); gameTimer = new QTimer(this);
...@@ -1063,6 +1065,7 @@ void TabGame::newCardAdded(AbstractCardItem *card) ...@@ -1063,6 +1065,7 @@ void TabGame::newCardAdded(AbstractCardItem *card)
connect(card, SIGNAL(hovered(AbstractCardItem *)), cardInfo, SLOT(setCard(AbstractCardItem *))); connect(card, SIGNAL(hovered(AbstractCardItem *)), cardInfo, SLOT(setCard(AbstractCardItem *)));
connect(card, SIGNAL(showCardInfoPopup(QPoint, QString)), this, SLOT(showCardInfoPopup(QPoint, QString))); connect(card, SIGNAL(showCardInfoPopup(QPoint, QString)), this, SLOT(showCardInfoPopup(QPoint, QString)));
connect(card, SIGNAL(deleteCardInfoPopup(QString)), this, SLOT(deleteCardInfoPopup(QString))); connect(card, SIGNAL(deleteCardInfoPopup(QString)), this, SLOT(deleteCardInfoPopup(QString)));
connect(card, SIGNAL(updateCardMenu(AbstractCardItem*,QMenu*,QMenu*,QMenu*)), this, SLOT(updateCardMenu(AbstractCardItem*,QMenu*,QMenu*,QMenu*)));
} }
CardItem *TabGame::getCard(int playerId, const QString &zoneName, int cardId) const CardItem *TabGame::getCard(int playerId, const QString &zoneName, int cardId) const
...@@ -1102,3 +1105,16 @@ Player *TabGame::getActiveLocalPlayer() const ...@@ -1102,3 +1105,16 @@ Player *TabGame::getActiveLocalPlayer() const
return 0; return 0;
} }
#include <QDebug>
void TabGame::updateCardMenu(AbstractCardItem *card, QMenu *cardMenu, QMenu *ptMenu, QMenu *moveMenu)
{
Player *p;
if ((clients.size() > 1) || !players.contains(localPlayerId)) {
qDebug("BUG");
p = card->getOwner();
} else {
p = players.value(localPlayerId);
qDebug() << "GEFUNDEN" << localPlayerId << p->getName();
}
p->updateCardMenu(static_cast<CardItem *>(card), cardMenu, ptMenu, moveMenu);
}
...@@ -110,6 +110,7 @@ private: ...@@ -110,6 +110,7 @@ private:
QStringList phasesList; QStringList phasesList;
int currentPhase; int currentPhase;
int activePlayer; int activePlayer;
CardItem *activeCard;
// Replay related members // Replay related members
GameReplay *replay; GameReplay *replay;
...@@ -177,6 +178,7 @@ private slots: ...@@ -177,6 +178,7 @@ private slots:
void incrementGameTime(); void incrementGameTime();
void adminLockChanged(bool lock); void adminLockChanged(bool lock);
void newCardAdded(AbstractCardItem *card); void newCardAdded(AbstractCardItem *card);
void updateCardMenu(AbstractCardItem *card, QMenu *cardMenu, QMenu *ptMenu, QMenu *moveMenu);
void actConcede(); void actConcede();
void actLeaveGame(); void actLeaveGame();
...@@ -201,6 +203,9 @@ public: ...@@ -201,6 +203,9 @@ public:
bool getSpectatorsSeeEverything() const { return spectatorsSeeEverything; } bool getSpectatorsSeeEverything() const { return spectatorsSeeEverything; }
Player *getActiveLocalPlayer() const; Player *getActiveLocalPlayer() const;
AbstractClient *getClientForPlayer(int playerId) const; AbstractClient *getClientForPlayer(int playerId) const;
void setActiveCard(CardItem *_card) { activeCard = _card; }
CardItem *getActiveCard() const { return activeCard; }
void processGameEventContainer(const GameEventContainer &cont, AbstractClient *client); void processGameEventContainer(const GameEventContainer &cont, AbstractClient *client);
PendingCommand *prepareGameCommand(const ::google::protobuf::Message &cmd); PendingCommand *prepareGameCommand(const ::google::protobuf::Message &cmd);
......
...@@ -97,6 +97,7 @@ void TableZone::handleDropEvent(const QList<CardDragItem *> &dragItems, CardZone ...@@ -97,6 +97,7 @@ void TableZone::handleDropEvent(const QList<CardDragItem *> &dragItems, CardZone
void TableZone::handleDropEventByGrid(const QList<CardDragItem *> &dragItems, CardZone *startZone, const QPoint &gridPoint) void TableZone::handleDropEventByGrid(const QList<CardDragItem *> &dragItems, CardZone *startZone, const QPoint &gridPoint)
{ {
Command_MoveCard cmd; Command_MoveCard cmd;
cmd.set_start_player_id(startZone->getPlayer()->getId());
cmd.set_start_zone(startZone->getName().toStdString()); cmd.set_start_zone(startZone->getName().toStdString());
cmd.set_target_player_id(player->getId()); cmd.set_target_player_id(player->getId());
cmd.set_target_zone(getName().toStdString()); cmd.set_target_zone(getName().toStdString());
......
...@@ -55,7 +55,7 @@ void TitleLabel::mouseMoveEvent(QGraphicsSceneMouseEvent *event) ...@@ -55,7 +55,7 @@ void TitleLabel::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
emit mouseMoved(event->scenePos() - buttonDownPos); emit mouseMoved(event->scenePos() - buttonDownPos);
} }
ZoneViewWidget::ZoneViewWidget(Player *_player, CardZone *_origZone, int numberCards, bool _revealZone, const QList<const ServerInfo_Card *> &cardList) ZoneViewWidget::ZoneViewWidget(Player *_player, CardZone *_origZone, int numberCards, bool _revealZone, bool _writeableRevealZone, const QList<const ServerInfo_Card *> &cardList)
: QGraphicsWidget(0, Qt::Tool | Qt::FramelessWindowHint), player(_player) : QGraphicsWidget(0, Qt::Tool | Qt::FramelessWindowHint), player(_player)
{ {
setAcceptHoverEvents(true); setAcceptHoverEvents(true);
...@@ -105,7 +105,7 @@ ZoneViewWidget::ZoneViewWidget(Player *_player, CardZone *_origZone, int numberC ...@@ -105,7 +105,7 @@ ZoneViewWidget::ZoneViewWidget(Player *_player, CardZone *_origZone, int numberC
extraHeight = vbox->sizeHint(Qt::PreferredSize).height(); extraHeight = vbox->sizeHint(Qt::PreferredSize).height();
resize(150, 150); resize(150, 150);
zone = new ZoneViewZone(player, _origZone, numberCards, _revealZone, this); zone = new ZoneViewZone(player, _origZone, numberCards, _revealZone, _writeableRevealZone, this);
vbox->addItem(zone); vbox->addItem(zone);
if (sortByNameCheckBox) { if (sortByNameCheckBox) {
......
...@@ -51,7 +51,7 @@ private slots: ...@@ -51,7 +51,7 @@ private slots:
void zoneDeleted(); void zoneDeleted();
void moveWidget(QPointF scenePos); void moveWidget(QPointF scenePos);
public: public:
ZoneViewWidget(Player *_player, CardZone *_origZone, int numberCards = 0, bool _revealZone = false, const QList<const ServerInfo_Card *> &cardList = QList<const ServerInfo_Card *>()); ZoneViewWidget(Player *_player, CardZone *_origZone, int numberCards = 0, bool _revealZone = false, bool _writeableRevealZone = false, const QList<const ServerInfo_Card *> &cardList = QList<const ServerInfo_Card *>());
ZoneViewZone *getZone() const { return zone; } ZoneViewZone *getZone() const { return zone; }
void retranslateUi(); void retranslateUi();
protected: protected:
......
...@@ -10,10 +10,11 @@ ...@@ -10,10 +10,11 @@
#include "pb/response_dump_zone.pb.h" #include "pb/response_dump_zone.pb.h"
#include "pending_command.h" #include "pending_command.h"
ZoneViewZone::ZoneViewZone(Player *_p, CardZone *_origZone, int _numberCards, bool _revealZone, QGraphicsItem *parent) ZoneViewZone::ZoneViewZone(Player *_p, CardZone *_origZone, int _numberCards, bool _revealZone, bool _writeableRevealZone, QGraphicsItem *parent)
: SelectZone(_p, _origZone->getName(), false, false, true, parent, true), bRect(QRectF()), minRows(0), numberCards(_numberCards), origZone(_origZone), revealZone(_revealZone), sortByName(false), sortByType(false) : SelectZone(_p, _origZone->getName(), false, false, true, parent, true), bRect(QRectF()), minRows(0), numberCards(_numberCards), origZone(_origZone), revealZone(_revealZone), writeableRevealZone(_writeableRevealZone), sortByName(false), sortByType(false)
{ {
if (!revealZone) qDebug() << "revealZone=" << revealZone << "writeable=" << writeableRevealZone;
if (!(revealZone && !writeableRevealZone))
origZone->setView(this); origZone->setView(this);
} }
...@@ -21,7 +22,7 @@ ZoneViewZone::~ZoneViewZone() ...@@ -21,7 +22,7 @@ ZoneViewZone::~ZoneViewZone()
{ {
emit beingDeleted(); emit beingDeleted();
qDebug("ZoneViewZone destructor"); qDebug("ZoneViewZone destructor");
if (!revealZone) if (!(revealZone && !writeableRevealZone))
origZone->setView(NULL); origZone->setView(NULL);
} }
...@@ -135,6 +136,7 @@ void ZoneViewZone::addCardImpl(CardItem *card, int x, int /*y*/) ...@@ -135,6 +136,7 @@ void ZoneViewZone::addCardImpl(CardItem *card, int x, int /*y*/)
void ZoneViewZone::handleDropEvent(const QList<CardDragItem *> &dragItems, CardZone *startZone, const QPoint &/*dropPoint*/) void ZoneViewZone::handleDropEvent(const QList<CardDragItem *> &dragItems, CardZone *startZone, const QPoint &/*dropPoint*/)
{ {
Command_MoveCard cmd; Command_MoveCard cmd;
cmd.set_start_player_id(startZone->getPlayer()->getId());
cmd.set_start_zone(startZone->getName().toStdString()); cmd.set_start_zone(startZone->getName().toStdString());
cmd.set_target_player_id(player->getId()); cmd.set_target_player_id(player->getId());
cmd.set_target_zone(getName().toStdString()); cmd.set_target_zone(getName().toStdString());
...@@ -168,3 +170,14 @@ QSizeF ZoneViewZone::sizeHint(Qt::SizeHint /*which*/, const QSizeF & /*constrain ...@@ -168,3 +170,14 @@ QSizeF ZoneViewZone::sizeHint(Qt::SizeHint /*which*/, const QSizeF & /*constrain
{ {
return optimumRect.size(); return optimumRect.size();
} }
void ZoneViewZone::setWriteableRevealZone(bool _writeableRevealZone)
{
if (writeableRevealZone && !_writeableRevealZone)
origZone->setView(this);
else if (!writeableRevealZone && _writeableRevealZone)
origZone->setView(NULL);
writeableRevealZone = _writeableRevealZone;
}
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment