3.16 Kontextmenüs

RapaGUI unterstützt Kontextmenüs für jedes seiner Widget-Klassen. Kontextmenüs werden den einzelnen Widgets mithilfe des Attributs Area.ContextMenu zugewiesen. Da die Area-Klasse (Bereich) die Oberklasse für alle Widgets ist, können Sie dieses Attribut für jedes MOAI-Objekt verwenden, das ein Widget erstellt. Wenn Sie Area.ContextMenu für ein Widget definiert haben, zeigt RapaGUI automatisch das Kontextmenü an, wenn der Benutzer mit der rechten Maustaste klickt, während sich der Mauszeiger über einem Widget befindet, an das ein Kontextmenü angehängt ist.

Area.ContextMenu erwartet ein Objekt, das von der Menu-Klasse als Argument abgeleitet ist, so dass Sie zuerst ein solches MOAI-Objekt für Ihr Kontextmenü in XML erstellen müssen. Es ist sehr wichtig zu beachten, dass Sie Ihre Menüs im Bereich <application> definieren müssen, da Menüs globale Objekte sind und später nur an Fenster oder Widgets angehängt werden. Aus diesem Grund ist es nicht erlaubt, Menüs in einem Abschnitt <window> zu definieren.

Hier ist ein Beispiel, in dem wir ein Kontextmenü zum Ausschneiden, Kopieren und Einfügen in ein Objekt vom Typ Texteditor-Klasse einfügen:

 
<menu title="Context menu" id="ctxtmenu">
   <item>Cut</item>
   <item>Copy</item>
   <item>Paste</item>
</menu>

<window>
...
   <texteditor contextmenu="ctxtmenu"/>
...
</window>

Beachten Sie, dass bei der Verwendung der Menu-Klasse zur Erstellung von Kontextmenüs das Attribut Menu.Title nur unter AmigaOS und kompatiblen Betriebssystemen verwendet wird. Kontextmenüs unter Windows, Linux und macOS zeigen keinen Titel an.

Beachten Sie auch, dass Kontextmenü-Ereignisse über den standardmäßigen Mechanismus Menuitem.Selected und nicht über eine speziellen Kontextmenü-Callback-Funktion ausgeliefert werden. Da Sie dasselbe Menüobjekt als Kontextmenü für mehrere Widgets verwenden können, benötigen Sie eine Möglichkeit, das Widget herauszufinden, dessen Kontextmenü das Ereignis ausgelöst hat. Um Ihnen diese Informationen zu geben, enthält die Ereignismeldung einen zusätzlichen Eintrag mit dem Namen "Parent", der die ID des Widgets des Kontextmenüs enthält. Auf diese Weise können Sie dasselbe Menüobjekt als Kontextmenü für mehrere übergeordnete Widgets wiederverwenden.

AmigaOS-Benutzer beachten bitte, dass MUI keine Kontextmenü-Objekte in Fenstern freigeben kann. Sie dürfen nicht dasselbe Menüobjekt mit Widgets verwenden, die sich in verschiedenen Fenstern befinden. Ein Menüobjekt für mehrere Widgets im selben Fenster zu verwenden, funktioniert, aber nicht für Widgets in einem anderen Fenster. Alle anderen Plattformen haben diese Einschränkung nicht, nur AmigaOS ist hiervon betroffen.


Navigation zeigen