Objekttypen in MagiC
--------------------

Andreas Kromke
7.2.98
letzte nderung:
Tabulatorweite: 5


1. Einleitung
=============

Aufgrund der stndigen Erweiterungen der GEM-Objektstruktur sowie der 
teilweise unterschiedlichen Konzepte von MagiC und MultiTOS wird es 
Zeit, einmal alle Objekttypen und -strukturen geordnet aufzufhren 
und in Zukunft auch auf dem neuesten Stand zu halten.

Diese Datei soll die verschiedenen Varianten sowie ihre Verfgbarkeit 
auf verschiedenen Systemen beschreiben.


2. Die Struktur OBJECT
======================

In allen TOS-kompatiblen Betriebssystemen ist die eigentliche 
Objektstruktur identisch:

typedef struct {
	WORD		ob_next;		/* Index des nchsten Geschwist */
	WORD		ob_head;		/* -1 oder Index des ersten Kinds */
	WORD		ob_tail;		/* -1 oder Index des letzten Kinds */
	WORD		ob_type;		/* Objekttyp */
	WORD		ob_flags;		/* Flags */
	WORD		ob_state;		/* weitere Flags */
	LONG		ob_spec;		/* je nach Objekttyp */
	WORD		ob_x;		/* x-Position relativ zum Elter */
	WORD		ob_y;		/* y-Position relativ zum Elter */
	WORD		ob_width;		/* Breite */
	WORD		ob_height;	/* Hhe */
} OBJECT;

ob_type
-------

Das Hibyte wird vom AES nur fr Submens verwendet. Ist das hchste 
Bit von ob_type (0x8000) sowie das Bit SUBMENU in ob_flags, so geben 
Bit 8..14 an, welches Submen mit dem Meneintrag gekoppelt ist. D.h. 
jede Applikation kann maximal 128 Submens haben.
MagiC liest aus ob_type stets nur das Lobyte aus, auer fr die 
Submen-Behandlung.
TOS reagiert auf unbekannte Objekttypen (z.B. die reinen MagiC-Typen 
G_SWBUTTON usw.) "sauber", d.h. die Objekte werden nicht gezeichnet.

ob_flags
--------

SELECTABLE (0x0001)

Wird nur von form_do() und form_button() ausgewertet und zeigt an, 
da das Objekt auswhlbar ist, d.h. beim Anklicken wird in ob_state 
das Flag SELECTED gewechselt.

DEFAULT (0x0002)

Wird von form_do() und form_keybd() ausgewertet und zeigt an, da 
dieses Objekt dasjenige ist, welches bei [Return] ausgewhlt wird. Es 
sollte nur maximal ein Objekt im Baum Defaultobjekt sein.
Weiterhin bewirkt es beim Objekttyp G_BUTTON einen zustzlichen Rand 
von einem Pixel auerhalb des Objekts (d.h. zusammen mit EXIT sind es 
dann 3 Pixel).

EXIT (0x0004)

Wird von form_do() und form_keybd() ausgewertet und zeigt an, da 
bei Anwahl dieses Objekts der Dialog verlassen wird und die Kontolle 
an den Aufrufer zurckgegeben wird.
Weiterhin bewirkt es beim Objekttyp G_BUTTON einen zustzlichen Rand 
von einem Pixel auerhalb des Objekts (d.h. zusammen mit DEFAULT sind 
es dann 3 Pixel).

EDITABLE (0x0008)

Wird von form_do(), form_keybd() und form_button() ausgewertet und 
zeigt an, da der Cursor durch Anklicken bzw. Cursor hoch/runter und 
Tab/Shift-Tab in dieses Feld gestellt werden kann.

RBUTTON (0x0010)

Von allen Geschwister-Objekten mit RBUTTON mu immer genau eines 
selektiert sein (ob_state SELECTED). Daher wird dieses Flag von 
form_do() und form_button() ausgewertet, um bei Selektion des Objekts 
alle Geschwister-Objekte, die ebenfalls RBUTTON gesetzt haben, 
zurckzusetzen.
Das Flag wird _NICHT_ von objc_change() ausgewertet, daher mu dieses 
Rcksetzen von Hand durchgefhrt werden.

LASTOB (0x0020)

Kennzeichnet das letzte Objekt des Baums. Das Flag wird von 
form_keybd() und form_do() bentigt, um den Objektbaum linear zu 
durchsuchen (z.B. nach dem nchsten Eingabefeld oder in MagiC 
auch nach einem Objekt mit Tastenkrzel).

