?? tapi3dlg.cpp
字號(hào):
{
CString str, strExp;
int curSel = m_MsgBox.GetCurSel();
int txtLen = m_MsgBox.GetTextLen(curSel);
CTapiEvent *p = (CTapiEvent*)m_MsgBox.GetItemDataPtr(m_MsgBox.GetCurSel());
if ( p == NULL) return;
m_MsgBox.GetText( curSel, str.GetBuffer(txtLen) );
str.ReleaseBuffer();
if ( str[0] == '+' )
{
// expand message and change leading '+' to '-'
str.SetAt(0, '-');
// remove old item and insert new one
m_MsgBox.DeleteString(curSel);
m_MsgBox.InsertString(curSel, str);
m_MsgBox.SetItemDataPtr(curSel, p);
p->Dump(curSel+1);
}
else if ( str[0] == '-' )
{
// squeeze message and change leading '-' to '+'
str.SetAt(0, '+');
// remove old item and insert new one
m_MsgBox.DeleteString(curSel);
m_MsgBox.InsertString(curSel, str);
m_MsgBox.SetItemDataPtr(curSel, p);
// curSel is zero based. That is why 2
while ( curSel + 2 <= m_MsgBox.GetCount())
{
txtLen = m_MsgBox.GetTextLen(curSel + 1);
m_MsgBox.GetText( curSel + 1, strExp.GetBuffer(txtLen) );
strExp.ReleaseBuffer();
if (strExp.Find("-->") != -1)
{
m_MsgBox.DeleteString(curSel + 1);
}
else break;
}
}
}
// Clear contents of listbox and release TAPI objects
void CTapi3Dlg::OnClear()
{
CTapiEvent* pEvent;
for(int i=0; i < m_MsgBox.GetCount(); i++)
{
pEvent = (CTapiEvent*) m_MsgBox.GetItemDataPtr(i);
if (pEvent != NULL)
delete pEvent;
}
m_MsgBox.ResetContent();
}
// Clear contents of init listbox
void CTapi3Dlg::OnClearInit()
{
CTapiEvent* pEvent;
for(int i=0; i < m_MsgBoxInit.GetCount(); i++)
{
pEvent = (CTapiEvent*)m_MsgBoxInit.GetItemDataPtr(i);
if (pEvent != NULL)
delete pEvent;
}
m_MsgBoxInit.ResetContent();
}
// Expands all events presentation
void CTapi3Dlg::OnExpand()
{
CString str, strExp;
for ( int index = 0; index < m_MsgBox.GetCount(); index++)
{
int txtLen = m_MsgBox.GetTextLen(index);
CTapiEvent *p = (CTapiEvent*)m_MsgBox.GetItemDataPtr(index);
if ( p != NULL)
{
m_MsgBox.GetText( index, str.GetBuffer(txtLen) );
str.ReleaseBuffer();
if ( str[0] == '+' )
{
// expand message and change leading '+' to '-'
str.SetAt(0, '-');
// remove old item and insert new one
m_MsgBox.DeleteString(index);
m_MsgBox.InsertString(index, str);
m_MsgBox.SetItemDataPtr(index, p);
p->Dump(index+1);
}
}
}
}
// sum up all events presentation
void CTapi3Dlg::OnCollapse()
{
CString str, strExp;
for ( int index = 0; index < m_MsgBox.GetCount(); index++)
{
int txtLen = m_MsgBox.GetTextLen(index);
CTapiEvent *p = (CTapiEvent*)m_MsgBox.GetItemDataPtr(index);
if ( p != NULL)
{
m_MsgBox.GetText( index, str.GetBuffer(txtLen) );
str.ReleaseBuffer();
if ( str[0] == '-' )
{
// squeeze message and change leading '-' to '+'
str.SetAt(0, '+');
// remove old item and insert new one
m_MsgBox.DeleteString(index);
m_MsgBox.InsertString(index, str);
m_MsgBox.SetItemDataPtr(index, p);
// curSel is zero based. That is why 2
while ( index + 2 <= m_MsgBox.GetCount())
{
txtLen = m_MsgBox.GetTextLen(index + 1);
m_MsgBox.GetText( index + 1, strExp.GetBuffer(txtLen) );
strExp.ReleaseBuffer();
if (strExp.Find("-->") != -1)
{
m_MsgBox.DeleteString(index + 1);
}
else break;
}
}
}
}
}
void CTapi3Dlg::OnSelchangeExtnCall()
{
// Callback when controlling exten is changed/selected
if (m_pTEngine) delete m_pTEngine;
m_pTEngine = new CTelephonyEngine();
int nIndex = m_ExtnList.GetCurSel();
CTAPIAddr* pAddr = CTAPIAddr::GetAddrAt(nIndex);
if (m_pTEngine && pAddr)
{
// Initialize Telephony Engine with caller's address
m_pTEngine->Init(pAddr->GetDialableAddr(), pAddr->GetDialableAddr(), "");
}
GetDlgItem(IDM_MAKE_CALL)->EnableWindow(true);
}
// Make a call to an extension/number
void CTapi3Dlg::OnMakeCall()
{
int nIndex = m_ExtnCall.GetCurSel();
CTAPIAddr* pAddrCalled = CTAPIAddr::GetAddrAt(nIndex);
nIndex = m_ExtnList.GetCurSel ();
CTAPIAddr* pAddrCaller = CTAPIAddr::GetAddrAt(nIndex);
if (pAddrCaller != NULL)
m_pTEngine->Init(pAddrCaller->GetDialableAddr(), pAddrCaller->GetDialableAddr(), "" );
if (m_pTEngine && pAddrCalled)
{
m_pTEngine->MakeCall(pAddrCalled->GetDialableAddr());
}
}
void CTapi3Dlg::OnAnswerCall()
{
if ((m_pCall != NULL) && m_pCallersBasicCall != NULL && m_pTEngine)
{
if (m_pTEngine->AnswerCall(m_pCall))
{
GetDlgItem(ID_CALLCONTROL_ANSWERCALL)->EnableWindow(false);
}
}
}
void CTapi3Dlg::OnHold()
{
if ((m_pCall != NULL) && m_pCallersBasicCall != NULL && m_pTEngine)
{
if(m_pTEngine->HoldCall(m_pCallersBasicCall))
{
m_pCallOnHold = m_pCallersBasicCall;
m_pCallOnHold->AddRef();
m_pCalledOnHold = m_pCall;
m_pCalledOnHold->AddRef();
m_pCallersBasicCall->Release();
m_pCallersBasicCall = NULL;
m_pCall->Release();
m_pCall = NULL;
m_lastOnHold = m_lastCalled;
}
}
}
void CTapi3Dlg::OnUnHold()
{
if ((m_pCallOnHold != NULL) && m_pTEngine)
{
if (m_pTEngine->UnHoldCall(m_pCallOnHold))
{
ITBasicCallControl* pBCC;
ITBasicCallControl* pBCCcalled;
GetDlgItem(ID_CALLCONTROL_UNHOLDCALL)->EnableWindow(false);
pBCC = m_pCallOnHold;
pBCCcalled = m_pCalledOnHold;
pBCC->AddRef();
pBCCcalled->AddRef();
m_pCallOnHold = m_pCallersBasicCall;
m_pCallersBasicCall = pBCC;
m_pCalledOnHold = m_pCall;
m_pCall = pBCCcalled;
pBCC->Release();
pBCCcalled->Release();
pBCC = NULL;
}
}
}
void CTapi3Dlg::OnSwapHold()
{
if (m_pCallersBasicCall != NULL && m_pCallOnHold != NULL )
{
CString temp;
ITBasicCallControl* pBCC;
ITBasicCallControl* pBCCcalled;
m_pCallersBasicCall->SwapHold(m_pCallOnHold);
pBCC = m_pCallOnHold;
pBCCcalled = m_pCalledOnHold;
pBCC->AddRef();
pBCCcalled->AddRef();
m_pCallOnHold = m_pCallersBasicCall;
m_pCallersBasicCall = pBCC;
m_pCalledOnHold = m_pCall;
m_pCall = pBCCcalled;
temp = m_lastCalled;
m_lastCalled = m_lastOnHold;
m_lastOnHold = temp;
pBCC->Release();
pBCCcalled->Release();
pBCC = NULL;
pBCCcalled = NULL;
}
}
void CTapi3Dlg::OnDropCall()
{
if ((m_pCall != NULL) && m_pTEngine)
{
m_pTEngine->DropCall(m_pCallersBasicCall);
}
}
void CTapi3Dlg::OnParkCall()
{
if ((m_pCall != NULL) && m_pCallersBasicCall!=NULL && m_pTEngine)
{
if (m_pTEngine->ParkCall(m_pCall))
{
m_pLastParked = m_lastCalled;
GetDlgItem(IDM_PARK_CALL)->EnableWindow(false);
GetDlgItem(IDM_UNPARK_CALL)->EnableWindow(true);
}
}
}
void CTapi3Dlg::OnUnparkCall()
{
if (m_pTEngine) delete m_pTEngine;
m_pTEngine = new CTelephonyEngine();
if (!m_pLastParked.IsEmpty())
{
m_pTEngine->Init(m_pLastParked, m_pLastParked, "");
if (m_pTEngine->UnparkCall())
{
GetDlgItem(IDM_UNPARK_CALL)->EnableWindow(false);
}
}
}
void CTapi3Dlg::OnBlindTransfer()
{
int nIndex = m_ExtnCall.GetCurSel();
CTAPIAddr* pAddr = CTAPIAddr::GetAddrAt(nIndex);
if (m_lastCalled == pAddr->GetDialableAddr())
{
::MessageBox(0, "Choose another Target Extension !", "TAPI 3 - Test Harness", MB_OK|MB_ICONEXCLAMATION);
return;
}
if (m_pTEngine) delete m_pTEngine;
m_pTEngine = new CTelephonyEngine();
if (m_pTEngine && pAddr && m_pCallersBasicCall)
{
m_pTEngine->BlindTransfer(m_pCallersBasicCall, pAddr->GetDialableAddr());
}
}
void CTapi3Dlg::OnCallTransfer()
{
int nIndex = m_ExtnCall.GetCurSel();
CTAPIAddr* pAddr = CTAPIAddr::GetAddrAt(nIndex);
ITBasicCallControl* pCall;
if (m_lastCalled == pAddr->GetDialableAddr())
{
::MessageBox(0, "Choose another Target Extension !", "TAPI 3 - Test Harness", MB_OK|MB_ICONEXCLAMATION);
return;
}
if (m_pTEngine && pAddr && m_pCallersBasicCall && m_pCall)
{
if ((pCall = m_pTEngine->TransferCall(m_pCallersBasicCall, m_pCall, pAddr->GetDialableAddr(), m_lastCalled)) != NULL)
{
GetDlgItem(IDM_TRANSFER_FINISH)->EnableWindow(true);
GetDlgItem(IDM_CALLCONFERENCE)->EnableWindow(true);
GetDlgItem(IDM_CALLTRANSFER)->EnableWindow(false);
m_pTransferConsultCall = pCall;
// m_pTransferConsultCall->AddRef();
}
}
}
void CTapi3Dlg::OnTransferFinish()
{
if (m_pTEngine)
if (m_pTEngine->FinishTransfer(true))
{
GetDlgItem(IDM_TRANSFER_FINISH)->EnableWindow(false);
GetDlgItem(IDM_CALLCONFERENCE)->EnableWindow(false);
}
}
void CTapi3Dlg::OnCallConference()
{
if (m_pTEngine )
{
if( m_pTEngine->CreateConference())
{
GetDlgItem(IDM_TRANSFER_FINISH)->EnableWindow(false);
GetDlgItem(IDM_CALLCONFERENCE)->EnableWindow(false);
GetDlgItem(IDM_ADDTOCONF)->EnableWindow(true);
}
}
}
void CTapi3Dlg::OnAddToConference()
{
int nIndex = m_ExtnCall.GetCurSel();
CTAPIAddr* pAddr = CTAPIAddr::GetAddrAt(nIndex);
if (m_pTEngine && pAddr)
{
m_pTEngine->AddToConference(pAddr->GetDialableAddr());
GetDlgItem(IDM_REMOVEFROMCONF)->EnableWindow(true);
}
}
void CTapi3Dlg::OnRemoveFromConference()
{
int nIndex = m_ExtnCall.GetCurSel();
CTAPIAddr* pAddr = CTAPIAddr::GetAddrAt(nIndex);
if (m_pTEngine && pAddr)
{
m_pTEngine->RemoveFromConference(pAddr->GetDialableAddr(), m_pCallInfo);
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -