[commit] r2206 - trunk/GME/ConstraintManager

GMESRC Repository Notifications gme-commit at list.isis.vanderbilt.edu
Wed May 22 11:53:03 CDT 2013


Author: ksmyth
Date: Wed May 22 11:53:03 2013
New Revision: 2206

Log:
Unicode support in ConstraintManager

Modified:
   trunk/GME/ConstraintManager/GMEConstraintBrowserDialog.cpp
   trunk/GME/ConstraintManager/GMEConstraintPropertiesDialog.cpp
   trunk/GME/ConstraintManager/GMEViolationDialog.cpp
   trunk/GME/ConstraintManager/OCLCommon.cpp
   trunk/GME/ConstraintManager/OCLCommonEx.cpp
   trunk/GME/ConstraintManager/OCLTypeExGMECM.cpp
   trunk/GME/ConstraintManager/StdAfx.h

Modified: trunk/GME/ConstraintManager/GMEConstraintBrowserDialog.cpp
==============================================================================
--- trunk/GME/ConstraintManager/GMEConstraintBrowserDialog.cpp	Wed May 22 11:51:38 2013	(r2205)
+++ trunk/GME/ConstraintManager/GMEConstraintBrowserDialog.cpp	Wed May 22 11:53:03 2013	(r2206)
@@ -825,10 +825,10 @@
 			CComQIPtr<IMgaRegNode> spRegNode;
 			CComQIPtr<IMgaFCO> spFCO = spObject;
 			if ( spFCO.p )
-				COMTHROW( spFCO->get_RegistryNode( CComBSTR( "ConstraintEnabling/" + strCID ), &spRegNode ) );
+				COMTHROW( spFCO->get_RegistryNode( CComBSTR( L"ConstraintEnabling/" + strCID ), &spRegNode ) );
 			else {
 				CComQIPtr<IMgaFolder> spFolder = spObject;
-				COMTHROW( spFolder->get_RegistryNode( CComBSTR( "ConstraintEnabling/" + strCID ), &spRegNode ) );
+				COMTHROW( spFolder->get_RegistryNode( CComBSTR( L"ConstraintEnabling/" + strCID ), &spRegNode ) );
 			}
 			if ( iRealNewS == NS_CHECKED_INHERITED || iRealNewS == NS_UNCHECKED_INHERITED && iImNumP != 6 )
 				COMTHROW( spRegNode->RemoveTree() );
@@ -935,7 +935,7 @@
 		CComPtr<IMgaFolder> spRootFolder;
 		COMTHROW( m_pFacade->GetProject()->get_RootFolder( &spRootFolder ) );
 		CComPtr<IMgaRegNode> spRegNode;
-		COMTHROW( spRootFolder->get_RegistryNode( CComBSTR( "ConstraintDefinitions/" + OclCommonEx::Convert( spConstraint->GetFullName() ) ), &spRegNode ) );
+		COMTHROW( spRootFolder->get_RegistryNode( CComBSTR( L"ConstraintDefinitions/" + OclCommonEx::Convert( spConstraint->GetFullName() ) ), &spRegNode ) );
 		spConstraint->Write( spRegNode );
 
 		// Remove the kind from Object Tree, and refresh it
@@ -983,7 +983,7 @@
 		CComPtr<IMgaFolder> spRootFolder;
 		COMTHROW( m_pFacade->GetProject()->get_RootFolder( &spRootFolder ) );
 		CComPtr<IMgaRegNode> spRegNode;
-		COMTHROW( spRootFolder->get_RegistryNode( CComBSTR( "ConstraintDefinitions/" + OclCommonEx::Convert( spConstraint->GetFullName() ) ), &spRegNode ) );
+		COMTHROW( spRootFolder->get_RegistryNode( CComBSTR( L"ConstraintDefinitions/" + OclCommonEx::Convert( spConstraint->GetFullName() ) ), &spRegNode ) );
 		COMTHROW( spRegNode->RemoveTree() );
 
 		// Remove Enabling flags from objects' registry

Modified: trunk/GME/ConstraintManager/GMEConstraintPropertiesDialog.cpp
==============================================================================
--- trunk/GME/ConstraintManager/GMEConstraintPropertiesDialog.cpp	Wed May 22 11:51:38 2013	(r2205)
+++ trunk/GME/ConstraintManager/GMEConstraintPropertiesDialog.cpp	Wed May 22 11:53:03 2013	(r2206)
@@ -101,13 +101,13 @@
 			case OclGme::ConstraintBase::CL_PROJECT : {
 				CString strProject;
 				COMTHROW( m_pDialog->m_pFacade->GetProject()->get_Name( PutOut( strProject ) ) );
-				m_pageIdentity.m_edtDefinition.SetWindowText( "Project: " + strProject );
+				m_pageIdentity.m_edtDefinition.SetWindowText( L"Project: " + strProject );
 				break;
 			}
 			case OclGme::ConstraintBase::CL_META : {
 				CString strMProject;
 				COMTHROW( m_pDialog->m_pFacade->GetMetaProject()->get_Name( PutOut( strMProject ) ) );
-				m_pageIdentity.m_edtDefinition.SetWindowText( "Meta: " + strMProject );
+				m_pageIdentity.m_edtDefinition.SetWindowText( L"Meta: " + strMProject );
 				break;
 			}
 			default : {
@@ -118,7 +118,7 @@
 						strPath += "/";
 					strPath += OclCommonEx::Convert( vecLibPath[ i ] );
 				}
-				m_pageIdentity.m_edtDefinition.SetWindowText( "Library: " + strPath );
+				m_pageIdentity.m_edtDefinition.SetWindowText( L"Library: " + strPath );
 				break;
 			}
 		}
@@ -128,7 +128,7 @@
 		m_pageIdentity.m_cmbDepth.SetCurSel( 1 );
 		CString strProject;
 		COMTHROW( m_pDialog->m_pFacade->GetProject()->get_Name( PutOut( strProject ) ) );
-		m_pageIdentity.m_edtDefinition.SetWindowText( "Project: " + strProject );
+		m_pageIdentity.m_edtDefinition.SetWindowText( L"Project: " + strProject );
 	}
 
 	// Fill Expression Page
@@ -149,7 +149,7 @@
 		m_pageExpression.m_cmbContext.EnableWindow( false );
 		int iPos = FindItem( OclCommonEx::Convert( strContext ) );
 		if ( iPos == -1 ) {
-			iPos = InsertItem( OBJTYPE_NULL, "Invalid context: " + OclCommonEx::Convert( strContext ) );
+			iPos = InsertItem( OBJTYPE_NULL, L"Invalid context: " + OclCommonEx::Convert( strContext ) );
 			m_btnOK.EnableWindow( m_spConstraintIn->GetLocation() == OclGme::ConstraintBase::CL_PROJECT );
 		}
 		m_pageExpression.m_cmbContext.SetCurSel( iPos );
@@ -211,7 +211,7 @@
 	std::sort( vecKinds.begin(), vecKinds.end() );
 
 	for ( unsigned int i = 0 ; i < vecKinds.size() ; i++ )
-		InsertItem( eType, "meta::" + OclCommonEx::Convert( vecKinds[ i ] ) );
+		InsertItem( eType, L"meta::" + OclCommonEx::Convert( vecKinds[ i ] ) );
 }
 
 int CConstraintPropertiesDialog::InsertItem( objtype_enum eType, CString& strItem )

Modified: trunk/GME/ConstraintManager/GMEViolationDialog.cpp
==============================================================================
--- trunk/GME/ConstraintManager/GMEViolationDialog.cpp	Wed May 22 11:51:38 2013	(r2205)
+++ trunk/GME/ConstraintManager/GMEViolationDialog.cpp	Wed May 22 11:53:03 2013	(r2206)
@@ -189,13 +189,13 @@
 
 		lvItem.mask = LVIF_TEXT;
 		lvItem.iSubItem = 1;
-		CString strText = m_vecRecords[ i ].spConstraint->GetContextType().c_str();// OclCommonEx::Convert( m_vecRecords[ i ].spConstraint->GetContextType() );
+		CString strText = OclCommonEx::Convert( m_vecRecords[ i ].spConstraint->GetContextType() );
 		lvItem.pszText = (TCHAR*)(LPCTSTR)strText; //.GetBuffer( strText.GetLength() );
 		m_lstConstraints.SetItem( &lvItem );
 //		strText.ReleaseBuffer();
 
 		lvItem.iSubItem = 2;
-		strText = m_vecRecords[ i ].spConstraint->GetName().c_str(); // OclCommonEx::Convert( m_vecRecords[ i ].spConstraint->GetName() );
+		strText = OclCommonEx::Convert( m_vecRecords[ i ].spConstraint->GetName() );
 		lvItem.pszText = (TCHAR*)(LPCTSTR)strText; //.GetBuffer( strText.GetLength() );
 		m_lstConstraints.SetItem( &lvItem );
 //		strText.ReleaseBuffer();
@@ -442,16 +442,16 @@
 				COMTHROW(bstr.Append(_T("\">")));
 				COMTHROW(bstr.AppendBSTR( nm));
 				COMTHROW(bstr.Append(_T("</A>: ")));
-				COMTHROW(bstr.Append(item.spConstraint.Ptr()->GetMessage().c_str()));
+				COMTHROW(bstr.Append(OclCommonEx::Convert(item.spConstraint.Ptr()->GetMessage())));
 				COMTHROW(m_oleapp->ConsoleMessage(bstr, MSG_ERROR));
 			}
 			catch(hresult_exception &)// in case the constraint is not attached to any fco in the metamodel
 			{                         // the constraint becomes project scoped, thus QueryInterface fails
 				CComBSTR bstr;
 				bstr.Append(_T("Constraint "));
-				bstr.Append(item.spConstraint.Ptr()->GetFullName().c_str());
+				bstr.Append(OclCommonEx::Convert(item.spConstraint.Ptr()->GetFullName())); // FIXME suspect
 				bstr.Append(_T(" Violated! Description: \""));
-				bstr.Append(item.spConstraint.Ptr()->GetMessage().c_str());
+				bstr.Append(OclCommonEx::Convert(item.spConstraint.Ptr()->GetMessage())); // FIXME suspect
 				bstr.Append(_T("\"."));
 				COMTHROW(m_oleapp->ConsoleMessage(bstr, MSG_ERROR));
 			}
@@ -508,7 +508,7 @@
 			lvItem.iSubItem = 0;
 			lvItem.iImage = 0;
 			lvItem.lParam = i;
-			CString strTemp = vi.vecVariables[ i ].c_str(); // OclCommonEx::Convert( vi.vecVariables[ i ] );
+			CString strTemp = OclCommonEx::Convert( vi.vecVariables[ i ] );
 			lvItem.pszText = (TCHAR*)(LPCTSTR)strTemp;//.GetBuffer( strTemp.GetLength() );
 			m_lstObjects.InsertItem( &lvItem );
 
@@ -519,7 +519,7 @@
 
 			lvItem.mask = LVIF_TEXT;
 			lvItem.iSubItem = 1;
-			strTemp = vi.vecObjects[ i ].c_str(); // OclCommonEx::Convert( vi.vecObjects[ i ] );
+			strTemp = OclCommonEx::Convert( vi.vecObjects[ i ] );
 			lvItem.pszText = (TCHAR*)(LPCTSTR)strTemp; //.GetBuffer( strTemp.GetLength() );
 			m_lstObjects.SetItem( &lvItem );
 
@@ -541,7 +541,7 @@
 		{
 			arrText.RemoveAll();
 			int serial = it->second.serial;
-			CString strExpression = it->second.text.c_str(); // OclCommonEx::Convert(it->second.text);
+			CString strExpression = OclCommonEx::Convert(it->second.text);
 			strExpression.Replace( _T("\r"), _T("") );
 			strExpression.Replace( _T("\n"), _T("\r\n") );
 			strExpression.Replace( _T("\t"), _T("    ") );
@@ -600,7 +600,7 @@
 		m_lstExpression.DeleteAllItems();
 
 		CStringArray arrText;
-		CString strExpression = m_vecRecords[ m_iSelectedConstraint ].spConstraint->GetText().c_str(); // OclCommonEx::Convert( m_vecRecords[ m_iSelectedConstraint ].spConstraint->GetText() );
+		CString strExpression = OclCommonEx::Convert( m_vecRecords[ m_iSelectedConstraint ].spConstraint->GetText() );
 		strExpression.Replace( _T("\r"), _T("") );
 		strExpression.Replace( _T("\n"), _T("\r\n") );
 		strExpression.Replace( _T("\t"), _T("    ") );
@@ -704,7 +704,7 @@
 
 			lvItem.mask = LVIF_TEXT;
 			lvItem.iSubItem = 1;
-			strTemp = vi.strMessage.c_str(); // OclCommonEx::Convert( vi.strMessage );
+			strTemp = OclCommonEx::Convert( vi.strMessage );
 			lvItem.pszText = (TCHAR*)(LPCTSTR)strTemp; // .GetBuffer( strTemp.GetLength() );
 			m_lstErrors.SetItem( &lvItem );
 
@@ -714,7 +714,7 @@
 			// Add Signature
 
 			lvItem.iSubItem = 2;
-			strTemp = vi.strSignature.c_str(); // OclCommonEx::Convert( vi.strSignature );
+			strTemp = OclCommonEx::Convert( vi.strSignature );
 			lvItem.pszText = (TCHAR*)(LPCTSTR)strTemp; // .GetBuffer( strTemp.GetLength() );
 			m_lstErrors.SetItem( &lvItem );
 
@@ -771,8 +771,8 @@
 			int iType2 = spConstraint2->GetType();
 			return ( iType1 < iType2 ) ? -1 : ( iType1 > iType2 ) ? 1 : 0;
 		}
-		CString str1 = ( pSortInfo->iColumn == 1 ) ? spConstraint1->GetContextType().c_str() : spConstraint1->GetName().c_str(); // OclCommonEx::Convert( ( pSortInfo->iColumn == 1 ) ? spConstraint1->GetContextType() : spConstraint1->GetName() );
-		CString str2 = ( pSortInfo->iColumn == 1 ) ? spConstraint2->GetContextType().c_str() : spConstraint2->GetName().c_str(); // OclCommonEx::Convert( ( pSortInfo->iColumn == 1 ) ? spConstraint2->GetContextType() : spConstraint2->GetName() );
+		CString str1 = OclCommonEx::Convert( ( pSortInfo->iColumn == 1 ) ? spConstraint1->GetContextType() : spConstraint1->GetName() );
+		CString str2 = OclCommonEx::Convert( ( pSortInfo->iColumn == 1 ) ? spConstraint2->GetContextType() : spConstraint2->GetName() );
 		return _tcscmp( str1, str2 );
 	}
 

Modified: trunk/GME/ConstraintManager/OCLCommon.cpp
==============================================================================
--- trunk/GME/ConstraintManager/OCLCommon.cpp	Wed May 22 11:51:38 2013	(r2205)
+++ trunk/GME/ConstraintManager/OCLCommon.cpp	Wed May 22 11:53:03 2013	(r2206)
@@ -9,14 +9,14 @@
 
 	std::string& TrimLeft( std::string& strIn )
 	{
-		while ( ! strIn.empty() && ( strIn[ 0 ] < 20 || strIn[ 0 ] == ' ' || strIn[ 0 ] == '\t' ) )
+		while ( ! strIn.empty() && ((strIn[0] < 20 && strIn[0] >= 0) || strIn[ 0 ] == ' ' || strIn[ 0 ] == '\t' ) )
 			strIn.erase( 0, 1 );
 		return strIn;
 	}
 
 	std::string& TrimRight( std::string& strIn )
 	{
-		while ( ! strIn.empty() && ( strIn[ strIn.length() - 1 ] < 20 || strIn[ strIn.length() - 1 ] == ' ' || strIn[ strIn.length() - 1 ] == '\t' ) )
+		while ( ! strIn.empty() && ((strIn[strIn.length() - 1] < 20 && strIn[strIn.length() - 1] >= 0)|| strIn[ strIn.length() - 1 ] == ' ' || strIn[ strIn.length() - 1 ] == '\t' ) )
 			strIn.erase( strIn.length() - 1, 1 );
 		return strIn;
 	}

Modified: trunk/GME/ConstraintManager/OCLCommonEx.cpp
==============================================================================
--- trunk/GME/ConstraintManager/OCLCommonEx.cpp	Wed May 22 11:51:38 2013	(r2205)
+++ trunk/GME/ConstraintManager/OCLCommonEx.cpp	Wed May 22 11:53:03 2013	(r2206)
@@ -20,15 +20,42 @@
 //
 //##############################################################################################################################################
 
-	std::string Convert( const CString& strIn )
+	std::string Convert(const CStringW& strIn)
 	{
-		std::string strOut( static_cast<const char*>(CStringA(strIn)) );
+		std::string strOut;
+
+		int len = GetCharLength(strIn, strIn.GetLength(), CP_UTF8);
+		if (len == 0)
+			return strOut;
+		char* out;
+		char out_stack[1024];
+		std::unique_ptr<char[]> out_heap;
+		if (len > sizeof(out_stack) / sizeof(out_stack[0]))
+		{
+			out_heap = std::unique_ptr<char[]>(new char[len]);
+			out = out_heap.get();
+		}
+		else
+		{
+			out = out_stack;
+		}
+		len = WideCharToMultiByte(CP_UTF8, 0, strIn, strIn.GetLength(), out, len, NULL, NULL);
+		ASSERT(len);
+		strOut = std::string(out, out + len);
 		return strOut;
 	}
 
-	CString Convert( const std::string& strIn )
+	CStringW Convert(const std::string& strIn)
 	{
-		return CString( strIn.c_str() );
+		int len = MultiByteToWideChar(CP_UTF8, 0, strIn.c_str(), strIn.length(), nullptr, 0);
+
+		if (len == 0)
+			return CString();
+		CString ret;
+		len = MultiByteToWideChar(CP_UTF8, 0, strIn.c_str(), strIn.length(), ret.GetBuffer(len), len);
+		ASSERT(len);
+		ret.ReleaseBuffer(len);
+		return ret;
 	}
 
 	bool ParseCardinality( const CString& strCardinalityIn )

Modified: trunk/GME/ConstraintManager/OCLTypeExGMECM.cpp
==============================================================================
--- trunk/GME/ConstraintManager/OCLTypeExGMECM.cpp	Wed May 22 11:51:38 2013	(r2205)
+++ trunk/GME/ConstraintManager/OCLTypeExGMECM.cpp	Wed May 22 11:53:03 2013	(r2206)
@@ -101,11 +101,11 @@
 		{
 			DECL_STRING( strThis, GetThis() );
 			DECL_STRING( strRegExp, GetArgument( 0 ) );
-			CStringA strRegExp2 = OclCommonEx::Convert( strRegExp );
+			CString strRegExp2 = OclCommonEx::Convert( strRegExp );
 			try {
-				std::regex tester( strRegExp2 );
+				std::wregex tester( strRegExp2 );
 
-				SetResult( CREATE_BOOLEAN( GetTypeManager(), std::regex_search(strThis, tester) ) );
+				SetResult( CREATE_BOOLEAN( GetTypeManager(), std::regex_search(static_cast<const TCHAR*>(OclCommonEx::Convert(strThis)), tester) ) );
 			} catch (std::regex_error&) {
 				ThrowException( "Regular Expression is not valid!" );
 			}

Modified: trunk/GME/ConstraintManager/StdAfx.h
==============================================================================
--- trunk/GME/ConstraintManager/StdAfx.h	Wed May 22 11:51:38 2013	(r2205)
+++ trunk/GME/ConstraintManager/StdAfx.h	Wed May 22 11:53:03 2013	(r2206)
@@ -11,6 +11,8 @@
 #define _SECURE_ATL 1
 #endif
 
+#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS 1
+
 #ifndef VC_EXTRALEAN
 #define VC_EXTRALEAN            // Exclude rarely-used stuff from Windows headers
 #endif


More information about the gme-commit mailing list