counters menu

This commit is contained in:
Max-Wilhelm Bruker 2009-09-25 16:50:20 +02:00
parent 7baff1ab62
commit 85319ecc28
6 changed files with 258 additions and 200 deletions

View file

@ -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);
}

View file

@ -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; }

View file

@ -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();
}

View file

@ -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;