TOUCHEXIT (0x0040)

Wie EXIT, jedoch wird der Dialog nicht erst bei Loslassen der 
Maustaste, sondern sofort verlassen. Daher knnen auch Doppeklicks 
erkannt werden. Wenn TOUCHEXIT gesetzt ist, ist das Flag EXIT 
bedeutungslos.

HIDETREE (0x0080)

Das Objekt und alle Unterobjekte werden bei objc_draw() und 
objc_find() versteckt. Weiterhin wird das Flag ab MagiC 5.20 auch von 
form_keybd() ausgewertet, wenn Objekte zu Tastenkrzeln gesucht 
werden.
Eine Eingabe in versteckte Objekte (d.h. wenn das Objekt oder 
irgendein Elter oder Ur-Elter Objekt versteckt ist) ist jedoch immer 
noch mglich. Um dies zu verhindern, mu EDITABLE gelscht werden.

INDIRECT (0x0100)

Dieses Flag ist nur fr Objekttypen sinnvoll, bei denen ob_spec ein 
Zeiger ist. Es bedeutet, da der Zeiger indirekt ist, d.h. auf einen 
Zeiger zeigt, der wiederum auf die Daten zeigt.

FL3DIND (0x0200)

Erzeugt unter MultiTOS ein dreidimensionales Objekt. Unter MagiC 
(ab Version 3.0) erst ab 16 Farben, und wenn der 3D-Effekt nicht 
abgeschaltet wurde.
Zu diesem Zweck wird ein hohles, wei geflltes Objekt hellgrau 
gezeichnet und ein 3D-Rand ergnzt. Dieser Rand liegt bei MultiTOS 
auerhalb des Objekt und vergrert es dadurch. In MagiC bleibt die 
Objektgre unverndert.
Fr alle 3D-Objekte in MagiC gilt, da G_(BOX)TEXT mit deckendem Text 
in transparenten Text gewandelt wird. Das ist notwendig, da durch 
eine Designschwche des VDI deckender Text immer einen weien 
Hintergrund hat.

Die INDICATOR Objekte sind als "rastende" Schalter zu verstehen, d.h. 
bei Selektion wird das Objekt nicht nur "eingedrckt", sondern auch 
farblich hervorgehoben.

Beim Selektieren eines INDICATOR-Objekts wird die Boxfarbe von 
hellgrau nach dunkelgrau gewandelt. Ferner wird eine evtl. 
vorhandener Text in einer anderen Farbe gezeichnet.

Unter MultiTOS funktioniert das folgendermaen:

     0    <=>  1
     2    <=>  13
     3    <=>  15
     4    <=>  14
     5    <=>  10
     6    <=>  12
     7    <=>  11
     8    <=>  9

Das funktioniert in MultiTOS jedoch NICHT bei G_BUTTON, G_TITLE und 
G_STRING, hier bleibt die Textfarbe unverndert. Eine Systematik 
der Farbzuordung ist ebenfalls nicht zu erkennen, auer da hellgrau 
und dunkelgrau und schwarz und wei vertauscht werden.

MagiC hat daher folgende Umsetzung:

     0    <=>  1
     8    <=>  9
     sonst: Bit 3 toggeln, d.h. Farbe abdunkeln/aufhellen

In MagiC funktioniert diese Farbumsetzung natrlich auch bei 
G_BUTTON, G_TITLE und G_STRING.
objc_change() zeichnet bei Selektion und Deselektion das Objekt immer 
neu.

FL3DBAK (0x0400)

Im Prinzip wie FL3DIND, soll jedoch ein "Hintergrund-Objekt", z.B. 
einen Dialog-Hintergrund erzeugen.
Tatschlich besteht der einzige Unterschied darin, da beim 
Selektieren das Objekt per XOR-Maske modifiziert wird.
objc_change() zeichnet bei (De-)Selektion ebenfalls eine XOR-Maske.

FL3DACT (0x0600)

Da ein 3D-Objekt nicht gleichzeitig INDICATOR und BACKGROUND sein 
kann, wird diese Bitkombination verwendet, um ein ACTIVATOR-Objekt zu 
erzeugen. Im Prinzip funktioniert es wie FL3DIND, erzeugt jedoch ein 
Objekt, welches bei Aktivierung "federt" und nicht rastet.
Beim Selektieren wird ein evtl. vorhandener Rahmen "umgedreht" (um 
das Reindrcken darzutellen), ein eventuell vorhandener Text um 1 
Pixel nach rechts unten verschoben.
objc_change() zeichnet bei Selektion und Deselektion das Objekt immer 
neu.

