[commit] r2780 - in trunk: GME/Gme GME/Interfaces GME/MgaUtil Install
GMESRC Repository Notifications
gme-commit at list.isis.vanderbilt.edu
Tue Apr 7 10:44:15 CDT 2020
Author: ksmyth
Date: Tue Apr 7 10:44:15 2020
New Revision: 2780
Log:
Help Menu Functionality for Components and Paradigms
Modified:
trunk/GME/Gme/GME.rc
trunk/GME/Gme/GMEApp.cpp
trunk/GME/Gme/GMEApp.h
trunk/GME/Gme/GuiMeta.cpp
trunk/GME/Gme/GuiMeta.h
trunk/GME/Gme/MainFrm.cpp
trunk/GME/Gme/MainFrm.h
trunk/GME/Gme/resource.h
trunk/GME/Interfaces/MgaUtil.idl
trunk/GME/MgaUtil/MgaRegistrar.cpp
trunk/GME/MgaUtil/MgaRegistrar.h
trunk/GME/MgaUtil/MgaUtil.vcxproj
trunk/GME/MgaUtil/MgaUtilLib.idl
trunk/GME/MgaUtil/StdAfx.h
trunk/Install/GME_bin.wxs
Modified: trunk/GME/Gme/GME.rc
==============================================================================
--- trunk/GME/Gme/GME.rc Thu Sep 26 13:26:13 2019 (r2779)
+++ trunk/GME/Gme/GME.rc Tue Apr 7 10:44:15 2020 (r2780)
@@ -255,6 +255,8 @@
END
POPUP "&Help"
BEGIN
+ MENUITEM "&Paradigm Help", ID_HELP_PARADIGMHELP
+ MENUITEM "C&omponent Help", ID_HELP_COMPONENTHELP
MENUITEM "&Contents", ID_HELP_CONTENTS
MENUITEM "&About GME...", ID_APP_ABOUT
END
@@ -396,6 +398,8 @@
END
POPUP "&Help"
BEGIN
+ MENUITEM "&Paradigm Help", ID_HELP_PARADIGMHELP
+ MENUITEM "C&omponent Help", ID_HELP_COMPONENTHELP
MENUITEM "&Contents", ID_HELP_CONTENTS
MENUITEM "&Help", ID_HELP_HELP
MENUITEM "&About GME...", ID_APP_ABOUT
@@ -1789,4 +1793,3 @@
1 TYPELIB "GmeLib.tlb"
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED
-
Modified: trunk/GME/Gme/GMEApp.cpp
==============================================================================
--- trunk/GME/Gme/GMEApp.cpp Thu Sep 26 13:26:13 2019 (r2779)
+++ trunk/GME/Gme/GMEApp.cpp Tue Apr 7 10:44:15 2020 (r2780)
@@ -124,6 +124,8 @@
ON_COMMAND_EX_RANGE(ID_FILE_MRU_PRJ1, ID_FILE_MRU_PRJ16, OnOpenRecentProject)
ON_COMMAND_RANGE(ID_FILE_RUNPLUGIN1, ID_FILE_RUNPLUGIN_LAST, OnRunPlugin)
ON_COMMAND_RANGE(ID_FILE_INTERPRET1, ID_FILE_INTERPRET_LAST, OnRunInterpreter)
+ ON_COMMAND_RANGE(ID_HELP_PARADIGMHELP_FIRST, ID_HELP_PARADIGMHELP_LAST, OnRunParadigmHelp)
+ ON_COMMAND_RANGE(ID_HELP_COMPONENTHELP_FIRST, ID_HELP_COMPONENTHELP_LAST, OnRunComponentHelp)
ON_UPDATE_COMMAND_UI_RANGE( ID_FILE_RUNPLUGIN1, ID_FILE_RUNPLUGIN_LAST, OnUpdateFilePluginX)
ON_UPDATE_COMMAND_UI_RANGE( ID_FILE_INTERPRET1, ID_FILE_INTERPRET_LAST, OnUpdateFileInterpretX)
ON_COMMAND(ID_FOCUS_BROWSER, OnFocusBrowser)
@@ -141,7 +143,7 @@
/*static*/ const TCHAR * CGMEApp::m_no_model_open_string = _T("_NO_MODEL_IS_OPEN_");
-static CComBSTR StringFromGUID2(const CComVariant& guid)
+CComBSTR StringFromGUID2(const CComVariant& guid)
{
ASSERT(guid.vt == (VT_UI1 | VT_ARRAY));
GUID guid2;
@@ -1137,12 +1139,13 @@
void CGMEApp::UpdateComponentLists(bool restart_addons)
{
- ClearDisabledComps();
- plugins .RemoveAll();
+ ClearDisabledComps();
+ plugins.RemoveAll();
pluginTooltips.RemoveAll();
interpreters.RemoveAll();
interpreterTooltips.RemoveAll();
- CStringArray tempaddons; tempaddons.Copy(addons);
+ CStringArray tempaddons;
+ tempaddons.Copy(addons);
addons.RemoveAll();
mgaConstMgr = NULL;
if(mgaMetaProject) {
@@ -1182,6 +1185,48 @@
}
}
}
+
+ this->addonOnlineHelp.RemoveAll(); this->addonOfflineHelp.RemoveAll();
+ this->pluginOnlineHelp.RemoveAll(); this->pluginOfflineHelp.RemoveAll();
+ this->interpreterOnlineHelp.RemoveAll(); this->interpreterOfflineHelp.RemoveAll();
+ for (INT i = 0; i < this->plugins.GetSize() + this->interpreters.GetSize() + this->addons.GetSize(); ++i) {
+ HRESULT errCode;
+ CString onlineHelp;
+ CString offlineHelp;
+ CComBSTR componentName =
+ (i < plugins.GetSize()
+ ? plugins[i]
+ : (i < plugins.GetSize() + interpreters.GetSize()
+ ? interpreters[i - plugins.GetSize()]
+ : addons[i - plugins.GetSize() - interpreters.GetSize()]));
+
+ errCode = reg->get_ComponentExtraInfo(REGACCESS_PRIORITY, componentName, CComBSTR(L"OnlineHelp"), PutOut(onlineHelp));
+ if (errCode != S_OK || onlineHelp.IsEmpty())
+ {
+ onlineHelp = L"";
+ }
+ errCode = reg->get_ComponentExtraInfo(REGACCESS_PRIORITY, componentName, CComBSTR(L"OfflineHelp"), PutOut(offlineHelp));
+ if (errCode != S_OK || offlineHelp.IsEmpty())
+ {
+ offlineHelp = L"";
+ }
+ if (i < this->plugins.GetSize())
+ {
+ this->pluginOnlineHelp.Add(onlineHelp);
+ this->pluginOfflineHelp.Add(offlineHelp);
+ }
+ else if (i < this->plugins.GetSize() + this->interpreters.GetSize())
+ {
+ this->interpreterOnlineHelp.Add(onlineHelp);
+ this->interpreterOfflineHelp.Add(offlineHelp);
+ }
+ else
+ {
+ this->addonOnlineHelp.Add(onlineHelp);
+ this->addonOfflineHelp.Add(offlineHelp);
+ }
+ }
+
// access constraint mgr
FindConstraintManager();
@@ -1194,6 +1239,8 @@
{
CString runPluginLabel = _T("R&un Plug-In");
CString runInterpreterLabel = _T("Run In&terpreter");
+ CString helpParadigmLabel = _T("&Paradigm Help");
+ CString helpComponentLabel = _T("C&omponent Help");
CString label;
// [ Begin workaround
// If you just go left to the Window menu next to the Tools menu, and back to the Tools menu (so not even abandoming the menubar)
@@ -1222,7 +1269,7 @@
for(UINT idx = 0; idx < toolmenu->GetMenuItemCount(); idx++) {
toolmenu->GetMenuString(idx, label, MF_BYPOSITION);
UINT menuID = toolmenu->GetMenuItemID(idx);
- if (menuID == ID_TOOLS_RUNPLUG || menuID == ID_FILE_RUNINTERPRETER) {
+ if (menuID == ID_TOOLS_RUNPLUG || menuID == ID_FILE_RUNINTERPRETER || menuID == ID_HELP_COMPONENTHELP || menuID == ID_HELP_PARADIGMHELP) {
dynmenus_need_refresh = true;
break;
}
@@ -1244,7 +1291,8 @@
if (plugins.GetSize() == 1) {
toolmenu->InsertMenu(idx, MF_BYPOSITION | MF_ENABLED,
ID_FILE_RUNPLUGIN1, pluginTooltips[0]);
- } else {
+ }
+ else {
CMenu pluginmenu;
pluginmenu.CreatePopupMenu();
for(int i = 0; i < min(plugins.GetSize(), ID_FILE_RUNPLUGIN_LAST - ID_FILE_RUNPLUGIN1); ++i) {
@@ -1256,7 +1304,8 @@
}
found = true;
}
- } else if (!label.CompareNoCase(runInterpreterLabel) ||
+ }
+ else if (!label.CompareNoCase(runInterpreterLabel) ||
menuID == ID_FILE_RUNINTERPRETER || menuID == ID_FILE_INTERPRET1)
{
if (dynmenus_need_refresh) {
@@ -1264,7 +1313,8 @@
if (interpreters.GetSize() == 1) {
toolmenu->InsertMenu(idx, MF_BYPOSITION | MF_ENABLED,
ID_FILE_INTERPRET1, interpreterTooltips[0]);
- } else {
+ }
+ else {
CMenu pluginmenu;
pluginmenu.CreatePopupMenu();
@@ -1293,12 +1343,93 @@
found = true;
}
}
+ else if (!label.CompareNoCase(helpComponentLabel) ||
+ menuID == ID_HELP_COMPONENTHELP || menuID == ID_HELP_COMPONENTHELP_FIRST)
+ {
+ if (dynmenus_need_refresh) {
+ toolmenu->DeleteMenu(idx, MF_BYPOSITION);
+ CMenu helpComponent;
+ helpComponent.CreatePopupMenu();
+ for (int i = 0; i < min(plugins.GetSize() + interpreters.GetSize() + addons.GetSize(), ID_HELP_COMPONENTHELP_LAST - ID_HELP_COMPONENTHELP_FIRST);) {
+ int index = i / 2;
+ CString componentName = (index < plugins.GetSize() ?
+ pluginTooltips[index] : (index < plugins.GetSize() + interpreters.GetSize() ?
+ interpreterTooltips[index - plugins.GetSize()] : addons[index - plugins.GetSize() - interpreters.GetSize()]));
+ CString onlineHelpLocation = (index < plugins.GetSize() ?
+ pluginOnlineHelp[index] : (index < plugins.GetSize() + interpreters.GetSize() ?
+ interpreterOnlineHelp[index - plugins.GetSize()] : addonOnlineHelp[index - plugins.GetSize() - interpreters.GetSize()]));
+ CString offlineHelpLocation = (index < plugins.GetSize() ?
+ pluginOfflineHelp[index] : (index < plugins.GetSize() + interpreters.GetSize() ?
+ interpreterOfflineHelp[index - plugins.GetSize()] : addonOfflineHelp[index - plugins.GetSize() - interpreters.GetSize()]));
+
+ CMenu help;
+ help.CreatePopupMenu();
+ if (!onlineHelpLocation.IsEmpty())
+ {
+ help.AppendMenu(MF_ENABLED, ID_HELP_COMPONENTHELP_FIRST + i++, L"Online Help");
+ }
+ else
+ {
+ ++i;
+ }
+
+ if (!offlineHelpLocation.IsEmpty())
+ {
+ help.AppendMenu(MF_ENABLED, ID_HELP_COMPONENTHELP_FIRST + i++, L"Offline Help");
+ }
+ else
+ {
+ ++i;
+ }
+
+ if (help.GetMenuItemCount() != 0)
+ {
+ helpComponent.InsertMenu(index, MF_BYPOSITION | MF_POPUP | MF_ENABLED, (UINT_PTR)help.Detach(), componentName);
+ }
+ }
+ toolmenu->InsertMenu(idx,
+ helpComponent.GetMenuItemCount() ? MF_BYPOSITION | MF_POPUP | MF_ENABLED : MF_BYPOSITION | MF_POPUP | MF_GRAYED,
+ (UINT_PTR)helpComponent.Detach(), helpComponentLabel);
+ found = true;
+ }
+ }
+ else if (!label.CompareNoCase(helpParadigmLabel) ||
+ menuID == ID_HELP_PARADIGMHELP || menuID == ID_HELP_PARADIGMHELP_FIRST)
+ {
+ if (dynmenus_need_refresh && mgaProject) {
+ toolmenu->DeleteMenu(idx, MF_BYPOSITION);
+ CComBSTR pname = guiMetaProject->name;
+ CComBSTR pguidstr = guiMetaProject->guid;
+
+ CMenu help;
+ help.CreatePopupMenu();
+ CComPtr<IMgaRegistrar2> reg;
+ HRESULT hr = reg.CoCreateInstance(CComBSTR(L"Mga.MgaRegistrar"));
+ if (SUCCEEDED(hr))
+ {
+ reg->GetParadigmExtraInfoDisp(pname, pguidstr, CComBSTR(L"OnlineHelp"), PutOut(this->paradigmOnlineHelp));
+ reg->GetParadigmExtraInfoDisp(pname, pguidstr, CComBSTR(L"OfflineHelp"), PutOut(this->paradigmOfflineHelp));
+ }
+
+ if (!this->paradigmOnlineHelp.IsEmpty())
+ {
+ help.AppendMenu(MF_ENABLED, ID_HELP_PARADIGMHELP_FIRST, L"Online Help");
+ }
+ if (!this->paradigmOfflineHelp.IsEmpty())
+ {
+ help.AppendMenu(MF_ENABLED, ID_HELP_PARADIGMHELP_LAST, L"Offline Help");
+ }
+ toolmenu->InsertMenu(idx,
+ help.GetMenuItemCount() != 0 ? MF_BYPOSITION | MF_POPUP | MF_ENABLED : MF_BYPOSITION | MF_POPUP | MF_GRAYED,
+ (UINT_PTR)help.Detach(), pname);
+ found = true;
+ }
+ }
}
if (found)
dynmenus_need_refresh = false;
}
-
// throws exceptions!!
void CGMEApp::AfterOpenOrCreateProject(const CString &conn)
{
@@ -2972,7 +3103,38 @@
RunComponent(interpreters[nID - ID_FILE_INTERPRET1]);
}
+void CGMEApp::OnRunComponentHelp(UINT nID) {
+ UINT id = (nID - ID_HELP_COMPONENTHELP_FIRST) / 2;
+ bool isEven = (nID - ID_HELP_COMPONENTHELP_FIRST) % 2 == 0;
+ CGMEEventLogger::LogGMEEvent(_T("CGMEApp::OnRunComponentHelp ") +
+ (id < plugins.GetSize() ?
+ plugins[id] : (id < plugins.GetSize() + interpreters.GetSize() ?
+ interpreters[id - plugins.GetSize()] : addons[id - plugins.GetSize() - interpreters.GetSize()])) +
+ _T("\r\n"));
+
+ CString onlineHelpLocation = (id < plugins.GetSize() ?
+ pluginOnlineHelp[id] : (id < plugins.GetSize() + interpreters.GetSize() ?
+ interpreterOnlineHelp[id - plugins.GetSize()] : addonOnlineHelp[id - plugins.GetSize() - interpreters.GetSize()]));
+ CString offlineHelpLocation = (id < plugins.GetSize() ?
+ pluginOfflineHelp[id] : (id < plugins.GetSize() + interpreters.GetSize() ?
+ interpreterOfflineHelp[id - plugins.GetSize()] : addonOfflineHelp[id - plugins.GetSize() - interpreters.GetSize()]));
+
+ ShellExecute(NULL, L"open", (isEven ? onlineHelpLocation : offlineHelpLocation), NULL, NULL, SW_SHOWNORMAL);
+}
+
+void CGMEApp::OnRunParadigmHelp(UINT nID)
+{
+ CComBSTR pname = guiMetaProject->name;
+
+ CGMEEventLogger::LogGMEEvent((_T("CGMEApp::OnRunParadigmHelp ") +
+ std::wstring(static_cast<const wchar_t*>(pname)) + _T("\r\n")).c_str());
+ CString help = (nID == ID_HELP_PARADIGMHELP_FIRST ? this->paradigmOnlineHelp : this->paradigmOfflineHelp);
+ if (!help.IsEmpty())
+ {
+ ShellExecute(NULL, L"open", help, NULL, NULL, SW_SHOWNORMAL);
+ }
+}
void CGMEApp::RunComponent(const CString &compname)
{
Modified: trunk/GME/Gme/GMEApp.h
==============================================================================
--- trunk/GME/Gme/GMEApp.h Thu Sep 26 13:26:13 2019 (r2779)
+++ trunk/GME/Gme/GMEApp.h Tue Apr 7 10:44:15 2020 (r2780)
@@ -50,7 +50,10 @@
CComPtr<IMgaMetaProject> mgaMetaProject;
// dynamic menus
CStringArray plugins, interpreters, addons;
- CStringArray pluginTooltips, interpreterTooltips, addonToolTips;
+ CStringArray pluginTooltips, interpreterTooltips;
+ CStringArray pluginOnlineHelp, interpreterOnlineHelp, addonOnlineHelp;
+ CStringArray pluginOfflineHelp, interpreterOfflineHelp, addonOfflineHelp;
+ CString paradigmOnlineHelp, paradigmOfflineHelp;
bool dynmenus_need_refresh;
// Application look
@@ -233,6 +236,8 @@
afx_msg void OnFileXMLUpdate();
afx_msg void OnRunPlugin(UINT nID);
afx_msg void OnRunInterpreter(UINT nID);
+ afx_msg void OnRunComponentHelp(UINT nID);
+ afx_msg void OnRunParadigmHelp(UINT nID);
afx_msg void OnUpdateFilePluginX(CCmdUI* pCmdUI);
afx_msg void OnUpdateFileInterpretX(CCmdUI* pCmdUI);
afx_msg void OnFileDisplayConstraints();
Modified: trunk/GME/Gme/GuiMeta.cpp
==============================================================================
--- trunk/GME/Gme/GuiMeta.cpp Thu Sep 26 13:26:13 2019 (r2779)
+++ trunk/GME/Gme/GuiMeta.cpp Tue Apr 7 10:44:15 2020 (r2780)
@@ -5,6 +5,7 @@
#include "GuiMeta.h"
#include "GuiObject.h"
+CComBSTR StringFromGUID2(const CComVariant& guid);
// helper functions
@@ -66,6 +67,11 @@
COMTHROW(mgaMeta->get_DisplayedName(&bstr));
CopyTo(bstr,displayedName);
}
+ {
+ CComVariant pguid;
+ COMTHROW(mgaMeta->get_GUID(&pguid));
+ guid = StringFromGUID2(pguid);
+ }
CComPtr<IMgaMetaFolder> mmFolder;
COMTHROW(mgaMeta->get_RootFolder(&mmFolder));
Modified: trunk/GME/Gme/GuiMeta.h
==============================================================================
--- trunk/GME/Gme/GuiMeta.h Thu Sep 26 13:26:13 2019 (r2779)
+++ trunk/GME/Gme/GuiMeta.h Tue Apr 7 10:44:15 2020 (r2780)
@@ -15,6 +15,7 @@
~CGuiMetaProject();
public:
CString name;
+ CString guid;
CString displayedName;
CGuiMetaFolder *rootFolder;
CGuiMetaBaseTable metaTable;
Modified: trunk/GME/Gme/MainFrm.cpp
==============================================================================
--- trunk/GME/Gme/MainFrm.cpp Thu Sep 26 13:26:13 2019 (r2779)
+++ trunk/GME/Gme/MainFrm.cpp Tue Apr 7 10:44:15 2020 (r2780)
@@ -94,6 +94,7 @@
ON_UPDATE_COMMAND_UI(ID_MULTIUSER_ACTIVEUSERS, OnUpdateViewMultiUserActiveUsers)
ON_COMMAND(ID_VIEW_CLEARCONSOLE, OnViewClearConsole)
ON_UPDATE_COMMAND_UI(ID_VIEW_CLEARCONSOLE, OnUpdateViewClearConsole)
+ ON_UPDATE_COMMAND_UI(ID_HELP_CONTENTS, OnUpdateFileSettings)
#define MSG_MAP_VIEW_PANE(ID, class_, member) \
ON_COMMAND(ID, (&CMainFrame::OnViewPane<class_, &CMainFrame::member>)) \
@@ -457,7 +458,7 @@
mdiTabParams.m_tabLocation = CMFCTabCtrl::LOCATION_TOP; // Specifies that the tabs labels are located at the top of the page
EnableMDITabbedGroups(TRUE, mdiTabParams);
- CMFCToolBar::EnableQuickCustomization();
+ CMFCToolBar::EnableQuickCustomization();
// Set the visual manager and style based on persisted value
OnApplicationLook(theApp.m_nAppLook);
@@ -1268,6 +1269,13 @@
pCmdUI->Enable();
}
+void CMainFrame::OnUpdateFileSettings(CCmdUI* pCmdUI)
+{
+ // This is an update message for Tools/Options menu
+ // This triggers the refresh of plugins/interpreters menus
+ theApp.UpdateDynMenus(pCmdUI->m_pMenu);
+}
+
void CMainFrame::OnDropFiles(HDROP p_hDropInfo)
{
CGMEEventLogger::LogGMEEvent(_T("MainFrame:OnDropFiles\r\n"));
Modified: trunk/GME/Gme/MainFrm.h
==============================================================================
--- trunk/GME/Gme/MainFrm.h Thu Sep 26 13:26:13 2019 (r2779)
+++ trunk/GME/Gme/MainFrm.h Tue Apr 7 10:44:15 2020 (r2780)
@@ -165,6 +165,7 @@
afx_msg void OnUpdateViewMultiUserSubversion(CCmdUI* pCmdUI);
afx_msg void OnViewClearConsole();
afx_msg void OnUpdateViewClearConsole( CCmdUI* pCmdUI);
+ afx_msg void OnUpdateFileSettings(CCmdUI* pCmdUI);
template<class paneclass, typename paneclass CMainFrame::* const m_pane> afx_msg void OnViewPane()
{
Modified: trunk/GME/Gme/resource.h
==============================================================================
--- trunk/GME/Gme/resource.h Thu Sep 26 13:26:13 2019 (r2779)
+++ trunk/GME/Gme/resource.h Tue Apr 7 10:44:15 2020 (r2780)
@@ -520,16 +520,22 @@
#define ID_CONNCNTX_REVERSE 33270
#define ID_VIEW_SHOWCONNECTEDPORTSONLY 33271
#define ID_PORTCNTX_DELETE 33272
+#pragma region Help IDs
+#define ID_HELP_PARADIGMHELP 0x9000
+#define ID_HELP_PARADIGMHELP_FIRST 0x9001
+#define ID_HELP_PARADIGMHELP_LAST 0x900F
+#define ID_HELP_COMPONENTHELP 0x9010
+#define ID_HELP_COMPONENTHELP_FIRST 0x9011
+#define ID_HELP_COMPONENTHELP_LAST 0x908F
+#pragma endregion
#define IDW_TOOLBAR_MAIN 0xE820
#define IDW_TOOLBAR_WINS 0xE821
#define IDW_TOOLBAR_COMPONENT 0xE822
#define IDW_TOOLBAR_MODE 0xE823
#define IDW_TOOLBAR_NAVIG 0xE824
#define IDW_TOOLBAR_MODELING 0xE825
-
-
-#define ID_FILE_INTERPRET_LAST ID_FILE_INTERPRET49
#define ID_FILE_RUNPLUGIN_LAST ID_FILE_RUNPLUGIN8
+#define ID_FILE_INTERPRET_LAST ID_FILE_INTERPRET49
// Next default values for new objects
//
Modified: trunk/GME/Interfaces/MgaUtil.idl
==============================================================================
--- trunk/GME/Interfaces/MgaUtil.idl Thu Sep 26 13:26:13 2019 (r2779)
+++ trunk/GME/Interfaces/MgaUtil.idl Tue Apr 7 10:44:15 2020 (r2780)
@@ -517,6 +517,28 @@
HRESULT UnregisterComponentLibrary([in] BSTR path, [in] regaccessmode_enum mode);
};
+[
+ object,
+ uuid(0E3C2752-6173-4050-BD47-AE54DA1C373A),
+ dual,
+ helpstring("IMgaRegistrar2 Interface"),
+ pointer_default(unique)
+]
+interface IMgaRegistrar2 : IMgaRegistrar
+{
+ [propput, helpstring("property ParadigmExtraInfo")]
+ HRESULT ParadigmExtraInfo([in] regaccessmode_enum mode, [in] BSTR ParadigmName, [in] BSTR ParadigmVersionGUID, [in] BSTR name, [in] BSTR newVal);
+
+ [propget, helpstring("property ParadigmExtraInfo")]
+ HRESULT ParadigmExtraInfo([in] regaccessmode_enum mode, [in] BSTR ParadigmName, [in] BSTR ParadigmVersionGUID, [in] BSTR name, [out, retval] BSTR *pVal);
+
+ [helpstring("setter for property ParadigmExtraInfo")]
+ HRESULT SetParadigmExtraInfoDisp([in] BSTR ParadigmName, [in] BSTR ParadigmVersionGUID, [in] BSTR name, [in] BSTR newVal, [in, defaultvalue(REGACCESS_SYSTEM)] regaccessmode_enum mode);
+
+ [helpstring("getter for property ParadigmExtraInfo")]
+ HRESULT GetParadigmExtraInfoDisp([in] BSTR ParadigmName, [in] BSTR ParadigmVersionGUID, [in] BSTR name, [out, retval] BSTR *pVal);
+};
+
typedef enum metadlg_enum
{
METADLG_NONE = 0x0000,
Modified: trunk/GME/MgaUtil/MgaRegistrar.cpp
==============================================================================
--- trunk/GME/MgaUtil/MgaRegistrar.cpp Thu Sep 26 13:26:13 2019 (r2779)
+++ trunk/GME/MgaUtil/MgaRegistrar.cpp Tue Apr 7 10:44:15 2020 (r2780)
@@ -2423,7 +2423,7 @@
{
--index;
CComObjPtr<ITypeInfo> typeinfo;
- COMTHROW( typelib->GetTypeInfo(index, PutOut(typeinfo)) );// index parameter with the range of 0 to GetTypeInfoCount() 1.
+ COMTHROW( typelib->GetTypeInfo(index, PutOut(typeinfo)) );// index parameter with the range of 0 to GetTypeInfoCount() 1.
TYPEATTR *typeattr = NULL;
COMTHROW( typeinfo->GetTypeAttr(&typeattr) );
@@ -2454,3 +2454,91 @@
}
COMCATCH(;)
}
+
+STDMETHODIMP CMgaRegistrar::put_ParadigmExtraInfo(regaccessmode_enum mode, BSTR paradigmName, BSTR paradigmVersionGuid, BSTR name, BSTR newVal)
+{
+ CString paradigmNameStr = PutInCString(paradigmName);
+ CString paradigmGuidStr = PutInCString(paradigmVersionGuid);
+ CString nameStr = PutInCString(name);
+
+ COMTRY
+ {
+ if (mode & RM_SYS) {
+ CRegKey para;
+ LPCTSTR regpath = rootreg + _T("\\Paradigms\\") + paradigmNameStr + _T("\\") + paradigmGuidStr;
+ LONG res = para.Open(HKEY_LOCAL_MACHINE, regpath, KEY_WRITE);
+ if (res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) {
+ ERRTHROW(res);
+ }
+ if (res == ERROR_SUCCESS) {
+ if (!newVal) {
+ para.DeleteValue(nameStr);
+ }
+ else {
+ para.SetStringValue(nameStr, PutInCString(newVal));
+ }
+ }
+ }
+ if (mode & RM_USER) {
+ CRegKey para;
+ LPCTSTR regpath = rootreg + _T("\\Paradigms\\") + paradigmNameStr + _T("\\") + paradigmGuidStr;
+ LONG res = para.Open(HKEY_CURRENT_USER, regpath, KEY_WRITE);
+ if (res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) {
+ ERRTHROW(res);
+ }
+ if (res == ERROR_SUCCESS) {
+ if (!newVal) {
+ para.DeleteValue(nameStr);
+ }
+ else {
+ para.SetStringValue(nameStr, PutInCString(newVal));
+ }
+ }
+ }
+ } COMCATCH(;)
+}
+
+STDMETHODIMP CMgaRegistrar::get_ParadigmExtraInfo(regaccessmode_enum mode, BSTR paradigmName, BSTR paradigmVersionGuid, BSTR name, BSTR * pVal)
+{
+ CHECK_OUT(pVal);
+
+ if ((mode & RM_BOTH) == RM_BOTH) {
+ HRESULT res;
+ res = this->get_ParadigmExtraInfo(REGACCESS_USER, paradigmName, paradigmVersionGuid, name, pVal);
+ CString val = PutInCString(*pVal);
+ if (val.IsEmpty()) {
+ res = this->get_ParadigmExtraInfo(REGACCESS_SYSTEM, paradigmName, paradigmVersionGuid, name, pVal);
+ }
+ return res;
+ }
+
+ CString paradigmNameStr = PutInCString(paradigmName);
+ CString paradigmGuidStr = PutInCString(paradigmVersionGuid);
+ CString nameStr = PutInCString(name);
+
+ COMTRY
+ {
+ HKEY hive = (mode & RM_SYS ? HKEY_LOCAL_MACHINE : (mode & RM_USER ? HKEY_CURRENT_USER : NULL));
+ if (hive != NULL)
+ {
+ CRegKey para;
+ LPCTSTR regpath = rootreg + _T("\\Paradigms\\") + paradigmNameStr + _T("\\") + paradigmGuidStr;
+ LONG res = para.Open(hive, regpath, KEY_READ);
+
+ if (res != ERROR_SUCCESS && res != ERROR_ACCESS_DENIED && res != ERROR_FILE_NOT_FOUND) ERRTHROW(res);
+ if (res == ERROR_SUCCESS) {
+ ULONG count = 0;
+ if (para.QueryStringValue(nameStr, NULL, &count) == ERROR_SUCCESS) {
+ CString retVal;
+ if (para.QueryStringValue(nameStr, retVal.GetBufferSetLength(count), &count) == ERROR_SUCCESS) {
+ retVal.ReleaseBuffer();
+ CopyTo(retVal, pVal);
+ return S_OK;
+ }
+ }
+ }
+ }
+ return E_NOTFOUND;
+ }
+ COMCATCH(;)
+}
Modified: trunk/GME/MgaUtil/MgaRegistrar.h
==============================================================================
--- trunk/GME/MgaUtil/MgaRegistrar.h Thu Sep 26 13:26:13 2019 (r2779)
+++ trunk/GME/MgaUtil/MgaRegistrar.h Tue Apr 7 10:44:15 2020 (r2780)
@@ -8,8 +8,8 @@
class ATL_NO_VTABLE CMgaRegistrar :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CMgaRegistrar, &__uuidof(MgaRegistrar)>,
- public IDispatchImpl<IMgaRegistrar, &__uuidof(IMgaRegistrar), &__uuidof(__MGAUtilLib)>,
- public ISupportErrorInfoImpl<&__uuidof(IMgaRegistrar)>,
+ public IDispatchImpl<IMgaRegistrar2, &__uuidof(IMgaRegistrar2), &__uuidof(__MGAUtilLib)>,
+ public ISupportErrorInfoImpl2<&__uuidof(IMgaRegistrar), &__uuidof(IMgaRegistrar2)>,
public IGMEVersionInfoImpl
{
public:
@@ -20,7 +20,8 @@
BEGIN_COM_MAP(CMgaRegistrar)
COM_INTERFACE_ENTRY(IMgaRegistrar)
- COM_INTERFACE_ENTRY(IDispatch)
+ COM_INTERFACE_ENTRY(IMgaRegistrar2)
+ COM_INTERFACE_ENTRY2(IDispatch, IMgaRegistrar2)
COM_INTERFACE_ENTRY(ISupportErrorInfo)
COM_INTERFACE_ENTRY_IID(__uuidof(IGMEVersionInfo), IGMEVersionInfoImpl)
END_COM_MAP()
@@ -141,6 +142,13 @@
STDMETHOD(RegisterComponentLibrary)(BSTR path, regaccessmode_enum mode);
STDMETHOD(UnregisterComponentLibrary)(BSTR path, regaccessmode_enum mode);
+
+ // --- IMgaRegistrar2
+
+ STDMETHOD(put_ParadigmExtraInfo)(regaccessmode_enum mode, BSTR paradigmName, BSTR paradigmVersionGuid, BSTR name, BSTR newVal);
+ STDMETHOD(get_ParadigmExtraInfo)(regaccessmode_enum mode, BSTR paradigmName, BSTR paradigmVersionGuid, BSTR name, BSTR* pVal);
+ STDMETHOD(SetParadigmExtraInfoDisp)(BSTR paradigmName, BSTR paradigmVersionGuid, BSTR name, BSTR newVal, regaccessmode_enum mode = REGACCESS_SYSTEM) { return this->put_ParadigmExtraInfo(mode, paradigmName, paradigmVersionGuid, name, newVal); }
+ STDMETHOD(GetParadigmExtraInfoDisp)(BSTR paradigmName, BSTR paradigmVersionGuid, BSTR name, BSTR* pVal) { return this->get_ParadigmExtraInfo(REGACCESS_BOTH, paradigmName, paradigmVersionGuid, name, pVal); }
};
#endif//MGA_MGAREGISTRAR_H
Modified: trunk/GME/MgaUtil/MgaUtil.vcxproj
==============================================================================
--- trunk/GME/MgaUtil/MgaUtil.vcxproj Thu Sep 26 13:26:13 2019 (r2779)
+++ trunk/GME/MgaUtil/MgaUtil.vcxproj Tue Apr 7 10:44:15 2020 (r2780)
@@ -115,6 +115,7 @@
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <AdditionalOptions>/w34189 %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
<ResourceCompile>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
Modified: trunk/GME/MgaUtil/MgaUtilLib.idl
==============================================================================
--- trunk/GME/MgaUtil/MgaUtilLib.idl Thu Sep 26 13:26:13 2019 (r2779)
+++ trunk/GME/MgaUtil/MgaUtilLib.idl Tue Apr 7 10:44:15 2020 (r2780)
@@ -38,7 +38,8 @@
]
coclass MgaRegistrar
{
- [default] interface IMgaRegistrar;
+ [default] interface IMgaRegistrar2;
+ interface IMgaRegistrar;
interface IGMEVersionInfo;
};
Modified: trunk/GME/MgaUtil/StdAfx.h
==============================================================================
--- trunk/GME/MgaUtil/StdAfx.h Thu Sep 26 13:26:13 2019 (r2779)
+++ trunk/GME/MgaUtil/StdAfx.h Tue Apr 7 10:44:15 2020 (r2780)
@@ -109,6 +109,18 @@
#include "Resource.h"
regaccessmode_enum regacc_translate(int x);
+
+template <const IID* piid1, const IID* piid2>
+class ATL_NO_VTABLE ISupportErrorInfoImpl2 :
+ public ISupportErrorInfo
+{
+public:
+ STDMETHOD(InterfaceSupportsErrorInfo)(_In_ REFIID riid)
+ {
+ return (InlineIsEqualGUID(riid, *piid1) || InlineIsEqualGUID(riid, *piid2)) ? S_OK : S_FALSE;
+ }
+};
+
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
Modified: trunk/Install/GME_bin.wxs
==============================================================================
--- trunk/Install/GME_bin.wxs Thu Sep 26 13:26:13 2019 (r2779)
+++ trunk/Install/GME_bin.wxs Tue Apr 7 10:44:15 2020 (r2780)
@@ -511,6 +511,7 @@
<ProgId Id="Mga.MgaRegistrar" Description="MgaRegistrar Class" />
</ProgId>
<Interface Id="{F1D6BB05-42EE-11D4-B3F4-005004D38590}" Name="IMgaRegistrar" ProxyStubClassId="{00020424-0000-0000-C000-000000000046}" ProxyStubClassId32="{00020424-0000-0000-C000-000000000046}" />
+ <Interface Id="{0E3C2752-6173-4050-BD47-AE54DA1C373A}" Name="IMgaRegistrar2" ProxyStubClassId="{00020424-0000-0000-C000-000000000046}" ProxyStubClassId32="{00020424-0000-0000-C000-000000000046}" />
</Class>
<Class Id="{D03EC327-447B-11D4-B3F6-005004D38590}" Context="InprocServer32" Description="MgaLauncher Class" ThreadingModel="apartment" Programmable="yes">
<ProgId Id="Mga.MgaLauncher.1" Description="MgaLauncher Class">
More information about the gme-commit
mailing list