Displaying hierarchical list of options in Ribbon

<?xml encoding=”UTF-8″>By Balaji Ramamoorthy

If you only need a list of options to be displayed, the RibbonSplitButton should do. Here is a blog post on that. But if you need further sub items for any one of those options, the RibbonMenuButton is suitable. Here is a sample code to display the options as shown in the below screenshot :

MenuButton

 <span>// Requires reference to AdWindows.dll</span><span> </span>
 <span>using</span><span>  Autodesk.Windows;</span>
 <span>using</span><span>  System.Drawing.Imaging;</span>
 
 [CommandMethod(<span>"RibbonMenuButton"</span><span> )]</span>
 <span>public</span><span>  <span>void</span><span>  RibbonMenuButton()</span></span>
 <span>{</span>
     RibbonControl ribbonControl 
         = ComponentManager.Ribbon;
 
     RibbonTab Tab = <span>new</span><span>  RibbonTab();</span>
     Tab.Title = <span>"Test Ribbon"</span><span> ;</span>
     Tab.Id = <span>"TESTRIBBON_TAB_ID"</span><span> ;</span>
 
     ribbonControl.Tabs.Add(Tab);
 
     RibbonPanelSource srcPanel 
         = <span>new</span><span>  RibbonPanelSource();</span>
     srcPanel.Title = <span>"Panel1"</span><span> ;</span>
 
     RibbonPanel Panel = <span>new</span><span>  RibbonPanel();</span>
     Panel.Source = srcPanel;
     Tab.Panels.Add(Panel);
 
     RibbonMenuItem button1 
         = <span>new</span><span>  RibbonMenuItem();</span>
     button1.Text = <span>"Button1"</span><span> ;</span>
     button1.ShowText = <span>true</span><span> ;</span>
     button1.LargeImage 
         = getBitmap(Resources.Resource1.Image1, 32, 32);
     button1.Image 
         = getBitmap(Resources.Resource1.Image1, 16, 16);
     button1.CommandHandler = <span>new</span><span>  MenuButtonCmdHandler();</span>
 
     RibbonMenuItem subButton1 = <span>new</span><span>  RibbonMenuItem();</span>
     subButton1.Text = <span>"SubButton1"</span><span> ;</span>
     subButton1.ShowText = <span>true</span><span> ;</span>
     subButton1.LargeImage 
         = getBitmap(Resources.Resource1.Image1, 32, 32);
     subButton1.Image 
         = getBitmap(Resources.Resource1.Image1, 16, 16);
     subButton1.CommandHandler 
         = <span>new</span><span>  MenuButtonCmdHandler();</span>
 
     RibbonMenuItem subButton2 = <span>new</span><span>  RibbonMenuItem();</span>
     subButton2.Text = <span>"SubButton2"</span><span> ;</span>
     subButton2.ShowText = <span>true</span><span> ;</span>
     subButton2.LargeImage 
         = getBitmap(Resources.Resource1.Image1, 32, 32);
     subButton2.Image 
         = getBitmap(Resources.Resource1.Image1, 16, 16);
     subButton2.CommandHandler 
         = <span>new</span><span>  MenuButtonCmdHandler();</span>
 
     button1.Items.Add(subButton1);
     button1.Items.Add(subButton2);
 
     RibbonMenuItem button2 = <span>new</span><span>  RibbonMenuItem();</span>
     button2.Text = <span>"Button2"</span><span> ;</span>
     button2.ShowText = <span>true</span><span> ;</span>
     button2.LargeImage 
         = getBitmap(Resources.Resource1.Image1, 32, 32);
     button2.Image 
         = getBitmap(Resources.Resource1.Image1, 16, 16);
     button2.CommandHandler = <span>new</span><span>  MenuButtonCmdHandler();</span>
 
     RibbonMenuButton ribMenuButton 
         = <span>new</span><span>  RibbonMenuButton();</span>
 
     ribMenuButton.Id = <span>"ADN.RibbonMenuButton.1"</span><span> ;</span>
 
     ribMenuButton.Text = <span>"RibbonMenuButton"</span><span> ;</span>
     ribMenuButton.ShowText = <span>true</span><span> ;</span>
     ribMenuButton.Size = RibbonItemSize.Large;
     ribMenuButton.LargeImage 
         = getBitmap(Resources.Resource1.Image1, 32, 32);
     ribMenuButton.Image 
         = getBitmap(Resources.Resource1.Image1, 16, 16);
     ribMenuButton.ShowImage = <span>true</span><span> ;</span>
     ribMenuButton.MaxHeight = <span>double</span><span> .PositiveInfinity;</span>
     ribMenuButton.MinHeight = 0;
     ribMenuButton.IsSplit = <span>true</span><span> ;</span>
     ribMenuButton.IsSynchronizedWithCurrentItem = <span>true</span><span> ;</span>
 
     ribMenuButton.Items.Add(button1);
     ribMenuButton.Items.Add(button2);
 
     srcPanel.Items.Add(ribMenuButton);
 
     Tab.IsActive = <span>true</span><span> ;</span>
 <span>}</span>
 
 BitmapImage getBitmap(Bitmap bitmap, <span>int</span><span>  height, <span>int</span><span>  width)</span></span>
 <span>{</span>
     MemoryStream stream = <span>new</span><span>  MemoryStream();</span>
     bitmap.Save(stream, ImageFormat.Png);
 
     BitmapImage bmp = <span>new</span><span>  BitmapImage();</span>
     bmp.BeginInit();
     bmp.StreamSource = <span>new</span><span>  MemoryStream(stream.ToArray());</span>
     bmp.DecodePixelHeight = height;
     bmp.DecodePixelWidth = width;
     bmp.EndInit();
 
     <span>return</span><span>  bmp;</span>
 <span>}</span>
 
 <span>public</span><span>  <span>class</span><span>  MenuButtonCmdHandler </span></span>
     : System.Windows.Input.ICommand
 <span>{</span>
     <span>public</span><span>  <span>bool</span><span>  CanExecute(<span>object</span><span>  parameter)</span></span></span>
     <span>{</span>
         <span>return</span><span>  <span>true</span><span> ;</span></span>
     <span>}</span>
 
     <span>public</span><span>  <span>event</span><span>  EventHandler CanExecuteChanged;</span></span>
 
     <span>public</span><span>  <span>void</span><span>  Execute(<span>object</span><span>  parameter)</span></span></span>
     <span>{</span>
         Document doc 
             = Application.DocumentManager.MdiActiveDocument;
 
         <span>if</span><span>  (parameter <span>is</span><span>  RibbonMenuItem)</span></span>
         <span>{</span>
             RibbonMenuItem menuItem 
                 = parameter <span>as</span><span>  RibbonMenuItem;</span>
             <span>if</span><span>  (menuItem != <span>null</span><span> )</span></span>
             <span>{</span>
                 doc.Editor.WriteMessage(
                     <span>"\nMenu Item Executed: "</span><span>  </span>
                     + menuItem.Text);
             <span>}</span>
         <span>}</span>
     <span>}</span>
 <span>}</span>
 


Comments

Leave a Reply

Discover more from Autodesk Developer Blog

Subscribe now to keep reading and get access to the full archive.

Continue reading