#pragma once
#include "Zeichnung.h"
#include "Trie.h"
#include "Array.h"
#include "UIInitialization.h"
namespace Framework
{
class Text;
class ObjTabelle;
class Schrift;
class Bildschirm;
namespace XML
{
class Element;
}
/**
KSG UIML Standart
possible XML elements:
- uimlview (the root element of uiml),
- class (only as direct child of uimlview),
- textfield,
- button,
- check, (KontrollKnopf)
- text,
- textarea,
- table (allowed child elements: tr),
- tr (allowed child elements: textfield, button, table, text, textarea, frame),
- frame (allowed child elements: textfield, button, table, text, textarea, frame).
possible global XML attributes:
- id (string should be unique),
- x (integer, optional % char at end),
- y (integer, optional % char at end),
- width (integer, optional % char at end),
- height (integer, optional % char at end),
- margin (integer, optional % char at end),
- margin-left (integer, optional % char at end),
- margin-top (integer, optional % char at end),
- margin-right (integer, optional % char at end),
- margin-bottom (integer, optional % char at end),
- align-left (string (id values of other elements or keywords: start, end)),
- align-top (string (id values of other elements or keywords: start, end)),
- align-bottom ((string (id values of other elements or keywords: start, end)),
- align-right (string (id values of other elements or keywords: start, end)),
- tooltip (string),
- style (hex __int64),
- class (string (id of class element))
attribute die sich gegenseitig ausschließen:
- align-left / align-right
- align-top / align-bottom
spezific attributes:
- font-size (textfield, text, textarea, button)
- text-align (textfield, text, textarea)
- text-align-horizontal (textfield, text, textarea)
- text-align-vertical (textfield, text, textarea)
example:
\code
\endcode
*/
class UIMLView : public ZeichnungHintergrund
{
private:
UIInit init;
Trie< Zeichnung > *members;
XML::Element *dom;
int nextId;
void parseTable( Iterator childs, ObjTabelle *table );
void parseFrame( Iterator childs, Fenster *frame );
Zeichnung *parseElement( XML::Element *e );
void layout( XML::Element *e, int pWidth, int pHeight );
//! Verarbeitet ein Maus Ereignis. Wird vom Framework automatisch aufgerufen.
//! \param me Das Ereignis
DLLEXPORT virtual void doMausEreignis( MausEreignis &me, bool userRet ) override;
public:
//! Erstellt eine UIML View
DLLEXPORT UIMLView();
//! Erstellt eine UIML View zu einem UIML Text
//! \param uiml Ein xml element gemät des KSG UIML standarts
//! \param screen Ein zeiger für den Belschirm auf dem die tooltips angezeigt werden sollen
//! \param schrift Die schrift mit der der Text gezeichnet werden soll
DLLEXPORT UIMLView( XML::Element *uiml, UIInit &init );
//! Erstellt eine UIML View zu einem UIML Text
//! \param uiml Ein xml text gemät des KSG UIML standarts
//! \param screen Ein zeiger für den Belschirm auf dem die tooltips angezeigt werden sollen
//! \param schrift Die schrift mit der der Text gezeichnet werden soll
DLLEXPORT UIMLView( Text uiml, UIInit &init );
DLLEXPORT ~UIMLView();
//! setzt den inhalt der view
//! \param uiml Ein xml element gemät des KSG UIML standarts
DLLEXPORT void setUIML( XML::Element *uiml );
//! setzt den inhalt der view
//! \param uiml Ein xml text gemät des KSG UIML standarts
DLLEXPORT void setUIML( Text uiml );
//! aktualisiert größe und position aller Zeichnungen gemäß den spezifikationen in UIML
DLLEXPORT void layout();
//! fügt ein element hinzu
//! \param uiml Ein xml text gemät des KSG UIML standarts, welcher das neue Objekt darstellt
//! \return id des neuen Elements
DLLEXPORT Text addMember( Text uiml );
//! fügt ein element zu einem Elternelement hinzu (funktioniert momentan nur mit frame Objekten)
//! \param uiml Ein xml text gemät des KSG UIML standarts, welcher das neue Objekt darstellt
//! \return id des neuen Elements
DLLEXPORT Text addMember( Text uiml, Text parentId );
//! entfernt ein element
//! \param id id des Elements
DLLEXPORT void removeMember( Text id );
//! Gibt eine zeichnung zurück, welche in uiml eine bestimmte id hat
//! \param id die id der Zeichnung
DLLEXPORT Zeichnung *zZeichnung( Text id );
//! Verarbeitet ein Tastatur Ereignis. Wird vom Framework automatisch aufgerufen
//! \param te Das Ereignis
DLLEXPORT virtual void doTastaturEreignis( TastaturEreignis &te );
//! Updated den Zeichenhintergrund
//! \param tickVal Die vergangene Zeit in Sekunden, die seit dem Letzten Aufruf dieser Funktion verstrichen ist
//! \return 1, wenn das Bild neu gezeichnet werden muss. 0 sonnst
DLLEXPORT bool tick( double tickVal ) override;
//! Zeichnet den Hintergrund eines Zeichnunges nach rObj
DLLEXPORT void render( Bild &rObj ) override;
//! Gibt den Dom Tree ohne erhöhten reference counter zurück
//! Änderungen am Dom Tree sollten vermieden werden (nur änderungen von attributen einzelner elemente sind erlaubt)
DLLEXPORT XML::Element *zDom() const;
//! Gibt den Dom Tree zurück
//! Änderungen am Dom Tree sollten vermieden werden (nur änderungen von attributen einzelner elemente sind erlaubt)
DLLEXPORT XML::Element *getDom() const;
};
}