Własna konfiguracja do wtyczki w oknie opcji Visual Studio
10.04.2017 20:52
Jakiś czas temu przedstawiłem sposób na umieszczenie Timera Pomodoro na pasku statusu w Visual Studio. W kolejnym kroku dodamy opcje konfiguracyjne do wtyczki w standardowym oknie opcji IDE.
Do tej pory, aby pokazać timera na pasu statusu trzeba było ręcznie wywołać z menu opcję dodająca element do Visual Studio. Spróbujmy zatem skonfigurować tą poprzez oko opcji w IDE.
Autostart wtyczek w Visual Studio
Nasza wtyczka składa się z paczek (Packaga). W celu automatycznego uruchomienia dodatku przy starcie IDE musimy dodać atrybut do naszej klasy dziedziczącej po Package.
[ProvideAutoLoad(VSConstants.UICONTEXT.ShellInitialized_string)] public sealed class CommandShowTomatoStatusBarPackage : Package
Atrybut ProvideAutoLoad oznacza uruchomienie paczkę przy starce, zaś parametr określa kiedy ma to zrobić. Mamy kilka opcji:
- ShellInitialized_string
- NoSolution_string
- EmptySolution_string
- SolutionBuilding_string
- ...
W moim przypadku będzie to ShellInitialized_string, czyli załadownie solucji, kiedy UI VS zostanie w pełni załadowane.
Okienko opcji w Visual Studio
Własne okienko w oknie konfiguracyjnym można umieścić bardzo prosto. Dodajemy do solucji nowy element Visual Studio Package. Następnie tworzymy nową klasę, która dziedziczyć będzie po DialogPage:
public class OptionPage : DialogPage
W kolejnym kroku dodamy zmienną typu bool, która zostanie przez IDE potraktowana jako opcja w menu i wyrenderowana w postaci grida z wyborem wartości True/False. W tym przypadku będzie ona określać, czy Timer Pomodoro ma załadować się przy starcie Visual Studio lub nie:
[Category(Consts.OptionsCategoryBasicName)] [DisplayName(Consts.OptionsCategoryBasicStatusBarAutostartText)] [Description(Consts.OptionsCategoryBasicStatusBarAutostartInfoText)] public bool AutostartPomodoroStatusBar {get; set;}
Category określa nazwę podwęzła w naszych opcjach, zaś DisplayName i Description są odpowiednio nazwami dla zmiennej i jej opisu w okienku opcji.
Teraz łączymy stworzony przed chwilą Visual Studio Package z okienkiem konfiguracji. Robimy to za pomocą dodania atrybutu do klasy dziedziczącej z Package:
[ProvideOptionPage(typeof(OptionPage), Consts.PluginName, Consts.OptionsCategoryBasicName, 0, 0, true)]
Stworzona klasa OptionPage (dziedzicząca po DialogPage) będzie podczepiona pod drzewko opcji w konfiguracji IDE (Consts.PluginName to korzeń, a jest nazwą liścia Consts.OptionsCategoryBasicName). Efekt mamy następujący:
Odczyt danych z okienka opcji
Jak odczytywać aktualne dane z okienka konfiguracji IDE? Robimy to w następujący sposób:
((OptionPage)GetDialogPage(typeof(OptionPage))).AutostartPomodoroStatusBar;
GetDialogPage jest metodą w klasie dziedziczącej po Package. W ten sposób z okienka, które powstała poprzez stworzenie klasy OptionPage, odczytujemy zmienną AutostartPomodoroStatusBar.
W tak dość nieskomplikowany sposób otrzymaliśmy proste okienko konfiguracyjne w IDE.
Źródła dostępne są na GitHubie (branch master i POC): https://github.com/djfoxer/healthyWithVS/