Skip to content

Commit a9d582e

Browse files
committed
Demonstrate how to create a split button.
1 parent c95c6fe commit a9d582e

File tree

4 files changed

+87
-0
lines changed

4 files changed

+87
-0
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
using System.Threading.Tasks;
2+
using Community.VisualStudio.Toolkit;
3+
using Microsoft.VisualStudio.Shell;
4+
using Microsoft.VisualStudio.Shell.Interop;
5+
6+
namespace TestExtension.Commands
7+
{
8+
[Command(PackageIds.SplitButton)]
9+
internal sealed class SplitButtonMenuCommand : BaseCommand<SplitButtonMenuCommand>
10+
{
11+
protected override async Task ExecuteAsync(OleMenuCmdEventArgs e)
12+
{
13+
await VS.MessageBox.ShowAsync("The main split button was pressed.", buttons: OLEMSGBUTTON.OLEMSGBUTTON_OK);
14+
}
15+
}
16+
17+
[Command(PackageIds.SplitButtonChild1)]
18+
internal sealed class SplitButton1Command : BaseCommand<SplitButton1Command>
19+
{
20+
protected override async Task ExecuteAsync(OleMenuCmdEventArgs e)
21+
{
22+
await VS.MessageBox.ShowAsync("The first split button child was pressed.", buttons: OLEMSGBUTTON.OLEMSGBUTTON_OK);
23+
}
24+
}
25+
26+
[Command(PackageIds.SplitButtonChild2)]
27+
internal sealed class SplitButton2Command : BaseCommand<SplitButton2Command>
28+
{
29+
protected override async Task ExecuteAsync(OleMenuCmdEventArgs e)
30+
{
31+
await VS.MessageBox.ShowAsync("The second split button child was pressed.", buttons: OLEMSGBUTTON.OLEMSGBUTTON_OK);
32+
33+
// Toggle the checked state to demonstrate having a check mark on the button.
34+
Command.Checked = !Command.Checked;
35+
}
36+
}
37+
}

demo/VSSDK.TestExtension/VSCommandTable.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,12 @@ internal sealed partial class PackageIds
2323
public const int TestExtensionMainMenu = 0x1000;
2424
public const int TestExtensionSolutionExplorerMenu = 0x1001;
2525
public const int TestExtensionEditProjectFileMenu = 0x1002;
26+
public const int SplitButtonMenu = 0x1003;
2627
public const int TestExtensionMainMenuGroup1 = 0x1100;
2728
public const int TestExtensionSolutionExplorerGroup = 0x1101;
2829
public const int TestExtensionEditProjectFileGroup = 0x1102;
2930
public const int RunnerWindowToolbarGroup = 0x1103;
31+
public const int SplitButtonGroup = 0x1104;
3032
public const int RunnerWindow = 0x0100;
3133
public const int ThemeWindow = 0x0101;
3234
public const int MultiInstanceWindow = 0x0102;
@@ -43,6 +45,9 @@ internal sealed partial class PackageIds
4345
public const int UnloadSelectedProject = 0x0113;
4446
public const int SendMessageToRunnerWindow = 0x0114;
4547
public const int FontsAndColorsWindow = 0x0115;
48+
public const int SplitButton = 0x0116;
49+
public const int SplitButtonChild1 = 0x0117;
50+
public const int SplitButtonChild2 = 0x0118;
4651
public const int EditProjectFile = 0x2001;
4752
public const int RunnerWindowToolbar = 0x0BB8;
4853
}

demo/VSSDK.TestExtension/VSCommandTable.vsct

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,14 @@
3838
<ButtonText>Runner Window Toolbar</ButtonText>
3939
</Strings>
4040
</Menu>
41+
42+
<Menu guid="TestExtension" id="SplitButtonMenu" type="MenuController">
43+
<Parent guid="VSMainMenu" id="StandardToolbar.RunBuildGroup"/>
44+
<CommandFlag>NotInTBList</CommandFlag>
45+
<Strings>
46+
<ButtonText>Split Button Menu</ButtonText>
47+
</Strings>
48+
</Menu>
4149
</Menus>
4250

