66using Microsoft . VisualStudio . Text . Editor ;
77using System ;
88using System . ComponentModel . Design ;
9+ using Microsoft . VisualStudio . TextManager . Interop ;
10+ using System . Runtime . InteropServices ;
911
1012namespace HotSettings
1113{
@@ -21,6 +23,7 @@ internal sealed class HotSettingsCommandHandler
2123
2224 private SettingsStore SettingsStore ;
2325 private IEditorOptionsFactoryService OptionsService ;
26+ private IVsTextManager TextManager ;
2427
2528 public static OleMenuCommand ToggleShowMarksCmd ;
2629
@@ -67,6 +70,7 @@ private HotSettingsCommandHandler(Package package)
6770 SettingsStore = settingsManager . GetReadOnlySettingsStore ( SettingsScope . UserSettings ) ;
6871
6972 OptionsService = ServicesUtil . GetMefService < IEditorOptionsFactoryService > ( this . ServiceProvider ) ;
73+ TextManager = ( IVsTextManager ) ServiceProvider . GetService ( typeof ( SVsTextManager ) ) ;
7074
7175 CreateCommands ( ) ;
7276 }
@@ -156,6 +160,7 @@ public void OnBeforeQueryStatus(object sender, EventArgs e)
156160 this . HideItem ( sender ) ;
157161 break ;
158162 case Constants . ToggleOutliningCmdId :
163+ this . HandleOutliningQueryStatus ( sender ) ;
159164 break ;
160165 case Constants . ToggleLiveUnitTestingCmdId :
161166 ToggleLiveUnitTesting . OnBeforeQueryStatus ( sender , e ) ;
@@ -165,7 +170,7 @@ public void OnBeforeQueryStatus(object sender, EventArgs e)
165170 break ;
166171 // Editor Settings
167172 case Constants . ToggleNavigationBarCmdId :
168- this . HandleQueryStatusCheckedUserProperty ( sender , "Text Editor \\ CSharp" , "Dropbox Bar" ) ;
173+ this . HandleNavBarQueryStatus ( sender ) ;
169174 break ;
170175 case Constants . ToggleCodeLensCmdId :
171176 this . HandleToggleCodeLensQueryStatus ( sender ) ;
@@ -261,6 +266,25 @@ private void HandleQueryStatusCheckedUserProperty(object sender, string collecti
261266 }
262267 }
263268
269+ private void HandleNavBarQueryStatus ( object sender )
270+ {
271+ LANGPREFERENCES [ ] langPrefs = new LANGPREFERENCES [ ] { new LANGPREFERENCES ( ) } ;
272+ VIEWPREFERENCES [ ] viewPrefs = new VIEWPREFERENCES [ ] { new VIEWPREFERENCES ( ) } ;
273+ langPrefs [ 0 ] . guidLang = new Guid ( 0x8239bec4 , 0xee87 , 0x11d0 , 0x8c , 0x98 , 0x0 , 0xc0 , 0x4f , 0xc2 , 0xab , 0x22 ) ; // guidDefaultFileType
274+
275+ Marshal . ThrowExceptionForHR ( TextManager . GetUserPreferences ( viewPrefs , null , langPrefs , null ) ) ;
276+ LANGPREFERENCES lp = langPrefs [ 0 ] ;
277+ bool enabled = lp . fDropdownBar == 1 ;
278+ UpdateCheckedState ( sender , enabled ) ;
279+ }
280+
281+ private void HandleOutliningQueryStatus ( object sender )
282+ {
283+ var enabled = ShellUtil . IsCommandAvailable ( "Edit.StopOutlining" ) ;
284+ var disabled = ShellUtil . IsCommandAvailable ( "Edit.StartAutomaticOutlining" ) ;
285+ UpdateCheckedState ( sender , enabled ) ;
286+ }
287+
264288 private void HandleToggleCodeLensQueryStatus ( object sender )
265289 {
266290 var enabled = ( bool ) OptionsService . GlobalOptions . GetOptionValue ( "IsCodeLensEnabled" ) ;
@@ -318,7 +342,10 @@ private void MenuItemCallback(object sender, EventArgs e)
318342 // TODO: Implement this
319343 break ;
320344 case Constants . ToggleOutliningCmdId :
321- // TODO: Implement this - Like Toggle Live Unit Testing
345+ if ( newCheckedState )
346+ ShellUtil . ExecuteCommand ( "Edit.StartAutomaticOutlining" ) ;
347+ else
348+ ShellUtil . ExecuteCommand ( "Edit.StopOutlining" ) ;
322349 break ;
323350 case Constants . ToggleLiveUnitTestingCmdId :
324351 ToggleLiveUnitTesting . ToggleLUT ( sender , e ) ;
0 commit comments