Inhaltsverzeichnis
Sidebar-Views
Die Seitenleiste ist der primäre Ort für navigierende und unterstützende Inhalte: Dateiexplorer, Suchpanels, Navigatorbäume und Übersichtslisten. Add-ins registrieren Views in der Seitenleiste, und der Host bettet sie als Panels ein. Mehrere Views können zu einem Accordion gruppiert werden, sodass verwandte Inhalte visuell zusammengehören.
Zurück zur Contributions-Übersicht oder zur Hauptübersicht.
View-Orte
Der Host bietet vier Orte, an denen Views platziert werden können:
| Ort | Schlüssel | Beschreibung |
| Primäre Seitenleiste | sidebar | Die linke Seitenleiste. Standardort für Navigation und Übersichten. |
| Sekundäre Seitenleiste | secondary-sidebar | Eine optionale zweite Seitenleiste auf der rechten Seite. Geeignet für ergänzende Informationen. |
| Bottom-Panel | panel | Das Panel am unteren Rand. Typischerweise für Ausgaben, Terminals und Protokolle. |
| Editor-Bereich | editor | Innerhalb des Dokument-Bereichs. Selten verwendet, da hierfür der TWvdSDocumentFrame besser geeignet ist. |
Manifest-Deklaration
"contributes": { "views": { "sidebar": [ { "id": "assets.navigator", "name": "Assets-Navigator", "icon": "media/navigator.svg", "containerId": "assets-explorer" }, { "id": "assets.categories", "name": "Kategorien", "icon": "media/categories.svg", "containerId": "assets-explorer" } ], "panel": [ { "id": "assets.log", "name": "Asset-Protokoll", "icon": "media/log.svg" } ] } }
| Feld | Pflicht | Beschreibung |
id | ja | Eindeutiger Bezeichner der View. Wird in view/title- und view/item/context-Menüs referenziert. |
name | ja | Anzeigename, der als Panel-Überschrift erscheint. |
icon | nein | Icon für die Activity-Bar (Seitenleiste links) und die Panel-Überschrift. |
containerId | nein | Gruppierungs-Id für das Accordion. Views mit demselben containerId werden in einem gemeinsamen Container zusammengefasst. |
Accordion-Gruppierung
Wenn mehrere Views dieselbe containerId haben, fasst der Host sie zu einem Accordion zusammen. Im Beispiel oben bilden assets.navigator und assets.categories gemeinsam die Gruppe assets-explorer. In der Seitenleiste erscheint ein einzelner Container mit zwei zusammenklappbaren Sektionen.
Dieses Verhalten ermöglicht es, dass verschiedene Add-ins Views in dieselbe Gruppe einfügen. Ein Basis-Add-in könnte den Navigator bereitstellen und ein Erweiterungs-Add-in eine zusätzliche Kategorie-Ansicht — beide landen im selben Accordion, weil sie dieselbe containerId verwenden.
Ohne containerId erhält jede View ihren eigenen Container in der Seitenleiste.
View-Inhalt
Eine View wird durch einen TWvdSDocumentFrame dargestellt, der über ISidebarService registriert wird:
procedure TAssetPlugin.Activate(const AContext: IExtensionContext); begin AContext.Subscribe( FHost.SideBar.RegisterPanel('assets.navigator', 'Assets-Navigator', 'media/navigator.svg', TAssetNavigatorFrame) ); end;
Der Host erzeugt eine Instanz von TAssetNavigatorFrame, wenn die Seitenleiste die View anzeigt. Die Frame-Klasse muss von TWvdSDocumentFrame erben.
Alternativ kann eine View über ITreeViewService mit einem ITreeDataProvider verbunden werden, wenn ein Baumstruktur-Panel genügt:
AContext.Subscribe( FHost.TreeViews.RegisterTreeDataProvider('assets.navigator', TAssetTreeProvider.Create) );
In diesem Fall erzeugt der Host automatisch ein TreeView-Control und füllt es mit den Daten des Providers.
Titelleisten-Aktionen
Jede View kann Aktionsbuttons in ihrer Titelleiste haben. Diese werden über den view/title-Ort im Menü-Merge deklariert:
"menus": { "view/title": [ { "command": "assets.refresh", "when": "view == assets.navigator", "group": "navigation" }, { "command": "assets.add", "when": "view == assets.navigator", "group": "navigation" } ] }
Der when-Ausdruck view == assets.navigator stellt sicher, dass die Buttons nur in der Titelleiste der richtigen View erscheinen. Ohne diesen Filter würden sie in jeder View-Titelleiste auftauchen.
Welcome-Inhalte
Wenn eine View leer ist — etwa weil noch keine Daten geladen wurden —, kann ein Welcome-Inhalt angezeigt werden:
"viewsWelcome": [ { "viewId": "assets.navigator", "content": "Noch keine Anlagen vorhanden.\n[Erste Anlage erstellen](command:assets.create)", "when": "!hasAssets", "group": "main", "order": 1 } ]
Der content unterstützt einfaches Markdown. Links im Format [Text](command:command.id) werden als Buttons gerendert, die beim Klick den referenzierten Command auslösen. Der when-Ausdruck bestimmt, ob der Welcome-Inhalt angezeigt wird.
Sichtbarkeit steuern
Views können programmatisch ein- und ausgeblendet werden:
// View anzeigen FHost.SideBar.ShowPanel('assets.navigator'); // View verstecken FHost.SideBar.HidePanel('assets.navigator');
Das ist nützlich, wenn ein Add-in auf ein Ereignis reagieren und die Aufmerksamkeit des Benutzers auf ein bestimmtes Panel lenken möchte.
Weiter zur StatusBar oder zurück zur Contributions-Übersicht.