#include "Nachricht.h"
#include <Schrift.h>
#include <Text.h>
#include <MausEreignis.h>
#include <TastaturEreignis.h>
#include <TextFeld.h>
#include "../../../Initialisierung/Initialisierung.h"

// Inhalt der Fehler Klasse aus Fehler.h

// Konstruktor
//  zS: Die zu verwendende Schrift
//  nachricht: Der Fehler, der angezeigt werden soll
//  maxSize: Die Bildschirmgr��e in Pixeln
Nachricht::Nachricht( Schrift *zS, char *nachricht, Punkt maxSize, std::function< void() > onClose )
    : Dialog( zS )
{
    Text *tmp = new Text( nachricht );
    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();
    ok = initKnopf( br - 94, h� + 12, 100, 20, zS, Knopf::Style::Normal, "Ok" );
    addMember( ok );
    bool *verl = &verlassen;

    auto me = [ verl, onClose ]( void *param, void *obj, MausEreignis me ) -> bool
    {
        if( me.id == ME_RLinks && !me.verarbeitet )
        {
            *verl = 1;
            if( onClose )
                onClose();
        }
        return 1;
    };

    ok->setMausEreignis( me );
    setClosingMe( me );
}

// Destruktor
Nachricht::~Nachricht()
{
    text->release();
    ok->release();
}