📄 callforwarding.cpp
字号:
goto exit;
}
//add it to the bottom of the list
hr = ListBox.AddItem(-1, pItem);
if (FAILED(hr))
{
delete pItem;
goto exit;
}
pwchCurrentNumber = pwchNextNumber;
if (*pwchCurrentNumber == L';')
{
pwchCurrentNumber++;
}
}
//select first item by default
SendMessage(ListBox, LB_SETCURSEL, 0, 0);
return hr;
exit:
ASSERT(FALSE);
return hr;
}
HRESULT
CallForwardingDialog_t::AddForwardingEnabledItems(
void
)
{
ListBox_t ListBox;
ce::auto_bstr bstrForwardingURI;
HRESULT hr = S_OK;
CCallerIDDisplayItem_t *pItem = NULL;
ListBox = GetDlgItem (m_DialogScreen, IDC_LISTBOX);
//get the autoforward
hr = GetAutoForwardNumber(&bstrForwardingURI);
if (FAILED(hr) || bstrForwardingURI == NULL)
{
ASSERT(FALSE);
return hr;
}
//add the autoforward item
pItem = new CCallerIDDisplayItem_t(bstrForwardingURI);
if (! pItem)
{
ASSERT(FALSE);
return E_OUTOFMEMORY;
}
hr = ListBox.AddItem(-1, pItem);
if (FAILED(hr))
{
delete pItem;
}
return hr;
}
HRESULT
CallForwardingDialog_t::UpdateStatusHeader(
void
)
{
UINT statusHeader = (m_fAutoForwarding) ?
IDS_FORWARDENABLED_HEADER :
IDS_FORWARDDISABLED_HEADER;
STATUS_HEADER_PARAMETERS Parameters = {
GlobalData_t::s_ModuleInstance,
statusHeader,
shpDefault,
0,
INFINITE
};
return (HRESULT)SendMessage(
GetDlgItem(m_DialogScreen, IDC_STATUSREGION),
WM_STATUSHEADER_ADDSTATUSNOTIFICATION,
(WPARAM)sizeof(STATUS_HEADER_PARAMETERS),
(LPARAM)&Parameters
);
}
HRESULT
CallForwardingDialog_t::UpdateMenuBar(
void
)
{
HRESULT hr = S_OK;
UINT MenuId = 0;
IVoIPDisplayItem* pSelectedItem = NULL;
int IdxSelected = 0;
MenuBar_t MenuBar;
BOOL HasText = FALSE;
GetSelectedDisplayItem(
&pSelectedItem,
&IdxSelected
);
if (pSelectedItem == NULL)
{
return E_UNEXPECTED;
}
if (m_fAutoForwarding)
{
MenuId = IDMB_CALLFORWARDING_DISABLE_BUTTONS;
}
else if (IdxSelected == 0)
{
WCHAR Buf[3] = L"";
pSelectedItem->GetText(Buf, _countof(Buf));
HasText = (Buf[0] != 0);
MenuId = IDMB_CALLFORWARDING_ENABLE_SIP_BACKSPACE_BUTTONS;
}
else
{
MenuId = IDMB_CALLFORWARDING_ENABLE_DELETE_BUTTONS;
}
MenuBar = GetDlgItem(m_DialogScreen, IDC_MENUBAR);
if (MenuId != m_CurrentMenuId)
{
m_CurrentMenuId = MenuId;
hr = MenuBar.SetMenu(
GlobalData_t::s_ModuleInstance,
MenuId
);
ASSERT(SUCCEEDED(hr));
}
if (MenuId == IDMB_CALLFORWARDING_ENABLE_SIP_BACKSPACE_BUTTONS)
{
hr = MenuBar.ShowMenuButton(
IDC_BACKSPACE,
HasText
);
}
return hr;
}
void
CallForwardingDialog_t::GetSelectedDisplayItem(
IVoIPDisplayItem** ppSelectedDisplayItem,
int* pItemIndex
)
{
if (ppSelectedDisplayItem == NULL)
{
return;
}
ListBox_t ListBox;
ListBox = GetDlgItem (m_DialogScreen, IDC_LISTBOX);
*ppSelectedDisplayItem = NULL;
int SelectedIndex = SendMessage(
ListBox,
LB_GETCURSEL,
0, 0
);
if (SelectedIndex == -1)
{
return;
}
if (pItemIndex != NULL)
{
*pItemIndex = SelectedIndex;
}
*ppSelectedDisplayItem = static_cast<IVoIPDisplayItem*>(ListBox.GetItem(SelectedIndex));
return;
}
HRESULT
CallForwardingDialog_t::OnDelete(
void
)
{
IVoIPDisplayItem* pSelectedItem = NULL;
int IdxSelected;
WCHAR wszText[MAX_PATH] = L"";
HRESULT hr = S_OK;
if (!m_fAutoForwarding)
{
GetSelectedDisplayItem(
&pSelectedItem,
&IdxSelected
);
if (pSelectedItem && IdxSelected > 0)
{
pSelectedItem->GetText(wszText, _countof(wszText));
}
if (pSelectedItem && wszText[0])
{
hr = DeleteAutoForwardString(wszText);
}
if (SUCCEEDED(hr))
{
Initialize();
ListBox_t ListBox;
ListBox = GetDlgItem (m_DialogScreen, IDC_LISTBOX);
SendMessage(ListBox, LB_SETCURSEL, IdxSelected-1, 0);
}
}
return hr;
}
HRESULT
CallForwardingDialog_t::OnDeleteAll(
void
)
{
if (m_MessageBox)
{
DestroyWindow(m_MessageBox);
m_MessageBox = NULL;
}
ListBox_t ListBox;
ListBox = GetDlgItem (m_DialogScreen, IDC_LISTBOX);
UINT ItemCount = ListBox.GetCount()-1;
if (ItemCount <= 0)
{
return S_FALSE;
}
WCHAR Question[MAX_PATH] = L"";
PREFAST_SUPPRESS(5428, "It is safe to use StringCchPrintfW (known parameters)");
StringCchPrintfW(
Question,
_countof(Question),
CommonUtilities_t::LoadString(
GlobalData_t::s_ModuleInstance,
IDS_POPUP_DELETEALLITEMS
),
ItemCount
);
if (! Question[0])
{
ASSERT(FALSE);
return E_FAIL;
}
PH_MESSAGE_BOX_PARAMETERS Params = {0};
Params.Flags = VDF_TYPE_MODELESS;
Params.Instance = GlobalData_t::s_ModuleInstance;
Params.IconId = IDB_POPUP_CONFIRM_DELETE;
Params.MenuId = IDMB_YESNO;
Params.Owner = m_DialogScreen;
Params.pText = Question;
Params.pTitle = CommonUtilities_t::LoadString(
GlobalData_t::s_ModuleInstance,
IDS_TITLE_CONFIRMDELETE
);
Params.StructSize = sizeof(Params);
if (! PHMessageBox(&Params))
{
ASSERT(FALSE);
return E_FAIL;
}
m_MessageBox = Params.result.Dialog;
return S_OK;
}
HRESULT
CallForwardingDialog_t::OnTurnOnOff(
void
)
{
ce::auto_bstr bstrAutoForward;
IVoIPDisplayItem* pSelectedItem = NULL;
int IdxSelected;
WCHAR wszText[MAX_PATH] = L"";
HRESULT hr = S_OK;
//if we were auto-forwarding, disable forwarding by setting the forward URI
//to empty
if (m_fAutoForwarding)
{
bstrAutoForward = SysAllocString(L"");
if (bstrAutoForward == NULL)
{
return E_OUTOFMEMORY;
}
m_fAutoForwarding = 0;
}
else
{
GetSelectedDisplayItem(
&pSelectedItem,
&IdxSelected
);
if (pSelectedItem == NULL)
{
return E_UNEXPECTED;
}
pSelectedItem->GetText(wszText, _countof(wszText));
if (pSelectedItem && wszText[0])
{
bstrAutoForward = SysAllocString(wszText);
if (bstrAutoForward == NULL)
{
return E_OUTOFMEMORY;
}
}
if (bstrAutoForward != NULL)
{
AddNewAutoForwardString(bstrAutoForward);
//set forwarding number
hr = RegistrySetString(
SN_VOIP_FORWARDINGNUMBER_ROOT,
SN_VOIP_FORWARDINGNUMBER_PATH,
SN_VOIP_FORWARDINGNUMBER_VALUE,
wszText
);
if (FAILED(hr))
{
ASSERT (FALSE);
}
}
m_fAutoForwarding = 1;
}
//put the forwarding uri and refresh the display
if (bstrAutoForward != NULL)
{
//if the autoforwarding is on, turn the DND off
PHSetValue(phsDoNotDisturb, 0);
PHSetValue(phsCallForwarding, m_fAutoForwarding);
if (m_fAutoForwarding == 0)
{
hr = RegistrySetString(
SN_VOIP_FORWARDINGNUMBER_ROOT,
SN_VOIP_FORWARDINGNUMBER_PATH,
SN_VOIP_FORWARDINGNUMBER_VALUE,
L""
);
if (FAILED(hr))
{
ASSERT (FALSE);
}
}
Initialize();
}
return hr;
}
HRESULT
CallForwardingDialog_t::GetAutoForwardNumber(
BSTR* pbstrAutoForward
)
{
if (pbstrAutoForward == NULL)
return E_POINTER;
WCHAR wszForwardingNumbers[MAX_PATH] = L"";
HRESULT hr = RegistryGetString(
SN_VOIP_FORWARDINGNUMBER_ROOT,
SN_VOIP_FORWARDINGNUMBER_PATH,
SN_VOIP_FORWARDINGNUMBER_VALUE,
wszForwardingNumbers,
_countof(wszForwardingNumbers)
);
if (HRESULT_CODE(hr) == ERROR_FILE_NOT_FOUND)
{
*pbstrAutoForward = SysAllocString(L"");
hr = S_OK;
}
else
{
*pbstrAutoForward = SysAllocString(wszForwardingNumbers);
}
if (! *pbstrAutoForward)
{
return E_OUTOFMEMORY;
}
return hr;
}
/*------------------------------------------------------------------------------
CCallForwardingState::SaveCurrentEntry
Save whatever is there at edit entry to the global variable
------------------------------------------------------------------------------*/
HRESULT
CallForwardingDialog_t::SaveCurrentEntry(
void
)
{
ListBox_t ListBox;
IVoIPDisplayItem *pItem = NULL;
ListBox = GetDlgItem(m_DialogScreen, IDC_LISTBOX);
WCHAR wszRecoveryEntry[MAX_PATH] = L"";
if (!m_fAutoForwarding)
{
pItem = static_cast<IVoIPDisplayItem*>(ListBox.GetItem(0));
if (pItem)
{
pItem->GetText(wszRecoveryEntry, _countof(wszRecoveryEntry));
HRESULT hr = RegistrySetString(
SN_VOIP_RECOVERPARTIALFORWARDING_ROOT,
SN_VOIP_RECOVERPARTIALFORWARDING_PATH,
SN_VOIP_RECOVERPARTIALFORWARDING_VALUE,
wszRecoveryEntry
);
if (FAILED(hr))
{
ASSERT (FALSE);
}
}
}
return S_OK;
}
HRESULT
CallForwardingDialog_t::OnClearForwardingList(
void
)
{
ListBox_t ListBox;
ListBox = GetDlgItem (m_DialogScreen, IDC_LISTBOX);
HRESULT hr = S_OK;
if (!m_fAutoForwarding)
{
hr = RegistrySetString(
SN_VOIP_LISTOFFORWARDINGNUMBER_ROOT,
SN_VOIP_LISTOFFORWARDINGNUMBER_PATH,
SN_VOIP_LISTOFFORWARDINGNUMBER_VALUE,
L""
);
if (FAILED(hr))
{
ASSERT (FALSE);
return hr;
}
Initialize();
SendMessage(ListBox, LB_SETCURSEL, 0, 0);
}
return hr;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -