📄 mminwsimulatordlg.cpp
字号:
}
break;
}
default: break;
}
return CDialog::PreTranslateMessage(pMsg);
}
void CMMINWSimulatorDlg::OnMenuExit()
{
ShowWindow(SW_HIDE);
}
void CMMINWSimulatorDlg::OnAboutNwssimeditor()
{
// TODO: Add your command handler code here
CAboutDialog cad;
cad.SetTheLibraryIdentifier(library_identifier);
cad.DoModal ();
}
void CMMINWSimulatorDlg::OnViewDisplaytype()
{
// TODO: Add your command handler code here
DisplayType disptype;
disptype.DoModal ();
}
void CMMINWSimulatorDlg::OnGlobalResponses()
{
CRespModeChg ChangeMode;
ChangeMode.SetTheLibraryIdentifier(library_identifier);
ChangeMode.DoModal();
// TODO: Add your command handler code here
}
void CMMINWSimulatorDlg::OnGlobalFrequencyandtimer()
{
CGlobalFrequencyTimerChange global_frequency_timer_change_object;
global_frequency_timer_change_object.SetLibraryIdentifier(library_identifier);
global_frequency_timer_change_object.DoModal();
}
/*--------------------- Send Message to MMI ------------------------------------*/
void CMMINWSimulatorDlg::SendMessageToMMI(CMessage *clMessage,CString strDataSet)
{
//now finally send the message to socket for this message
//check the plugin name if exist then call it straightway
UINT32 iSize = 0,freq,timer;
int loopcounter;
CString tempstr,strPlugin = clMessage->GetPluginName();
MYQUEUE stMsgQueue;
freq = m_pMessageManager->GetFreq(clMessage->GetMessageId(),strDataSet);
// Check if frequency is >1
if (freq>1)
{
//get default timer
timer= m_pMessageManager->GetTimer (clMessage->GetMessageId(),strDataSet);
SendMessageDetails *messagedetailpacket;
messagedetailpacket = (SendMessageDetails*) malloc(sizeof(SendMessageDetails));
messagedetailpacket->clMessage = clMessage;
messagedetailpacket->strDataList = (char *)malloc( sizeof(char)* strDataSet.GetLength());
for(loopcounter=0;loopcounter<strDataSet.GetLength();loopcounter++)
{
messagedetailpacket->strDataList[loopcounter] = strDataSet.GetAt(loopcounter);
}
messagedetailpacket->strDataList[loopcounter]=0; // Null
messagedetailpacket->Freq = freq-1;
messagedetailpacket->Timer = timer;
messagedetailpacket->TimerId = NULL;
SendMessageFreq(clMessage,strDataSet);
CreateTimer(messagedetailpacket);
}
else
{
if(strPlugin ==_T("")) // frequency is 1 and no plugin
{
void *pData = NULL;
pData = GetDataMemoryForMessage(clMessage,&iSize,strDataSet);
if(pData!=NULL)
{
stMsgQueue.oslSrcId = MOD_L4C;
stMsgQueue.oslDestId = PRT_EVENT;
stMsgQueue.oslMsgId = clMessage->GetMessageId();
stMsgQueue.oslDataPtr = pData;
stMsgQueue.oslPeerBuffPtr = NULL;
myNSRThread->WriteToSocket(&stMsgQueue);
}
else
AMLOGINFO(_T("Memory NULL Buffer error for Outgoing Message"));
}
else
{
//call the pluggin straightaway
void *pData = PluginFunctionForOutGoingMessage(strPlugin);
stMsgQueue.oslSrcId = MOD_L4C;
stMsgQueue.oslDestId = PRT_EVENT;
stMsgQueue.oslMsgId = clMessage->GetMessageId();
stMsgQueue.oslDataPtr = pData;
stMsgQueue.oslPeerBuffPtr = NULL;
myNSRThread->WriteToSocket(&stMsgQueue);
}
}
}
void CMMINWSimulatorDlg::SendMessageFreq(CMessage *clMessage,CString strDataList)
{
UINT32 iSize = 0;
CString strPlugin = clMessage->GetPluginName();
MYQUEUE stMsgQueue;
if(strPlugin ==_T("")) // frequency is 1 and no plugin
{
void *pData = NULL;
pData = GetDataMemoryForMessage(clMessage,&iSize,strDataList);
if(pData!=NULL)
{
stMsgQueue.oslSrcId = MOD_L4C;
stMsgQueue.oslDestId = PRT_EVENT;
stMsgQueue.oslMsgId = clMessage->GetMessageId();
stMsgQueue.oslDataPtr = pData;
stMsgQueue.oslPeerBuffPtr = NULL;
myNSRThread->WriteToSocket(&stMsgQueue);
}
else
AMLOGINFO(_T("Memory NULL Buffer error for Outgoing Message"));
}
else
{
//call the pluggin straightaway
void *pData = PluginFunctionForOutGoingMessage(strPlugin);
stMsgQueue.oslSrcId = MOD_L4C;
stMsgQueue.oslDestId = PRT_EVENT;
stMsgQueue.oslMsgId = clMessage->GetMessageId();
stMsgQueue.oslDataPtr = pData;
stMsgQueue.oslPeerBuffPtr = NULL;
myNSRThread->WriteToSocket(&stMsgQueue);
}
}
void CMMINWSimulatorDlg::SendMessageFreq(CMessage *clMessage,CData* dataset)
{
UINT32 iSize = 0;
MYQUEUE stMsgQueue;
void *pData = NULL;
CFormat * format_for_msg_to_be_sent =m_pMessageManager->GetFormatForMessage(clMessage);
CList<CVar,CVar&>& varlist_for_msg_to_be_sent = format_for_msg_to_be_sent->GetVarList();
pData = m_pMessageManager->GetBufferForSocket(clMessage,*dataset,varlist_for_msg_to_be_sent,&iSize);
if(pData!=NULL)
{
stMsgQueue.oslSrcId = MOD_L4C;
stMsgQueue.oslDestId = PRT_EVENT;
stMsgQueue.oslMsgId = clMessage->GetMessageId();
stMsgQueue.oslDataPtr = pData;
stMsgQueue.oslPeerBuffPtr = NULL;
myNSRThread->WriteToSocket(&stMsgQueue);
}
else
AMLOGINFO(_T("Memory NULL Buffer error for Outgoing Message"));
}
void CMMINWSimulatorDlg::CreateTimer(SendMessageDetails *messagedetailpacket)
{
UINT32 Timer;
messagedetailpacket->TimerId = m_pMessageManager->m_TimerList->GetCount()+1;
m_pMessageManager->m_TimerList->AddTail(messagedetailpacket);
Timer = messagedetailpacket->Timer;
if (Timer ==0)// because timer can never be 0 for freq >1
Timer =1;
SetTimer(messagedetailpacket->TimerId, Timer*1000,0);
}
void CMMINWSimulatorDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
CDialog::OnTimer(nIDEvent);
SendMessageDetails *pSendMsgDetail;
if( m_pMessageManager->m_TimerList->GetCount())
{
for(POSITION pos = m_pMessageManager->m_TimerList->GetHeadPosition();pos!=NULL;)
{
pSendMsgDetail = (SendMessageDetails*) m_pMessageManager->m_TimerList->GetAt(pos);
if(pSendMsgDetail->TimerId == nIDEvent)
{
if(strcmp("-1",pSendMsgDetail->strDataList))
{
SendMessageFreq(pSendMsgDetail->clMessage,CString(pSendMsgDetail->strDataList));//pSendMsgDetail->strDataList);
}
else
{
SendMessageFreq(pSendMsgDetail->clMessage,pSendMsgDetail->dataset);//pSendMsgDetail->strDataList);
}
pSendMsgDetail->Freq = pSendMsgDetail->Freq-1;
if(pSendMsgDetail->Freq ==0)
{
m_pMessageManager->m_TimerList->RemoveAt(pos);
KillTimer(nIDEvent);
}
break;
}
m_pMessageManager->m_TimerList->GetNext(pos);
}
}
}
void CMMINWSimulatorDlg::OnLanguageEnglish()
{
library_identifier = default_library_identifier;
AfxSetResourceHandle(library_identifier);
LocaleChangeJobs();
}
void CMMINWSimulatorDlg::OnLanguageChinese()
{
library_identifier = LoadLibrary(_T("ChineseLanguage.dll")); // You should change this to suit your project
if (!library_identifier)
{
AfxMessageBox(IDS_STRING_CANT_OPEN_DLL);
library_identifier = default_library_identifier;
}
else
{
AfxSetResourceHandle(library_identifier);
LocaleChangeJobs();
}
}
void CMMINWSimulatorDlg::LocaleChangeJobs()
{
CString string_for_button;
LoadString(library_identifier,IDS_STRING_OUTGOING_MSG_TO_MMI,string_for_button.GetBuffer(MAX_LANG_RES_STRING_LEN+1), MAX_LANG_RES_STRING_LEN);
outgoing_msg_grp_box.SetWindowText(string_for_button);
LoadString(library_identifier,IDS_STRING_INC_MSGS_FROM_MMI, string_for_button.GetBuffer(MAX_LANG_RES_STRING_LEN+1), MAX_LANG_RES_STRING_LEN);
incoming_msg_grp_box.SetWindowText(string_for_button);
//change of column header text......
LVCOLUMN col_info;
LoadString(library_identifier,IDS_STRING_MESSAGE_ID, stringID_to_string.GetBuffer(MAX_LANG_RES_STRING_LEN+1),MAX_LANG_RES_STRING_LEN);
col_info.cchTextMax = 20;
col_info.cx = 70;
col_info.mask = LVCF_TEXT;
col_info.fmt = LVCFMT_LEFT;
col_info.iOrder = 0;
col_info.iSubItem = 0;
col_info.pszText = (PU16)(stringID_to_string.GetBuffer(0));
m_lstIncomingMessages.SetColumn(0,&col_info);
m_lstOutGoingMessages.SetColumn(0,&col_info);
LoadString(library_identifier,IDS_STRING_MESSAGE_NAME,stringID_to_string.GetBuffer(MAX_LANG_RES_STRING_LEN+1),MAX_LANG_RES_STRING_LEN);
col_info.cx = 300;
col_info.iOrder = 1;
col_info.iSubItem = 1;
col_info.pszText = (PU16)(stringID_to_string.GetBuffer(0));
m_lstIncomingMessages.SetColumn(1,&col_info);
m_lstOutGoingMessages.SetColumn(1,&col_info);
LoadString(library_identifier,IDS_STRING_MESSAGE_TIME,stringID_to_string.GetBuffer(MAX_LANG_RES_STRING_LEN+1),MAX_LANG_RES_STRING_LEN);
col_info.iOrder = 2;
col_info.iSubItem = 2;
col_info.pszText =(PU16)(stringID_to_string.GetBuffer(0));
m_lstIncomingMessages.SetColumn(2,&col_info);
m_lstOutGoingMessages.SetColumn(2,&col_info);
//title bar text
LoadString(library_identifier,IDS_STRING_DLG_NWS,stringID_to_string.GetBuffer(MAX_LANG_RES_STRING_LEN+1),MAX_LANG_RES_STRING_LEN);
SetWindowText(stringID_to_string);
CMenu * m_pMenuNew;
CMenu *pMenuCurrent = GetMenu();
m_pMenuNew = new CMenu;
pMenuCurrent->DestroyMenu();
//delete pMenuCurrent;
// Load our new resource menu
m_pMenuNew->LoadMenu(IDR_MENU_DROP_DOWN);
// Display the new menu
SetMenu(m_pMenuNew);
// TODO: Add your command handler code here
}
void* CMMINWSimulatorDlg::GetDataMemoryForMessage(CMessage *pMessage,UINT32 *iSize,CString strDataSet)
{
void *vTempRet= NULL;
//return the void * for the
CFormat *pFormat;// = new CFormat();
CDataList dataList;
CData dataObj;
pFormat = m_pMessageManager->GetFormatForMessage(pMessage);
if(pFormat!=NULL)
{
if(!(pMessage->GetFormat().CompareNoCase(pFormat->GetName())))
{
//the format is found
//now check if the input mode is dialog and also the dataset name is not there...then we
//have to pop up a generic dialog...
//if input mode is dialog
// Dialog will pop up
if((IsClickOnIncomingMsgList==1)&&(RsponseMode==RSP_MANUAL)&& (!pFormat->GetInputMode().CompareNoCase(_T("Dialog"))))
{
CGenericInput gen_input_dlg;
INPTRLIST * IncomingMessagePtr = NULL;
if(m_IncomingMsgDataList->GetCount())
{
INPTRLIST *IncomingMsg;
for(POSITION pos = m_IncomingMsgDataList->GetHeadPosition();pos!=NULL;m_IncomingMsgDataList->GetNext(pos))
{
IncomingMsg = (INPTRLIST *) m_IncomingMsgDataList->GetAt(pos);
if(IncomingMsg->stMessage.nMsgType==ClickedMsgId)
{
//IncomingMessagePtr = (INPTRLIST *) m_IncomingMsgDataList->GetTail() ;
IncomingMessagePtr = (INPTRLIST *) m_IncomingMsgDataList->GetAt(pos);
break;
}
}
}
gen_input_dlg.OutGoingMsgPtr = (COutgoingMessage *)pMessage;
if(IncomingMessagePtr)
gen_input_dlg.IncomingMsgID = IncomingMessagePtr->stMessage.nMsgType;
gen_input_dlg.SetLibraryIdentifier(library_identifier);
gen_input_dlg.DoModal();
IsClickOnIncomingMsgList=0;
if(!gen_input_dlg.data_set_to_be_sent.GetName().CompareNoCase(_T("")))
return(NULL);
vTempRet = m_pMessageManager->GetBufferForSocket(pMessage,gen_input_dlg.data_set_to_be_sent,m_pMessageManager->GetFormatForMessage(gen_input_dlg.OutGoingMsgPtr)->GetVarList(),iSize);
return vTempRet;
}
else // if input mode is dataset
{
CList<CVar,CVar&>& varList = pFormat->GetVarList();
dataList = pFormat->GetDataList();
CList<CData,CData&>& data= dataList.GetData();
if((data.GetCount() > 0) && (varList.GetCount() > 0))
{
for( POSITION datapos = data.GetHeadPosition(); datapos != NULL;)
{
dataObj = (data.GetNext( datapos ));
if(strDataSet.GetLength())
{
if(!dataObj.GetName().CompareNoCase(strDataSet))
{
vTempRet = m_pMessageManager->GetBufferForSocket(pMessage,dataObj,varList,iSize);//matched the data list
return vTempRet;
}
}
else if(!dataObj.GetName().CompareNoCase(dataList.GetDefault()))
{
//default data object stuffing to be done
vTempRet = m_pMessageManager->GetBufferForSocket(pMessage,dataObj,varList,iSize);
return vTempRet;
}
}
//handle the case in case both the above condition becomes false
vTempRet = m_pMessageManager->GetBufferForSocket(pMessage,dataObj,varList,iSize);
return vTempRet;
}//end of type check
}//end of check dialog
}//
}
else
AMLOGERROR(_T("GetData Memory for Message error"));
return vTempRet;
}
void CMMINWSimulatorDlg::OnHelpContents()
{
system( "Notepad ..\\..\\tool\\QMMINWSimulator\\help.txt");
}
LRESULT CMMINWSimulatorDlg::OnPostQuitMessage(WPARAM wParam, LPARAM lParam)
{
PostQuitMessage(0);
return TRUE;
//send the postquitmessage to itself so as to close down
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -