#ifndef KARTE_H
#define KARTE_H

#include <QObject>
#include <QGraphicsPixmapItem>
#include <QGraphicsItem>
#include <QPixmap>
#include <QColor>
#include <QList>
#include <QPointF>

class Scene;
class Basisstapel;

class Karte : public QObject, public QGraphicsPixmapItem
{
Q_OBJECT

public:
Karte(const QPixmap& vorderseite, const QPixmap& hinterseite, Scene *oparent, QGraphicsItem *gparent = 0);
virtual ~Karte();

void setze_farbe(const QString&);
const QString& farbe() const;
void setze_wert(int);
int wert() const;
bool ist_vorderseite() const;
bool ist_rueckseite() const;
void registriere_stapel(const QList<Basisstapel*>& stapelliste_);
void setze_meinstapel(Basisstapel *meinstapel_);
void setze_rueckehrkoordinaten(const QPointF&);
void registriere_zielstapel(Basisstapel* kreutzstapel_, Basisstapel* pikstapel_, Basisstapel* herzstapel_, Basisstapel* karoherzstapel_);
Basisstapel* eigentuemer_stapel();
void setze_kartenbilder(const QPixmap&, const QPixmap&);
Basisstapel* suche_ziel();
QList<Karte*> kinderkarten();
QRectF gesamt_rect();
Karte* unterste_karte();
bool hat_kinderkarten() const;
const QStringList speichere() const;
bool lade(const QStringList&);
void nach_hause();
void speichere_zuhause();

public slots:
void zeige_vorderseite();
void zeige_rueckseite();
void sichtbarkeit_rahmen(bool);
void passe_groesse_an(double);

signals:
void rahmen_verstecken();
void hilfsanfrage_start(Karte*);
void hilfsanfrage_ende();

private:
QPixmap vorne, hinten, vorne_skaliert, hinten_skaliert;
QString Farbe;
int Wert;
bool vorderseite_oben, rahmen_anzeigen, double_click_sperre, gegrabbt;
Scene *scene;
QList<Basisstapel*> stapelliste;
Basisstapel *Meinstapel;
QPointF Rueckkehrkoordinaten;
Basisstapel *kreutzstapel, *pikstapel, *herzstapel, *karostapel;
double kartengroesse;

virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent*);
virtual void mousePressEvent(QGraphicsSceneMouseEvent*);
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent*);
virtual void mouseMoveEvent(QGraphicsSceneMouseEvent*);
};

#endif