Patrząc na aplikacje takie jak Visual Studio, czy Adobe Creative Suite, zauważyłem, że rozszerzenia mają zazwyczaj kilka wejść do programu. Podstawowym jest menu. Może to być dodatkowa pozycja w menu ,,Narzędzia”, może to być osobne menu. Jest to dosyć wygodne, ponieważ nie musimy się martwić gdzie ustawić nasz przycisk i jak powinien wyglądać.
Kolejne punkty wejścia to toolbar (pasek narzędzi), menu kontekstowe (pod prawym przyciskiem myszy) i magiczne skróty klawiszowe (które moim zdaniem powinny mieć odpowiedniki w menu). Jak do tego podejść od strony kodu? Oczywiście przez interfejsy 😉
Na razie nie myślałem jeszcze dokładnie jak to będzie wyglądało, natomiast ogólny zarys wygląda mniej więcej tak:
IMenu
,IMenuElement
- pozycja w menu, będzie możliwe proste, ponieważ nie ma to zastępować implementacji fizycznej w GUI, a jedynie uprościć złożenie menu do kupy. Z tych samych interfejsów będą korzystały wbudowane pozycje menu.IToolMenuElement : IMenuElement
- proste rozróżnienie pozycji które mają być dodane do menu ,,Narzędzia”.IToolbarSet
,IToolbarButton
- podobnie jak z menu. Chciałbym również aby, jak w MS Wordzie, narzędzia były grupowane w paczki, które można dowolnie przesuwać.IContextMenu
,IContextMenuElement
- podobnie jak z menu, ale będą miały dodatkowe ograniczenie do kontekstu w jakim menu jest widoczne.
Dodatkowo będzie interfejs IPlugin
, który tak jak IApplication
będzie służył do dodatkowej konfiguracji typów w kontenerze oraz np. wczytywania pewnych konfiguracji.