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
|
|
}
|
|
}
|