mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-06-14 19:18:55 -07:00
counters menu
This commit is contained in:
parent
7baff1ab62
commit
85319ecc28
6 changed files with 258 additions and 200 deletions
|
|
@ -4,10 +4,46 @@
|
|||
#include <QtGui>
|
||||
|
||||
Counter::Counter(Player *_player, int _id, const QString &_name, QColor _color, int _radius, int _value, QGraphicsItem *parent)
|
||||
: QGraphicsItem(parent), id(_id), name(_name), color(_color), radius(_radius), value(_value), player(_player)
|
||||
: QGraphicsItem(parent), player(_player), id(_id), name(_name), color(_color), radius(_radius), value(_value), aDec(0), aInc(0)
|
||||
{
|
||||
if (radius > Player::counterAreaWidth / 2)
|
||||
radius = Player::counterAreaWidth / 2;
|
||||
|
||||
menu = new QMenu(name);
|
||||
aSet = new QAction(this);
|
||||
connect(aSet, SIGNAL(triggered()), this, SLOT(setCounter()));
|
||||
menu->addAction(aSet);
|
||||
menu->addSeparator();
|
||||
for (int i = -10; i <= 10; ++i)
|
||||
if (i == 0)
|
||||
menu->addSeparator();
|
||||
else {
|
||||
QAction *aIncrement = new QAction(QString(i < 0 ? "%1" : "+%1").arg(i), this);
|
||||
if (i == -1)
|
||||
aDec = aIncrement;
|
||||
else if (i == 1)
|
||||
aInc = aIncrement;
|
||||
aIncrement->setData(i);
|
||||
connect(aIncrement, SIGNAL(triggered()), this, SLOT(incrementCounter()));
|
||||
menu->addAction(aIncrement);
|
||||
}
|
||||
|
||||
retranslateUi();
|
||||
}
|
||||
|
||||
Counter::~Counter()
|
||||
{
|
||||
delete menu;
|
||||
}
|
||||
|
||||
void Counter::retranslateUi()
|
||||
{
|
||||
aSet->setText(tr("&Set counter..."));
|
||||
if (name == "life") {
|
||||
aSet->setShortcut(tr("Ctrl+L"));
|
||||
aDec->setShortcut(tr("F11"));
|
||||
aInc->setShortcut(tr("F12"));
|
||||
}
|
||||
}
|
||||
|
||||
QRectF Counter::boundingRect() const
|
||||
|
|
@ -36,8 +72,26 @@ void Counter::setValue(int _value)
|
|||
|
||||
void Counter::mousePressEvent(QGraphicsSceneMouseEvent *event)
|
||||
{
|
||||
if (event->button() == Qt::LeftButton)
|
||||
player->client->incCounter(id, 1);
|
||||
else if (event->button() == Qt::RightButton)
|
||||
if (event->button() == Qt::LeftButton) {
|
||||
player->client->incCounter(id, -1);
|
||||
event->accept();
|
||||
} else if (event->button() == Qt::RightButton) {
|
||||
menu->exec(event->screenPos());
|
||||
event->accept();
|
||||
} else
|
||||
event->ignore();
|
||||
}
|
||||
|
||||
void Counter::incrementCounter()
|
||||
{
|
||||
int delta = static_cast<QAction *>(sender())->data().toInt();
|
||||
player->client->incCounter(id, delta);
|
||||
}
|
||||
|
||||
void Counter::setCounter()
|
||||
{
|
||||
bool ok;
|
||||
int newValue = QInputDialog::getInteger(0, tr("Set counter"), tr("New value for counter '%1':").arg(name), value, 0, 2000000000, 1, &ok);
|
||||
if (ok)
|
||||
player->client->setCounter(id, newValue);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,22 +4,35 @@
|
|||
#include <QGraphicsItem>
|
||||
|
||||
class Player;
|
||||
class QMenu;
|
||||
class QAction;
|
||||
|
||||
class Counter : public QGraphicsItem {
|
||||
class Counter : public QObject, public QGraphicsItem {
|
||||
Q_OBJECT
|
||||
private:
|
||||
Player *player;
|
||||
int id;
|
||||
QString name;
|
||||
QColor color;
|
||||
int radius;
|
||||
int value;
|
||||
|
||||
QAction *aSet, *aDec, *aInc;
|
||||
QMenu *menu;
|
||||
private slots:
|
||||
void incrementCounter();
|
||||
void setCounter();
|
||||
protected:
|
||||
Player *player;
|
||||
void mousePressEvent(QGraphicsSceneMouseEvent *event);
|
||||
public:
|
||||
Counter(Player *_player, int _id, const QString &_name, QColor _color, int _radius, int _value, QGraphicsItem *parent = 0);
|
||||
~Counter();
|
||||
QRectF boundingRect() const;
|
||||
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
|
||||
|
||||
QMenu *getMenu() const { return menu; }
|
||||
void retranslateUi();
|
||||
|
||||
int getId() const { return id; }
|
||||
QString getName() const { return name; }
|
||||
int getValue() const { return value; }
|
||||
|
|
|
|||
|
|
@ -151,13 +151,6 @@ Player::Player(const QString &_name, int _id, bool _local, CardDatabase *_db, Cl
|
|||
aUntapAll = new QAction(this);
|
||||
connect(aUntapAll, SIGNAL(triggered()), this, SLOT(actUntapAll()));
|
||||
|
||||
aDecLife = new QAction(this);
|
||||
connect(aDecLife, SIGNAL(triggered()), this, SLOT(actDecLife()));
|
||||
aIncLife = new QAction(this);
|
||||
connect(aIncLife, SIGNAL(triggered()), this, SLOT(actIncLife()));
|
||||
aSetLife = new QAction(this);
|
||||
connect(aSetLife, SIGNAL(triggered()), this, SLOT(actSetLife()));
|
||||
|
||||
aRollDie = new QAction(this);
|
||||
connect(aRollDie, SIGNAL(triggered()), this, SLOT(actRollDie()));
|
||||
|
||||
|
|
@ -165,11 +158,9 @@ Player::Player(const QString &_name, int _id, bool _local, CardDatabase *_db, Cl
|
|||
connect(aCreateToken, SIGNAL(triggered()), this, SLOT(actCreateToken()));
|
||||
|
||||
playerMenu->addSeparator();
|
||||
playerMenu->addAction(aUntapAll);
|
||||
countersMenu = playerMenu->addMenu(QString());
|
||||
playerMenu->addSeparator();
|
||||
playerMenu->addAction(aDecLife);
|
||||
playerMenu->addAction(aIncLife);
|
||||
playerMenu->addAction(aSetLife);
|
||||
playerMenu->addAction(aUntapAll);
|
||||
playerMenu->addSeparator();
|
||||
playerMenu->addAction(aRollDie);
|
||||
playerMenu->addSeparator();
|
||||
|
|
@ -177,7 +168,6 @@ Player::Player(const QString &_name, int _id, bool _local, CardDatabase *_db, Cl
|
|||
playerMenu->addSeparator();
|
||||
sayMenu = playerMenu->addMenu(QString());
|
||||
initSayMenu();
|
||||
|
||||
} else
|
||||
sbMenu = 0;
|
||||
|
||||
|
|
@ -231,20 +221,19 @@ void Player::retranslateUi()
|
|||
handMenu->setTitle(tr("&Hand"));
|
||||
sbMenu->setTitle(tr("&Sideboard"));
|
||||
libraryMenu->setTitle(tr("&Library"));
|
||||
countersMenu->setTitle(tr("&Counters"));
|
||||
|
||||
aUntapAll->setText(tr("&Untap all permanents"));
|
||||
aUntapAll->setShortcut(tr("Ctrl+U"));
|
||||
aDecLife->setText(tr("&Decrement life"));
|
||||
aDecLife->setShortcut(tr("F11"));
|
||||
aIncLife->setText(tr("&Increment life"));
|
||||
aIncLife->setShortcut(tr("F12"));
|
||||
aSetLife->setText(tr("&Set life"));
|
||||
aSetLife->setShortcut(tr("Ctrl+L"));
|
||||
aRollDie->setText(tr("R&oll die..."));
|
||||
aRollDie->setShortcut(tr("Ctrl+I"));
|
||||
aCreateToken->setText(tr("&Create token..."));
|
||||
aCreateToken->setShortcut(tr("Ctrl+T"));
|
||||
sayMenu->setTitle(tr("S&ay"));
|
||||
|
||||
QMapIterator<int, Counter *> counterIterator(counters);
|
||||
while (counterIterator.hasNext())
|
||||
counterIterator.next().value()->retranslateUi();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -324,26 +313,6 @@ void Player::actUntapAll()
|
|||
client->setCardAttr("table", -1, "tapped", "false");
|
||||
}
|
||||
|
||||
void Player::actIncLife()
|
||||
{
|
||||
// XXX
|
||||
client->incCounter(lifeCounter->getId(), 1);
|
||||
}
|
||||
|
||||
void Player::actDecLife()
|
||||
{
|
||||
// XXX
|
||||
client->incCounter(lifeCounter->getId(), -1);
|
||||
}
|
||||
|
||||
void Player::actSetLife()
|
||||
{
|
||||
bool ok;
|
||||
int life = QInputDialog::getInteger(0, tr("Set life"), tr("New life total:"), lifeCounter->getValue(), 0, 2000000000, 1, &ok);
|
||||
if (ok)
|
||||
client->setCounter(lifeCounter->getId(), life);
|
||||
}
|
||||
|
||||
void Player::actRollDie()
|
||||
{
|
||||
bool ok;
|
||||
|
|
@ -633,9 +602,7 @@ void Player::addCounter(int counterId, const QString &name, QColor color, int ra
|
|||
{
|
||||
Counter *c = new Counter(this, counterId, name, color, radius, value, this);
|
||||
counters.insert(counterId, c);
|
||||
if (name == "life")
|
||||
lifeCounter = c;
|
||||
// XXX
|
||||
countersMenu->addMenu(c->getMenu());
|
||||
rearrangeCounters();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -37,9 +37,6 @@ signals:
|
|||
void sizeChanged();
|
||||
public slots:
|
||||
void actUntapAll();
|
||||
void actIncLife();
|
||||
void actDecLife();
|
||||
void actSetLife();
|
||||
void actRollDie();
|
||||
void actCreateToken();
|
||||
|
||||
|
|
@ -57,11 +54,11 @@ private slots:
|
|||
void actViewRfg();
|
||||
void actViewSideboard();
|
||||
private:
|
||||
QMenu *playerMenu, *handMenu, *graveMenu, *rfgMenu, *libraryMenu, *sbMenu, *sayMenu;
|
||||
QMenu *playerMenu, *handMenu, *graveMenu, *rfgMenu, *libraryMenu, *sbMenu, *countersMenu, *sayMenu;
|
||||
QAction *aMoveToTopLibrary, *aMoveToBottomLibrary, *aMoveToHand, *aMoveToGraveyard, *aMoveToRfg,
|
||||
*aViewLibrary, *aViewTopCards, *aViewGraveyard, *aViewRfg, *aViewSideboard,
|
||||
*aDrawCard, *aDrawCards, *aShuffle,
|
||||
*aUntapAll, *aDecLife, *aIncLife, *aSetLife, *aRollDie, *aCreateToken;
|
||||
*aUntapAll, *aRollDie, *aCreateToken;
|
||||
|
||||
int defaultNumberTopCards;
|
||||
QString name;
|
||||
|
|
@ -80,9 +77,8 @@ private:
|
|||
QRectF bRect;
|
||||
|
||||
QMap<int, Counter *> counters;
|
||||
Counter *lifeCounter;
|
||||
|
||||
void rearrangeCounters();
|
||||
|
||||
void initSayMenu();
|
||||
public:
|
||||
static const int counterAreaWidth = 65;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue