[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