SUBMENU (0x0800)

Wird in MultiTOS und ab MagiC 5.10 verwendet, um Submens zu 
kennzeichnen. menu_attach() setzt dieses Bit in einem Meneintrag, um 
zu kennzeichnen, da hier ein Submen angehngt ist. Das Hibyte von 
ob_type enthlt dann die Submen-Nummer (128..255), d.h. Bit 15 von 
ob_type ist immer gleichzeitig mit SUBMENU gesetzt.

ob_state
--------

SELECTED (0x0001)

Zeigt, da ein Objekt "ausgewhlt" ist, und zwar i.a. durch 
Vernderung seines Aussehens. So werden etwa 2D-Buttons schwarz, 3D-
Objekte werden eingedrckt. Die Wirkung des Flags ist also vom 
Objekttyp abhngig. Bei G_USERDEF wird, wenn die Zeichenroutine das 
Flag nicht selbst auswertet, ein schwarzes Rechteck im Modus XOR ber 
das Objekt gezeichnet.

CROSSED (0x0002)

Zeichnet ein schwarzes X im Modus XOR ber das Objekt. Ist daher nur 
fr Rechteck-Objekte (G_BOXTEXT, G_BOX, G_BUTTON) sinnvoll. Wenn 
berhaupt, denn es wird nur sehr selten eingesetzt. Wenn ein Objekt 
als nicht-auswhlbar gekennzeichnet werden soll, sollte man lieber 
DISABLED nehmen.

CHECKED (0x0004)

Zeichnet das ASCII-Zeichen 8 (Hkchen) in Schwarz und im Modus 
Transparent links in das Objekt. Wird hauptschlich fr Men-Eintrge 
verwendet, jedoch auch fr an-/ausklickbare Schalter in Dialogen, 
weil es nicht so dick aussieht wie ein Button. In MagiC ist in 
Dialogen der Kreuzchen-Button (s.u.) vorzuziehen.

DISABLED (0x0008)

Zeichnet ein graues (eigentlich fein S/W kariertes) rechteckiges 
Muster (IP_4PATT) im Modus Transparent ber das Objekt.
In MagiC wird bei 3D-Background-Objekten das Muster in LWHITE 
(Hellgrau) gezeichnet.
Anstelle des Rechteck-Muster-Verfahrens werden ab MagiC 5.20 bei 
mindestens 16 Farben G_STRING und G_TITLE in Dunkelgrau gezeichnet. 
Weiterhin wird ein G_STRING, der nur aus Minuszeichen besteht, in 
MagiC 5.20 durch eine dunkelgraue Linie ersetzt.

OUTLINED (0x0010)

Vergrert das Objekt zustzlich um drei Pixel in alle Richtungen. Es 
wird ein weier Rahmen der Breite 2 und ein schwarzer der Breite 1 
gezeichnet.
In MagiC erhalten 3D-Objekte mit 2 Pixel innen und OUTLINED 
stattdessen den "Schmuckrahmen" fr Dialogboxen.

SHADOWED (0x0020)

Rechts und unter dem Objekt wird ein schwarzer Schatten gezeichnet, 
und zwar mit der doppelten Breite des Objektrands.
Bei G_ICON und G_CICON wird mit diesem Flag stattdessen eine andere 
Schriftart eingeschaltet.

WHITEBAK (0x0040)

Bewirkt bei G_ICON und G_CICON und weier Hintergrundfarbe, da die 
Icon-Maske nicht gezeichnet wird. Auf weiem Hintergrund lassen sich 
damit Icons schneller ausgeben.
Ab MagiC 3 werden mit diesem Flag bei G_BUTTON Sonderformen 
(Kreuzchenbutton, runder Button, Gruppenrahmen, berschrift) sowie 
Unterstriche und Tastaturbedienbarkeit eingeschaltet. Diese 
Funktionalitt ist ber appl_getinfo(), Unterfunktion 13, viertes 
WORD, Bit 2 abzufragen.

DRAW3D (0x0080)

Bewirkt bei GEM 2.0 und MagiC 1.x und 2.x, da bei selektiertem 
G_ICON die Maske dreimal schrg bereinander gezeichnet wird, um 
einen dreidimensionalen Effekt zu erzeugen.