4351
<Groups>
@@ -56,6 +64,10 @@
5664
<Group guid="TestExtension" id="RunnerWindowToolbarGroup" priority="0x0000">
5765
<Parent guid="TestExtension" id="RunnerWindowToolbar" />
5866
</Group>
67+
68+
<Group guid="TestExtension" id="SplitButtonGroup" priority="0x0000">
69+
<Parent guid="TestExtension" id="SplitButtonMenu" />
70+
</Group>
5971
</Groups>
6072

6173
<Buttons>
@@ -203,6 +215,33 @@
203215
<ButtonText>Send Message to Runner Window</ButtonText>
204216
</Strings>
205217
</Button>
218+
219+
<Button guid="TestExtension" id="SplitButton" priority="0x0001">
220+
<Parent guid="TestExtension" id="SplitButtonGroup"/>
221+
<Icon guid="ImageCatalogGuid" id="Search"/>
222+
<CommandFlag>IconIsMoniker</CommandFlag>
223+
<CommandFlag>NoShowOnMenuController</CommandFlag>
224+
<CommandFlag>FixMenuController</CommandFlag>
225+
<Strings>
226+
<ButtonText>Split Button</ButtonText>
227+
</Strings>
228+
</Button>
229+
230+
<Button guid="TestExtension" id="SplitButtonChild1" priority="0x0001">
231+
<Parent guid="TestExtension" id="SplitButtonGroup"/>
232+
<Icon guid="ImageCatalogGuid" id="SearchFolderOpened"/>
233+
<CommandFlag>IconIsMoniker</CommandFlag>
234+
<Strings>
235+
<ButtonText>Split Button Child #1</ButtonText>
236+
</Strings>
237+
</Button>
238+
239+
<Button guid="TestExtension" id="SplitButtonChild2" priority="0x0002">
240+
<Parent guid="TestExtension" id="SplitButtonGroup"/>
241+
<Strings>
242+
<ButtonText>Split Button Child #2</ButtonText>
243+
</Strings>
244+
</Button>
206245
</Buttons>
207246
</Commands>
208247

@@ -225,11 +264,13 @@
225264
<IDSymbol name="TestExtensionMainMenu" value="0x1000" />
226265
<IDSymbol name="TestExtensionSolutionExplorerMenu" value="0x1001" />
227266
<IDSymbol name="TestExtensionEditProjectFileMenu" value="0x1002" />
267+
<IDSymbol name="SplitButtonMenu" value="0x1003" />
228268

229269
<IDSymbol name="TestExtensionMainMenuGroup1" value="0x1100" />
230270
<IDSymbol name="TestExtensionSolutionExplorerGroup" value="0x1101" />
231271
<IDSymbol name="TestExtensionEditProjectFileGroup" value="0x1102" />
232272
<IDSymbol name="RunnerWindowToolbarGroup" value="0x1103" />
273+
<IDSymbol name="SplitButtonGroup" value="0x1104" />
233274

234275
<IDSymbol name="RunnerWindow" value="0x0100" />
235276
<IDSymbol name="ThemeWindow" value="0x0101" />
@@ -247,6 +288,9 @@
247288
<IDSymbol name="UnloadSelectedProject" value="0x0113" />
248289
<IDSymbol name="SendMessageToRunnerWindow" value="0x0114" />
249290
<IDSymbol name="FontsAndColorsWindow" value="0x0115" />
291+
<IDSymbol name="SplitButton" value="0x0116" />
292+
<IDSymbol name="SplitButtonChild1" value="0x0117" />
293+
<IDSymbol name="SplitButtonChild2" value="0x0118" />
250294

251295
<IDSymbol name="EditProjectFile" value="0x2001" />
252296

demo/VSSDK.TestExtension/VSSDK.TestExtension.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
<Compile Include="Commands\ToggleVsixManifestFilterCommand.cs" />
6363
<Compile Include="Commands\RunnerWindowCommand.cs" />
6464
<Compile Include="Commands\ThemeWindowCommand.cs" />
65+
<Compile Include="Commands\SplitButtonCommand.cs" />
6566
<Compile Include="Commands\UnloadSelectedProject.cs" />
6667
<Compile Include="MEF\HighlightWord.cs" />
6768
<Compile Include="MEF\TextViewCreationListener.cs" />

0 commit comments

Comments
 (0)