====== Meta API ====== API-Referenz für die WvdS VSCode UI Meta Extension. ===== Übersicht ===== Die Meta Extension verwaltet die Komponenten-Registry und stellt IntelliSense-Dienste bereit. uses WvdS.Meta.Registry, WvdS.Meta.IntelliSense; ===== Komponenten-Registry ===== ==== RegisterComponent ==== procedure RegisterComponent(const AInfo: TWvdSComponentInfo); Registriert eine neue Komponente in der Registry. type TWvdSComponentInfo = record Name: string; // z.B. 'Button' Description: string; // Kurzbeschreibung Category: string; // z.B. 'Input', 'Layout' Namespace: string; // z.B. 'WvdS.UI.Controls' Properties: TWvdSPropertyInfoArray; Events: TWvdSEventInfoArray; end; **Beispiel:** var Info: TWvdSComponentInfo; begin Info.Name := 'MyButton'; Info.Description := 'Custom button with icon'; Info.Category := 'Input'; Info.Namespace := 'MyApp.Controls'; SetLength(Info.Properties, 2); Info.Properties[0].Name := 'Content'; Info.Properties[0].PropType := 'string'; Info.Properties[0].DefaultValue := ''; Info.Properties[1].Name := 'IconPath'; Info.Properties[1].PropType := 'string'; Info.Properties[1].DefaultValue := ''; RegisterComponent(Info); end; ==== GetComponent ==== function GetComponent(const AName: string): TWvdSComponentInfo; Gibt Informationen zu einer Komponente zurück. ==== GetAllComponents ==== function GetAllComponents: TWvdSComponentInfoArray; Gibt alle registrierten Komponenten zurück. ==== GetComponentsByCategory ==== function GetComponentsByCategory(const ACategory: string): TWvdSComponentInfoArray; Gibt alle Komponenten einer Kategorie zurück. ===== Property-Informationen ===== ==== TWvdSPropertyInfo ==== type TWvdSPropertyInfo = record Name: string; // Property-Name PropType: string; // 'string', 'number', 'boolean', ... Description: string; // Dokumentation DefaultValue: string; // Standardwert Required: Boolean; // Pflichtfeld? EnumValues: TStringArray; // Bei Enum-Typ end; ==== GetPropertyInfo ==== function GetPropertyInfo( const AComponentName: string; const APropertyName: string ): TWvdSPropertyInfo; ===== Event-Informationen ===== ==== TWvdSEventInfo ==== type TWvdSEventInfo = record Name: string; // Event-Name (z.B. 'Click') Description: string; // Dokumentation HandlerSignature: string; // z.B. 'procedure(Sender: TObject)' end; ===== IntelliSense-Provider ===== ==== GetCompletions ==== function GetCompletions(AContext: TWvdSCompletionContext): TWvdSCompletionItemArray; Gibt Vervollständigungsvorschläge für eine Position zurück. type TWvdSCompletionContext = record DocumentUri: string; Position: TPosition; TriggerCharacter: Char; CurrentElement: string; CurrentAttribute: string; end; TWvdSCompletionItem = record Label: string; Kind: TWvdSCompletionKind; Detail: string; Documentation: string; InsertText: string; end; ==== GetHoverInfo ==== function GetHoverInfo( const ADocumentUri: string; APosition: TPosition ): TWvdSHoverInfo; Gibt Hover-Dokumentation für eine Position zurück. type TWvdSHoverInfo = record Contents: string; // Markdown-Inhalt Range: TRange; // Bereich im Dokument end; ===== Cache-Verwaltung ===== ==== RefreshRegistry ==== procedure RefreshRegistry; Lädt die Registry neu und aktualisiert den Cache. ==== ClearCache ==== procedure ClearCache; Löscht den Komponenten-Cache. ==== GetCachePath ==== function GetCachePath: string; Gibt den Pfad zum Cache-Verzeichnis zurück. ===== Annotations ===== Komponenten können via Annotations registriert werden: type ComponentInfoAttribute = class(TCustomAttribute) FName: string; FDescription: string; FCategory: string; public constructor Create(const AName, ADescription, ACategory: string); end; PropertyInfoAttribute = class(TCustomAttribute) FDescription: string; FDefaultValue: string; public constructor Create(const ADescription: string; const ADefault: string = ''); end; **Verwendung:** type {$M+} [ComponentInfo('MyButton', 'Button with icon', 'Input')] TMyButton = class(TWvdSButton) published [PropertyInfo('Path to icon image', '')] property IconPath: string read FIconPath write SetIconPath; [PropertyInfo('Button text', 'Click')] property Content: string read FContent write SetContent; end; ===== Siehe auch ===== * [[.:core-api|Core API]] * [[.:vscode-wrapper|VSCode Wrapper]] * [[..:p:meta|UI Meta Extension]]