254 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			254 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.Text;
 | |
| using System.ComponentModel.Design;
 | |
| using System.ComponentModel;
 | |
| using System.Windows.Forms;
 | |
| 
 | |
| namespace DevComponents.DotNetBar.Design
 | |
| {
 | |
|     public class ApplicationButtonDesigner : BaseItemDesigner
 | |
|     {
 | |
|         #region Internal Implementation
 | |
|         protected override DesignerVerb[] GetVerbs()
 | |
|         {
 | |
|             DesignerVerb[] baseVerbs = base.GetVerbs();
 | |
|             int verbsCount = baseVerbs.Length + 1;
 | |
|             if (IsBackstageSet) verbsCount = 1;
 | |
| 
 | |
|             bool includeClearSubItems = false;
 | |
|             ApplicationButton appButton = this.Component as ApplicationButton;
 | |
|             if (appButton != null && appButton.BackstageTab != null && appButton.SubItems.Count > 0)
 | |
|             {
 | |
|                 includeClearSubItems = true;
 | |
|                 verbsCount++;
 | |
|             }
 | |
| 
 | |
|             int verbsOffset = 1;
 | |
|             DesignerVerb[] verbs = new DesignerVerb[verbsCount];
 | |
|             verbs[0] = new DesignerVerb((IsBackstageSet ? "Remove Backstage" : "Set Backstage"), new EventHandler(CreateBackstageTab));
 | |
| 
 | |
|             if (includeClearSubItems)
 | |
|             {
 | |
|                 verbs[1] = new DesignerVerb("Clear Sub-items", new EventHandler(ClearSubItems));
 | |
|                 verbsOffset++;
 | |
|             }
 | |
| 
 | |
|             if (!IsBackstageSet)
 | |
|             {
 | |
|                 for (int i = 0; i < baseVerbs.Length; i++)
 | |
|                 {
 | |
|                     verbs[i + verbsOffset] = baseVerbs[i];
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             return verbs;
 | |
|         }
 | |
| 
 | |
|         private void ClearSubItems(object sender, EventArgs e)
 | |
|         {
 | |
|             if (MessageBox.Show("Are you sure you want to delete all sub-items?", "DotNetBar Application Button", MessageBoxButtons.YesNo) == DialogResult.No) return;
 | |
| 
 | |
|             IDesignerHost dh = GetService(typeof(IDesignerHost)) as IDesignerHost;
 | |
|             IComponentChangeService cc = GetService(typeof(IComponentChangeService)) as IComponentChangeService;
 | |
|             if (dh == null) return;
 | |
|             ApplicationButton appButton = (ApplicationButton)this.Component;
 | |
|             if (appButton.SubItems.Count == 0) return;
 | |
| 
 | |
|             DesignerTransaction trans = dh.CreateTransaction("Clearing Application Button SubItems");
 | |
|             try
 | |
|             {
 | |
|                 cc.OnComponentChanging(appButton, TypeDescriptor.GetProperties(appButton)["SubItems"]);
 | |
|                 BaseItem[] items = new BaseItem[appButton.SubItems.Count];
 | |
|                 appButton.SubItems.CopyTo(items, 0);
 | |
|                 foreach (BaseItem item in items)
 | |
|                 {
 | |
|                     appButton.SubItems.Remove(item);
 | |
|                     dh.DestroyComponent(item);
 | |
|                 }
 | |
|                 cc.OnComponentChanged(appButton, TypeDescriptor.GetProperties(appButton)["SubItems"], null, null);
 | |
|             }
 | |
|             catch
 | |
|             {
 | |
|                 trans.Cancel();
 | |
|                 throw;
 | |
|             }
 | |
|             finally
 | |
|             {
 | |
|                 if (!trans.Canceled)
 | |
|                     trans.Commit();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private bool IsBackstageSet
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 ApplicationButton appButton = (ApplicationButton)this.Component;
 | |
|                 if (appButton != null && appButton.BackstageTab != null) return true;
 | |
|                 return false;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private void CreateBackstageTab()
 | |
|         {
 | |
|             IDesignerHost dh = GetService(typeof(IDesignerHost)) as IDesignerHost;
 | |
|             IComponentChangeService cc = GetService(typeof(IComponentChangeService)) as IComponentChangeService;
 | |
|             if (dh == null) return;
 | |
| 
 | |
|             ApplicationButton appButton = (ApplicationButton)this.Component;
 | |
|             if (appButton.BackstageTab != null)
 | |
|             {
 | |
|                 DesignerTransaction trans1 = dh.CreateTransaction("Removing Backstage tab");
 | |
|                 try
 | |
|                 {
 | |
|                     SuperTabControl backstageTab = appButton.BackstageTab;
 | |
|                     SetProperty(appButton, "BackstageTab", null);
 | |
|                     backstageTab.Visible = true;
 | |
|                     SetProperty(backstageTab, "Location", new System.Drawing.Point(0, 150));
 | |
|                     SetProperty(backstageTab, "Size", new System.Drawing.Size(250, 350));
 | |
|                     ISelectionService selection = (ISelectionService)GetService(typeof(ISelectionService));
 | |
|                     if (selection != null) selection.SetSelectedComponents(new Control[] { backstageTab }, SelectionTypes.Primary);
 | |
|                 }
 | |
|                 catch
 | |
|                 {
 | |
|                     trans1.Cancel();
 | |
|                     throw;
 | |
|                 }
 | |
|                 finally
 | |
|                 {
 | |
|                     if (!trans1.Canceled)
 | |
|                         trans1.Commit();
 | |
|                 }
 | |
|                 return;
 | |
|             }
 | |
| 
 | |
|             DesignerTransaction trans = dh.CreateTransaction("Create Backstage");
 | |
|             try
 | |
|             {
 | |
| 
 | |
|                 if (appButton.Expanded) appButton.Expanded = false;
 | |
|                 SuperTabControl backstageTab = (SuperTabControl)dh.CreateComponent(typeof(SuperTabControl));
 | |
|                 SetProperty(appButton, "BackstageTab", backstageTab);
 | |
| 
 | |
|                 Control root = dh.RootComponent as Control;
 | |
|                 if (root != null)
 | |
|                 {
 | |
|                     cc.OnComponentChanging(root, TypeDescriptor.GetProperties(root)["Controls"]);
 | |
|                     root.Controls.Add(backstageTab);
 | |
|                     cc.OnComponentChanged(root, TypeDescriptor.GetProperties(root)["Controls"], null, null);
 | |
|                 }
 | |
|                 SetupBackstageTab(backstageTab, dh);
 | |
|             }
 | |
|             catch
 | |
|             {
 | |
|                 trans.Cancel();
 | |
|                 throw;
 | |
|             }
 | |
|             finally
 | |
|             {
 | |
|                 if (!trans.Canceled)
 | |
|                     trans.Commit();
 | |
|             }
 | |
|         }
 | |
|         private void CreateBackstageTab(object sender, EventArgs e)
 | |
|         {
 | |
|             CreateBackstageTab();
 | |
|         }
 | |
| 
 | |
|         private void SetupBackstageTab(SuperTabControl backstageTab, IDesignerHost dh)
 | |
|         {
 | |
|             backstageTab.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
 | |
|                         | System.Windows.Forms.AnchorStyles.Left)
 | |
|                         | System.Windows.Forms.AnchorStyles.Right)));
 | |
|             backstageTab.ControlBox.Visible = false;
 | |
|             backstageTab.ItemPadding.Left = 6;
 | |
|             backstageTab.ItemPadding.Right = 4;
 | |
|             backstageTab.ItemPadding.Top = 4;
 | |
|             backstageTab.ReorderTabsEnabled = false;
 | |
|             try
 | |
|             {
 | |
|                 backstageTab.SelectedTabFont = new System.Drawing.Font("Segoe UI", 9.75F);
 | |
|             }
 | |
|             catch { }
 | |
|             backstageTab.SelectedTabIndex = 0;
 | |
|             backstageTab.Size = new System.Drawing.Size(614, 315);
 | |
|             backstageTab.TabAlignment = DevComponents.DotNetBar.eTabStripAlignment.Left;
 | |
|             try
 | |
|             {
 | |
|                 backstageTab.TabFont = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
 | |
|             }
 | |
|             catch { }
 | |
|             backstageTab.TabHorizontalSpacing = 16;
 | |
|             backstageTab.TabStyle = DevComponents.DotNetBar.eSuperTabStyle.Office2010BackstageBlue;
 | |
|             backstageTab.TabVerticalSpacing = 8;
 | |
| 
 | |
|             SuperTabControlDesigner tabDesigner = dh.GetDesigner(backstageTab) as SuperTabControlDesigner;
 | |
|             if (tabDesigner != null)
 | |
|             {
 | |
|                 ButtonItem button;
 | |
|                 // Save button
 | |
|                 button = tabDesigner.CreateButton();
 | |
|                 SetProperty(button, "Text", "Save");
 | |
|                 SetProperty(button, "KeyTips", "S");
 | |
|                 SetProperty(button, "Image", RibbonControlDesigner.LoadImage("Save16.png"));
 | |
| 
 | |
|                 // Open
 | |
|                 button = tabDesigner.CreateButton();
 | |
|                 SetProperty(button, "Text", "Open");
 | |
|                 SetProperty(button, "KeyTips", "O");
 | |
|                 SetProperty(button, "Image", RibbonControlDesigner.LoadImage("Open.png"));
 | |
| 
 | |
|                 // Close
 | |
|                 button = tabDesigner.CreateButton();
 | |
|                 SetProperty(button, "Text", "Close");
 | |
|                 SetProperty(button, "KeyTips", "C");
 | |
|                 SetProperty(button, "Image", RibbonControlDesigner.LoadImage("Close16.png"));
 | |
| 
 | |
|                 SuperTabItem tab;
 | |
|                 tab = tabDesigner.CreateNewTab();
 | |
|                 SetProperty(tab, "Text", "Recent");
 | |
|                 SetProperty(tab, "KeyTips", "R");
 | |
|                 SetProperty((SuperTabControlPanel)tab.AttachedControl, "BackgroundImage", RibbonControlDesigner.LoadImage("BlueBackstageBgImage.png"));
 | |
|                 SetProperty((SuperTabControlPanel)tab.AttachedControl, "BackgroundImagePosition", DevComponents.DotNetBar.eStyleBackgroundImage.BottomRight);
 | |
| 
 | |
|                 tab = tabDesigner.CreateNewTab();
 | |
|                 SetProperty(tab, "Text", "New");
 | |
|                 SetProperty(tab, "KeyTips", "N");
 | |
|                 SetProperty((SuperTabControlPanel)tab.AttachedControl, "BackgroundImage", RibbonControlDesigner.LoadImage("BlueBackstageBgImage.png"));
 | |
|                 SetProperty((SuperTabControlPanel)tab.AttachedControl, "BackgroundImagePosition", DevComponents.DotNetBar.eStyleBackgroundImage.BottomRight);
 | |
| 
 | |
|                 tab = tabDesigner.CreateNewTab();
 | |
|                 SetProperty(tab, "Text", "Print");
 | |
|                 SetProperty(tab, "KeyTips", "P");
 | |
|                 SetProperty((SuperTabControlPanel)tab.AttachedControl, "BackgroundImage", RibbonControlDesigner.LoadImage("BlueBackstageBgImage.png"));
 | |
|                 SetProperty((SuperTabControlPanel)tab.AttachedControl, "BackgroundImagePosition", DevComponents.DotNetBar.eStyleBackgroundImage.BottomRight);
 | |
| 
 | |
|                 tab = tabDesigner.CreateNewTab();
 | |
|                 SetProperty(tab, "Text", "Help");
 | |
|                 SetProperty(tab, "KeyTips", "H");
 | |
|                 SetProperty((SuperTabControlPanel)tab.AttachedControl, "BackgroundImage", RibbonControlDesigner.LoadImage("BlueBackstageBgImage.png"));
 | |
|                 SetProperty((SuperTabControlPanel)tab.AttachedControl, "BackgroundImagePosition", DevComponents.DotNetBar.eStyleBackgroundImage.BottomRight);
 | |
| 
 | |
|                 // Options
 | |
|                 button = tabDesigner.CreateButton();
 | |
|                 SetProperty(button, "Text", "Options");
 | |
|                 SetProperty(button, "KeyTips", "T");
 | |
|                 SetProperty(button, "Image", RibbonControlDesigner.LoadImage("Options2.png"));
 | |
| 
 | |
|                 // Exit
 | |
|                 button = tabDesigner.CreateButton();
 | |
|                 SetProperty(button, "Text", "Exit");
 | |
|                 SetProperty(button, "KeyTips", "X");
 | |
|                 SetProperty(button, "Image", RibbonControlDesigner.LoadImage("Exit2.png"));
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private void SetProperty(object targetObject, string propertyName, object propertyValue)
 | |
|         {
 | |
|             TypeDescriptor.GetProperties(targetObject)[propertyName].SetValue(targetObject, propertyValue);
 | |
|         }
 | |
|         #endregion
 | |
|     }
 | |
| }
 |