RetroShare/plugins/patience_plugin/Patience/Austeilstapel.cpp
defnax 0b78ed6ff8 added patience plugin
git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@2245 b45a01b8-16f6-495d-af2f-9b41ad6348cc
2010-02-08 22:33:14 +00:00

101 lines
2.0 KiB
C++

#include "Austeilstapel.h"
#include "Karte.h"
#include "Proportionen.h"
#include <QGraphicsScene>
#include <QGraphicsSceneMouseEvent>
using namespace std;
Austeilstapel::Austeilstapel(const QPixmap& pixmap, Scene* oparent , QGraphicsItem* gparent) : Basisstapel(pixmap, oparent , gparent), costapel(0)
{
}
Austeilstapel::~Austeilstapel()
{
}
void Austeilstapel::registriere_costapel(Basisstapel* costapel_)
{
costapel = costapel_;
}
void Austeilstapel::karte_wurde_aufgedeckt(Karte* karte)
{
Basisstapel::karte_wurde_aufgedeckt(karte);
costapel->lege_karte_ab(karte);
// nur, wenn drei karten gezogen werden
if (nur_eine_wird_gezogen() == false)
{
// zwei weitere karten ...
for (register int idx = 0; idx < 2 && oberste_karte() != 0; idx++)
{
Karte *tmp_karte = oberste_karte();
// ... auf costapel legen, ...
costapel->lege_karte_ab(tmp_karte);
// ... und dort aufdecken
tmp_karte->zeige_vorderseite();
}
// die neue oberste karte auf costapel beweglich machen
if (costapel->oberste_karte() != 0) costapel->oberste_karte()->setFlag(QGraphicsItem::ItemIsMovable);
}
normalisiere_zwert();
}
bool Austeilstapel::ablage_moeglich(Karte *karte) const
{
bool erg = false;
if (karte->eigentuemer_stapel()->objectName() == BASISSTAPEL_AUSTEILCOSTAPEL && karte->ist_rueckseite() == true) erg = true;
return erg;
}
void Austeilstapel::mousePressEvent(QGraphicsSceneMouseEvent* event)
{
QGraphicsPixmapItem::mousePressEvent(event);
if (event->button() == Qt::LeftButton)
{
if (kartenliste.isEmpty() == true)
{
if (nur_eine_wird_gezogen() == false) costapel->resette_ablagenummer();
while (costapel->karten() > 0)
{
costapel->oberste_karte()->zeige_rueckseite();
lege_karte_ab(costapel->oberste_karte());
}
if (kartenliste.isEmpty() == false) emit stapel_durch();
}
// sicherstellen, das die scene aktualisiert wird. ist dies ein fehler in QT ???
scene()->update();
}
}
void Austeilstapel::hilfsanfrage_start(Karte*)
{
}
void Austeilstapel::undo_karten_ablage(Karte* karte)
{
karte->zeige_rueckseite();
Basisstapel::undo_karten_ablage(karte);
}