UNDERLINE (0x0f00)

Ab MagiC 2.0, nur bei G_STRING, G_TITLE und G_BUTTON und nur in 
Verbindung mit WHITEBAK: Hier werden die Position und Gre des 
Unterstrichs festgelegt.

XSTATE (0xf000)

Ab MagiC 2.0, nur bei G_STRING, G_TITLE und G_BUTTON und nur in 
Verbindung mit WHITEBAK: Hier werden verschiedene Button-Typen 
umgeschaltet.


3. Die Struktur TEDINFO
=======================


Bei einigen Objekttypen:

	G_TEXT
	G_BOXTEXT
	G_FTEXT
	G_FBOXTEXT

zeigt <ob_spec> auf eine TEDINFO (Text Edit Information) Struktur. 
Sie beschreibt Ausrichtung, Farbe und Gre des auszugebenden Textes 
und ggf. des unterlegten Rechtecks). Die Struktur sieht 
folgendermaen aus:

typedef struct
{
     char     *te_ptext;        /* ptr to text (must be 1st)    */
     char     *te_ptmplt;       /* ptr to template              */
     char     *te_pvalid;       /* ptr to validation            */
     WORD     te_font;          /* font                         */
     WORD     te_junk1;         /* junk int                     */
     WORD     te_just;          /* justification: left, right...*/
     WORD     te_color;         /* color information            */
     WORD     te_junk2;         /* junk int                     */
     WORD     te_thickness;     /* border thickness             */
     WORD     te_txtlen;        /* text string length           */
     WORD     te_tmplen;        /* template string length       */
} TEDINFO;

te_ptext
--------

Zeigt auf den auszugebenden Text. Der Zeiger mu immer gltig sein, 
er darf ggf. aber auf ein Nullbyte zeigen.

te_ptmplt
---------

Die Schablone ("template"). Sie wird nur bei G_FTEXT und G_FBOXTEXT 
verwendet, d.h. kann bei G_TEXT und G_BOXTEXT NULL sein.
Bei der Ausgabe werden alle '_' in der Schablone sukzessive durch die 
Zeichen in <te_ptext> ersetzt, d.h. es wird eine Misch-Zeichenkette 
gebildet. I.A. wird die Schablone also soviele '_' enthalten, wie der 
Puffer fr <te_ptext> lang ist (ohne Nullbyte).


4. Objekttypen
==============

G_BOX (20, 0x14)
----------------

Zeichnet ein Rechteck.
ob_spec ist ein Langwort und enthlt folgende Informationen:
Bit 0..3:		Innenfarbe (0..15)
Bit 4..6:		Muster (0=hohl .. 7=ganz gefllt)
Bit 16..23:	Rahmendicke (-128 .. 127)
			< 0: Rahmen innerhalb des Objekts
			> 0: Rahmen auerhalb des Objekts
			0: kein Rahmen


G_TEXT (21, 0x15)
-----------------

Zeichnet einen ausgerichteten Text in verschiedenen Farben und 
Schriftgren.


G_BOXTEXT (22, 0x16)
--------------------


G_IMAGE (23, 0x17)
------------------


G_USERDEF (24, 0x18)
--------------------


G_IBOX (25, 0x19)
-----------------


G_BUTTON (26, 0x1a)
-------------------

In MagiC ab 2.00 knnen folgende Sonder-Buttons fesgelegt werden:

Unterstrich fr G_BUTTON. Es wird ein Buchstabe unterstrichen, das 
Objekt ist per Alt-Taste tastaturbedienbar, das klappt auch mit 
Ziffern. Es wird empfohlen, die Objekthhe um einen Pixel zu 
vergrern:

  WHITEBAK in ob_state setzen
  (ob_state >> 8) & 0xf bestimmt die Position des Unterstrichs
  (ob_state >> 8) & 0xf0 ist 0

Gruppenrahmen:

  ob_type = G_BUTTON
  WHITEBAK in ob_state setzen
  (ob_state >> 8) == 0xfe

Kreuzchen-Button:

  ob_type = G_BUTTON
  bei ob_flags  RADIOBUTTON _deaktivieren_
  WHITEBAK in ob_state setzen
  (ob_state >> 8) == 0xff

