using SolidWorks.Interop.sldworks;
using System.Collections;
namespace PdmSwPlugin.Main.EventHandler
{
///
/// 通用文档事件处理器
///
public class BaseEventHandler
{
protected ISldWorks iSwApp;
protected ModelDoc2 document;
protected BaseAttacher userAddIn;
protected Hashtable openModelViews;
public BaseEventHandler(ModelDoc2 modDoc, BaseAttacher docEventHandler)
{
document = modDoc;
iSwApp = docEventHandler.SwApp;
userAddIn = docEventHandler;
openModelViews = new Hashtable();
}
///
/// 附加事件
///
///
virtual public bool AttachEventHandlers()
{
return true;
}
///
/// 移除事件
///
///
virtual public bool DetachEventHandlers()
{
return true;
}
///
/// 附加视图事件
///
///
public bool ConnectModelViews()
{
IModelView mView;
mView = (IModelView)document.GetFirstModelView();
while (mView != null)
{
if (!openModelViews.Contains(mView))
{
DocViewEventHandler dView = new DocViewEventHandler(userAddIn, mView, this);
dView.AttachEventHandlers();
openModelViews.Add(mView, dView);
}
mView = (IModelView)mView.GetNext();
}
return true;
}
///
/// 移除视图事件
///
///
public bool DisconnectModelViews()
{
//Close events on all currently open docs
DocViewEventHandler dView;
int numKeys;
numKeys = openModelViews.Count;
if (numKeys == 0)
{
return false;
}
object[] keys = new object[numKeys];
//Remove all ModelView event handlers
openModelViews.Keys.CopyTo(keys, 0);
foreach (ModelView key in keys)
{
dView = (DocViewEventHandler)openModelViews[key];
dView.DetachEventHandlers();
openModelViews.Remove(key);
dView = null;
}
return true;
}
public bool DetachModelViewEventHandler(ModelView mView)
{
DocViewEventHandler dView;
if (openModelViews.Contains(mView))
{
dView = (DocViewEventHandler)openModelViews[mView];
openModelViews.Remove(mView);
mView = null;
dView = null;
}
return true;
}
}
}