Added MTGO-like card info widget, made original info widget hideable
This commit is contained in:
parent
d6c00d6529
commit
a215b3503a
7 changed files with 77 additions and 24 deletions
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
};
|
};
|
||||||
|
|
|
@ -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);
|
||||||
|
if (showMinimizeButton) {
|
||||||
textLabel->setFixedHeight(100);
|
textLabel->setFixedHeight(100);
|
||||||
setFixedSize(sizeHint());
|
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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in a new issue