diff options
author | George Hazan <ghazan@miranda.im> | 2022-08-19 19:47:29 +0300 |
---|---|---|
committer | George Hazan <ghazan@miranda.im> | 2022-08-19 19:47:29 +0300 |
commit | 53d8307e4f7912e7ad38c49d140f44b48b71ee72 (patch) | |
tree | 95bccf132c654629d4085b01372e7a0258e30add /plugins/VoiceService/src | |
parent | df0928b64c9b32e5c2becf657055d905869eb207 (diff) |
fixes #3166 (VoiceService: настройки автоматических действий)
Diffstat (limited to 'plugins/VoiceService/src')
-rw-r--r-- | plugins/VoiceService/src/frame.cpp | 724 | ||||
-rw-r--r-- | plugins/VoiceService/src/frame.h | 29 | ||||
-rw-r--r-- | plugins/VoiceService/src/options.cpp | 425 | ||||
-rw-r--r-- | plugins/VoiceService/src/options.h | 3 |
4 files changed, 177 insertions, 1004 deletions
diff --git a/plugins/VoiceService/src/frame.cpp b/plugins/VoiceService/src/frame.cpp deleted file mode 100644 index 79b2d9b35a..0000000000 --- a/plugins/VoiceService/src/frame.cpp +++ /dev/null @@ -1,724 +0,0 @@ -/* -Copyright (C) 2005 Ricardo Pescuma Domenecci - -This is free software; you can redistribute it and/or -modify it under the terms of the GNU Library General Public -License as published by the Free Software Foundation; either -version 2 of the License, or (at your option) any later version. - -This is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with this file; see the file license.txt. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. -*/ - -#include "stdafx.h" - -#define H_SPACE 2 - -// Prototypes ///////////////////////////////////////////////////////////////////////////////////// - -int frame_id = -1; - -// Functions ////////////////////////////////////////////////////////////////////////////////////// - -static int GetMaxLineHeight() -{ - return max(ICON_SIZE, font_max_height) + 1; -} - -BOOL FrameIsFloating(int id) -{ - if (id == -1) - return TRUE; // no frames, always floating - - return CallService(MS_CLIST_FRAMES_GETFRAMEOPTIONS, MAKEWPARAM(FO_FLOATING, id), 0); -} - -void ResizeFrame(int id, HWND hwnd) -{ - int height = calls.getCount() * GetMaxLineHeight(); - if (height > 0) - height += 2; - - if (CanCallNumber()) { - height += 23 + 2; - - if (SendMessage(GetDlgItem(hwnd, IDC_DIALPAD), BM_GETCHECK, 0, 0) == BST_CHECKED) { - RECT first, last; - GetWindowRect(GetDlgItem(hwnd, IDC_1), &first); - GetWindowRect(GetDlgItem(hwnd, IDC_SHARP), &last); - - height += last.bottom - first.top + 1; - } - } - - if (FrameIsFloating(id)) { - HWND parent = GetParent(hwnd); - if (parent == NULL) - return; - - RECT r_client; - GetClientRect(hwnd, &r_client); - - if (r_client.bottom - r_client.top == height) - return; - - RECT parent_client, parent_window, r_window; - GetClientRect(parent, &parent_client); - GetWindowRect(parent, &parent_window); - GetWindowRect(hwnd, &r_window); - - int diff = (parent_window.bottom - parent_window.top) - (parent_client.bottom - parent_client.top); - if (g_plugin.bFramesExist) - diff += (r_window.top - parent_window.top); - - SetWindowPos(parent, 0, 0, 0, parent_window.right - parent_window.left, height + diff, SWP_NOZORDER | SWP_NOMOVE | SWP_NOACTIVATE); - } - else { - int old_height = CallService(MS_CLIST_FRAMES_GETFRAMEOPTIONS, MAKEWPARAM(FO_HEIGHT, id), 0); - if (old_height == height) - return; - - CallService(MS_CLIST_FRAMES_SETFRAMEOPTIONS, MAKEWPARAM(FO_HEIGHT, id), (LPARAM)height); - CallService(MS_CLIST_FRAMES_UPDATEFRAME, (WPARAM)id, (LPARAM)(FU_TBREDRAW | FU_FMREDRAW | FU_FMPOS)); - } -} - -static void ShowFrame(int id, HWND hwnd, int show) -{ - if (!g_plugin.bFramesExist || id == -1) { - ShowWindow(GetParent(hwnd), show); - return; - } - - BOOL bIsVisible = CallService(MS_CLIST_FRAMES_GETFRAMEOPTIONS, MAKEWPARAM(FO_FLAGS, frame_id)) & F_VISIBLE; - if ((bIsVisible && show == SW_HIDE) || (!bIsVisible && show == SW_SHOW)) - CallService(MS_CLIST_FRAMES_SHFRAME, id, 0); -} - -///////////////////////////////////////////////////////////////////////////////////////// - -static int dialCtrls[] = { - IDC_DIALPAD, IDC_NUMBER, IDC_CALL, - IDC_1, IDC_2, IDC_3, - IDC_4, IDC_5, IDC_6, - IDC_7, IDC_8, IDC_9, - IDC_AST, IDC_0, IDC_SHARP -}; - -static wchar_t *lstrtrim(wchar_t *str) -{ - int len = lstrlen(str); - - int i; - for (i = len - 1; i >= 0 && (str[i] == ' ' || str[i] == '\t'); --i); - if (i < len - 1) { - ++i; - str[i] = _T('\0'); - len = i; - } - - for (i = 0; i < len && (str[i] == ' ' || str[i] == '\t'); ++i); - if (i > 0) - memmove(str, &str[i], (len - i + 1) * sizeof(wchar_t)); - - return str; -} - -static void InvalidateAll(HWND hwnd) -{ - InvalidateRect(GetDlgItem(hwnd, IDC_CALLS), NULL, FALSE); - for (auto &it : dialCtrls) - InvalidateRect(GetDlgItem(hwnd, it), NULL, FALSE); - InvalidateRect(hwnd, NULL, FALSE); - - if (frame_id != -1) - CallService(MS_CLIST_FRAMES_UPDATEFRAME, (WPARAM)frame_id, (LPARAM)(FU_FMREDRAW)); -} - -static int sttCompareProvidesByDescription(const VoiceProvider *p1, const VoiceProvider *p2) -{ - return lstrcmp(p2->description, p1->description); -} - -static void DrawIconLib(HDC hDC, const RECT &rc, int iconId) -{ - HICON hIcon = g_plugin.getIcon(iconId); - if (hIcon == NULL) - return; - - DrawIconEx(hDC, rc.left, (rc.top + rc.bottom - ICON_SIZE) / 2, hIcon, ICON_SIZE, ICON_SIZE, 0, NULL, DI_NORMAL); - IcoLib_ReleaseIcon(hIcon); -} - -class CFrameDlg : public CDlgBase -{ - CCtrlEdit edtNumber; - CCtrlListBox m_calls; - CCtrlMButton btnDialpad, btnCall; - - void ResizeFrame(bool bResizeAll) - { - ShowHideDialpad(0); - - if (bResizeAll) - SendMessage(m_hwnd, WM_SIZE, 0, 0); - - if (opts.resize_frame) { - if (calls.getCount() == 0 && !CanCallNumber()) { - ShowFrame(frame_id, m_hwnd, SW_HIDE); - } - else { - ::ResizeFrame(frame_id, m_hwnd); - ShowFrame(frame_id, m_hwnd, SW_SHOW); - } - } - } - - void ShowHideDialpad(CCtrlEdit *) - { - SendMessage(m_hwnd, WM_SETREDRAW, FALSE, 0); - - if (!CanCallNumber()) { - for (auto &it : dialCtrls) - ShowWindow(GetDlgItem(m_hwnd, it), SW_HIDE); - } - else { - for (int i = 0; i < 3; ++i) - ShowWindow(GetDlgItem(m_hwnd, dialCtrls[i]), SW_SHOW); - - bool showDialpad = (SendMessage(GetDlgItem(m_hwnd, IDC_DIALPAD), BM_GETCHECK, 0, 0) == BST_CHECKED); - - for (int i = 3; i < _countof(dialCtrls); ++i) - ShowWindow(GetDlgItem(m_hwnd, dialCtrls[i]), showDialpad ? SW_SHOW : SW_HIDE); - - VoiceCall *talking = NULL; - bool ringing = false; - bool calling = false; - for (auto &call : calls) { - if (call->state == VOICE_STATE_TALKING) - talking = call; - else if (call->state == VOICE_STATE_CALLING) - calling = true; - else if (call->state == VOICE_STATE_RINGING) - ringing = true; - } - - wchar_t number[1024]; - GetDlgItemText(m_hwnd, IDC_NUMBER, number, _countof(number)); - lstrtrim(number); - - if (ringing && number[0] != 0) { - SetWindowText(GetDlgItem(m_hwnd, IDC_NUMBER), _T("")); - number[0] = 0; - } - - if (ringing || calling) { - for (auto &it : dialCtrls) - EnableWindow(GetDlgItem(m_hwnd, it), FALSE); - } - else if (talking) { - if (!showDialpad || !talking->CanSendDTMF()) { - for (auto &it : dialCtrls) - EnableWindow(GetDlgItem(m_hwnd, it), FALSE); - - EnableWindow(GetDlgItem(m_hwnd, IDC_DIALPAD), TRUE); - } - else { - for (auto &it : dialCtrls) - EnableWindow(GetDlgItem(m_hwnd, it), TRUE); - - EnableWindow(GetDlgItem(m_hwnd, IDC_NUMBER), FALSE); - EnableWindow(GetDlgItem(m_hwnd, IDC_CALL), FALSE); - } - } - else { - for (auto &it : dialCtrls) - EnableWindow(GetDlgItem(m_hwnd, it), TRUE); - - EnableWindow(GetDlgItem(m_hwnd, IDC_CALL), CanCall(number)); - } - } - - SendMessage(m_hwnd, WM_SETREDRAW, TRUE, 0); - - InvalidateAll(m_hwnd); - } - -public: - CFrameDlg() : - CDlgBase(g_plugin, IDD_CALLS), - m_calls(this, IDC_CALLS), - edtNumber(this, IDC_NUMBER), - btnCall(this, IDC_CALL, g_plugin.getIcon(IDI_ACTION_CALL), "Make call"), - btnDialpad(this, IDC_DIALPAD, g_plugin.getIcon(IDI_DIALPAD), LPGEN("Show dialpad")) - { - SetParent(g_clistApi.hwndContactList); - - btnCall.OnClick = Callback(this, &CFrameDlg::onClick_Call); - btnDialpad.OnClick = Callback(this, &CFrameDlg::onClick_DialPad); - - edtNumber.OnChange = Callback(this, &CFrameDlg::ShowHideDialpad); - - m_calls.OnSelChange = Callback(this, &CFrameDlg::onSelChange_Calls); - } - - bool OnInitDialog() override - { - btnCall.MakeFlat(); - btnDialpad.MakePush(); - - ResizeFrame(true); - return true; - } - - void OnResize() override - { - SendMessage(m_hwnd, WM_SETREDRAW, FALSE, 0); - - RECT rc; - GetClientRect(m_hwnd, &rc); - - int width = rc.right - rc.left; - int height = rc.bottom - rc.top; - - if (CanCallNumber()) { - bool showDialpad = btnDialpad.IsPushed(); - - GetWindowRect(m_hwnd, &rc); - - RECT first = { 0 }, last = { 0 }; - GetWindowRect(GetDlgItem(m_hwnd, IDC_1), &first); - GetWindowRect(GetDlgItem(m_hwnd, IDC_SHARP), &last); - - int dialpad_height = last.bottom - first.top; - int dialpad_width = last.right - first.left; - - - int call_height = 23; - int call_width = 25; - int top = height - call_height - 1; - - if (showDialpad) - top -= dialpad_height + 1; - - MoveWindow(btnDialpad.GetHwnd(), 1, top, call_width - 2, call_height, FALSE); - MoveWindow(GetDlgItem(m_hwnd, IDC_NUMBER), call_width, top, width - 2 * call_width, call_height, FALSE); - MoveWindow(btnCall.GetHwnd(), width - call_width, top, call_width, call_height + 1, FALSE); - - int dialpad_top = top + call_height + 1; - int dialpad_left = ((rc.right - rc.left) - dialpad_width) / 2; - int deltaX = dialpad_left - first.left; - int deltaY = dialpad_top - first.top; - for (int i = 3; i < _countof(dialCtrls); ++i) { - GetWindowRect(GetDlgItem(m_hwnd, dialCtrls[i]), &rc); - MoveWindow(GetDlgItem(m_hwnd, dialCtrls[i]), rc.left + deltaX, rc.top + deltaY, rc.right - rc.left, rc.bottom - rc.top, FALSE); - } - - height -= call_height + 2; - if (showDialpad) - height -= dialpad_height + 1; - } - - if (height <= 2) { - m_calls.Hide(); - } - else { - MoveWindow(m_calls.GetHwnd(), 1, 1, width - 2, height - 2, FALSE); - m_calls.Show(); - } - - SendMessage(m_hwnd, WM_SETREDRAW, TRUE, 0); - InvalidateAll(m_hwnd); - } - - void onClick_DialPad(CCtrlMButton *) - { - ShowHideDialpad(0); - ResizeFrame(false); - } - - void onClick_Call(CCtrlMButton *) - { - wchar_t number[1024]; - GetDlgItemText(m_hwnd, IDC_NUMBER, number, _countof(number)); - lstrtrim(number); - - LIST<VoiceProvider> candidates(10, &sttCompareProvidesByDescription); - - for (auto &it: modules) { - if (!it->CanCall(number)) - continue; - - candidates.insert(it); - } - - if (candidates.getCount() < 1) - return; - - int selected; - if (candidates.getCount() == 1) { - selected = 0; - } - else { - HMENU menu = CreatePopupMenu(); - - for (int i = 0; i < candidates.getCount(); ++i) { - wchar_t text[1024]; - mir_snwprintf(text, _countof(text), TranslateT("Call with %s"), candidates[i]->description); - - MENUITEMINFO mii = { 0 }; - mii.cbSize = sizeof(mii); - mii.fMask = MIIM_ID | MIIM_TYPE; - mii.fType = MFT_STRING; - mii.dwTypeData = text; - mii.cch = lstrlen(text); - mii.wID = i + 1; - - // TODO: Add icon to menu - - InsertMenuItem(menu, 0, TRUE, &mii); - } - - RECT rc; - GetWindowRect(GetDlgItem(m_hwnd, IDC_CALL), &rc); - - POINT p; - p.x = rc.right; - p.y = rc.bottom + 1; - - selected = TrackPopupMenu(menu, TPM_TOPALIGN | TPM_RIGHTBUTTON | TPM_RETURNCMD | TPM_RIGHTALIGN, p.x, p.y, 0, m_hwnd, 0); - - DestroyMenu(menu); - - if (selected == 0) - return; - - selected--; - } - - candidates[selected]->Call(0, number); - } - - void onChange_Dialpad(CCtrlCheck *pCheck) - { - wchar_t text[2]; - switch (pCheck->GetCtrlId()) { - case IDC_1: text[0] = _T('1'); break; - case IDC_2: text[0] = _T('2'); break; - case IDC_3: text[0] = _T('3'); break; - case IDC_4: text[0] = _T('4'); break; - case IDC_5: text[0] = _T('5'); break; - case IDC_6: text[0] = _T('6'); break; - case IDC_7: text[0] = _T('7'); break; - case IDC_8: text[0] = _T('8'); break; - case IDC_9: text[0] = _T('9'); break; - case IDC_AST: text[0] = _T('*'); break; - case IDC_0: text[0] = _T('0'); break; - case IDC_SHARP: text[0] = _T('#'); break; - } - text[1] = 0; - - Skin_PlaySound("voice_dialpad"); - - VoiceCall *call = GetTalkingCall(); - if (call == NULL) { - SendMessage(GetDlgItem(m_hwnd, IDC_NUMBER), EM_REPLACESEL, TRUE, (LPARAM)text); - } - else { - wchar_t tmp[1024]; - - GetWindowText(GetDlgItem(m_hwnd, IDC_NUMBER), tmp, _countof(tmp)); - - tmp[_countof(tmp) - 2] = 0; - lstrcat(tmp, text); - - SetWindowText(GetDlgItem(m_hwnd, IDC_NUMBER), tmp); - - call->SendDTMF(text[0]); - } - } - - void onSelChange_Calls(CCtrlListBox*) - { - int pos = m_calls.GetCurSel(); - if (pos == LB_ERR) - return; - - POINT p; - GetCursorPos(&p); - ScreenToClient(m_calls.GetHwnd(), &p); - - int ret = m_calls.SendMsg(LB_ITEMFROMPOINT, 0, MAKELONG(p.x, p.y)); - if (HIWORD(ret)) - return; - if (pos != LOWORD(ret)) - return; - - RECT rc; - m_calls.GetItemRect(pos, &rc); - int x = rc.right - p.x; - - int action; - if (x >= H_SPACE && x <= ICON_SIZE + H_SPACE) - action = 2; - else if (x >= ICON_SIZE + 2 * H_SPACE && x <= 2 * (ICON_SIZE + H_SPACE)) - action = 1; - else - return; - - VoiceCall *call = (VoiceCall *)m_calls.GetItemData(pos); - switch (call->state) { - case VOICE_STATE_TALKING: - if (action == 1) - call->Hold(); - else - call->Drop(); - break; - - case VOICE_STATE_RINGING: - case VOICE_STATE_ON_HOLD: - if (action == 1) - Answer(call); - else - call->Drop(); - break; - - case VOICE_STATE_CALLING: - if (action == 2) - call->Drop(); - break; - } - } - - void onMenu_Calls(CContextMenuPos *pPos) - { - int pos = pPos->iCurr; - if (pos >= calls.getCount()) - return; - - if (IsFinalState(calls[pos].state)) - return; - - // Just to get things strait - m_calls.SetCurSel(pos); - - HMENU menu = LoadMenu(g_plugin.getInst(), MAKEINTRESOURCE(IDR_MENUS)); - HMENU submenu = GetSubMenu(menu, 0); - TranslateMenu(submenu); - - switch (calls[pos].state) { - case VOICE_STATE_CALLING: - DeleteMenu(menu, ID_FRAMEPOPUP_ANSWERCALL, MF_BYCOMMAND); - DeleteMenu(menu, ID_FRAMEPOPUP_HOLDCALL, MF_BYCOMMAND); - break; - - case VOICE_STATE_TALKING: - DeleteMenu(menu, ID_FRAMEPOPUP_ANSWERCALL, MF_BYCOMMAND); - if (!calls[pos].module->CanHold()) - DeleteMenu(menu, ID_FRAMEPOPUP_HOLDCALL, MF_BYCOMMAND); - break; - } - - int ret = TrackPopupMenu(submenu, TPM_TOPALIGN | TPM_LEFTALIGN | TPM_RIGHTBUTTON | TPM_RETURNCMD, pPos->pt.x, pPos->pt.y, 0, m_hwnd, NULL); - DestroyMenu(menu); - - switch (ret) { - case ID_FRAMEPOPUP_DROPCALL: - calls[pos].Drop(); - break; - - case ID_FRAMEPOPUP_ANSWERCALL: - Answer(&calls[pos]); - break; - - case ID_FRAMEPOPUP_HOLDCALL: - calls[pos].Hold(); - break; - } - } - - INT_PTR DlgProc(UINT msg, WPARAM wParam, LPARAM lParam) override - { - switch (msg) { - case WM_MEASUREITEM: - { - LPMEASUREITEMSTRUCT mis = (LPMEASUREITEMSTRUCT)lParam; - if (mis->CtlID != IDC_CALLS) - break; - - mis->itemHeight = GetMaxLineHeight(); - } - return TRUE; - - case WM_CTLCOLORLISTBOX: - return (LRESULT)bk_brush; - - case WM_DRAWITEM: - DRAWITEMSTRUCT *dis = (DRAWITEMSTRUCT *)lParam; - if (dis->CtlID != IDC_CALLS || dis->itemID == -1) - break; - - VoiceCall *call = (VoiceCall *)dis->itemData; - if (call == NULL) - break; - - RECT rc = dis->rcItem; - - FillRect(dis->hDC, &rc, bk_brush); - - rc.left += H_SPACE; - rc.right -= H_SPACE; - rc.bottom--; - - int old_bk_mode = SetBkMode(dis->hDC, TRANSPARENT); - - // Draw status - DrawIconLib(dis->hDC, rc, IDI_TALKING + call->state); - - if (call->secure) - DrawIconLib(dis->hDC, rc, IDI_SECURE); - - // Draw voice provider icon - rc.left += ICON_SIZE + H_SPACE; - - HICON hIcon = call->module->GetIcon(); - if (hIcon != NULL) { - DrawIconEx(dis->hDC, rc.left, (rc.top + rc.bottom - ICON_SIZE) / 2, hIcon, ICON_SIZE, ICON_SIZE, 0, NULL, DI_NORMAL); - call->module->ReleaseIcon(hIcon); - } - - // Draw contact - rc.left += ICON_SIZE + H_SPACE; - - int numIcons = 0; - switch (call->state) { - case VOICE_STATE_CALLING: - numIcons = 1; - break; - - case VOICE_STATE_TALKING: - if (call->module->CanHold()) - numIcons = 2; - else - numIcons = 1; - break; - - case VOICE_STATE_RINGING: - case VOICE_STATE_ON_HOLD: - numIcons = 2; - break; - } - - rc.right -= numIcons * (ICON_SIZE + H_SPACE); - - HFONT old_font = (HFONT)SelectObject(dis->hDC, fonts[call->state]); - COLORREF old_color = SetTextColor(dis->hDC, font_colors[call->state]); - - DrawText(dis->hDC, call->displayName, -1, &rc, DT_SINGLELINE | DT_NOPREFIX | DT_END_ELLIPSIS | DT_VCENTER); - - SelectObject(dis->hDC, old_font); - SetTextColor(dis->hDC, old_color); - - // Draw action icons - rc = dis->rcItem; - rc.right -= H_SPACE; - rc.bottom--; - - switch (call->state) { - case VOICE_STATE_CALLING: - rc.left = rc.right - ICON_SIZE; - DrawIconLib(dis->hDC, rc, IDI_ACTION_DROP); - break; - - case VOICE_STATE_TALKING: - rc.left = rc.right - ICON_SIZE; - DrawIconLib(dis->hDC, rc, IDI_ACTION_DROP); - - if (call->module->CanHold()) { - rc.right -= ICON_SIZE + H_SPACE; - rc.left = rc.right - ICON_SIZE; - DrawIconLib(dis->hDC, rc, IDI_ACTION_HOLD); - } - break; - - case VOICE_STATE_RINGING: - case VOICE_STATE_ON_HOLD: - rc.left = rc.right - ICON_SIZE; - DrawIconLib(dis->hDC, rc, IDI_ACTION_DROP); - - rc.right -= ICON_SIZE + H_SPACE; - rc.left = rc.right - ICON_SIZE; - DrawIconLib(dis->hDC, rc, IDI_ACTION_ANSWER); - break; - } - - SetBkMode(dis->hDC, old_bk_mode); - return TRUE; - } - - return CDlgBase::DlgProc(msg, wParam, lParam); - } - - void Refresh() - { - if (m_calls.GetCount() == calls.getCount()) - return; - - m_calls.SendMsg(WM_SETREDRAW, FALSE, 0); - m_calls.ResetContent(); - - for (auto &call : calls) { - wchar_t text[512]; - mir_snwprintf(text, _countof(text), _T("%d %s"), call->state, call->displayName); - m_calls.AddString(text, (LPARAM)call); - } - - m_calls.SendMsg(WM_SETREDRAW, TRUE, 0); - ResizeFrame(false); - } -}; - -// Module entry point ///////////////////////////////////////////////////////////////////////////// - -static CFrameDlg *pDialog = nullptr; - -void InitFrames() -{ - if (g_plugin.bFramesExist) { - pDialog = new CFrameDlg(); - - CLISTFrame Frame = {}; - Frame.cbSize = sizeof(CLISTFrame); - Frame.szName.w = TranslateT("Voice Calls"); - Frame.hWnd = pDialog->GetHwnd(); - Frame.height = ICON_SIZE; - Frame.align = alBottom; - Frame.Flags = F_NOBORDER | F_LOCKED | F_UNICODE; - Frame.hIcon = g_plugin.getIcon(IDI_MAIN, true); - frame_id = g_plugin.addFrame(&Frame); - - ShowFrame(frame_id, pDialog->GetHwnd(), SW_HIDE); - } -} - -void RefreshFrame() -{ - if (pDialog) - pDialog->Refresh(); -} - -void DeInitFrames() -{ - if (g_plugin.bFramesExist && frame_id != -1) - CallService(MS_CLIST_FRAMES_REMOVEFRAME, frame_id, 0); - - if (pDialog) - pDialog->Close(); -} diff --git a/plugins/VoiceService/src/frame.h b/plugins/VoiceService/src/frame.h deleted file mode 100644 index d5850f484e..0000000000 --- a/plugins/VoiceService/src/frame.h +++ /dev/null @@ -1,29 +0,0 @@ -/* -Copyright (C) 2006 Ricardo Pescuma Domenecci - -This is free software; you can redistribute it and/or -modify it under the terms of the GNU Library General Public -License as published by the Free Software Foundation; either -version 2 of the License, or (at your option) any later version. - -This is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Library General Public License for more details. - -You should have received a copy of the GNU Library General Public -License along with this file; see the file license.txt. If -not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. -*/ - - -#ifndef __FRAME_H__ -# define __FRAME_H__ - -void InitFrames(); -void DeInitFrames(); - -void RefreshFrame(); - -#endif // __FRAME_H__
\ No newline at end of file diff --git a/plugins/VoiceService/src/options.cpp b/plugins/VoiceService/src/options.cpp index 9cec44611d..3de9ffc247 100644 --- a/plugins/VoiceService/src/options.cpp +++ b/plugins/VoiceService/src/options.cpp @@ -29,15 +29,8 @@ HANDLE hOptHook = NULL; Options opts; -static OptPageControl optionsControls[] = -{ - { &opts.resize_frame, CONTROL_CHECKBOX, IDC_FRAME_AUTOSIZE, "FrameAutoSize", TRUE } -}; - -static OptPageControl devicesControls[] = { - { NULL, CONTROL_CHECKBOX, IDC_ECHO, "EchoCancelation", TRUE }, - { NULL, CONTROL_CHECKBOX, IDC_MIC_BOOST, "MicBoost", TRUE }, -}; +///////////////////////////////////////////////////////////////////////////////////////// +// Popup options static OptPageControl popupsControls[] = { { &opts.popup_enable, CONTROL_CHECKBOX, IDC_POPUPS, "PopupsEnable", FALSE }, @@ -53,13 +46,6 @@ static OptPageControl popupsControls[] = { { &opts.popup_left_click_action, CONTROL_COMBO, IDC_LEFT_ACTION, "PopupsLeftClick", POPUP_ACTION_CLOSEPOPUP } }; -// Functions ////////////////////////////////////////////////////////////////////////////////////// - -static INT_PTR CALLBACK OptionsDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) -{ - return SaveOptsDlgProc(optionsControls, _countof(optionsControls), MODULE_NAME, hwndDlg, msg, wParam, lParam); -} - static void PopupsEnableDisableCtrls(HWND hwndDlg) { BOOL enabled = IsDlgButtonChecked(hwndDlg, IDC_POPUPS); @@ -84,13 +70,10 @@ static void PopupsEnableDisableCtrls(HWND hwndDlg) EnableWindow(GetDlgItem(hwndDlg, IDC_TEXTCOLOR), enabled && !IsDlgButtonChecked(hwndDlg, IDC_WINCOLORS) && !IsDlgButtonChecked(hwndDlg, IDC_DEFAULTCOLORS)); - EnableWindow(GetDlgItem(hwndDlg, IDC_DEFAULTCOLORS), enabled && - !IsDlgButtonChecked(hwndDlg, IDC_WINCOLORS)); - EnableWindow(GetDlgItem(hwndDlg, IDC_WINCOLORS), enabled && - !IsDlgButtonChecked(hwndDlg, IDC_DEFAULTCOLORS)); + EnableWindow(GetDlgItem(hwndDlg, IDC_DEFAULTCOLORS), enabled && !IsDlgButtonChecked(hwndDlg, IDC_WINCOLORS)); + EnableWindow(GetDlgItem(hwndDlg, IDC_WINCOLORS), enabled && !IsDlgButtonChecked(hwndDlg, IDC_DEFAULTCOLORS)); - EnableWindow(GetDlgItem(hwndDlg, IDC_DELAY), enabled && - IsDlgButtonChecked(hwndDlg, IDC_DELAYCUSTOM)); + EnableWindow(GetDlgItem(hwndDlg, IDC_DELAY), enabled && IsDlgButtonChecked(hwndDlg, IDC_DELAYCUSTOM)); } static INT_PTR CALLBACK PopupsDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) @@ -155,248 +138,202 @@ static INT_PTR CALLBACK PopupsDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPA return SaveOptsDlgProc(popupsControls, _countof(popupsControls), MODULE_NAME, hwndDlg, msg, wParam, lParam); } -static void SetAllContactIcons(HWND hwndList) +///////////////////////////////////////////////////////////////////////////////////////// + +int ImageList_AddIcon_NotShared(HIMAGELIST hIml, int iconId) { - for (auto &cc : Contacts()) { - HANDLE hItem = (HANDLE)SendMessage(hwndList, CLM_FINDCONTACT, (WPARAM)cc, 0); - if (hItem) { - // Some Module can handle it? - if (!CanCall(cc, FALSE)) { - SendMessage(hwndList, CLM_DELETEITEM, (WPARAM)hItem, 0); - } - else { - SendMessage(hwndList, CLM_SETEXTRAIMAGE, (WPARAM)hItem, MAKELPARAM(0, g_plugin.getWord(cc, "AutoAccept", AUTO_NOTHING) == AUTO_ACCEPT ? 1 : 0)); - SendMessage(hwndList, CLM_SETEXTRAIMAGE, (WPARAM)hItem, MAKELPARAM(1, g_plugin.getWord(cc, "AutoAccept", AUTO_NOTHING) == AUTO_DROP ? 2 : 0)); - } - } - } + HICON hIcon = g_plugin.getIcon(iconId); + int res = ImageList_AddIcon(hIml, hIcon); + IcoLib_ReleaseIcon(hIcon); + return res; } - -static void SetListGroupIcons(HWND hwndList, HANDLE hFirstItem, HANDLE hParentItem, int *groupChildCount) +class CAutoOptsDlg : public CDlgBase { - int typeOfFirst; - int iconOn[2] = { 1,1 }; - int childCount[2] = { 0,0 }, i; - int iImage; - HANDLE hItem, hChildItem; - - typeOfFirst = SendMessage(hwndList, CLM_GETITEMTYPE, (WPARAM)hFirstItem, 0); - //check groups - if (typeOfFirst == CLCIT_GROUP) hItem = hFirstItem; - else hItem = (HANDLE)SendMessage(hwndList, CLM_GETNEXTITEM, CLGN_NEXTGROUP, (LPARAM)hFirstItem); - while (hItem) { - hChildItem = (HANDLE)SendMessage(hwndList, CLM_GETNEXTITEM, CLGN_CHILD, (LPARAM)hItem); - if (hChildItem) SetListGroupIcons(hwndList, hChildItem, hItem, childCount); - for (i = 0; i < _countof(iconOn); i++) - if (iconOn[i] && SendMessage(hwndList, CLM_GETEXTRAIMAGE, (WPARAM)hItem, i) == 0) iconOn[i] = 0; - hItem = (HANDLE)SendMessage(hwndList, CLM_GETNEXTITEM, CLGN_NEXTGROUP, (LPARAM)hItem); + void ResetListOptions(CCtrlClc* = 0) + { + m_clist.SetBkColor(GetSysColor(COLOR_WINDOW)); } - //check contacts - if (typeOfFirst == CLCIT_CONTACT) hItem = hFirstItem; - else hItem = (HANDLE)SendMessage(hwndList, CLM_GETNEXTITEM, CLGN_NEXTCONTACT, (LPARAM)hFirstItem); - while (hItem) { - for (i = 0; i < _countof(iconOn); i++) { - iImage = SendMessage(hwndList, CLM_GETEXTRAIMAGE, (WPARAM)hItem, i); - if (iconOn[i] && iImage == 0) iconOn[i] = 0; - if (iImage != 0xFF) childCount[i]++; + + void SetAllContactIcons() + { + for (auto &cc : Contacts()) { + HANDLE hItem = m_clist.FindContact(cc); + if (hItem) { + // Some Module can handle it? + if (!CanCall(cc, FALSE)) + m_clist.DeleteItem(hItem); + else + m_clist.SetExtraImage(hItem, 0, g_plugin.getWord(cc, "AutoAccept")); + } } - hItem = (HANDLE)SendMessage(hwndList, CLM_GETNEXTITEM, CLGN_NEXTCONTACT, (LPARAM)hItem); } - //set icons - if (hParentItem != NULL) { - for (i = 0; i < _countof(iconOn); i++) { - SendMessage(hwndList, CLM_SETEXTRAIMAGE, (WPARAM)hParentItem, MAKELPARAM(i, childCount[i] ? (iconOn[i] ? i + 1 : 0) : 0xFF)); - if (groupChildCount) groupChildCount[i] += childCount[i]; + + void SetListGroupIcons(HANDLE hFirstItem, HANDLE hParentItem, int *groupChildCount) + { + int iconOn[2] = { 1,1 }; + int childCount[2] = { 0,0 }; + + int typeOfFirst = m_clist.GetItemType(hFirstItem); + + // check groups + HANDLE hItem; + if (typeOfFirst == CLCIT_GROUP) hItem = hFirstItem; + else hItem = m_clist.GetNextItem(hFirstItem, CLGN_NEXTGROUP); + while (hItem) { + HANDLE hChildItem = m_clist.GetNextItem(hItem, CLGN_CHILD); + if (hChildItem) SetListGroupIcons(hChildItem, hItem, childCount); + for (int i = 0; i < _countof(iconOn); i++) + if (iconOn[i] && m_clist.GetExtraImage(hItem, i) == 0) + iconOn[i] = 0; + hItem = m_clist.GetNextItem(hItem, CLGN_NEXTGROUP); + } + + // check contacts + if (typeOfFirst == CLCIT_CONTACT) hItem = hFirstItem; + else hItem = m_clist.GetNextItem(hFirstItem, CLGN_NEXTCONTACT); + while (hItem) { + for (int i = 0; i < _countof(iconOn); i++) { + int iImage = m_clist.GetExtraImage(hItem, i); + if (iconOn[i] && iImage == 0) + iconOn[i] = 0; + if (iImage != 0xFF) childCount[i]++; + } + hItem = m_clist.GetNextItem(hItem, CLGN_NEXTCONTACT); + } + + // set icons + if (hParentItem != NULL) { + for (int i = 0; i < _countof(iconOn); i++) { + m_clist.GetExtraImage(hParentItem, MAKELPARAM(i, childCount[i] ? (iconOn[i] ? i + 1 : 0) : 0xFF)); + if (groupChildCount) + groupChildCount[i] += childCount[i]; + } } } -} + void SetAllChildIcons(HANDLE hFirstItem, int iColumn, int iImage) + { + HANDLE hItem; -static void SetAllChildIcons(HWND hwndList, HANDLE hFirstItem, int iColumn, int iImage) -{ - int typeOfFirst, iOldIcon; - HANDLE hItem, hChildItem; - - typeOfFirst = SendMessage(hwndList, CLM_GETITEMTYPE, (WPARAM)hFirstItem, 0); - //check groups - if (typeOfFirst == CLCIT_GROUP) hItem = hFirstItem; - else hItem = (HANDLE)SendMessage(hwndList, CLM_GETNEXTITEM, CLGN_NEXTGROUP, (LPARAM)hFirstItem); - while (hItem) { - hChildItem = (HANDLE)SendMessage(hwndList, CLM_GETNEXTITEM, CLGN_CHILD, (LPARAM)hItem); - if (hChildItem) SetAllChildIcons(hwndList, hChildItem, iColumn, iImage); - hItem = (HANDLE)SendMessage(hwndList, CLM_GETNEXTITEM, CLGN_NEXTGROUP, (LPARAM)hItem); + int typeOfFirst = m_clist.GetItemType(hFirstItem); + + // check groups + if (typeOfFirst == CLCIT_GROUP) hItem = hFirstItem; + else hItem = m_clist.GetNextItem(hFirstItem, CLGN_NEXTGROUP); + while (hItem) { + HANDLE hChildItem = m_clist.GetNextItem(hItem, CLGN_CHILD); + if (hChildItem) + SetAllChildIcons(hChildItem, iColumn, iImage); + hItem = m_clist.GetNextItem(hItem, CLGN_NEXTGROUP); + } + + // check contacts + if (typeOfFirst == CLCIT_CONTACT) hItem = hFirstItem; + else hItem = m_clist.GetNextItem(hFirstItem, CLGN_NEXTCONTACT); + while (hItem) { + int iOldIcon = m_clist.GetExtraImage(hItem, iColumn); + if (iOldIcon != 0xFF && iOldIcon != iImage) + m_clist.SetExtraImage(hItem, iColumn, iImage); + hItem = m_clist.GetNextItem(hItem, CLGN_NEXTCONTACT); + } } - //check contacts - if (typeOfFirst == CLCIT_CONTACT) hItem = hFirstItem; - else hItem = (HANDLE)SendMessage(hwndList, CLM_GETNEXTITEM, CLGN_NEXTCONTACT, (LPARAM)hFirstItem); - while (hItem) { - iOldIcon = SendMessage(hwndList, CLM_GETEXTRAIMAGE, (WPARAM)hItem, iColumn); - if (iOldIcon != 0xFF && iOldIcon != iImage) SendMessage(hwndList, CLM_SETEXTRAIMAGE, (WPARAM)hItem, MAKELPARAM(iColumn, iImage)); - hItem = (HANDLE)SendMessage(hwndList, CLM_GETNEXTITEM, CLGN_NEXTCONTACT, (LPARAM)hItem); + + CCtrlClc m_clist; + HICON hAnswerIcon, hDropIcon; + +public: + CAutoOptsDlg() : + CDlgBase(g_plugin, IDD_OPT_AUTO), + m_clist(this, IDC_LIST) + { + m_clist.OnClick = Callback(this, &CAutoOptsDlg::onClick_List); + m_clist.OnNewContact = m_clist.OnListRebuilt = Callback(this, &CAutoOptsDlg::onListRebuilt); + m_clist.OnOptionsChanged = Callback(this, &CAutoOptsDlg::ResetListOptions); } -} + bool OnInitDialog() override + { + HIMAGELIST hIml = ImageList_Create(GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), ILC_COLOR32 | ILC_MASK, 3, 3); + ImageList_AddIcon(hIml, Skin_LoadIcon(SKINICON_OTHER_SMALLDOT)); + ImageList_AddIcon_NotShared(hIml, IDI_ACTION_ANSWER); + ImageList_AddIcon_NotShared(hIml, IDI_ACTION_DROP); + m_clist.SetExtraImageList(hIml); -static void ResetListOptions(HWND hwndList) -{ - SendMessage(hwndList, CLM_SETBKCOLOR, GetSysColor(COLOR_WINDOW), 0); -} + hAnswerIcon = ImageList_GetIcon(hIml, 1, ILD_NORMAL); + SendDlgItemMessage(m_hwnd, IDC_ANSWER, STM_SETICON, (WPARAM)hAnswerIcon, 0); + hDropIcon = ImageList_GetIcon(hIml, 2, ILD_NORMAL); + SendDlgItemMessage(m_hwnd, IDC_DROP, STM_SETICON, (WPARAM)hDropIcon, 0); -int ImageList_AddIcon_NotShared(HIMAGELIST hIml, HINSTANCE hInstance, LPCTSTR szResource) -{ - HICON hIcon = LoadIcon(hInstance, szResource); - int res = ImageList_AddIcon(hIml, hIcon); - DestroyIcon(hIcon); - return res; -} + ResetListOptions(); + m_clist.SetExtraColumns(1); + onListRebuilt(0); + return true; + } -int ImageList_AddIcon_NotShared(HIMAGELIST hIml, int iconId) -{ - HICON hIcon = g_plugin.getIcon(iconId); - int res = ImageList_AddIcon(hIml, hIcon); - IcoLib_ReleaseIcon(hIcon); - return res; -} - - -static INT_PTR CALLBACK AutoDlgProc(HWND hwndDlg, UINT msg, WPARAM, LPARAM lParam) -{ - static HICON hAnswerIcon, hDropIcon; - - switch (msg) { - case WM_INITDIALOG: - { - TranslateDialogDefault(hwndDlg); - - HIMAGELIST hIml = ImageList_Create(GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), ILC_COLOR32 | ILC_MASK, 3, 3); - - ImageList_AddIcon_NotShared(hIml, GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_SMALLDOT)); - ImageList_AddIcon_NotShared(hIml, IDI_ACTION_ANSWER); - ImageList_AddIcon_NotShared(hIml, IDI_ACTION_DROP); - SendDlgItemMessage(hwndDlg, IDC_LIST, CLM_SETEXTRAIMAGELIST, 0, (LPARAM)hIml); - - hAnswerIcon = ImageList_GetIcon(hIml, 1, ILD_NORMAL); - SendDlgItemMessage(hwndDlg, IDC_ANSWER, STM_SETICON, (WPARAM)hAnswerIcon, 0); + bool OnApply() override + { + for (auto &cc : Contacts()) { + HANDLE hItem = m_clist.FindContact(cc); + if (hItem) + g_plugin.setWord(cc, "AutoAccept", m_clist.GetExtraImage(hItem, 0)); + } + return true; + } - hDropIcon = ImageList_GetIcon(hIml, 2, ILD_NORMAL); - SendDlgItemMessage(hwndDlg, IDC_DROP, STM_SETICON, (WPARAM)hDropIcon, 0); + void OnDestroy() override + { + DestroyIcon(hAnswerIcon); + DestroyIcon(hDropIcon); + ImageList_Destroy((HIMAGELIST)SendDlgItemMessage(m_hwnd, IDC_LIST, CLM_GETEXTRAIMAGELIST, 0, 0)); + } - ResetListOptions(GetDlgItem(hwndDlg, IDC_LIST)); - SendDlgItemMessage(hwndDlg, IDC_LIST, CLM_SETEXTRACOLUMNS, 2, 0); + void onListRebuilt(CCtrlClc *) + { + SetAllContactIcons(); + SetListGroupIcons(m_clist.GetNextItem(0, CLGN_ROOT), 0, 0); + } - SetAllContactIcons(GetDlgItem(hwndDlg, IDC_LIST)); - SetListGroupIcons(GetDlgItem(hwndDlg, IDC_LIST), (HANDLE)SendDlgItemMessage(hwndDlg, IDC_LIST, CLM_GETNEXTITEM, CLGN_ROOT, 0), NULL, NULL); - return TRUE; + void onClick_List(CCtrlClc::TEventInfo *pInfo) + { + // Make sure we have an extra column + NMCLISTCONTROL *nm = pInfo->info; + if (nm->iColumn == -1) + return; + + // Find clicked item + uint32_t hitFlags = 0; + HANDLE hItem = m_clist.HitTest(nm->pt.x, nm->pt.y, &hitFlags); + if (hItem == NULL || !(hitFlags & CLCHT_ONITEMEXTRA)) + return; + + // Get image in clicked column (0=none, 1=visible, 2=invisible) + int iImage = m_clist.GetExtraImage(hItem, nm->iColumn); + if (iImage == 2) + iImage = 0; + else + iImage++; + + // Get item type (contact, group, etc...) + int itemType = m_clist.GetItemType(hItem); + + // Update list, making sure that the options are mutually exclusive + if (itemType == CLCIT_CONTACT) { // A contact + m_clist.SetExtraImage(hItem, nm->iColumn, iImage); } - case WM_SETFOCUS: - SetFocus(GetDlgItem(hwndDlg, IDC_LIST)); - break; - case WM_NOTIFY: - switch (((LPNMHDR)lParam)->idFrom) { - case IDC_LIST: - switch (((LPNMHDR)lParam)->code) { - case CLN_NEWCONTACT: - case CLN_LISTREBUILT: - SetAllContactIcons(GetDlgItem(hwndDlg, IDC_LIST)); - //fall through - - case CLN_CONTACTMOVED: - SetListGroupIcons(GetDlgItem(hwndDlg, IDC_LIST), (HANDLE)SendDlgItemMessage(hwndDlg, IDC_LIST, CLM_GETNEXTITEM, CLGN_ROOT, 0), NULL, NULL); - break; - - case CLN_OPTIONSCHANGED: - ResetListOptions(GetDlgItem(hwndDlg, IDC_LIST)); - break; - - case NM_CLICK: - { - HANDLE hItem; - NMCLISTCONTROL *nm = (NMCLISTCONTROL *)lParam; - DWORD hitFlags; - int iImage; - int itemType; - - // Make sure we have an extra column - if (nm->iColumn == -1) - break; - - // Find clicked item - hItem = (HANDLE)SendDlgItemMessage(hwndDlg, IDC_LIST, CLM_HITTEST, (WPARAM)&hitFlags, MAKELPARAM(nm->pt.x, nm->pt.y)); - // Nothing was clicked - if (hItem == NULL) break; - // It was not a visbility icon - if (!(hitFlags & CLCHT_ONITEMEXTRA)) break; - - // Get image in clicked column (0=none, 1=visible, 2=invisible) - iImage = SendDlgItemMessage(hwndDlg, IDC_LIST, CLM_GETEXTRAIMAGE, (WPARAM)hItem, MAKELPARAM(nm->iColumn, 0)); - if (iImage == 0) - iImage = nm->iColumn + 1; - else - if (iImage == 1 || iImage == 2) - iImage = 0; - - // Get item type (contact, group, etc...) - itemType = SendDlgItemMessage(hwndDlg, IDC_LIST, CLM_GETITEMTYPE, (WPARAM)hItem, 0); - - // Update list, making sure that the options are mutually exclusive - if (itemType == CLCIT_CONTACT) { // A contact - SendDlgItemMessage(hwndDlg, IDC_LIST, CLM_SETEXTRAIMAGE, (WPARAM)hItem, MAKELPARAM(nm->iColumn, iImage)); - if (iImage && SendDlgItemMessage(hwndDlg, IDC_LIST, CLM_GETEXTRAIMAGE, (WPARAM)hItem, MAKELPARAM(nm->iColumn ? 0 : 1, 0)) != 0xFF) - SendDlgItemMessage(hwndDlg, IDC_LIST, CLM_SETEXTRAIMAGE, (WPARAM)hItem, MAKELPARAM(nm->iColumn ? 0 : 1, 0)); - } - else if (itemType == CLCIT_GROUP) { // A group - hItem = (HANDLE)SendDlgItemMessage(hwndDlg, IDC_LIST, CLM_GETNEXTITEM, CLGN_CHILD, (LPARAM)hItem); - if (hItem) { - SetAllChildIcons(GetDlgItem(hwndDlg, IDC_LIST), hItem, nm->iColumn, iImage); - if (iImage) - SetAllChildIcons(GetDlgItem(hwndDlg, IDC_LIST), hItem, nm->iColumn ? 0 : 1, 0); - } - } - // Update the all/none icons - SetListGroupIcons(GetDlgItem(hwndDlg, IDC_LIST), (HANDLE)SendDlgItemMessage(hwndDlg, IDC_LIST, CLM_GETNEXTITEM, CLGN_ROOT, 0), NULL, NULL); - - // Activate Apply button - SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); - break; - } - } - break; - case 0: - switch (((LPNMHDR)lParam)->code) { - case PSN_APPLY: - for (auto &cc : Contacts()) { - HANDLE hItem = (HANDLE)SendDlgItemMessage(hwndDlg, IDC_LIST, CLM_FINDCONTACT, cc, 0); - if (hItem) { - int set = 0; - for (int i = 0; i < 2; i++) { - int iImage = SendDlgItemMessage(hwndDlg, IDC_LIST, CLM_GETEXTRAIMAGE, (WPARAM)hItem, MAKELPARAM(i, 0)); - if (iImage == i + 1) { - g_plugin.setWord(cc, "AutoAccept", iImage == 1 ? AUTO_ACCEPT : AUTO_DROP); - set = 1; - break; - } - } - if (!set) - g_plugin.setWord(cc, "AutoAccept", AUTO_NOTHING); - } - } - return TRUE; - } - break; + else if (itemType == CLCIT_GROUP) { // A group + hItem = m_clist.GetNextItem(hItem, CLGN_CHILD); + if (hItem) + SetAllChildIcons(hItem, nm->iColumn, iImage); } - break; - -case WM_DESTROY: - DestroyIcon(hAnswerIcon); - DestroyIcon(hDropIcon); - ImageList_Destroy((HIMAGELIST)SendDlgItemMessage(hwndDlg, IDC_LIST, CLM_GETEXTRAIMAGELIST, 0, 0)); - break; + + // Update the all/none icons + SetListGroupIcons(m_clist.GetNextItem(0, CLGN_ROOT), 0, 0); + NotifyChange(); } - return FALSE; -} +}; ///////////////////////////////////////////////////////////////////////////////////////// @@ -415,15 +352,8 @@ int InitOptionsCallback(WPARAM wParam, LPARAM) ZeroMemory(&odp, sizeof(odp)); odp.szGroup.a = LPGEN("Voice Calls"); - odp.szTitle.a = LPGEN("General"); - odp.pfnDlgProc = OptionsDlgProc; - odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPTS); - g_plugin.addOptions(wParam, &odp); - - odp.szGroup.a = LPGEN("Voice Calls"); odp.szTitle.a = LPGEN("Auto actions"); - odp.pfnDlgProc = AutoDlgProc; - odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT_AUTO); + odp.pDialog = new CAutoOptsDlg(); g_plugin.addOptions(wParam, &odp); return 0; } @@ -442,6 +372,5 @@ void DeInitOptions() void LoadOptions() { - LoadOpts(optionsControls, _countof(optionsControls), MODULE_NAME); LoadOpts(popupsControls, _countof(popupsControls), MODULE_NAME); } diff --git a/plugins/VoiceService/src/options.h b/plugins/VoiceService/src/options.h index 4ba1131ed9..89667ed586 100644 --- a/plugins/VoiceService/src/options.h +++ b/plugins/VoiceService/src/options.h @@ -43,9 +43,6 @@ struct Options { COLORREF popup_text_color; WORD popup_left_click_action; WORD popup_right_click_action; - - // Frame - BOOL resize_frame; }; extern Options opts; |