Skip to content

Commit d9f20f8

Browse files
AmadeusWjustcla
authored andcommitted
Gets and sets outlining and navigation bar setting (#3)
1 parent 93f4dbd commit d9f20f8

File tree

1 file changed

+29
-2
lines changed

1 file changed

+29
-2
lines changed

HotSettings/HotSettingsCommandHandler.cs

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
using Microsoft.VisualStudio.Text.Editor;
77
using System;
88
using System.ComponentModel.Design;
9+
using Microsoft.VisualStudio.TextManager.Interop;
10+
using System.Runtime.InteropServices;
911

1012
namespace 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

Comments
 (0)