[commit] r2573 - trunk/GME/MgaUtil

GMESRC Repository Notifications gme-commit at list.isis.vanderbilt.edu
Tue Dec 2 10:16:53 CST 2014


Author: ksmyth
Date: Tue Dec  2 10:16:53 2014
New Revision: 2573

Log:
Associate ConstraintManager add-on by default when registering a paradigm (GME-446)

Modified:
   trunk/GME/MgaUtil/MgaRegistrar.cpp

Modified: trunk/GME/MgaUtil/MgaRegistrar.cpp
==============================================================================
--- trunk/GME/MgaUtil/MgaRegistrar.cpp	Tue Dec  2 10:16:49 2014	(r2572)
+++ trunk/GME/MgaUtil/MgaRegistrar.cpp	Tue Dec  2 10:16:53 2014	(r2573)
@@ -63,6 +63,56 @@
 
 void REVOKE_SYS2(regaccessmode_enum &mode) { *(int *)&mode &= ~RM_SYS2; }
 
+enum Tristate_t {
+	Tristate_Enabled,
+	Tristate_Disabled,
+	Tristate_Not_Specified,
+};
+
+bool Combine_Tristate(Tristate_t user, Tristate_t system, bool default_ = false) {
+	if (user != Tristate_Not_Specified) {
+		return user == Tristate_Enabled;
+	}
+	if (system != Tristate_Not_Specified) {
+		return system == Tristate_Enabled;
+	}
+	return default_;
+}
+
+Tristate_t IsAssociated_hive(const CString& progidstr, const CString& paradigmstr, HKEY hive) {
+	CRegKey acomp;
+
+	if (acomp.Open(hive, rootreg + _T("\\Components\\") + progidstr + _T("\\Associated"), KEY_READ) != ERROR_SUCCESS) {
+		return Tristate_Not_Specified;
+	}
+	ULONG count = 0;
+	DWORD res = acomp.QueryValue(paradigmstr, NULL, NULL, &count);
+	if (res != ERROR_SUCCESS) {
+		return Tristate_Not_Specified;
+	}
+	CString val;
+	if (acomp.QueryStringValue(paradigmstr, val.GetBufferSetLength(count), &count) == ERROR_SUCCESS) {
+		val.ReleaseBuffer();
+		if (val == _T("Disabled")) {
+			return Tristate_Disabled;
+		}
+	}
+	return Tristate_Enabled;
+}
+
+bool IsAssociated_regaccess(const CString& progidstr, const CString& paradigmstr, regaccessmode_enum mode) {
+	if (mode & REGACCESS_BOTH) {
+		return  Combine_Tristate(
+			IsAssociated_hive(progidstr, paradigmstr, HKEY_CURRENT_USER),
+			IsAssociated_hive(progidstr, paradigmstr, HKEY_LOCAL_MACHINE));
+	} else if (mode & REGACCESS_USER) {
+		return IsAssociated_hive(progidstr, paradigmstr, HKEY_CURRENT_USER) == Tristate_Enabled;
+	} else if (mode & REGACCESS_SYSTEM) {
+		return IsAssociated_hive(progidstr, paradigmstr, HKEY_LOCAL_MACHINE) == Tristate_Enabled;
+	}
+	return false;
+}
+
 STDMETHODIMP CMgaRegistrar::get_IconPath(regaccessmode_enum mode, BSTR *path)
 {
 	CHECK_OUT(path);
@@ -1248,65 +1298,6 @@
 	} COMCATCH(;)
 }
 
