Added MTGO-like card info widget, made original info widget hideable

This commit is contained in:
Max-Wilhelm Bruker 2010-10-13 15:38:32 +02:00
parent d6c00d6529
commit a215b3503a
7 changed files with 77 additions and 24 deletions

View file

@ -5,6 +5,7 @@
#include <QGraphicsSceneMouseEvent> #include <QGraphicsSceneMouseEvent>
#include <math.h> #include <math.h>
#include "carddatabase.h" #include "carddatabase.h"
#include "cardinfowidget.h"
#include "abstractcarditem.h" #include "abstractcarditem.h"
#include "settingscache.h" #include "settingscache.h"
#include "main.h" #include "main.h"
@ -12,7 +13,7 @@
#include <QTimer> #include <QTimer>
AbstractCardItem::AbstractCardItem(const QString &_name, Player *_owner, QGraphicsItem *parent) AbstractCardItem::AbstractCardItem(const QString &_name, Player *_owner, QGraphicsItem *parent)
: ArrowTarget(_owner, parent), info(db->getCard(_name)), name(_name), tapped(false), tapAngle(0) : ArrowTarget(_owner, parent), info(db->getCard(_name)), infoWidget(0), name(_name), tapped(false), tapAngle(0)
{ {
setCursor(Qt::OpenHandCursor); setCursor(Qt::OpenHandCursor);
setFlag(ItemIsSelectable); setFlag(ItemIsSelectable);
@ -180,9 +181,23 @@ void AbstractCardItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
} }
if (event->button() == Qt::LeftButton) if (event->button() == Qt::LeftButton)
setCursor(Qt::ClosedHandCursor); setCursor(Qt::ClosedHandCursor);
else if (event->button() == Qt::MidButton) {
infoWidget = new CardInfoWidget(false, 0, Qt::Widget | Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint | Qt::WindowStaysOnTopHint);
infoWidget->setCard(this);
infoWidget->move(event->screenPos().x() - infoWidget->width() / 2, event->screenPos().y() - infoWidget->height() / 2);
infoWidget->show();
}
event->accept(); event->accept();
} }
void AbstractCardItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
if (infoWidget) {
infoWidget->deleteLater();
infoWidget = 0;
}
}
void AbstractCardItem::processHoverEvent() void AbstractCardItem::processHoverEvent()
{ {
emit hovered(this); emit hovered(this);

View file

@ -4,6 +4,7 @@
#include "arrowtarget.h" #include "arrowtarget.h"
class CardInfo; class CardInfo;
class CardInfoWidget;
class Player; class Player;
class QTimer; class QTimer;
@ -14,6 +15,7 @@ class AbstractCardItem : public QObject, public ArrowTarget {
Q_OBJECT Q_OBJECT
protected: protected:
CardInfo *info; CardInfo *info;
CardInfoWidget *infoWidget;
QString name; QString name;
bool tapped; bool tapped;
int tapAngle; int tapAngle;
@ -42,6 +44,7 @@ public:
void processHoverEvent(); void processHoverEvent();
protected: protected:
void mousePressEvent(QGraphicsSceneMouseEvent *event); void mousePressEvent(QGraphicsSceneMouseEvent *event);
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
void hoverEnterEvent(QGraphicsSceneHoverEvent *event); void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
QVariant itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value); QVariant itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value);
}; };

View file

@ -1,14 +1,23 @@
#include <QGridLayout> #include <QGridLayout>
#include <QLabel> #include <QLabel>
#include <QTextEdit> #include <QTextEdit>
#include <QPushButton>
#include <QStyle>
#include "cardinfowidget.h" #include "cardinfowidget.h"
#include "carditem.h" #include "carditem.h"
#include "carddatabase.h" #include "carddatabase.h"
#include "main.h" #include "main.h"
CardInfoWidget::CardInfoWidget(QWidget *parent) CardInfoWidget::CardInfoWidget(bool showMinimizeButton, QWidget *parent, Qt::WindowFlags flags)
: QFrame(parent), pixmapHeight(pixmapWidth), info(0) : QFrame(parent, flags), pixmapHeight(pixmapWidth), minimized(false), minimizeButton(0), info(0)
{ {
pixmapHeight = pixmapWidth * CARD_HEIGHT / CARD_WIDTH;
if (showMinimizeButton) {
minimizeButton = new QPushButton(QIcon(style()->standardIcon(QStyle::SP_ArrowUp)), QString());
connect(minimizeButton, SIGNAL(clicked()), this, SLOT(minimizeClicked()));
}
cardPicture = new QLabel; cardPicture = new QLabel;
cardPicture->setAlignment(Qt::AlignCenter); cardPicture->setAlignment(Qt::AlignCenter);
@ -40,31 +49,51 @@ CardInfoWidget::CardInfoWidget(QWidget *parent)
textLabel->setFont(f); textLabel->setFont(f);
QGridLayout *grid = new QGridLayout(this); QGridLayout *grid = new QGridLayout(this);
grid->addWidget(cardPicture, 0, 0, 1, 2); int row = 0;
grid->addWidget(nameLabel1, 1, 0); if (showMinimizeButton)
grid->addWidget(nameLabel2, 1, 1); grid->addWidget(minimizeButton, row++, 1, 1, 1, Qt::AlignRight);
grid->addWidget(manacostLabel1, 2, 0); grid->addWidget(cardPicture, row++, 0, 1, 2);
grid->addWidget(manacostLabel2, 2, 1); grid->addWidget(nameLabel1, row, 0);
grid->addWidget(cardtypeLabel1, 3, 0); grid->addWidget(nameLabel2, row++, 1);
grid->addWidget(cardtypeLabel2, 3, 1); grid->addWidget(manacostLabel1, row, 0);
grid->addWidget(powtoughLabel1, 4, 0); grid->addWidget(manacostLabel2, row++, 1);
grid->addWidget(powtoughLabel2, 4, 1); grid->addWidget(cardtypeLabel1, row, 0);
grid->addWidget(textLabel, 5, 0, -1, 2); grid->addWidget(cardtypeLabel2, row++, 1);
grid->setRowStretch(5, 1); grid->addWidget(powtoughLabel1, row, 0);
grid->addWidget(powtoughLabel2, row++, 1);
grid->addWidget(textLabel, row, 0, -1, 2);
grid->setRowStretch(row, 1);
grid->setColumnStretch(1, 1); grid->setColumnStretch(1, 1);
CardInfo *cardBack = db->getCard(); CardInfo *cardBack = db->getCard();
QPixmap *bigPixmap = cardBack->loadPixmap();
if (bigPixmap->isNull())
pixmapHeight = pixmapWidth * CARD_HEIGHT / CARD_WIDTH;
else
pixmapHeight = pixmapWidth * bigPixmap->height() / bigPixmap->width();
setCard(cardBack); setCard(cardBack);
retranslateUi(); retranslateUi();
setFrameStyle(QFrame::Panel | QFrame::Raised); setFrameStyle(QFrame::Panel | QFrame::Raised);
textLabel->setFixedHeight(100); if (showMinimizeButton) {
setFixedSize(sizeHint()); textLabel->setFixedHeight(100);
setFixedWidth(sizeHint().width());
} else
setFixedWidth(350);
setFixedHeight(sizeHint().height());
}
void CardInfoWidget::minimizeClicked()
{
cardPicture->setVisible(minimized);
nameLabel2->setVisible(minimized);
nameLabel1->setVisible(minimized);
manacostLabel1->setVisible(minimized);
manacostLabel2->setVisible(minimized);
cardtypeLabel1->setVisible(minimized);
cardtypeLabel2->setVisible(minimized);
powtoughLabel1->setVisible(minimized);
powtoughLabel2->setVisible(minimized);
textLabel->setVisible(minimized);
minimizeButton->setIcon(style()->standardIcon(minimized ? QStyle::SP_ArrowUp : QStyle::SP_ArrowDown));
minimized = !minimized;
setFixedHeight(sizeHint().height());
} }
void CardInfoWidget::setCard(CardInfo *card) void CardInfoWidget::setCard(CardInfo *card)

View file

@ -5,6 +5,7 @@
class QLabel; class QLabel;
class QTextEdit; class QTextEdit;
class QPushButton;
class AbstractCardItem; class AbstractCardItem;
class CardInfo; class CardInfo;
@ -13,7 +14,9 @@ class CardInfoWidget : public QFrame {
private: private:
static const int pixmapWidth = 160; static const int pixmapWidth = 160;
int pixmapHeight; int pixmapHeight;
bool minimized;
QPushButton *minimizeButton;
QLabel *cardPicture; QLabel *cardPicture;
QLabel *nameLabel1, *nameLabel2; QLabel *nameLabel1, *nameLabel2;
QLabel *manacostLabel1, *manacostLabel2; QLabel *manacostLabel1, *manacostLabel2;
@ -23,7 +26,7 @@ private:
CardInfo *info; CardInfo *info;
public: public:
CardInfoWidget(QWidget *parent = 0); CardInfoWidget(bool showMinimizeButton = true, QWidget *parent = 0, Qt::WindowFlags f = 0);
void retranslateUi(); void retranslateUi();
public slots: public slots:
void setCard(CardInfo *card); void setCard(CardInfo *card);
@ -31,6 +34,7 @@ public slots:
void setCard(AbstractCardItem *card); void setCard(AbstractCardItem *card);
private slots: private slots:
void updatePixmap(); void updatePixmap();
void minimizeClicked();
}; };
#endif #endif

View file

@ -325,7 +325,7 @@ void CardItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
scene()->addItem(childArrow); scene()->addItem(childArrow);
arrow->addChildArrow(childArrow); arrow->addChildArrow(childArrow);
} }
} else { } 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 (!owner->getLocal())
@ -384,6 +384,7 @@ void CardItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
playCard(event); playCard(event);
setCursor(Qt::OpenHandCursor); setCursor(Qt::OpenHandCursor);
AbstractCardItem::mouseReleaseEvent(event);
} }
void CardItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) void CardItem::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)

View file

@ -13,6 +13,7 @@ PlayerListWidget::PlayerListWidget(QWidget *parent)
playerIcon = QIcon(":/resources/icon_player.svg"); playerIcon = QIcon(":/resources/icon_player.svg");
spectatorIcon = QIcon(":/resources/icon_spectator.svg"); spectatorIcon = QIcon(":/resources/icon_spectator.svg");
setMinimumHeight(100);
setIconSize(QSize(20, 15)); setIconSize(QSize(20, 15));
setColumnCount(6); setColumnCount(6);
setRootIsDecorated(false); setRootIsDecorated(false);

View file

@ -185,7 +185,7 @@ TabGame::TabGame(QList<AbstractClient *> &_clients, int _gameId, const QString &
QVBoxLayout *verticalLayout = new QVBoxLayout; QVBoxLayout *verticalLayout = new QVBoxLayout;
verticalLayout->addWidget(cardInfo); verticalLayout->addWidget(cardInfo);
verticalLayout->addWidget(playerListWidget, 1); verticalLayout->addWidget(playerListWidget, 1);
verticalLayout->addWidget(messageLog, 3); verticalLayout->addWidget(messageLog, 5);
verticalLayout->addLayout(hLayout); verticalLayout->addLayout(hLayout);
mainLayout = new QHBoxLayout; mainLayout = new QHBoxLayout;