📄 toolboxservice.cs
字号:
//---------------------------------------------------------------------
// This file is part of the WindowsWorkflow.NET web site samples.
//
// Copyright (C) Microsoft Corporation. All rights reserved.
//
// This source code is intended only as a supplement to Microsoft
// Development Tools and/or on-line documentation. See these other
// materials for detailed information regarding Microsoft code samples.
//
// THIS CODE AND INFORMATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY
// KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
//---------------------------------------------------------------------
namespace WorkflowDesignerControl
{
using System.Runtime.Serialization.Formatters.Binary;
using System.Collections;
using System.ComponentModel.Design;
using System.ComponentModel;
using System.ComponentModel.Design.Serialization;
using System.Diagnostics;
using System.Drawing.Design;
using System.Drawing.Text;
using System.Drawing;
using System.IO;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Runtime.Remoting;
using System.Runtime.Serialization.Formatters;
using System.Text;
using System.Windows.Forms.ComponentModel;
using System.Windows.Forms.Design;
using System.Windows.Forms;
using System;
using System.Workflow.Activities;
using System.Workflow.ComponentModel;
using System.Workflow.ComponentModel.Design;
#region Class Toolbox
/// <summary>
/// Class implementing the toolbox functionality in the sample.
/// Toolbox displays workflow components using which the workflow can be created
/// For more information on toolbox please refer to IToolboxService, ToolboxItem documentation
///
/// </summary>
[ToolboxItem(false)]
public class ToolboxService: Panel, IToolboxService
{
private const string CF_DESIGNER = "CF_WINOEDESIGNERCOMPONENTS";
private IServiceProvider provider;
private Hashtable customCreators;
private Type currentSelection;
private ListBox listBox = new ListBox();
//Create the toolbox and add the toolbox entries
public ToolboxService(IServiceProvider provider)
{
this.provider = provider;
Text = "Toolbox";
Size = new System.Drawing.Size(224, 350);
listBox.Dock = DockStyle.Fill;
listBox.IntegralHeight = false;
listBox.ItemHeight = 20;
listBox.DrawMode = DrawMode.OwnerDrawFixed;
listBox.BorderStyle = System.Windows.Forms.BorderStyle.None;
listBox.BackColor = SystemColors.Window;
listBox.ForeColor = SystemColors.ControlText;
listBox.MouseMove +=new MouseEventHandler(OnListBoxMouseMove);
Controls.Add(listBox);
listBox.DrawItem += new DrawItemEventHandler(this.OnDrawItem);
listBox.KeyPress += new KeyPressEventHandler(this.OnListKeyPress);
listBox.SelectedIndexChanged += new EventHandler(this.OnListBoxClick);
listBox.DoubleClick += new EventHandler(this.OnListBoxDoubleClick);
AddToolboxEntries(listBox);
}
public void AddCreator(ToolboxItemCreatorCallback creator, string format)
{
AddCreator(creator, format, null);
}
public void AddCreator(ToolboxItemCreatorCallback creator, string format, IDesignerHost host)
{
if (creator == null || format == null)
{
throw new ArgumentNullException(creator == null ? "creator" : "format");
}
if (customCreators == null)
{
customCreators = new Hashtable();
}
else
{
string key = format;
if (host != null) key += ", " + host.GetHashCode().ToString();
if (customCreators.ContainsKey(key))
{
throw new Exception("There is already a creator registered for the format '" + format + "'.");
}
}
customCreators[format] = creator;
}
public void AddLinkedToolboxItem(ToolboxItem toolboxItem, IDesignerHost host)
{
}
public void AddLinkedToolboxItem(ToolboxItem toolboxItem, string category, IDesignerHost host)
{
}
public virtual void AddToolboxItem(ToolboxItem toolboxItem)
{
}
public virtual void AddToolboxItem(ToolboxItem toolboxItem, IDesignerHost host)
{
}
public virtual void AddToolboxItem(ToolboxItem toolboxItem, string category)
{
}
public virtual void AddToolboxItem(ToolboxItem toolboxItem, string category, IDesignerHost host)
{
}
public CategoryNameCollection CategoryNames
{
get
{
return new CategoryNameCollection(new string[] { "Workflow" });
}
}
public string SelectedCategory
{
get
{
return "Workflow";
}
set
{
}
}
private ToolboxItemCreatorCallback FindToolboxItemCreator(IDataObject dataObj, IDesignerHost host, out string foundFormat)
{
foundFormat = string.Empty;
ToolboxItemCreatorCallback creator = null;
if (customCreators != null)
{
IEnumerator keys = customCreators.Keys.GetEnumerator();
while (keys.MoveNext())
{
string key = (string)keys.Current;
string[] keyParts = key.Split(new char[] { ',' });
string format = keyParts[0];
if (dataObj.GetDataPresent(format))
{
// Check to see if the host matches.
if (keyParts.Length == 1 || (host != null && host.GetHashCode().ToString().Equals(keyParts[1])))
{
creator = (ToolboxItemCreatorCallback)customCreators[format];
foundFormat = format;
break;
}
}
}
}
return creator;
}
public virtual ToolboxItem GetSelectedToolboxItem()
{
ToolboxItem toolClass = null;
if (this.currentSelection != null)
{
try
{
toolClass = ToolboxService.GetToolboxItem(this.currentSelection);
}
catch (TypeLoadException)
{
}
}
return toolClass;
}
public virtual ToolboxItem GetSelectedToolboxItem(IDesignerHost host)
{
return GetSelectedToolboxItem();
}
public object SerializeToolboxItem(ToolboxItem toolboxItem)
{
DataObject dataObject = new DataObject();
dataObject.SetData(typeof(ToolboxItem), toolboxItem);
return dataObject;
}
public ToolboxItem DeserializeToolboxItem(object dataObject)
{
return DeserializeToolboxItem(dataObject, null);
}
public ToolboxItem DeserializeToolboxItem(object data, IDesignerHost host)
{
IDataObject dataObject = data as IDataObject;
if (dataObject == null)
{
return null;
}
ToolboxItem t = (ToolboxItem)dataObject.GetData(typeof(ToolboxItem));
if (t == null)
{
string format;
ToolboxItemCreatorCallback creator = FindToolboxItemCreator(dataObject, host, out format);
if (creator != null)
{
return creator(dataObject, format);
}
}
return t;
}
public ToolboxItemCollection GetToolboxItems()
{
return new ToolboxItemCollection(new ToolboxItem[0]);
}
public ToolboxItemCollection GetToolboxItems(IDesignerHost host)
{
return new ToolboxItemCollection(new ToolboxItem[0]);
}
public ToolboxItemCollection GetToolboxItems(string category)
{
return new ToolboxItemCollection(new ToolboxItem[0]);
}
public ToolboxItemCollection GetToolboxItems(string category, IDesignerHost host)
{
return new ToolboxItemCollection(new ToolboxItem[0]);
}
public bool IsSupported(object data, IDesignerHost host)
{
return true;
}
public bool IsSupported(object serializedObject, ICollection filterAttributes)
{
return true;
}
public bool IsToolboxItem(object dataObject)
{
return IsToolboxItem(dataObject, null);
}
public bool IsToolboxItem(object data, IDesignerHost host)
{
IDataObject dataObject = data as IDataObject;
if (dataObject == null)
return false;
if (dataObject.GetDataPresent(typeof(ToolboxItem)))
{
return true;
}
else
{
string format;
ToolboxItemCreatorCallback creator = FindToolboxItemCreator(dataObject, host, out format);
if (creator != null)
return true;
}
return false;
}
public new void Refresh()
{
}
public void RemoveCreator(string format)
{
RemoveCreator(format, null);
}
public void RemoveCreator(string format, IDesignerHost host)
{
if (format == null)
throw new ArgumentNullException("format");
if (customCreators != null)
{
string key = format;
if (host != null)
key += ", " + host.GetHashCode().ToString();
customCreators.Remove(key);
}
}
public virtual void RemoveToolboxItem(ToolboxItem toolComponentClass)
{
}
public virtual void RemoveToolboxItem(ToolboxItem componentClass, string category)
{
}
public virtual bool SetCursor()
{
if (this.currentSelection != null)
{
Cursor.Current = Cursors.Cross;
return true;
}
return false;
}
public virtual void SetSelectedToolboxItem(ToolboxItem selectedToolClass)
{
if (selectedToolClass == null)
{
listBox.SelectedIndex = 0;
OnListBoxClick(null, EventArgs.Empty);
}
}
public void AddType(Type t)
{
listBox.Items.Add(new SelfHostToolboxItem(t.AssemblyQualifiedName));
}
public Attribute[] GetEnabledAttributes()
{
return null;
}
public void SetEnabledAttributes(Attribute[] attrs)
{
}
public void SelectedToolboxItemUsed()
{
SetSelectedToolboxItem(null);
}
public static IDataObject SerializeActivitiesToDataObject(IServiceProvider serviceProvider, ICollection activities)
{
// get component serialization service
ComponentSerializationService css = (ComponentSerializationService)serviceProvider.GetService(typeof(ComponentSerializationService));
if (css == null)
throw new InvalidOperationException("Component Serialization Service is missing.");
// serialize all activities to the store
SerializationStore store = css.CreateStore();
using (store)
{
foreach (Activity activity in activities)
css.Serialize(store, activity);
}
// wrap it with clipboard style object
Stream stream = new MemoryStream();
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, store);
stream.Seek(0, SeekOrigin.Begin);
return new DataObject(CF_DESIGNER, stream);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -