#include "Frage.h"
#include <Schrift.h>
#include <Text.h>
#include "../../../Initialisierung/Initialisierung.h"

// Konstructor
//  zS: Ein Zeiger auf die zu verwendende Schrift
//  frage: Die Frage die an den Benutzer gestellt werden soll
//  left: Die linke Antwort
//  right: Die rechte Antwort
//  leftAk: Ein Zeiger auf eine Funktion die beim w�hlen der Linken Antwort aufgerufen wird
//  rightAk: Ein Zeiger auf eine Funktion die beim w�hlen der Rechten Antwort aufgerufen wird
//  abbruchAk: Ein Zeiger auf eine Funktion die beim Schlie�en des Fensters aufgerufen wird
//  maxSize: Die Bildschirmgr��e in Pixeln
Frage::Frage( Schrift *zS, char *frage, char *left, char *right, std::function< void() > leftAk, std::function< void() > rightAk, std::function< void() > abbruchAk, Punkt maxSize )
    : Dialog( zS )
{
    Text *tmp = new Text( frage );
    zS->lock();
    zS->setSchriftSize( 12 );
    zS->textFormatieren( tmp, 300, 12 );
    int br = zS->getTextBreite( tmp );
    int h� = zS->getTextHeight( tmp );
    zS->unlock();
    setSize( br + 12, h� + 63 );
    setPosition( maxSize / 2 - getSize() / 2 );
    
    this->text = initTextFeld( 5, 5, br, h�, zS, TextFeld::Style::Text, tmp->getText() );
    addMember( text );
    tmp->release();
    this->right = initKnopf( br - 94, h� + 22, 100, 20, zS, Knopf::Style::Normal, right );
    addMember( this->right );
    this->left = initKnopf( br - 199, h� + 22, 100, 20, zS, Knopf::Style::Normal, left );
    addMember( this->left );

    bool *verl = &verlassen;

    this->right->setMausEreignis( [ verl, rightAk ]( void *param, void *obj, MausEreignis me ) -> bool
    {
        if( me.id == ME_RLinks && !me.verarbeitet && !*verl )
        {
            *verl = 1;
            if( rightAk )
                rightAk();
        }
        return 1;
    } );
    this->left->setMausEreignis( [ verl, leftAk ]( void *param, void *obj, MausEreignis me ) -> bool
    {
        if( me.id == ME_RLinks && !me.verarbeitet && !*verl )
        {
            *verl = 1;
            if( leftAk )
                leftAk();
        }
        return 1;
    } );
    setClosingMe( [ verl, abbruchAk ]( void *param, void *obj, MausEreignis me ) -> bool
    {
        if( me.id == ME_RLinks && !me.verarbeitet && !*verl )
        {
            *verl = 1;
            if( abbruchAk )
                abbruchAk();
        }
        return 1;
    } );
}

Frage::~Frage()
{
    text->release();
    left->release();
    right->release();
}