Kreuzchen-Button, mit Unterstrich tastaturbedienbar:

  ob_type = G_BUTTON
  bei ob_flags  RADIOBUTTON _deaktivieren_
  WHITEBAK in ob_state setzen
  (ob_state >> 8) & 0xf bestimmt die Position des Unterstrichs
  (ob_state >> 8) & 0xf0 == 0x80

runder Radio-Button:

  ob_type = G_BUTTON
  bei ob_flags  RADIOBUTTON _aktivieren_
  WHITEBAK in ob_state setzen
  (ob_state >> 8) == 0xff

runder Radio-Button, mit Unterstrich tastaturbedienbar:

  ob_type = G_BUTTON
  bei ob_flags  RADIOBUTTON _aktivieren_
  WHITEBAK in ob_state setzen
  (ob_state >> 8) & 0xf bestimmt die Position des Unterstrichs
  (ob_state >> 8) & 0xf0 == 0x80


G_BOXCHAR (27, 0x1b)
--------------------


G_STRING (28, 0x1c)
-------------------

In MagiC ab 2.00 knnen folgende Sonder-Typen fesgelegt werden:

Unterstriche fr G_STRING und G_TITLE. Es wird ein Buchstabe   
unterstrichen, das Objekt ist per Alt-Taste tastaturbedienbar, das 
klappt auch mit Ziffern:

  WHITEBAK in ob_state setzen
  (ob_state >> 8) & 0xf bestimmt die Position des Unterstrichs
  (ob_state >> 8) & 0xf0 ist 0

berschrift (komplett unterstrichener G_STRING). Es wird empfohlen, 
die Objekthhe um zwei bis drei Pixel zu vergrern:

  WHITEBAK in ob_state setzen
  (ob_state >> 8) == 0xff


G_FTEXT (29, 0x1d)
------------------

3D-Eingabefeld:

  ob_type = G_FTEXT
  3D-Flags BACKGROUND
  Rand: auen 2 Pixel


G_FBOXTEXT (30, 0x1e)
---------------------


G_ICON (31, 0x1f)
-----------------


G_TITLE (32, 0x20)
-------------------

In MagiC ab 2.00 knnen folgende Sonder-Typen fesgelegt werden:

Unterstrich fr G_TITLE. Es wird ein Buchstabe unterstrichen:

  WHITEBAK in ob_state setzen
  (ob_state >> 8) & 0xf bestimmt die Position des Unterstrichs
  (ob_state >> 8) & 0xf0 ist 0


G_CICON (33, 0x21)
------------------

Bei Objekten G_CICON, die aber kein CICON enthalten (soll vorkommen), 
wird als Zeiger cib_mainlist eine -1L eingetragen. Wenn dort eine 
NULL steht, kann man also davon ausgehen, da dahinter noch CICONs 
folgen.


G_SWBUTTON (34, 0x22)
---------------------

Der "Switchbutton" steht ab MagiC 1.00 zur Verfgung, er wird von 
anderen Betriebssystemen nicht untersttzt. Das Vorhandensein des 
Objekttyps ist ber appl_getinfo(), Unterfunktion 13, viertes WORD, 
Bit 0 abzufragen.

Der "Switchbutton" kann verwendet werden, wenn ein Button mehr als 
zwei Zustnde haben mu. Ein G_SWBUTTON sieht zunchst aus wie ein 
G_BUTTON, beim Anklicken wechselt er jedoch zyklisch seine 
Beschriftung (ein Doppelklick schaltet die Zustnde "rckwrts" 
durch).

Ein G_SWBUTTON ist einfacher zu programmieren und, bei einer kurzen 
Auswahlliste, auch einfacher zu bedienen als ein Popup. Da er jedoch 
nur unter MagiC existiert und bei mehr als drei Zustnden 
unbersichtlich wird, wird lieber die flexiblere Popup-Lsung 
verwendet.

Bei G_SWBUTTON zeigt <ob_spec> auf eine Struktur SWINFO, die in 
MT_AES.H definiert ist:

typedef struct {
     char *string;           /* etwa "TOS|MSDOS|MAG!X"           */
     WORD num;               /* Nr. der aktuellen Zeichenkette   */
     WORD maxnum;            /* maximal erlaubtes <num>          */
     } SWINFO;


G_POPUP (35, 0x23)
------------------

Der Popup-Button steht ab MagiC 1.00 zur Verfgung, er wird von 
anderen Betriebssystemen nicht untersttzt. Das Vorhandensein des 
Objekttyps ist ber appl_getinfo(), Unterfunktion 13, viertes WORD, 
Bit 1 abzufragen.

