Start · Sprachen · PHP · Referenz · UI\Menu

UI\Menu

Klasse

Repräsentiert ein Menü in einer UI-Anwendung, das vor dem ersten Fenster erstellt werden muss und auf jedem Fenster angezeigt werden kann.

seit PHP 0.9.9 Kategorie: misc

Signatur

class UI\Menu

Beschreibung

UI\Menu ist Teil der UI-Extension (php-ui / libui) und ermöglicht das Erstellen nativer Menüleisten in plattformübergreifenden Desktop-Anwendungen mit PHP. Menüs müssen zwingend erstellt werden, bevor das erste Fenster (UI\Window) erzeugt wird – andernfalls werden sie nicht korrekt angezeigt.

Über UI\Menu lassen sich klassische Menüleisten aufbauen, wie man sie aus nativen Desktop-Anwendungen kennt (z. B. Datei, Bearbeiten, Hilfe). Jeder Eintrag im Menü wird durch ein UI\MenuItem-Objekt repräsentiert, das über Methoden wie append() hinzugefügt wird.

Ein Menü ist global für die gesamte Anwendung sichtbar und wird auf allen Fenstern der Applikation angezeigt. Dies entspricht dem nativen Verhalten auf macOS (globale Menüleiste) sowie Windows und Linux (fensterspezifische Menüleiste).

  • Menüs müssen vor der Erstellung des ersten UI\Window instanziiert werden.
  • Menüeinträge werden mit UI\Menu::append() hinzugefügt.
  • Trennlinien können mit UI\Menu::appendSeparator() eingefügt werden.

Parameter

Name Typ Default Beschreibung
$name Pflicht string Der angezeigte Name des Menüs in der Menüleiste, z. B. "Datei" oder "Hilfe".

Beispiele

Einfaches Menü mit Einträgen erstellen

<?php
use UI\Menu;
use UI\MenuItem;
use UI\Window;
use UI\Size;

// Menü MUSS vor dem ersten Window erstellt werden
$menuDatei = new Menu('Datei');
$menuDatei->append('Öffnen', function() {
    echo "Öffnen geklickt\n";
});
$menuDatei->append('Speichern', function() {
    echo "Speichern geklickt\n";
});
$menuDatei->appendSeparator();
$menuDatei->appendQuit(); // Standard-Beenden-Eintrag

// Erst jetzt das Fenster erstellen
$window = new Window('Meine App', new Size(640, 480), true);
$window->show();

UI\run();

Mehrere Menüs mit Checkboxen und deaktivierten Einträgen

<?php
use UI\Menu;
use UI\Window;
use UI\Size;

// Menü 'Ansicht' mit Check-Eintrag
$menuAnsicht = new Menu('Ansicht');
$itemVollbild = $menuAnsicht->appendCheck('Vollbild');
$itemVollbild->setChecked(false);

// Menü 'Hilfe' mit deaktiviertem Eintrag
$menuHilfe = new Menu('Hilfe');
$itemUpdate = $menuHilfe->append('Nach Updates suchen', function() {
    echo "Suche nach Updates...\n";
});
$itemUpdate->disable();
$menuHilfe->appendAbout(); // Standard-Info-Eintrag

$window = new Window('Demo', new Size(800, 600), true);
$window->show();

UI\run();

// Wichtig · Fallstricke

Reihenfolge beachten: Das Erstellen von Menüs nach dem ersten UI\Window führt dazu, dass das Menü nicht angezeigt wird. Dies ist eine Einschränkung der zugrundeliegenden libui-Bibliothek und gilt plattformübergreifend.

Die UI\Menu-Klasse gehört zur experimentellen PECL-Extension ui, die sich noch im Entwicklungsstadium befinden kann. Prüfe die Verfügbarkeit der Extension auf deinem System mit extension_loaded('ui'). Die API kann sich in zukünftigen Versionen ändern.

Auf macOS wird die Menüleiste global oben am Bildschirm dargestellt, unabhängig vom aktiven Fenster – genau wie bei nativen macOS-Apps.