Exemplo n.º 1
0
/////////////////////////////////////////////////////////////////////////////
// 加载插件信息
/////////////////////////////////////////////////////////////////////////////
BOOL CPlugIn::LoadInfo()
{
	// 已经加载过信息,就不用重复加载了
	if(GetLoadState() >= PLUGIN_LOAD_INFO)
	{
		return TRUE;
	}

	CString strXmlFile = m_strPath;
	if(LANGUAGE_PAGE_CHINESE == theApp.m_curLanguage)
	{
		strXmlFile += "\\plugin_cn.xml";
		// 如果不存在中文的配置文件,就用缺省的
		if(GetFileAttributes(strXmlFile) == 0xFFFFFFFF)
		{
			strXmlFile = m_strPath + "\\plugin.xml";
		}
	}else
	{
		strXmlFile += "\\plugin.xml";
	}
	CXmlParser parser;
	if(parser.Open(strXmlFile))
	{
		OUTPUT(COLOR_ERROR, "Load %s fail!\r\n", strXmlFile);
		return FALSE;
	}

	DOMNode* pNode = parser.GetRootNode();
	m_strId = parser.GetNodeAttribute(pNode, "id");
	m_nOwmId = atoi(parser.GetNodeAttribute(pNode, "owmid"));
	m_strName = parser.GetNodeAttribute(pNode, "name");
	m_strVersion = parser.GetNodeAttribute(pNode, "version");
	m_strProvider = parser.GetNodeAttribute(pNode, "provider-name");
	m_strType = parser.GetNodeAttribute(pNode, "type");
	m_strClass = parser.GetNodeAttribute(pNode, "class");
	m_strClassVersion = parser.GetNodeAttribute(pNode, "class-version");
	m_strProcess = parser.GetNodeAttribute(pNode, "process");

	// 读取运行信息
	DOMNode* pSubNode = parser.GetChildNode(pNode, "runtime");
	m_strInitParam = parser.GetNodeText(parser.GetChildNode(pSubNode, "init"));
	m_strDoneParam = parser.GetNodeText(parser.GetChildNode(pSubNode, "done"));
	m_strInterfaceFile = parser.GetNodeText(parser.GetChildNode(pSubNode, "interface-define"));
	m_strInterfaceFile = m_strPath + "\\" + m_strInterfaceFile;
	m_strInterfaceFile.Replace("/", "\\");
	#ifdef _DEBUG
	pSubNode = parser.GetChildNode(pSubNode, "library-debug");
	#else
	pSubNode = parser.GetChildNode(pSubNode, "library");
	#endif
	CString strLibrary = parser.GetNodeAttribute(pSubNode, "name");
	m_strFile = m_strPath + "\\" + strLibrary;
	m_strFile.Replace("/", "\\");	

	// 读取OWM属性信息
	m_nType = 0;
	DOMNode* pNodeProperty = parser.GetChildNode(pNode, "property");
	if(IsVciOwm())
	{
		// OWM的属性
		pSubNode = parser.GetChildNode(pNodeProperty, "owm-type");
		if(parser.GetNodeAttribute(pSubNode, "doc") == "true")
		{
			m_nType |= OWM_DOC;
		}
		if(parser.GetNodeAttribute(pSubNode, "dockbar") == "true")
		{
			m_nType |= OWM_CONTROLBAR;
		}
		if(parser.GetNodeAttribute(pSubNode, "menu") == "true")
		{
			m_nType |= OWM_MENU;
		}
		if(parser.GetNodeAttribute(pSubNode, "toolbar") == "true")
		{
			m_nType |= OWM_TOOLBAR;
		}
		if(parser.GetNodeAttribute(pSubNode, "option") == "true")
		{
			m_nType |= OWM_OPTION;
		}
		if(parser.GetNodeAttribute(pSubNode, "oneframe") == "true")
		{
			m_nType |= OWM_ONEFRAME;
		}
		if(parser.GetNodeAttribute(pSubNode, "autocreate") == "true")
		{
			m_nType |= OWM_AUTOCREATE;
		}
		if(parser.GetNodeAttribute(pSubNode, "dynload") == "true")
		{
			m_nType |= OWM_DYNLOAD;
		}
		if(parser.GetNodeAttribute(pSubNode, "broadcast") == "true")
		{
			m_nType |= OWM_BROADCAST;
		}
		if(parser.GetNodeAttribute(pSubNode, "maxwindow") == "true")
		{
			m_nType |= OWM_MAXWINDOW;
		}
	}else
	{
		// VCI属性
		pSubNode = parser.GetChildNode(pNodeProperty, "autocreate");
		m_bAutoCreate = (parser.GetNodeText(pSubNode) == "true");
		m_strAutoCreateInstanceName = parser.GetNodeAttribute(pSubNode, "instancename");
	}

	// 读取关于页面的位置
	pSubNode = parser.GetChildNode(pNode, "url");
	pSubNode = parser.GetChildNode(pSubNode, "about");
	m_strAboutPage = parser.GetNodeAttribute(pSubNode, "url");

	// 读取文档扩展点信息
	pSubNode = parser.GetNode("doc-extend\\doc");
	while (pSubNode != NULL)
	{
		COwmDocExtend docExtend;

		docExtend.m_strDocName = parser.GetNodeAttribute(pSubNode, "name");
		docExtend.m_strDocId = parser.GetNodeAttribute(pSubNode, "id");
		docExtend.m_strOwmId = m_strId;
		docExtend.m_strIcon = parser.GetNodeAttribute(pSubNode, "icon");
		docExtend.m_bEnableLink = (parser.GetNodeAttribute(pSubNode, "enablelink") != "false");

		// 后缀
		DOMNode* pNodeExts = parser.GetChildNode(pSubNode, "exts");
		if(pNodeExts)
		{
			DOMNode* pNodeExt = parser.GetChildNode(pNodeExts, "ext");
			while (pNodeExt != NULL)
			{
				docExtend.m_arDocExt.Add(parser.GetNodeText(pNodeExt));
				pNodeExt = parser.GetNextNode(pNodeExt, "ext");
			}
		}

		// 执行器
		DOMNode* pNodeExecutes = parser.GetChildNode(pSubNode, "executes");
		if(pNodeExecutes)
		{
			DOMNode* pNodeExecute = parser.GetChildNode(pNodeExecutes);
			while (pNodeExecute != NULL)
			{
				docExtend.m_arExecuteModuleType.Add(parser.GetNodeName(pNodeExecute));
				docExtend.m_arExecuteModule.Add(parser.GetNodeText(pNodeExecute));
				pNodeExecute = parser.GetNextNode(pNodeExecute);
			}
			/*
			DOMNode* pNodeExecuteOwm = parser.GetChildNode(pNodeExecutes, "owm");
			while (pNodeExecuteOwm != NULL)
			{
				docExtend.m_arExecuteModule.Add(parser.GetNodeText(pNodeExecuteOwm));
				pNodeExecuteOwm = parser.GetNextNode(pNodeExecuteOwm, "owm");
			}
			*/
		}

		// 文档图标
		DOMNode* pNodeIcons = parser.GetChildNode(pSubNode, "icons");
		if(pNodeIcons)
		{
			DOMNode* pNodeIcon = parser.GetChildNode(pNodeIcons);
			while (pNodeIcon != NULL)
			{
				docExtend.m_arDocIconType.Add(parser.GetNodeName(pNodeIcon));
				docExtend.m_arDocIconFile.Add(parser.GetNodeText(pNodeIcon));
				pNodeIcon = parser.GetNextNode(pNodeIcon);
			}
		}

		m_arDocExtend.Add(docExtend);

		pSubNode = parser.GetNextNode(pSubNode, "doc");
	}

	// 读取DockingPane信息
	pSubNode = parser.GetNode("dockingpanes\\pane");
	while (pSubNode != NULL)
	{
		COwmDockingPane paneInfo;
		paneInfo.m_bFileDefined = TRUE;	// 配置文件中定义的DockingPane

		paneInfo.m_strName = parser.GetNodeAttribute(pSubNode, "name");
		paneInfo.m_nId = atoi(parser.GetNodeAttribute(pSubNode, "id"));
		CString strDirection = parser.GetNodeAttribute(pSubNode, "direction");
		if(strDirection == "left")
		{
			paneInfo.m_nDirection = xtpPaneDockLeft;
		}else
		if(strDirection == "right")
		{
			paneInfo.m_nDirection = xtpPaneDockRight;
		}else
		if(strDirection == "top")
		{
			paneInfo.m_nDirection = xtpPaneDockTop;
		}else
		if(strDirection == "bottom")
		{
			paneInfo.m_nDirection = xtpPaneDockBottom;
		}else
		{
			paneInfo.m_nDirection = xtpPaneDockLeft;
		}
		paneInfo.m_strIcon = parser.GetNodeAttribute(pSubNode, "icon");
		CString strAttachType = parser.GetNodeAttribute(pSubNode, "type");
		if(strAttachType == "window")
		{
			paneInfo.m_nAttachType = PANE_ATTACH_WND;
		}else
		if(strAttachType == "view")
		{
			paneInfo.m_nAttachType = PANE_ATTACH_VIEW;
		}else
		{
			paneInfo.m_nAttachType = PANE_ATTACH_WND;
		}
		paneInfo.m_bAutoCreate = (parser.GetNodeAttribute(pSubNode, "autocreate") == "true");
		paneInfo.m_bProjectCreate = (parser.GetNodeAttribute(pSubNode, "projectcreate") == "true");
		paneInfo.m_bSave = (parser.GetNodeAttribute(pSubNode, "save") == "true");
		paneInfo.m_strOwmId = parser.GetNodeAttribute(pSubNode, "owm");

		m_arDockingPane.Add(paneInfo);

		pSubNode = parser.GetNextNode(pSubNode, "pane");
	}	

	// 读取透视图信息

	// 读取扩展参数信息
	pSubNode = parser.GetNode("parameters\\parameter");
	while (pSubNode != NULL)
	{
		CVciParameter parameterInfo;

		parameterInfo.m_strName = parser.GetNodeAttribute(pSubNode, "name");
		parameterInfo.m_strValue = parser.GetNodeAttribute(pSubNode, "value");
		parameterInfo.m_strDefaultValue = parser.GetNodeAttribute(pSubNode, "defaultName");

		m_arParameter.Add(parameterInfo);

		pSubNode = parser.GetNextNode(pSubNode, "parameter");
	}

	// 读取扩展菜单信息
	pSubNode = parser.GetNode("menus\\menu");
	while (pSubNode != NULL)
	{
		CVciMenu menuInfo;

		menuInfo.m_strMainMenu = parser.GetNodeAttribute(pSubNode, "mainmenu");
		menuInfo.m_strSubMenu = parser.GetNodeAttribute(pSubNode, "submenu");
		menuInfo.m_strAction = parser.GetNodeText(pSubNode);

		m_arMenu.Add(menuInfo);

		if(m_strType == "owm")
		{
			// OWM插件在此处就加载菜单
			AddOwmSubMenu(menuInfo.m_strMainMenu, menuInfo.m_strSubMenu, menuInfo.m_strAction);
		}

		pSubNode = parser.GetNextNode(pSubNode, "menu");
	}

	m_nLoadState = PLUGIN_LOAD_INFO;

	return TRUE;
}
Exemplo n.º 2
0
LoadState WrapperDLL::StaticFile_GetLoadState(void* self){
	auto self_ = (StaticFile*)self;
	auto ret = self_->GetLoadState();
	return ret;
};