Mit diesem Objekttyp ist es sehr (!) einfach, innerhalb eines 
(Fenster-) Dialogs ein Popup fr eine Mehrfach-Auswahl 
unterzubringen. Unter MultiTOS wre dazu ein Button zu definieren, 
der den Status EXIT hat. Beim Verlassen von form_do() mte dann ein 
menu_popup() aufgerufen und ausgewertet werden. In MagiC wird dies 
durch G_POPUP alles automatisch erledigt, weshalb die MagiC-
Dienstprogramme regen Gebrauch von diesem Objekttyp machen.

ob_spec zeigt auf eine Struktur POPINFO, die in MT_AES.H definiert 
ist:

typedef struct {
     OBJECT *tree;           /* Popup- Men                      */
     WORD obnum;             /* aktuelles Objekt von <tree>      */
     } POPINFO;

tree zeigt auf einen Objektbaum, der etwa fr form_popup() als 
Eingabe dienen knnte. D.h. die Box sollte als Objekt 0 eine G_BOX 
oder G_IBOX enthalten, die von den anderen Objekten vollstndig 
bedeckt wird. Objekte, die nicht auswhlbar sind, sollten wie im 
Dropdown- Men den Status DISABLED erhalten. Alle whlbaren Objekte 
mssen den Status SELECTABLE haben. Zustzlich mssen bei der 
Verwendung durch G_POPUP alle selektierbaren Objekte vom Typ G_STRING 
(bzw. besser -> G_SHORTCUT) oder G_BUTTON sein und mit zwei 
Leerstellen beginnen, letzteres wegen des Hkchens, das von 
form_button() bzw. form_(x)do() automatisch gesetzt wird! Wichtig 
ist, da ob_x, ob_y von Objekt 0 des Mens relativ zum G_POPUP- 
Objekt angegeben werden, d.h. sie werden meistens beide 0 sein.

Es wird empfohlen, einen Schatten und einen Rand der Strke -1 
anzugeben.

G_POPUP sieht wie G_BUTTON aus, die Zeichenkette wird jedoch nicht 
zentriert, um mglichst mit den Zeichenketten im Men auf einer Linie 
zu liegen.


G_WINTITLE (36, 0x24)
---------------------

Diese Objektnummer wird von MagiC intern dazu verwendet, Fenstertitel 
darzustellen. Der Aufbau dieses Objekttyps kann sich jederzeit ndern 
und wird daher nicht dokumentiert.


G_EDIT (37, 0x25)
-----------------

Ab MagiC 5.20 steht ein in einer "Shared Library" implementiertes 
mehrzeiliges Eingabe-Objekt zur Verfgung. Zur Verwendung dieses 
Objekttyps siehe EDITOB.TXT.
Man beachte, da dieser Objekttyp (noch) _NICHT_ von form_(x)do(), 
form_button(), form_keybd(), objc_edit(), wdlg_evnt() und wdlg_do() 
untersttzt wird. D.h. die Ereignisse (Maus und/oder Tastatur) mssen 
"von Hand" ber edit_evnt() an das Objekt weitergeleitet werden.


G_SHORTCUT (38, 0x26)
---------------------

Dieser Objekttyp steht nur unter MagiC und erst ab der Version 6 zur 
Verfgung. Er wird hnlich wie G_STRING behandelt, ein vorhandenes 
Tastaturkrzel wird jedoch abgespalten und rechtsbndig ausgegeben.

Das Vorhandensein des Objekttyps ist ber appl_getinfo(), 
Unterfunktion 13, viertes WORD, Bit 3 abzufragen.

Die Einfhrung proportionaler AES-Zeichenstze durch MagiC 6 machte 
eine neue Strategie fr die Ausrichtung der Meneintrge 
erforderlich. Um Tastaturkrzel ("Shortcuts") rechtsbndig ausrichten 
zu knnen, werden Objekte vom Typ G_STRING innerhalb eines Mens 
entsprechend in Kommando und Krzel aufgespalten. Diese Strategie 
versagt jedoch bei Mens, die vom Programm selbst, z.B. innerhalb 
eines Fensters oder eines Popup-Mens, verwaltet werden. Um auch hier 
eine brauchbare Ausrichtung zu erreichen, mute dieser neue Objekttyp 
eingefhrt werden.