-
-
-/*
-bool CheckHasConstraints(IMgaMetaBase *o) {
-	{
-		CComPtr<IMgaConstraints> consts;
-		long l;
-		COMTHROW(f->get_Constraints(&consts));
-		COMTHROW(consts->get_Count(&l));
-		if(l > 0) return true;
-	}
-	CComQIPtr<IMgaMetaFolder> f = o;
-	if(f) {
-		CComPtr<IMgaMetaFolders> fs;
-		COMTHROW(f->get_DefinedFolders(&fs));
-		MGACOLL_ITERATE(IMgaMetaFolder, fs) {
-			if(CheckHasConstraints(MGACOLL_ITER)) return true;
-		} MGACOLL_ITERATE_END;
-		CComPtr<IMgaMetaFCOs> fcs;
-		COMTHROW(f->get_DefinedFCOs(&fcs));
-		MGACOLL_ITERATE(IMgaMetaFCO, fcs) {
-			if(CheckHasConstraints(MGACOLL_ITER)) return true;
-		} MGACOLL_ITERATE_END;
-	}
-	else {
-		CComQIPtr<IMgaMetaModel> m = o;
-		if(m) {
-			CComPtr<IMgaMetaFCOs> fcs;
-			COMTHROW(m->get_DefinedFCOs(&fcs));
-			MGACOLL_ITERATE(IMgaMetaFCO, fcs) {
-				if(CheckHasConstraints(MGACOLL_ITER)) return true;
-			} MGACOLL_ITERATE_END;
-		}		
-	}
-}
-
-
-bool ParadigmHasConstraints(BSTR connstr) {
-	bool hasconstraints = false;
-	int openstate = 0;
-	COMTRY {
-		CComPtr<IMgaMetaProject> pp;
-		COMTHROW(pp.CoCreateInstance("Mga.MgaMetaProject"));
-		COMTHROW(pp->Open(connstr));
-		openstate = 1;
-		CComPtr<IMgaMetaFolder> f;
-		COMTHROW(pp->get_RootFolder(&f));
-	
-		hasconstraints = CheckHasConstraints(f);
-
-	} 	catch(hresult_exception &) { ; }
-	if(openstate) {
-		COMTHROW(pp->Close());
-	}
-	return hasconstraints;
-}
-*/
-
-
 STDMETHODIMP CMgaRegistrar::RegisterParadigm(BSTR name, BSTR connstr, BSTR version, VARIANT guid, regaccessmode_enum mode)
 {
 	CString cver(version); 
@@ -1327,7 +1318,7 @@
 
 		CComBstrObj guid3;
 		CopyTo(guid2, guid3);
-	
+
 		if(mode & RM_USER) {
 			CRegKey mga;
 			ERRTHROW(mga.Create(HKEY_CURRENT_USER, rootreg) );
@@ -1357,7 +1348,7 @@
 
 			CRegKey par;
 
-			if(mode & RM_SYS) {
+			if (mode & RM_SYS) {
 				WIN32THROW( par.Create(pars, CString(name)) );
 				CString gg	= QueryValue(par, _T("GUID"));
 				CString gc	= QueryValue(par, _T("ConnStr"));
@@ -1375,14 +1366,17 @@
 				}
 				CRegKey parg;
 				WIN32THROW( parg.Create(par, PutInCString(guid3)) );
-	
+
 				WIN32THROW( parg.SetStringValue( _T("ConnStr"), CString(connstr)));
-			}
-			else {
+			} else {
 				LONG res = par.Open(pars, CString(name));
 				if(res != ERROR_SUCCESS && res != ERROR_FILE_NOT_FOUND) WIN32THROW(res);
 			}
 		}
+		if ((!(mode & RM_USER) || IsAssociated_hive(L"Mga.AddOn.ConstraintManager", name, HKEY_CURRENT_USER) != Tristate_Disabled) &&
+			(!(mode & RM_SYS) || IsAssociated_hive(L"Mga.AddOn.ConstraintManager", name, HKEY_LOCAL_MACHINE) != Tristate_Disabled)) {
+			Associate(CComBSTR(L"Mga.AddOn.ConstraintManager"), name, mode); // no error checking
+		}
 	}
 	COMCATCH(;)
 }
@@ -2108,56 +2102,6 @@
 	COMCATCH(;)
 }
 
-enum Tristate_t {
-	Tristate_Enabled,
-	Tristate_Disabled,
-	Tristate_Not_Specified,
-};
-
-bool Combine_Tristate(Tristate_t user, Tristate_t system, bool default_ = false) {
-	if (user != Tristate_Not_Specified) {
-		return user == Tristate_Enabled;
-	}
-	if (system != Tristate_Not_Specified) {
-		return system == Tristate_Enabled;
-	}
-	return default_;
-}
-
-Tristate_t IsAssociated_hive(const CString& progidstr, const CString& paradigmstr, HKEY hive) {
-	CRegKey acomp;
-
-	if (acomp.Open(hive, rootreg + _T("\\Components\\") + progidstr + _T("\\Associated"), KEY_READ) != ERROR_SUCCESS) {
-		return Tristate_Not_Specified;
-	}
-	ULONG count = 0;
-	DWORD res = acomp.QueryValue(paradigmstr, NULL, NULL, &count);
-	if (res != ERROR_SUCCESS) {
-		return Tristate_Not_Specified;
-	}
-	CString val;
-	if (acomp.QueryStringValue(paradigmstr, val.GetBufferSetLength(count), &count) == ERROR_SUCCESS) {
-		val.ReleaseBuffer();
-		if (val == _T("Disabled")) {
-			return Tristate_Disabled;
-		}
-	}
-	return Tristate_Enabled;
-}
-
-bool IsAssociated_regaccess(const CString& progidstr, const CString& paradigmstr, regaccessmode_enum mode) {
-	if (mode & REGACCESS_BOTH) {
-		return  Combine_Tristate(
-				IsAssociated_hive(progidstr, paradigmstr, HKEY_CURRENT_USER),
-				IsAssociated_hive(progidstr, paradigmstr, HKEY_LOCAL_MACHINE));
-	} else if (mode & REGACCESS_USER) {
-		return IsAssociated_hive(progidstr, paradigmstr, HKEY_CURRENT_USER) == Tristate_Enabled;
-	} else if (mode & REGACCESS_SYSTEM) {
-		return IsAssociated_hive(progidstr, paradigmstr, HKEY_LOCAL_MACHINE) == Tristate_Enabled;
-	}
-	return false;
-}
-
 STDMETHODIMP CMgaRegistrar::get_AssociatedComponents(BSTR paradigm, 
 	componenttype_enum type, regaccessmode_enum mode, VARIANT *progids)
 {


More information about the gme-commit mailing list