Architektura rozszerzeń

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.