From 2f1b8c756066316c59be907bcd94a73cae5e3a7b Mon Sep 17 00:00:00 2001 From: George Hazan Date: Tue, 24 Mar 2015 18:51:51 +0000 Subject: UI Utils classes & templates moved to the core, thus allowing any plugin to use them git-svn-id: http://svn.miranda-ng.org/main/trunk@12492 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- protocols/JabberG/src/ui_utils.cpp | 2368 ------------------------------------ 1 file changed, 2368 deletions(-) delete mode 100644 protocols/JabberG/src/ui_utils.cpp (limited to 'protocols/JabberG/src/ui_utils.cpp') diff --git a/protocols/JabberG/src/ui_utils.cpp b/protocols/JabberG/src/ui_utils.cpp deleted file mode 100644 index abb205b69b..0000000000 --- a/protocols/JabberG/src/ui_utils.cpp +++ /dev/null @@ -1,2368 +0,0 @@ -/* - -Object UI extensions -Copyright (c) 2008 Victor Pavlychko, George Hazan -Copyright (ñ) 2012-15 Miranda NG project - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program 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 General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ - -#include "jabber.h" - -extern HINSTANCE hInst; - -CDlgBase::CDlgBase(int idDialog, HWND hwndParent) : - m_controls(1, CCtrlBase::cmp) -{ - m_idDialog = idDialog; - m_hwndParent = hwndParent; - m_hwnd = NULL; - m_first = NULL; - m_isModal = false; - m_initialized = false; - m_autoClose = CLOSE_ON_OK|CLOSE_ON_CANCEL; - m_forceResizable = false; -} - -CDlgBase::~CDlgBase() -{ - if (m_hwnd) - DestroyWindow(m_hwnd); -} - -void CDlgBase::Create() -{ - ShowWindow(CreateDialogParam(hInst, MAKEINTRESOURCE(m_idDialog), m_hwndParent, GlobalDlgProc, (LPARAM)(CDlgBase *)this), SW_HIDE); -} - -void CDlgBase::Show(int nCmdShow) -{ - ShowWindow(CreateDialogParam(hInst, MAKEINTRESOURCE(m_idDialog), m_hwndParent, GlobalDlgProc, (LPARAM)(CDlgBase *)this), nCmdShow); -} - -int CDlgBase::DoModal() -{ - m_isModal = true; - return DialogBoxParam(hInst, MAKEINTRESOURCE(m_idDialog), m_hwndParent, GlobalDlgProc, (LPARAM)(CDlgBase *)this); -} - -int CDlgBase::Resizer(UTILRESIZECONTROL*) -{ - return RD_ANCHORX_LEFT|RD_ANCHORY_TOP; -} - -INT_PTR CDlgBase::DlgProc(UINT msg, WPARAM wParam, LPARAM lParam) -{ - switch (msg) { - case WM_INITDIALOG: - m_initialized = false; - TranslateDialogDefault(m_hwnd); - { - for (CCtrlBase* p = m_first; p != NULL; p = p->m_next) - AddControl(p); - } - NotifyControls(&CCtrlBase::OnInit); - OnInitDialog(); - - m_initialized = true; - return TRUE; - - case WM_MEASUREITEM: - { - MEASUREITEMSTRUCT *param = (MEASUREITEMSTRUCT *)lParam; - if (param && param->CtlID) - if (CCtrlBase *ctrl = FindControl(param->CtlID)) - return ctrl->OnMeasureItem(param); - } - return FALSE; - - case WM_DRAWITEM: - { - DRAWITEMSTRUCT *param = (DRAWITEMSTRUCT *)lParam; - if (param && param->CtlID) - if (CCtrlBase *ctrl = FindControl(param->CtlID)) - return ctrl->OnDrawItem(param); - } - return FALSE; - - case WM_DELETEITEM: - { - DELETEITEMSTRUCT *param = (DELETEITEMSTRUCT *)lParam; - if (param && param->CtlID) - if (CCtrlBase *ctrl = FindControl(param->CtlID)) - return ctrl->OnDeleteItem(param); - } - return FALSE; - - case WM_COMMAND: - { - HWND hwndCtrl = (HWND)lParam; - WORD idCtrl = LOWORD(wParam); - WORD idCode = HIWORD(wParam); - if (CCtrlBase *ctrl = FindControl(idCtrl)) { - BOOL result = ctrl->OnCommand(hwndCtrl, idCtrl, idCode); - if (result != FALSE) - return result; - } - - if (idCode == BN_CLICKED && - ((idCtrl == IDOK) && (m_autoClose & CLOSE_ON_OK) || - (idCtrl == IDCANCEL) && (m_autoClose & CLOSE_ON_CANCEL))) - { - PostMessage(m_hwnd, WM_CLOSE, 0, 0); - } - return FALSE; - } - - case WM_NOTIFY: - { - int idCtrl = wParam; - NMHDR *pnmh = (NMHDR *)lParam; - if (pnmh->idFrom == 0) { - if (pnmh->code == PSN_APPLY) { - NotifyControls(&CCtrlBase::OnApply); - OnApply(); - } - else if (pnmh->code == PSN_RESET) { - NotifyControls(&CCtrlBase::OnReset); - OnReset(); - } - } - - if (CCtrlBase *ctrl = FindControl(pnmh->idFrom)) - return ctrl->OnNotify(idCtrl, pnmh); - return FALSE; - } - - case WM_SIZE: - if (m_forceResizable || (GetWindowLongPtr(m_hwnd, GWL_STYLE) & WS_SIZEBOX)) { - UTILRESIZEDIALOG urd; - urd.cbSize = sizeof(urd); - urd.hwndDlg = m_hwnd; - urd.hInstance = hInst; - urd.lpTemplate = MAKEINTRESOURCEA(m_idDialog); - urd.lParam = 0; - urd.pfnResizer = GlobalDlgResizer; - CallService(MS_UTILS_RESIZEDIALOG, 0, (LPARAM)&urd); - } - return TRUE; - - case WM_CLOSE: - m_lresult = FALSE; - OnClose(); - if (!m_lresult) { - if (m_isModal) - EndDialog(m_hwnd, 0); - else - DestroyWindow(m_hwnd); - } - return TRUE; - - case WM_DESTROY: - OnDestroy(); - NotifyControls(&CCtrlBase::OnDestroy); - - SetWindowLongPtr(m_hwnd, GWLP_USERDATA, 0); - m_hwnd = NULL; - if (m_isModal) - m_isModal = false; - else // modeless dialogs MUST be allocated with 'new' - delete this; - - return TRUE; - } - - return FALSE; -} - -INT_PTR CALLBACK CDlgBase::GlobalDlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - CDlgBase *wnd = NULL; - if (msg == WM_INITDIALOG) { - SetWindowLongPtr(hwnd, GWLP_USERDATA, lParam); - wnd = (CDlgBase *)lParam; - wnd->m_hwnd = hwnd; - } - else wnd = (CDlgBase *)GetWindowLongPtr(hwnd, GWLP_USERDATA); - - if (!wnd) - return FALSE; - - wnd->m_msg.hwnd = hwnd; - wnd->m_msg.message = msg; - wnd->m_msg.wParam = wParam; - wnd->m_msg.lParam = lParam; - return wnd->DlgProc(msg, wParam, lParam); -} - -int CDlgBase::GlobalDlgResizer(HWND hwnd, LPARAM, UTILRESIZECONTROL *urc) -{ - CDlgBase *wnd = (CDlgBase *)GetWindowLongPtr(hwnd, GWLP_USERDATA); - return (wnd == NULL) ? 0 : wnd->Resizer(urc); -} - -void CDlgBase::ThemeDialogBackground(BOOL tabbed) -{ - EnableThemeDialogTexture(m_hwnd, (tabbed ? ETDT_ENABLE : ETDT_DISABLE) | ETDT_USETABTEXTURE); -} - -void CDlgBase::AddControl(CCtrlBase *ctrl) -{ - m_controls.insert(ctrl); -} - -void CDlgBase::NotifyControls(void (CCtrlBase::*fn)()) -{ - for (int i=0; i < m_controls.getCount(); i++) - (m_controls[i]->*fn)(); -} - -CCtrlBase* CDlgBase::FindControl(int idCtrl) -{ - CCtrlBase search(NULL, idCtrl); - return m_controls.find(&search); -} - -///////////////////////////////////////////////////////////////////////////////////////// -// CCtrlCombo class - -CCtrlCombo::CCtrlCombo(CDlgBase* dlg, int ctrlId) : - CCtrlData(dlg, ctrlId) -{ -} - -int CCtrlCombo::AddString(const TCHAR *text, LPARAM data) -{ - int iItem = SendMessage(m_hwnd, CB_ADDSTRING, 0, (LPARAM)text); - if (data) - SendMessage(m_hwnd, CB_SETITEMDATA, iItem, data); - return iItem; -} - -int CCtrlCombo::AddStringA(const char *text, LPARAM data) -{ - int iItem = SendMessageA(m_hwnd, CB_ADDSTRING, 0, (LPARAM)text); - if (data) - SendMessage(m_hwnd, CB_SETITEMDATA, iItem, data); - return iItem; -} - -void CCtrlCombo::DeleteString(int index) -{ SendMessage(m_hwnd, CB_DELETESTRING, index, 0); -} - -int CCtrlCombo::FindString(const TCHAR *str, int index, bool exact) -{ return SendMessage(m_hwnd, exact?CB_FINDSTRINGEXACT:CB_FINDSTRING, index, (LPARAM)str); -} - -int CCtrlCombo::FindStringA(const char *str, int index, bool exact) -{ return SendMessageA(m_hwnd, exact?CB_FINDSTRINGEXACT:CB_FINDSTRING, index, (LPARAM)str); -} - -int CCtrlCombo::GetCount() -{ return SendMessage(m_hwnd, CB_GETCOUNT, 0, 0); -} - -int CCtrlCombo::GetCurSel() -{ return SendMessage(m_hwnd, CB_GETCURSEL, 0, 0); -} - -bool CCtrlCombo::GetDroppedState() -{ return SendMessage(m_hwnd, CB_GETDROPPEDSTATE, 0, 0) ? true : false; -} - -LPARAM CCtrlCombo::GetItemData(int index) -{ return SendMessage(m_hwnd, CB_GETITEMDATA, index, 0); -} - -TCHAR* CCtrlCombo::GetItemText(int index) -{ - TCHAR *result = (TCHAR *)mir_alloc(sizeof(TCHAR) * (SendMessage(m_hwnd, CB_GETLBTEXTLEN, index, 0) + 1)); - SendMessage(m_hwnd, CB_GETLBTEXT, index, (LPARAM)result); - return result; -} - -TCHAR* CCtrlCombo::GetItemText(int index, TCHAR *buf, int size) -{ - TCHAR *result = (TCHAR *)_alloca(sizeof(TCHAR) * (SendMessage(m_hwnd, CB_GETLBTEXTLEN, index, 0) + 1)); - SendMessage(m_hwnd, CB_GETLBTEXT, index, (LPARAM)result); - mir_tstrncpy(buf, result, size); - return buf; -} - -int CCtrlCombo::InsertString(TCHAR *text, int pos, LPARAM data) -{ - int iItem = SendMessage(m_hwnd, CB_INSERTSTRING, pos, (LPARAM)text); - SendMessage(m_hwnd, CB_SETITEMDATA, iItem, data); - return iItem; -} - -void CCtrlCombo::ResetContent() -{ SendMessage(m_hwnd, CB_RESETCONTENT, 0, 0); -} - -int CCtrlCombo::SelectString(TCHAR *str) -{ return SendMessage(m_hwnd, CB_SELECTSTRING, 0, (LPARAM)str); -} - -int CCtrlCombo::SetCurSel(int index) -{ return SendMessage(m_hwnd, CB_SETCURSEL, index, 0); -} - -void CCtrlCombo::SetItemData(int index, LPARAM data) -{ SendMessage(m_hwnd, CB_SETITEMDATA, index, data); -} - -void CCtrlCombo::ShowDropdown(bool show) -{ SendMessage(m_hwnd, CB_SHOWDROPDOWN, show ? TRUE : FALSE, 0); -} - -///////////////////////////////////////////////////////////////////////////////////////// -// CCtrlListBox class - -CCtrlListBox::CCtrlListBox(CDlgBase* dlg, int ctrlId) : - CCtrlBase(dlg, ctrlId) -{ -} - -BOOL CCtrlListBox::OnCommand(HWND, WORD, WORD idCode) -{ - switch (idCode) { - case LBN_DBLCLK: OnDblClick(this); break; - case LBN_SELCANCEL: OnSelCancel(this); break; - case LBN_SELCHANGE: OnSelChange(this); break; - } - return TRUE; -} - -int CCtrlListBox::AddString(TCHAR *text, LPARAM data) -{ - int iItem = SendMessage(m_hwnd, LB_ADDSTRING, 0, (LPARAM)text); - SendMessage(m_hwnd, LB_SETITEMDATA, iItem, data); - return iItem; -} - -void CCtrlListBox::DeleteString(int index) -{ SendMessage(m_hwnd, LB_DELETESTRING, index, 0); -} - -int CCtrlListBox::FindString(TCHAR *str, int index, bool exact) -{ return SendMessage(m_hwnd, exact?LB_FINDSTRINGEXACT:LB_FINDSTRING, index, (LPARAM)str); -} - -int CCtrlListBox::GetCount() -{ return SendMessage(m_hwnd, LB_GETCOUNT, 0, 0); -} - -int CCtrlListBox::GetCurSel() -{ return SendMessage(m_hwnd, LB_GETCURSEL, 0, 0); -} - -LPARAM CCtrlListBox::GetItemData(int index) -{ return SendMessage(m_hwnd, LB_GETITEMDATA, index, 0); -} - -TCHAR* CCtrlListBox::GetItemText(int index) -{ - TCHAR *result = (TCHAR *)mir_alloc(sizeof(TCHAR) * (SendMessage(m_hwnd, LB_GETTEXTLEN, index, 0) + 1)); - SendMessage(m_hwnd, LB_GETTEXT, index, (LPARAM)result); - return result; -} - -TCHAR* CCtrlListBox::GetItemText(int index, TCHAR *buf, int size) -{ - TCHAR *result = (TCHAR *)_alloca(sizeof(TCHAR) * (SendMessage(m_hwnd, LB_GETTEXTLEN, index, 0) + 1)); - SendMessage(m_hwnd, LB_GETTEXT, index, (LPARAM)result); - mir_tstrncpy(buf, result, size); - return buf; -} - -bool CCtrlListBox::GetSel(int index) -{ return SendMessage(m_hwnd, LB_GETSEL, index, 0) ? true : false; -} - -int CCtrlListBox::GetSelCount() -{ return SendMessage(m_hwnd, LB_GETSELCOUNT, 0, 0); -} - -int* CCtrlListBox::GetSelItems(int *items, int count) -{ - SendMessage(m_hwnd, LB_GETSELITEMS, count, (LPARAM)items); - return items; -} - -int* CCtrlListBox::GetSelItems() -{ - int count = GetSelCount() + 1; - int *result = (int *)mir_alloc(sizeof(int) * count); - SendMessage(m_hwnd, LB_GETSELITEMS, count, (LPARAM)result); - result[count-1] = -1; - return result; -} - -int CCtrlListBox::InsertString(TCHAR *text, int pos, LPARAM data) -{ - int iItem = SendMessage(m_hwnd, CB_INSERTSTRING, pos, (LPARAM)text); - SendMessage(m_hwnd, CB_SETITEMDATA, iItem, data); - return iItem; -} - -void CCtrlListBox::ResetContent() -{ SendMessage(m_hwnd, LB_RESETCONTENT, 0, 0); -} - -int CCtrlListBox::SelectString(TCHAR *str) -{ return SendMessage(m_hwnd, LB_SELECTSTRING, 0, (LPARAM)str); -} - -int CCtrlListBox::SetCurSel(int index) -{ return SendMessage(m_hwnd, LB_SETCURSEL, index, 0); -} - -void CCtrlListBox::SetItemData(int index, LPARAM data) -{ SendMessage(m_hwnd, LB_SETITEMDATA, index, data); -} - -void CCtrlListBox::SetSel(int index, bool sel) -{ SendMessage(m_hwnd, LB_SETSEL, sel ? TRUE : FALSE, index); -} - -///////////////////////////////////////////////////////////////////////////////////////// -// CCtrlCheck class - -CCtrlCheck::CCtrlCheck(CDlgBase* dlg, int ctrlId) : - CCtrlData(dlg, ctrlId) -{ -} - -int CCtrlCheck::GetState() -{ - return SendMessage(m_hwnd, BM_GETCHECK, 0, 0); -} - -void CCtrlCheck::SetState(int state) -{ - SendMessage(m_hwnd, BM_SETCHECK, state, 0); -} - -///////////////////////////////////////////////////////////////////////////////////////// -// CCtrlEdit class - -CCtrlEdit::CCtrlEdit(CDlgBase* dlg, int ctrlId) : - CCtrlData(dlg, ctrlId) -{ -} - -///////////////////////////////////////////////////////////////////////////////////////// -// CCtrlData class - -CCtrlData::CCtrlData(CDlgBase *wnd, int idCtrl) : - CCtrlBase(wnd, idCtrl), - m_dbLink(NULL) -{ -} - -void CCtrlData::OnInit() -{ - CCtrlBase::OnInit(); - m_changed = false; -} - -void CCtrlData::NotifyChange() -{ - if (!m_parentWnd || m_parentWnd->IsInitialized()) m_changed = true; - if (m_parentWnd) { - m_parentWnd->OnChange(this); - if (m_parentWnd->IsInitialized()) - ::SendMessage(::GetParent(m_parentWnd->GetHwnd()), PSM_CHANGED, 0, 0); - } - - OnChange(this); -} - -void CCtrlData::CreateDbLink(const char* szModuleName, const char* szSetting, BYTE type, DWORD iValue, bool bSigned) -{ - m_dbLink = new CDbLink(szModuleName, szSetting, type, iValue, bSigned); -} - -void CCtrlData::CreateDbLink(const char* szModuleName, const char* szSetting, TCHAR* szValue) -{ - m_dbLink = new CDbLink(szModuleName, szSetting, DBVT_TCHAR, szValue); -} - -///////////////////////////////////////////////////////////////////////////////////////// -// CCtrlMButton - -CCtrlMButton::CCtrlMButton(CDlgBase* dlg, int ctrlId, HICON hIcon, const char* tooltip) : - CCtrlButton(dlg, ctrlId), - m_hIcon(hIcon), - m_toolTip(tooltip) -{ -} - -CCtrlMButton::CCtrlMButton(CDlgBase* dlg, int ctrlId, int iCoreIcon, const char* tooltip) : - CCtrlButton(dlg, ctrlId), - m_hIcon(LoadSkinnedIcon(iCoreIcon)), - m_toolTip(tooltip) -{ -} - -CCtrlMButton::~CCtrlMButton() -{ - g_ReleaseIcon(m_hIcon); -} - -void CCtrlMButton::OnInit() -{ - CCtrlButton::OnInit(); - - SendMessage(m_hwnd, BM_SETIMAGE, IMAGE_ICON, (LPARAM)m_hIcon); - SendMessage(m_hwnd, BUTTONADDTOOLTIP, (WPARAM)m_toolTip, 0); - SendMessage(m_hwnd, BUTTONSETASFLATBTN, (WPARAM)m_toolTip, 0); -} - -void CCtrlMButton::MakeFlat() -{ - SendMessage(m_hwnd, BUTTONSETASFLATBTN, TRUE, 0); -} - -void CCtrlMButton::MakePush() -{ - SendMessage(m_hwnd, BUTTONSETASPUSHBTN, TRUE, 0); -} - -///////////////////////////////////////////////////////////////////////////////////////// -// CCtrlButton - -CCtrlButton::CCtrlButton(CDlgBase* wnd, int idCtrl) : - CCtrlBase(wnd, idCtrl) -{ -} - -BOOL CCtrlButton::OnCommand(HWND, WORD, WORD idCode) -{ - if (idCode == BN_CLICKED || idCode == STN_CLICKED) - OnClick(this); - return FALSE; -} - -///////////////////////////////////////////////////////////////////////////////////////// -// CCtrlHyperlink - -CCtrlHyperlink::CCtrlHyperlink(CDlgBase* wnd, int idCtrl, const char* url) : - CCtrlBase(wnd, idCtrl), - m_url(url) -{ -} - -BOOL CCtrlHyperlink::OnCommand(HWND, WORD, WORD) -{ - ShellExecuteA(m_hwnd, "open", m_url, "", "", SW_SHOW); - return FALSE; -} - -///////////////////////////////////////////////////////////////////////////////////////// -// CCtrlClc -CCtrlClc::CCtrlClc(CDlgBase* dlg, int ctrlId): - CCtrlBase(dlg, ctrlId) -{ -} - -BOOL CCtrlClc::OnNotify(int, NMHDR *pnmh) -{ - TEventInfo evt = { this, (NMCLISTCONTROL *)pnmh }; - switch (pnmh->code) { - case CLN_EXPANDED: OnExpanded(&evt); break; - case CLN_LISTREBUILT: OnListRebuilt(&evt); break; - case CLN_ITEMCHECKED: OnItemChecked(&evt); break; - case CLN_DRAGGING: OnDragging(&evt); break; - case CLN_DROPPED: OnDropped(&evt); break; - case CLN_LISTSIZECHANGE: OnListSizeChange(&evt); break; - case CLN_OPTIONSCHANGED: OnOptionsChanged(&evt); break; - case CLN_DRAGSTOP: OnDragStop(&evt); break; - case CLN_NEWCONTACT: OnNewContact(&evt); break; - case CLN_CONTACTMOVED: OnContactMoved(&evt); break; - case CLN_CHECKCHANGED: OnCheckChanged(&evt); break; - case NM_CLICK: OnClick(&evt); break; - } - return FALSE; -} - -void CCtrlClc::AddContact(MCONTACT hContact) -{ SendMessage(m_hwnd, CLM_ADDCONTACT, hContact, 0); -} - -void CCtrlClc::AddGroup(HANDLE hGroup) -{ SendMessage(m_hwnd, CLM_ADDGROUP, (WPARAM)hGroup, 0); -} - -void CCtrlClc::AutoRebuild() -{ SendMessage(m_hwnd, CLM_AUTOREBUILD, 0, 0); -} - -void CCtrlClc::DeleteItem(HANDLE hItem) -{ SendMessage(m_hwnd, CLM_DELETEITEM, (WPARAM)hItem, 0); -} - -void CCtrlClc::EditLabel(HANDLE hItem) -{ SendMessage(m_hwnd, CLM_EDITLABEL, (WPARAM)hItem, 0); -} - -void CCtrlClc::EndEditLabel(bool save) -{ SendMessage(m_hwnd, CLM_ENDEDITLABELNOW, save ? 0 : 1, 0); -} - -void CCtrlClc::EnsureVisible(HANDLE hItem, bool partialOk) -{ SendMessage(m_hwnd, CLM_ENSUREVISIBLE, (WPARAM)hItem, partialOk ? TRUE : FALSE); -} - -void CCtrlClc::Expand(HANDLE hItem, DWORD flags) -{ SendMessage(m_hwnd, CLM_EXPAND, (WPARAM)hItem, flags); -} - -HANDLE CCtrlClc::FindContact(MCONTACT hContact) -{ return (HANDLE)SendMessage(m_hwnd, CLM_FINDCONTACT, hContact, 0); -} - -HANDLE CCtrlClc::FindGroup(HANDLE hGroup) -{ return (HANDLE)SendMessage(m_hwnd, CLM_FINDGROUP, (WPARAM)hGroup, 0); -} - -COLORREF CCtrlClc::GetBkColor() -{ return (COLORREF)SendMessage(m_hwnd, CLM_GETBKCOLOR, 0, 0); -} - -bool CCtrlClc::GetCheck(HANDLE hItem) -{ return SendMessage(m_hwnd, CLM_GETCHECKMARK, (WPARAM)hItem, 0) ? true : false; -} - -int CCtrlClc::GetCount() -{ return SendMessage(m_hwnd, CLM_GETCOUNT, 0, 0); -} - -HWND CCtrlClc::GetEditControl() -{ return (HWND)SendMessage(m_hwnd, CLM_GETEDITCONTROL, 0, 0); -} - -DWORD CCtrlClc::GetExpand(HANDLE hItem) -{ return SendMessage(m_hwnd, CLM_GETEXPAND, (WPARAM)hItem, 0); -} - -int CCtrlClc::GetExtraColumns() -{ return SendMessage(m_hwnd, CLM_GETEXTRACOLUMNS, 0, 0); -} - -BYTE CCtrlClc::GetExtraImage(HANDLE hItem, int iColumn) -{ return (BYTE)(SendMessage(m_hwnd, CLM_GETEXTRAIMAGE, (WPARAM)hItem, MAKELPARAM(iColumn, 0)) & EMPTY_EXTRA_ICON); -} - -HIMAGELIST CCtrlClc::GetExtraImageList() -{ return (HIMAGELIST)SendMessage(m_hwnd, CLM_GETEXTRAIMAGELIST, 0, 0); -} - -HFONT CCtrlClc::GetFont(int iFontId) -{ return (HFONT)SendMessage(m_hwnd, CLM_GETFONT, (WPARAM)iFontId, 0); -} - -HANDLE CCtrlClc::GetSelection() -{ return (HANDLE)SendMessage(m_hwnd, CLM_GETSELECTION, 0, 0); -} - -HANDLE CCtrlClc::HitTest(int x, int y, DWORD *hitTest) -{ return (HANDLE)SendMessage(m_hwnd, CLM_HITTEST, (WPARAM)hitTest, MAKELPARAM(x,y)); -} - -void CCtrlClc::SelectItem(HANDLE hItem) -{ SendMessage(m_hwnd, CLM_SELECTITEM, (WPARAM)hItem, 0); -} - -void CCtrlClc::SetBkBitmap(DWORD mode, HBITMAP hBitmap) -{ SendMessage(m_hwnd, CLM_SETBKBITMAP, mode, (LPARAM)hBitmap); -} - -void CCtrlClc::SetBkColor(COLORREF clBack) -{ SendMessage(m_hwnd, CLM_SETBKCOLOR, (WPARAM)clBack, 0); -} - -void CCtrlClc::SetCheck(HANDLE hItem, bool check) -{ SendMessage(m_hwnd, CLM_SETCHECKMARK, (WPARAM)hItem, check ? 1 : 0); -} - -void CCtrlClc::SetExtraColumns(int iColumns) -{ SendMessage(m_hwnd, CLM_SETEXTRACOLUMNS, (WPARAM)iColumns, 0); -} - -void CCtrlClc::SetExtraImage(HANDLE hItem, int iColumn, int iImage) -{ SendMessage(m_hwnd, CLM_SETEXTRAIMAGE, (WPARAM)hItem, MAKELPARAM(iColumn, iImage)); -} - -void CCtrlClc::SetExtraImageList(HIMAGELIST hImgList) -{ SendMessage(m_hwnd, CLM_SETEXTRAIMAGELIST, 0, (LPARAM)hImgList); -} - -void CCtrlClc::SetFont(int iFontId, HANDLE hFont, bool bRedraw) -{ SendMessage(m_hwnd, CLM_SETFONT, (WPARAM)hFont, MAKELPARAM(bRedraw ? 1 : 0, iFontId)); -} - -void CCtrlClc::SetIndent(int iIndent) -{ SendMessage(m_hwnd, CLM_SETINDENT, (WPARAM)iIndent, 0); -} - -void CCtrlClc::SetItemText(HANDLE hItem, char *szText) -{ SendMessage(m_hwnd, CLM_SETITEMTEXT, (WPARAM)hItem, (LPARAM)szText); -} - -void CCtrlClc::SetHideEmptyGroups(bool state) -{ SendMessage(m_hwnd, CLM_SETHIDEEMPTYGROUPS, state ? 1 : 0, 0); -} - -void CCtrlClc::SetGreyoutFlags(DWORD flags) -{ SendMessage(m_hwnd, CLM_SETGREYOUTFLAGS, (WPARAM)flags, 0); -} - -bool CCtrlClc::GetHideOfflineRoot() -{ return SendMessage(m_hwnd, CLM_GETHIDEOFFLINEROOT, 0, 0) ? true : false; -} - -void CCtrlClc::SetHideOfflineRoot(bool state) -{ SendMessage(m_hwnd, CLM_SETHIDEOFFLINEROOT, state ? 1 : 0, 9); -} - -void CCtrlClc::SetUseGroups(bool state) -{ SendMessage(m_hwnd, CLM_SETUSEGROUPS, state ? 1 : 0, 0); -} - -void CCtrlClc::SetOfflineModes(DWORD modes) -{ SendMessage(m_hwnd, CLM_SETOFFLINEMODES, modes, 0); -} - -DWORD CCtrlClc::GetExStyle() -{ return SendMessage(m_hwnd, CLM_GETEXSTYLE, 0, 0); -} - -void CCtrlClc::SetExStyle(DWORD exStyle) -{ SendMessage(m_hwnd, CLM_SETEXSTYLE, (WPARAM)exStyle, 0); -} - -int CCtrlClc::GetLefrMargin() -{ return SendMessage(m_hwnd, CLM_GETLEFTMARGIN, 0, 0); -} - -void CCtrlClc::SetLeftMargin(int iMargin) -{ SendMessage(m_hwnd, CLM_SETLEFTMARGIN, (WPARAM)iMargin, 0); -} - -HANDLE CCtrlClc::AddInfoItem(CLCINFOITEM *cii) -{ return (HANDLE)SendMessage(m_hwnd, CLM_ADDINFOITEM, 0, (LPARAM)cii); -} - -int CCtrlClc::GetItemType(HANDLE hItem) -{ return SendMessage(m_hwnd, CLM_GETITEMTYPE, (WPARAM)hItem, 0); -} - -HANDLE CCtrlClc::GetNextItem(HANDLE hItem, DWORD flags) -{ return (HANDLE)SendMessage(m_hwnd, CLM_GETNEXTITEM, (WPARAM)flags, (LPARAM)hItem); -} - -COLORREF CCtrlClc::GetTextColot(int iFontId) -{ return (COLORREF)SendMessage(m_hwnd, CLM_GETTEXTCOLOR, (WPARAM)iFontId, 0); -} - -void CCtrlClc::SetTextColor(int iFontId, COLORREF clText) -{ SendMessage(m_hwnd, CLM_SETTEXTCOLOR, (WPARAM)iFontId, (LPARAM)clText); -} - -///////////////////////////////////////////////////////////////////////////////////////// -// CCtrlListView - -CCtrlListView::CCtrlListView(CDlgBase* dlg, int ctrlId) : - CCtrlBase(dlg, ctrlId) -{ -} - -BOOL CCtrlListView::OnNotify(int, NMHDR *pnmh) -{ - TEventInfo evt = { this, pnmh }; - - switch (pnmh->code) { - case NM_DBLCLK: OnDoubleClick(&evt); return TRUE; - case LVN_BEGINDRAG: OnBeginDrag(&evt); return TRUE; - case LVN_BEGINLABELEDIT: OnBeginLabelEdit(&evt); return TRUE; - case LVN_BEGINRDRAG: OnBeginRDrag(&evt); return TRUE; - case LVN_BEGINSCROLL: OnBeginScroll(&evt); return TRUE; - case LVN_COLUMNCLICK: OnColumnClick(&evt); return TRUE; - case LVN_DELETEALLITEMS: OnDeleteAllItems(&evt); return TRUE; - case LVN_DELETEITEM: OnDeleteItem(&evt); return TRUE; - case LVN_ENDLABELEDIT: OnEndLabelEdit(&evt); return TRUE; - case LVN_ENDSCROLL: OnEndScroll(&evt); return TRUE; - case LVN_GETDISPINFO: OnGetDispInfo(&evt); return TRUE; - case LVN_GETINFOTIP: OnGetInfoTip(&evt); return TRUE; - case LVN_HOTTRACK: OnHotTrack(&evt); return TRUE; - //case LVN_INCREMENTALSEARCH: OnIncrementalSearch(&evt); return TRUE; - case LVN_INSERTITEM: OnInsertItem(&evt); return TRUE; - case LVN_ITEMACTIVATE: OnItemActivate(&evt); return TRUE; - case LVN_ITEMCHANGED: OnItemChanged(&evt); return TRUE; - case LVN_ITEMCHANGING: OnItemChanging(&evt); return TRUE; - case LVN_KEYDOWN: OnKeyDown(&evt); return TRUE; - case LVN_MARQUEEBEGIN: OnMarqueeBegin(&evt); return TRUE; - case LVN_SETDISPINFO: OnSetDispInfo(&evt); return TRUE; - } - - return FALSE; -} - -// additional api -HIMAGELIST CCtrlListView::CreateImageList(int iImageList) -{ - HIMAGELIST hIml; - if (hIml = GetImageList(iImageList)) - return hIml; - - hIml = ImageList_Create(16, 16, ILC_COLOR32 | ILC_MASK, 0, 1); - SetImageList(hIml, iImageList); - return hIml; -} - -void CCtrlListView::AddColumn(int iSubItem, TCHAR *name, int cx) -{ - LVCOLUMN lvc; - lvc.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM; - lvc.iImage = 0; - lvc.pszText = name; - lvc.cx = cx; - lvc.iSubItem = iSubItem; - InsertColumn(iSubItem, &lvc); -} - -void CCtrlListView::AddGroup(int iGroupId, TCHAR *name) -{ - LVGROUP lvg = {0}; - lvg.cbSize = sizeof(lvg); - lvg.mask = LVGF_HEADER | LVGF_GROUPID; - lvg.pszHeader = name; - lvg.cchHeader = (int)mir_tstrlen(lvg.pszHeader); - lvg.iGroupId = iGroupId; - InsertGroup(-1, &lvg); -} - -int CCtrlListView::AddItem(TCHAR *text, int iIcon, LPARAM lParam, int iGroupId) -{ - LVITEM lvi = {0}; - lvi.mask = LVIF_PARAM | LVIF_TEXT | LVIF_IMAGE; - lvi.iSubItem = 0; - lvi.pszText = text; - lvi.iImage = iIcon; - lvi.lParam = lParam; - if (iGroupId >= 0) { - lvi.mask |= LVIF_GROUPID; - lvi.iGroupId = iGroupId; - } - - return InsertItem(&lvi); -} - -void CCtrlListView::SetItem(int iItem, int iSubItem, TCHAR *text, int iIcon) -{ - LVITEM lvi = {0}; - lvi.mask = LVIF_TEXT; - lvi.iItem = iItem; - lvi.iSubItem = iSubItem; - lvi.pszText = text; - if (iIcon >= 0) { - lvi.mask |= LVIF_IMAGE; - lvi.iImage = iIcon; - } - - SetItem(&lvi); -} - -LPARAM CCtrlListView::GetItemData(int iItem) -{ - LVITEM lvi = {0}; - lvi.mask = LVIF_PARAM; - lvi.iItem = iItem; - GetItem(&lvi); - return lvi.lParam; -} - -// classic api -DWORD CCtrlListView::ApproximateViewRect(int cx, int cy, int iCount) -{ return ListView_ApproximateViewRect(m_hwnd, cx, cy, iCount); -} -void CCtrlListView::Arrange(UINT code) -{ ListView_Arrange(m_hwnd, code); -} -void CCtrlListView::CancelEditLabel() -{ ListView_CancelEditLabel(m_hwnd); -} -HIMAGELIST CCtrlListView::CreateDragImage(int iItem, LPPOINT lpptUpLeft) -{ return ListView_CreateDragImage(m_hwnd, iItem, lpptUpLeft); -} -void CCtrlListView::DeleteAllItems() -{ ListView_DeleteAllItems(m_hwnd); -} -void CCtrlListView::DeleteColumn(int iCol) -{ ListView_DeleteColumn(m_hwnd, iCol); -} -void CCtrlListView::DeleteItem(int iItem) -{ ListView_DeleteItem(m_hwnd, iItem); -} -HWND CCtrlListView::EditLabel(int iItem) -{ return ListView_EditLabel(m_hwnd, iItem); -} -int CCtrlListView::EnableGroupView(BOOL fEnable) -{ return ListView_EnableGroupView(m_hwnd, fEnable); -} -BOOL CCtrlListView::EnsureVisible(int i, BOOL fPartialOK) -{ return ListView_EnsureVisible(m_hwnd, i, fPartialOK); -} -int CCtrlListView::FindItem(int iStart, const LVFINDINFO *plvfi) -{ return ListView_FindItem(m_hwnd, iStart, plvfi); -} -COLORREF CCtrlListView::GetBkColor() -{ return ListView_GetBkColor(m_hwnd); -} -void CCtrlListView::GetBkImage(LPLVBKIMAGE plvbki) -{ ListView_GetBkImage(m_hwnd, plvbki); -} -UINT CCtrlListView::GetCallbackMask() -{ return ListView_GetCallbackMask(m_hwnd); -} -BOOL CCtrlListView::GetCheckState(UINT iIndex) -{ return ListView_GetCheckState(m_hwnd, iIndex); -} -void CCtrlListView::GetColumn(int iCol, LPLVCOLUMN pcol) -{ ListView_GetColumn(m_hwnd, iCol, pcol); -} -void CCtrlListView::GetColumnOrderArray(int iCount, int *lpiArray) -{ ListView_GetColumnOrderArray(m_hwnd, iCount, lpiArray); -} -int CCtrlListView::GetColumnWidth(int iCol) -{ return ListView_GetColumnWidth(m_hwnd, iCol); -} -int CCtrlListView::GetCountPerPage() -{ return ListView_GetCountPerPage(m_hwnd); -} -HWND CCtrlListView::GetEditControl() -{ return ListView_GetEditControl(m_hwnd); -} -DWORD CCtrlListView::GetExtendedListViewStyle() -{ return ListView_GetExtendedListViewStyle(m_hwnd); -} -void CCtrlListView::GetGroupMetrics(LVGROUPMETRICS *pGroupMetrics) -{ ListView_GetGroupMetrics(m_hwnd, pGroupMetrics); -} -HWND CCtrlListView::GetHeader() -{ return ListView_GetHeader(m_hwnd); -} -HCURSOR CCtrlListView::GetHotCursor() -{ return ListView_GetHotCursor(m_hwnd); -} -INT CCtrlListView::GetHotItem() -{ return ListView_GetHotItem(m_hwnd); -} -DWORD CCtrlListView::GetHoverTime() -{ return ListView_GetHoverTime(m_hwnd); -} -HIMAGELIST CCtrlListView::GetImageList(int iImageList) -{ return ListView_GetImageList(m_hwnd, iImageList); -} -BOOL CCtrlListView::GetInsertMark(LVINSERTMARK *plvim) -{ return ListView_GetInsertMark(m_hwnd, plvim); -} -COLORREF CCtrlListView::GetInsertMarkColor() -{ return ListView_GetInsertMarkColor(m_hwnd); -} -int CCtrlListView::GetInsertMarkRect(LPRECT prc) -{ return ListView_GetInsertMarkRect(m_hwnd, prc); -} -BOOL CCtrlListView::GetISearchString(LPSTR lpsz) -{ return ListView_GetISearchString(m_hwnd, lpsz); -} -void CCtrlListView::GetItem(LPLVITEM pitem) -{ ListView_GetItem(m_hwnd, pitem); -} -int CCtrlListView::GetItemCount() -{ return ListView_GetItemCount(m_hwnd); -} -void CCtrlListView::GetItemPosition(int i, POINT *ppt) -{ ListView_GetItemPosition(m_hwnd, i, ppt); -} -void CCtrlListView::GetItemRect(int i, RECT *prc, int code) -{ ListView_GetItemRect(m_hwnd, i, prc, code); -} -DWORD CCtrlListView::GetItemSpacing(BOOL fSmall) -{ return ListView_GetItemSpacing(m_hwnd, fSmall); -} -UINT CCtrlListView::GetItemState(int i, UINT mask) -{ return ListView_GetItemState(m_hwnd, i, mask); -} -void CCtrlListView::GetItemText(int iItem, int iSubItem, LPTSTR pszText, int cchTextMax) -{ ListView_GetItemText(m_hwnd, iItem, iSubItem, pszText, cchTextMax); -} -int CCtrlListView::GetNextItem(int iStart, UINT flags) -{ return ListView_GetNextItem(m_hwnd, iStart, flags); -} -BOOL CCtrlListView::GetNumberOfWorkAreas(LPUINT lpuWorkAreas) -{ return ListView_GetNumberOfWorkAreas(m_hwnd, lpuWorkAreas); -} -BOOL CCtrlListView::GetOrigin(LPPOINT lpptOrg) -{ return ListView_GetOrigin(m_hwnd, lpptOrg); -} -COLORREF CCtrlListView::GetOutlineColor() -{ return ListView_GetOutlineColor(m_hwnd); -} -UINT CCtrlListView::GetSelectedColumn() -{ return ListView_GetSelectedColumn(m_hwnd); -} -UINT CCtrlListView::GetSelectedCount() -{ return ListView_GetSelectedCount(m_hwnd); -} -INT CCtrlListView::GetSelectionMark() -{ return ListView_GetSelectionMark(m_hwnd); -} -int CCtrlListView::GetStringWidth(LPCSTR psz) -{ return ListView_GetStringWidth(m_hwnd, psz); -} -BOOL CCtrlListView::GetSubItemRect(int iItem, int iSubItem, int code, LPRECT lpRect) -{ return ListView_GetSubItemRect(m_hwnd, iItem, iSubItem, code, lpRect); -} -COLORREF CCtrlListView::GetTextBkColor() -{ return ListView_GetTextBkColor(m_hwnd); -} -COLORREF CCtrlListView::GetTextColor() -{ return ListView_GetTextColor(m_hwnd); -} -void CCtrlListView::GetTileInfo(PLVTILEINFO plvtinfo) -{ ListView_GetTileInfo(m_hwnd, plvtinfo); -} -void CCtrlListView::GetTileViewInfo(PLVTILEVIEWINFO plvtvinfo) -{ ListView_GetTileViewInfo(m_hwnd, plvtvinfo); -} -HWND CCtrlListView::GetToolTips() -{ return ListView_GetToolTips(m_hwnd); -} -int CCtrlListView::GetTopIndex() -{ return ListView_GetTopIndex(m_hwnd); -} -BOOL CCtrlListView::GetUnicodeFormat() -{ return ListView_GetUnicodeFormat(m_hwnd); -} -DWORD CCtrlListView::GetView() -{ return ListView_GetView(m_hwnd); -} -BOOL CCtrlListView::GetViewRect(RECT *prc) -{ return ListView_GetViewRect(m_hwnd, prc); -} -void CCtrlListView::GetWorkAreas(INT nWorkAreas, LPRECT lprc) -{ ListView_GetWorkAreas(m_hwnd, nWorkAreas, lprc); -} -BOOL CCtrlListView::HasGroup(int dwGroupId) -{ return ListView_HasGroup(m_hwnd, dwGroupId); -} -int CCtrlListView::HitTest(LPLVHITTESTINFO pinfo) -{ return ListView_HitTest(m_hwnd, pinfo); -} -int CCtrlListView::InsertColumn(int iCol, const LPLVCOLUMN pcol) -{ return ListView_InsertColumn(m_hwnd, iCol, pcol); -} -int CCtrlListView::InsertGroup(int index, PLVGROUP pgrp) -{ return ListView_InsertGroup(m_hwnd, index, pgrp); -} -void CCtrlListView::InsertGroupSorted(PLVINSERTGROUPSORTED structInsert) -{ ListView_InsertGroupSorted(m_hwnd, structInsert); -} -int CCtrlListView::InsertItem(const LPLVITEM pitem) -{ return ListView_InsertItem(m_hwnd, pitem); -} -BOOL CCtrlListView::InsertMarkHitTest(LPPOINT point, LVINSERTMARK *plvim) -{ return ListView_InsertMarkHitTest(m_hwnd, point, plvim); -} -BOOL CCtrlListView::IsGroupViewEnabled() -{ return ListView_IsGroupViewEnabled(m_hwnd); -} -UINT CCtrlListView::MapIDToIndex(UINT id) -{ return ListView_MapIDToIndex(m_hwnd, id); -} -UINT CCtrlListView::MapIndexToID(UINT index) -{ return ListView_MapIndexToID(m_hwnd, index); -} -BOOL CCtrlListView::RedrawItems(int iFirst, int iLast) -{ return ListView_RedrawItems(m_hwnd, iFirst, iLast); -} -void CCtrlListView::RemoveAllGroups() -{ ListView_RemoveAllGroups(m_hwnd); -} -int CCtrlListView::RemoveGroup(int iGroupId) -{ return ListView_RemoveGroup(m_hwnd, iGroupId); -} -BOOL CCtrlListView::Scroll(int dx, int dy) -{ return ListView_Scroll(m_hwnd, dx, dy); -} -BOOL CCtrlListView::SetBkColor(COLORREF clrBk) -{ return ListView_SetBkColor(m_hwnd, clrBk); -} -BOOL CCtrlListView::SetBkImage(LPLVBKIMAGE plvbki) -{ return ListView_SetBkImage(m_hwnd, plvbki); -} -BOOL CCtrlListView::SetCallbackMask(UINT mask) -{ return ListView_SetCallbackMask(m_hwnd, mask); -} -void CCtrlListView::SetCheckState(UINT iIndex, BOOL fCheck) -{ ListView_SetCheckState(m_hwnd, iIndex, fCheck); -} -BOOL CCtrlListView::SetColumn(int iCol, LPLVCOLUMN pcol) -{ return ListView_SetColumn(m_hwnd, iCol, pcol); -} -BOOL CCtrlListView::SetColumnOrderArray(int iCount, int *lpiArray) -{ return ListView_SetColumnOrderArray(m_hwnd, iCount, lpiArray); -} -BOOL CCtrlListView::SetColumnWidth(int iCol, int cx) -{ return ListView_SetColumnWidth(m_hwnd, iCol, cx); -} -void CCtrlListView::SetExtendedListViewStyle(DWORD dwExStyle) -{ ListView_SetExtendedListViewStyle(m_hwnd, dwExStyle); -} -void CCtrlListView::SetExtendedListViewStyleEx(DWORD dwExMask, DWORD dwExStyle) -{ ListView_SetExtendedListViewStyleEx(m_hwnd, dwExMask, dwExStyle); -} -int CCtrlListView::SetGroupInfo(int iGroupId, PLVGROUP pgrp) -{ return ListView_SetGroupInfo(m_hwnd, iGroupId, pgrp); -} -void CCtrlListView::SetGroupMetrics(PLVGROUPMETRICS pGroupMetrics) -{ ListView_SetGroupMetrics(m_hwnd, pGroupMetrics); -} -HCURSOR CCtrlListView::SetHotCursor(HCURSOR hCursor) -{ return ListView_SetHotCursor(m_hwnd, hCursor); -} -INT CCtrlListView::SetHotItem(INT iIndex) -{ return ListView_SetHotItem(m_hwnd, iIndex); -} -void CCtrlListView::SetHoverTime(DWORD dwHoverTime) -{ ListView_SetHoverTime(m_hwnd, dwHoverTime); -} -DWORD CCtrlListView::SetIconSpacing(int cx, int cy) -{ return ListView_SetIconSpacing(m_hwnd, cx, cy); -} -HIMAGELIST CCtrlListView::SetImageList(HIMAGELIST himl, int iImageList) -{ return ListView_SetImageList(m_hwnd, himl, iImageList); -} -BOOL CCtrlListView::SetInfoTip(PLVSETINFOTIP plvSetInfoTip) -{ return ListView_SetInfoTip(m_hwnd, plvSetInfoTip); -} -BOOL CCtrlListView::SetInsertMark(LVINSERTMARK *plvim) -{ return ListView_SetInsertMark(m_hwnd, plvim); -} -COLORREF CCtrlListView::SetInsertMarkColor(COLORREF color) -{ return ListView_SetInsertMarkColor(m_hwnd, color); -} -BOOL CCtrlListView::SetItem(const LPLVITEM pitem) -{ return ListView_SetItem(m_hwnd, pitem); -} -void CCtrlListView::SetItemCount(int cItems) -{ ListView_SetItemCount(m_hwnd, cItems); -} -void CCtrlListView::SetItemCountEx(int cItems, DWORD dwFlags) -{ ListView_SetItemCountEx(m_hwnd, cItems, dwFlags); -} -BOOL CCtrlListView::SetItemPosition(int i, int x, int y) -{ return ListView_SetItemPosition(m_hwnd, i, x, y); -} -void CCtrlListView::SetItemPosition32(int iItem, int x, int y) -{ ListView_SetItemPosition32(m_hwnd, iItem, x, y); -} -void CCtrlListView::SetItemState(int i, UINT state, UINT mask) -{ ListView_SetItemState(m_hwnd, i, state, mask); -} -void CCtrlListView::SetItemText(int i, int iSubItem, TCHAR *pszText) -{ ListView_SetItemText(m_hwnd, i, iSubItem, pszText); -} -COLORREF CCtrlListView::SetOutlineColor(COLORREF color) -{ return ListView_SetOutlineColor(m_hwnd, color); -} -void CCtrlListView::SetSelectedColumn(int iCol) -{ ListView_SetSelectedColumn(m_hwnd, iCol); -} -INT CCtrlListView::SetSelectionMark(INT iIndex) -{ return ListView_SetSelectionMark(m_hwnd, iIndex); -} -BOOL CCtrlListView::SetTextBkColor(COLORREF clrText) -{ return ListView_SetTextBkColor(m_hwnd, clrText); -} -BOOL CCtrlListView::SetTextColor(COLORREF clrText) -{ return ListView_SetTextColor(m_hwnd, clrText); -} -BOOL CCtrlListView::SetTileInfo(PLVTILEINFO plvtinfo) -{ return ListView_SetTileInfo(m_hwnd, plvtinfo); -} -BOOL CCtrlListView::SetTileViewInfo(PLVTILEVIEWINFO plvtvinfo) -{ return ListView_SetTileViewInfo(m_hwnd, plvtvinfo); -} -HWND CCtrlListView::SetToolTips(HWND ToolTip) -{ return ListView_SetToolTips(m_hwnd, ToolTip); -} -BOOL CCtrlListView::SetUnicodeFormat(BOOL fUnicode) -{ return ListView_SetUnicodeFormat(m_hwnd, fUnicode); -} -int CCtrlListView::SetView(DWORD iView) -{ return ListView_SetView(m_hwnd, iView); -} -void CCtrlListView::SetWorkAreas(INT nWorkAreas, LPRECT lprc) -{ ListView_SetWorkAreas(m_hwnd, nWorkAreas, lprc); -} -int CCtrlListView::SortGroups(PFNLVGROUPCOMPARE pfnGroupCompare, LPVOID plv) -{ return ListView_SortGroups(m_hwnd, pfnGroupCompare, plv); -} -BOOL CCtrlListView::SortItems(PFNLVCOMPARE pfnCompare, LPARAM lParamSort) -{ return ListView_SortItems(m_hwnd, pfnCompare, lParamSort); -} -BOOL CCtrlListView::SortItemsEx(PFNLVCOMPARE pfnCompare, LPARAM lParamSort) -{ return ListView_SortItemsEx(m_hwnd, pfnCompare, lParamSort); -} -INT CCtrlListView::SubItemHitTest(LPLVHITTESTINFO pInfo) -{ return ListView_SubItemHitTest(m_hwnd, pInfo); -} -//INT CCtrlListView::SubItemHitTestEx(LPLVHITTESTINFO plvhti) -//{ return ListView_SubItemHitTestEx(m_hwnd, plvhti); -//} -BOOL CCtrlListView::Update(int iItem) -{ return ListView_Update(m_hwnd, iItem); -} - -///////////////////////////////////////////////////////////////////////////////////////// -// CCtrlFilterListView - -#define FILTER_BOX_HEIGHT 21 - -struct CFilterData : public MZeroedObject -{ - HFONT m_hfntNormal; - HFONT m_hfntEmpty; - COLORREF m_clGray; - TCHAR *m_filterText; - - RECT m_rcButtonClear; - RECT m_rcEditBox; - - WNDPROC m_oldWndProc; - HWND m_hwndOwner; - HWND m_hwndEditBox; - - void ReleaseFilterData() - { - DeleteObject(m_hfntEmpty); m_hfntEmpty = NULL; - } - - ~CFilterData() - { - ReleaseFilterData(); - } -}; - -CCtrlFilterListView::CCtrlFilterListView(CDlgBase* dlg, int ctrlId, bool trackFilter, bool keepHiglight): - CCtrlListView(dlg, ctrlId), - m_trackFilter(trackFilter), - m_keepHiglight(keepHiglight) -{ - fdat = new CFilterData; -} - -CCtrlFilterListView::~CCtrlFilterListView() -{ - if (fdat->m_filterText) mir_free(fdat->m_filterText); - delete fdat; -} - -TCHAR *CCtrlFilterListView::GetFilterText() -{ - return fdat->m_filterText; -} - -void CCtrlFilterListView::OnInit() -{ - CSuper::OnInit(); - Subclass(); -} - -static LRESULT CALLBACK sttEditBoxSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - CFilterData *fdat = (CFilterData *)GetWindowLongPtr(hwnd, GWLP_USERDATA); - if (fdat == NULL) - return DefWindowProc(hwnd, msg, wParam, lParam); - - switch (msg) { - case WM_GETDLGCODE: - if ((wParam == VK_RETURN) || (wParam == VK_ESCAPE)) - return DLGC_WANTMESSAGE; - break; - - case WM_SYSKEYDOWN: - case WM_KEYDOWN: - if (wParam == VK_RETURN) { - if (fdat->m_filterText) mir_free(fdat->m_filterText); - int length = GetWindowTextLength(hwnd) + 1; - if (length == 1) - fdat->m_filterText = 0; - else { - fdat->m_filterText = (TCHAR *)mir_alloc(sizeof(TCHAR) * length); - GetWindowText(hwnd, fdat->m_filterText, length); - } - - DestroyWindow(hwnd); - RedrawWindow(fdat->m_hwndOwner, NULL, NULL, RDW_INVALIDATE|RDW_FRAME); - PostMessage(fdat->m_hwndOwner, WM_APP, 0, 0); - } - else if (wParam == VK_ESCAPE) { - DestroyWindow(hwnd); - return 0; - } - - PostMessage(fdat->m_hwndOwner, WM_APP, 1, 0); - break; - - case WM_KILLFOCUS: - DestroyWindow(hwnd); - return 0; - - case WM_DESTROY: - fdat->m_hwndEditBox = NULL; - } - - return CallWindowProc(fdat->m_oldWndProc, hwnd, msg, wParam, lParam); -} - -void CCtrlFilterListView::FilterHighlight(TCHAR *str) -{ - TCHAR buf[256]; - int count = GetItemCount(); - for (int i=0; i < count; i++) { - bool found = false; - if (str) { - for (int j = 0; j < 10; ++j) { - GetItemText(i, j, buf, SIZEOF(buf)); - if (!*buf) - break; - - if (_tcsstr(buf, str)) { - found = true; - break; - } - } - } - - SetItemState(i, found ? LVIS_DROPHILITED : 0, LVIS_DROPHILITED); - } -} - -LRESULT CCtrlFilterListView::CustomWndProc(UINT msg, WPARAM wParam, LPARAM lParam) -{ - POINT pt; - - switch (msg) { - case WM_APP: - switch (wParam) { - case 0: - OnFilterChanged(this); - if (!m_keepHiglight) - FilterHighlight(NULL); - break; - - case 1: - if (m_trackFilter && fdat->m_hwndEditBox) { - TCHAR *str = 0; - int length = GetWindowTextLength(fdat->m_hwndEditBox) + 1; - if (length == 1) - str = 0; - else { - str = (TCHAR *)mir_alloc(sizeof(TCHAR) * length); - GetWindowText(fdat->m_hwndEditBox, str, length); - } - FilterHighlight(str); - if (str) mir_free(str); - } - break; - - case 2: - fdat->m_hwndOwner = m_hwnd; - fdat->m_hwndEditBox = CreateWindow(_T("edit"), fdat->m_filterText, - WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_LEFT|ES_AUTOHSCROLL, - 0, 0, 0, 0, - ::GetParent(m_hwnd), (HMENU)-1, hInst, NULL); - - SendMessage(fdat->m_hwndEditBox, WM_SETFONT, (WPARAM)fdat->m_hfntNormal, 0); - - RECT rc = fdat->m_rcEditBox; - MapWindowPoints(m_hwnd, ::GetParent(m_hwnd), (LPPOINT)&rc, 2); - SetWindowPos(fdat->m_hwndEditBox, HWND_TOP, rc.left-5, rc.top+2, rc.right-rc.left, rc.bottom-rc.top-4, SWP_SHOWWINDOW); - SendMessage(fdat->m_hwndEditBox, EM_SETSEL, 0, -1); - - fdat->m_oldWndProc = (WNDPROC)GetWindowLongPtr(fdat->m_hwndEditBox, GWLP_WNDPROC); - SetWindowLongPtr(fdat->m_hwndEditBox, GWLP_USERDATA, (LONG_PTR)fdat); - SetWindowLongPtr(fdat->m_hwndEditBox, GWLP_WNDPROC, (LONG_PTR)sttEditBoxSubclassProc); - - SetFocus(m_hwnd); // hack to avoid popping of list over the box... - SetFocus(fdat->m_hwndEditBox); - } - break; - - case WM_NCCALCSIZE: - { - RECT *prect = (RECT *)lParam; - - CSuper::CustomWndProc(msg, wParam, lParam); - prect->bottom -= FILTER_BOX_HEIGHT; - - fdat->ReleaseFilterData(); - - fdat->m_hfntNormal = (HFONT)SendMessage(m_hwnd, WM_GETFONT, 0, 0); - if (!fdat->m_hfntNormal) - fdat->m_hfntNormal = (HFONT)GetStockObject(DEFAULT_GUI_FONT); - - LOGFONT lf; - GetObject(fdat->m_hfntNormal, sizeof(lf), &lf); - lf.lfItalic = TRUE; - fdat->m_hfntEmpty = CreateFontIndirect(&lf); - - COLORREF clText = GetSysColor(COLOR_WINDOWTEXT); - COLORREF clBack = GetSysColor(COLOR_WINDOW); - fdat->m_clGray = RGB( - (GetRValue(clBack) + 2*GetRValue(clText)) / 3, - (GetGValue(clBack) + 2*GetGValue(clText)) / 3, - (GetBValue(clBack) + 2*GetBValue(clText)) / 3); - - if (fdat->m_hwndEditBox) - DestroyWindow(fdat->m_hwndEditBox); - } - return 0; - - case WM_NCPAINT: - CSuper::CustomWndProc(msg, wParam, lParam); - { - RECT rc; - GetWindowRect(m_hwnd, &rc); - OffsetRect(&rc, -rc.left, -rc.top); - InflateRect(&rc, -1, -1); - rc.top = rc.bottom - FILTER_BOX_HEIGHT; - - POINT pts[] = { - {rc.left, rc.top}, - {rc.left+FILTER_BOX_HEIGHT, rc.top}, - {rc.left+FILTER_BOX_HEIGHT+FILTER_BOX_HEIGHT/2+1, rc.top+FILTER_BOX_HEIGHT/2+1}, - {rc.left+FILTER_BOX_HEIGHT, rc.top+FILTER_BOX_HEIGHT}, - {rc.left, rc.top+FILTER_BOX_HEIGHT}, - }; - HRGN hrgnFilter = CreatePolygonRgn(pts, SIZEOF(pts), ALTERNATE); - - HDC hdc = GetWindowDC(m_hwnd); - - FillRect(hdc, &rc, GetSysColorBrush(COLOR_WINDOW)); - FillRgn(hdc, hrgnFilter, GetSysColorBrush(COLOR_BTNFACE)); - - SetBkMode(hdc, TRANSPARENT); - - if (fdat->m_filterText) { - SetRect(&fdat->m_rcButtonClear, - rc.right - FILTER_BOX_HEIGHT + (FILTER_BOX_HEIGHT-16)/2, rc.top + (FILTER_BOX_HEIGHT-16)/2, - rc.right - FILTER_BOX_HEIGHT + (FILTER_BOX_HEIGHT-16)/2 + 16, rc.top + (FILTER_BOX_HEIGHT-16)/2 + 16); - - DrawIconEx(hdc, rc.left + (FILTER_BOX_HEIGHT-16)/2, rc.top + (FILTER_BOX_HEIGHT-16)/2, g_LoadIconEx("sd_filter_apply"), 16, 16, 0, NULL, DI_NORMAL); - DrawIconEx(hdc, rc.right - FILTER_BOX_HEIGHT + (FILTER_BOX_HEIGHT-16)/2, rc.top + (FILTER_BOX_HEIGHT-16)/2, LoadSkinnedIcon(SKINICON_OTHER_DELETE), 16, 16, 0, NULL, DI_NORMAL); - - rc.left += 5*FILTER_BOX_HEIGHT/3; - rc.right -= 5*FILTER_BOX_HEIGHT/3; - - fdat->m_rcEditBox = rc; - - SelectObject(hdc, fdat->m_hfntNormal); - ::SetTextColor(hdc, GetSysColor(COLOR_WINDOWTEXT)); - DrawText(hdc, fdat->m_filterText, -1, &rc, DT_SINGLELINE|DT_VCENTER|DT_NOPREFIX|DT_END_ELLIPSIS); - } - else { - SetRect(&fdat->m_rcButtonClear, 0, 0, 0, 0); - - DrawIconEx(hdc, rc.left + (FILTER_BOX_HEIGHT-16)/2, rc.top + (FILTER_BOX_HEIGHT-16)/2, g_LoadIconEx("sd_filter_reset"), 16, 16, 0, NULL, DI_NORMAL); - - rc.left += 5*FILTER_BOX_HEIGHT/3; - rc.right -= 5; - - fdat->m_rcEditBox = rc; - - SelectObject(hdc, fdat->m_hfntEmpty); - ::SetTextColor(hdc, fdat->m_clGray); - DrawText(hdc, TranslateT("Set filter..."), -1, &rc, DT_SINGLELINE|DT_VCENTER|DT_NOPREFIX|DT_END_ELLIPSIS); - } - - ReleaseDC(m_hwnd, hdc); - - DeleteObject(hrgnFilter); - } - return 0; - - case WM_NCHITTEST: - pt.x = LOWORD(lParam); - pt.y = HIWORD(lParam); - MapWindowPoints(NULL, m_hwnd, &pt, 1); - - if (PtInRect(&fdat->m_rcButtonClear, pt)) - return HTBORDER; - if (PtInRect(&fdat->m_rcEditBox, pt)) - return HTBORDER; - break; - - case WM_NCLBUTTONUP: - pt.x = LOWORD(lParam); - pt.y = HIWORD(lParam); - MapWindowPoints(NULL, m_hwnd, &pt, 1); - - if (PtInRect(&fdat->m_rcButtonClear, pt)) { - SetFocus(m_hwnd); - if (fdat->m_filterText) mir_free(fdat->m_filterText); - fdat->m_filterText = NULL; - RedrawWindow(m_hwnd, NULL, NULL, RDW_INVALIDATE|RDW_FRAME); - OnFilterChanged(this); - FilterHighlight(NULL); - } - else if (PtInRect(&fdat->m_rcEditBox, pt)) - PostMessage(m_hwnd, WM_APP, 2, 0); - break; - - case WM_KEYDOWN: - if (wParam == 'F' && GetAsyncKeyState(VK_CONTROL)) - PostMessage(m_hwnd, WM_APP, 2, 0); - break; - } - - return CSuper::CustomWndProc(msg, wParam, lParam); -} - -///////////////////////////////////////////////////////////////////////////////////////// -// CCtrlTreeView - -CCtrlTreeView::CCtrlTreeView(CDlgBase* dlg, int ctrlId): - CCtrlBase(dlg, ctrlId) -{ -} - -BOOL CCtrlTreeView::OnNotify(int, NMHDR *pnmh) -{ - TEventInfo evt = { this, pnmh }; - - switch (pnmh->code) { - case TVN_BEGINDRAG: OnBeginDrag(&evt); return TRUE; - case TVN_BEGINLABELEDIT: OnBeginLabelEdit(&evt); return TRUE; - case TVN_BEGINRDRAG: OnBeginRDrag(&evt); return TRUE; - case TVN_DELETEITEM: OnDeleteItem(&evt); return TRUE; - case TVN_ENDLABELEDIT: OnEndLabelEdit(&evt); return TRUE; - case TVN_GETDISPINFO: OnGetDispInfo(&evt); return TRUE; - case TVN_GETINFOTIP: OnGetInfoTip(&evt); return TRUE; - case TVN_ITEMEXPANDED: OnItemExpanded(&evt); return TRUE; - case TVN_ITEMEXPANDING: OnItemExpanding(&evt); return TRUE; - case TVN_KEYDOWN: OnKeyDown(&evt); return TRUE; - case TVN_SELCHANGED: OnSelChanged(&evt); return TRUE; - case TVN_SELCHANGING: OnSelChanging(&evt); return TRUE; - case TVN_SETDISPINFO: OnSetDispInfo(&evt); return TRUE; - case TVN_SINGLEEXPAND: OnSingleExpand(&evt); return TRUE; - } - - return FALSE; -} - -void CCtrlTreeView::TranslateItem(HTREEITEM hItem) -{ - TVITEMEX tvi; - TCHAR buf[128]; - GetItem(hItem, &tvi, buf, SIZEOF(buf)); - tvi.pszText = TranslateTS(tvi.pszText); - SetItem(&tvi); -} - -void CCtrlTreeView::TranslateTree() -{ - HTREEITEM hItem = GetRoot(); - while (hItem) { - TranslateItem(hItem); - - HTREEITEM hItemTmp = 0; - if (hItemTmp = GetChild(hItem)) - hItem = hItemTmp; - else if (hItemTmp = GetNextSibling(hItem)) - hItem = hItemTmp; - else { - while (true) { - if (!(hItem = GetParent(hItem))) - break; - if (hItemTmp = GetNextSibling(hItem)) { - hItem = hItemTmp; - break; - } - } - } - } -} - -HTREEITEM CCtrlTreeView::FindNamedItem(HTREEITEM hItem, const TCHAR *name) -{ - TVITEMEX tvi = {0}; - TCHAR str[MAX_PATH]; - - if (hItem) - tvi.hItem = GetChild(hItem); - else - tvi.hItem = GetRoot(); - - if (!name) - return tvi.hItem; - - tvi.mask = TVIF_TEXT; - tvi.pszText = str; - tvi.cchTextMax = SIZEOF(str); - - while (tvi.hItem) { - GetItem(&tvi); - - if (!mir_tstrcmp(tvi.pszText, name)) - return tvi.hItem; - - tvi.hItem = GetNextSibling(tvi.hItem); - } - return NULL; -} - -void CCtrlTreeView::GetItem(HTREEITEM hItem, TVITEMEX *tvi) -{ - memset(tvi, 0, sizeof(*tvi)); - tvi->mask = TVIF_CHILDREN|TVIF_HANDLE|TVIF_IMAGE|TVIF_INTEGRAL|TVIF_PARAM|TVIF_SELECTEDIMAGE|TVIF_STATE; - tvi->hItem = hItem; - GetItem(tvi); -} - -void CCtrlTreeView::GetItem(HTREEITEM hItem, TVITEMEX *tvi, TCHAR *szText, int iTextLength) -{ - memset(tvi, 0, sizeof(*tvi)); - tvi->mask = TVIF_CHILDREN|TVIF_HANDLE|TVIF_IMAGE|TVIF_INTEGRAL|TVIF_PARAM|TVIF_SELECTEDIMAGE|TVIF_STATE|TVIF_TEXT; - tvi->hItem = hItem; - tvi->pszText = szText; - tvi->cchTextMax = iTextLength; - GetItem(tvi); -} - -HIMAGELIST CCtrlTreeView::CreateDragImage(HTREEITEM hItem) -{ return TreeView_CreateDragImage(m_hwnd, hItem); -} - -void CCtrlTreeView::DeleteAllItems() -{ TreeView_DeleteAllItems(m_hwnd); -} - -void CCtrlTreeView::DeleteItem(HTREEITEM hItem) -{ TreeView_DeleteItem(m_hwnd, hItem); -} - -HWND CCtrlTreeView::EditLabel(HTREEITEM hItem) -{ return TreeView_EditLabel(m_hwnd, hItem); -} - -void CCtrlTreeView::EndEditLabelNow(BOOL cancel) -{ TreeView_EndEditLabelNow(m_hwnd, cancel); -} - -void CCtrlTreeView::EnsureVisible(HTREEITEM hItem) -{ TreeView_EnsureVisible(m_hwnd, hItem); -} - -void CCtrlTreeView::Expand(HTREEITEM hItem, DWORD flag) -{ TreeView_Expand(m_hwnd, hItem, flag); -} - -COLORREF CCtrlTreeView::GetBkColor() -{ return TreeView_GetBkColor(m_hwnd); -} - -DWORD CCtrlTreeView::GetCheckState(HTREEITEM hItem) -{ return TreeView_GetCheckState(m_hwnd, hItem); -} - -HTREEITEM CCtrlTreeView::GetChild(HTREEITEM hItem) -{ return TreeView_GetChild(m_hwnd, hItem); -} - -int CCtrlTreeView::GetCount() -{ return TreeView_GetCount(m_hwnd); -} - -HTREEITEM CCtrlTreeView::GetDropHilight() -{ return TreeView_GetDropHilight(m_hwnd); -} - -HWND CCtrlTreeView::GetEditControl() -{ return TreeView_GetEditControl(m_hwnd); -} - -HTREEITEM CCtrlTreeView::GetFirstVisible() -{ return TreeView_GetFirstVisible(m_hwnd); -} - -HIMAGELIST CCtrlTreeView::GetImageList(int iImage) -{ return TreeView_GetImageList(m_hwnd, iImage); -} - -int CCtrlTreeView::GetIndent() -{ return TreeView_GetIndent(m_hwnd); -} - -COLORREF CCtrlTreeView::GetInsertMarkColor() -{ return TreeView_GetInsertMarkColor(m_hwnd); -} - -void CCtrlTreeView::GetItem(TVITEMEX *tvi) -{ TreeView_GetItem(m_hwnd, tvi); -} - -int CCtrlTreeView::GetItemHeight() -{ return TreeView_GetItemHeight(m_hwnd); -} - -void CCtrlTreeView::GetItemRect(HTREEITEM hItem, RECT *rcItem, BOOL fItemRect) -{ TreeView_GetItemRect(m_hwnd, hItem, rcItem, fItemRect); -} - -DWORD CCtrlTreeView::GetItemState(HTREEITEM hItem, DWORD stateMask) -{ return TreeView_GetItemState(m_hwnd, hItem, stateMask); -} - -HTREEITEM CCtrlTreeView::GetLastVisible() -{ return TreeView_GetLastVisible(m_hwnd); -} - -COLORREF CCtrlTreeView::GetLineColor() -{ return TreeView_GetLineColor(m_hwnd); -} - -HTREEITEM CCtrlTreeView::GetNextItem(HTREEITEM hItem, DWORD flag) -{ return TreeView_GetNextItem(m_hwnd, hItem, flag); -} - -HTREEITEM CCtrlTreeView::GetNextSibling(HTREEITEM hItem) -{ return TreeView_GetNextSibling(m_hwnd, hItem); -} - -HTREEITEM CCtrlTreeView::GetNextVisible(HTREEITEM hItem) -{ return TreeView_GetNextVisible(m_hwnd, hItem); -} - -HTREEITEM CCtrlTreeView::GetParent(HTREEITEM hItem) -{ return TreeView_GetParent(m_hwnd, hItem); -} - -HTREEITEM CCtrlTreeView::GetPrevSibling(HTREEITEM hItem) -{ return TreeView_GetPrevSibling(m_hwnd, hItem); -} - -HTREEITEM CCtrlTreeView::GetPrevVisible(HTREEITEM hItem) -{ return TreeView_GetPrevVisible(m_hwnd, hItem); -} - -HTREEITEM CCtrlTreeView::GetRoot() -{ return TreeView_GetRoot(m_hwnd); -} - -DWORD CCtrlTreeView::GetScrollTime() -{ return TreeView_GetScrollTime(m_hwnd); -} - -HTREEITEM CCtrlTreeView::GetSelection() -{ return TreeView_GetSelection(m_hwnd); -} - -COLORREF CCtrlTreeView::GetTextColor() -{ return TreeView_GetTextColor(m_hwnd); -} - -HWND CCtrlTreeView::GetToolTips() -{ return TreeView_GetToolTips(m_hwnd); -} - -BOOL CCtrlTreeView::GetUnicodeFormat() -{ return TreeView_GetUnicodeFormat(m_hwnd); -} - -unsigned CCtrlTreeView::GetVisibleCount() -{ return TreeView_GetVisibleCount(m_hwnd); -} - -HTREEITEM CCtrlTreeView::HitTest(TVHITTESTINFO *hti) -{ return TreeView_HitTest(m_hwnd, hti); -} - -HTREEITEM CCtrlTreeView::InsertItem(TVINSERTSTRUCT *tvis) -{ return TreeView_InsertItem(m_hwnd, tvis); -} - -/* -HTREEITEM CCtrlTreeView::MapAccIDToHTREEITEM(UINT id) -{ return TreeView_MapAccIDToHTREEITEM(m_hwnd, id); -} - -UINT CCtrlTreeView::MapHTREEITEMtoAccID(HTREEITEM hItem) -{ return TreeView_MapHTREEITEMtoAccID(m_hwnd, hItem); -} - -*/ -void CCtrlTreeView::Select(HTREEITEM hItem, DWORD flag) -{ TreeView_Select(m_hwnd, hItem, flag); -} - -void CCtrlTreeView::SelectDropTarget(HTREEITEM hItem) -{ TreeView_SelectDropTarget(m_hwnd, hItem); -} - -void CCtrlTreeView::SelectItem(HTREEITEM hItem) -{ TreeView_SelectItem(m_hwnd, hItem); -} - -void CCtrlTreeView::SelectSetFirstVisible(HTREEITEM hItem) -{ TreeView_SelectSetFirstVisible(m_hwnd, hItem); -} - -COLORREF CCtrlTreeView::SetBkColor(COLORREF clBack) -{ return TreeView_SetBkColor(m_hwnd, clBack); -} - -void CCtrlTreeView::SetCheckState(HTREEITEM hItem, DWORD state) -{ TreeView_SetCheckState(m_hwnd, hItem, state); -} - -void CCtrlTreeView::SetImageList(HIMAGELIST hIml, int iImage) -{ TreeView_SetImageList(m_hwnd, hIml, iImage); -} - -void CCtrlTreeView::SetIndent(int iIndent) -{ TreeView_SetIndent(m_hwnd, iIndent); -} - -void CCtrlTreeView::SetInsertMark(HTREEITEM hItem, BOOL fAfter) -{ TreeView_SetInsertMark(m_hwnd, hItem, fAfter); -} - -COLORREF CCtrlTreeView::SetInsertMarkColor(COLORREF clMark) -{ return TreeView_SetInsertMarkColor(m_hwnd, clMark); -} - -void CCtrlTreeView::SetItem(TVITEMEX *tvi) -{ TreeView_SetItem(m_hwnd, tvi); -} - -void CCtrlTreeView::SetItemHeight(short cyItem) -{ TreeView_SetItemHeight(m_hwnd, cyItem); -} - -void CCtrlTreeView::SetItemState(HTREEITEM hItem, DWORD state, DWORD stateMask) -{ TreeView_SetItemState(m_hwnd, hItem, state, stateMask); -} - -COLORREF CCtrlTreeView::SetLineColor(COLORREF clLine) -{ return TreeView_SetLineColor(m_hwnd, clLine); -} - -void CCtrlTreeView::SetScrollTime(UINT uMaxScrollTime) -{ TreeView_SetScrollTime(m_hwnd, uMaxScrollTime); -} - -COLORREF CCtrlTreeView::SetTextColor(COLORREF clText) -{ return TreeView_SetTextColor(m_hwnd, clText); -} - -HWND CCtrlTreeView::SetToolTips(HWND hwndToolTips) -{ return TreeView_SetToolTips(m_hwnd, hwndToolTips); -} - -BOOL CCtrlTreeView::SetUnicodeFormat(BOOL fUnicode) -{ return TreeView_SetUnicodeFormat(m_hwnd, fUnicode); -} - -void CCtrlTreeView::SortChildren(HTREEITEM hItem, BOOL fRecurse) -{ TreeView_SortChildren(m_hwnd, hItem, fRecurse); -} - -void CCtrlTreeView::SortChildrenCB(TVSORTCB *cb, BOOL fRecurse) -{ TreeView_SortChildrenCB(m_hwnd, cb, fRecurse); -} - -///////////////////////////////////////////////////////////////////////////////////////// -// CCtrlPages - -CCtrlPages::CCtrlPages(CDlgBase* dlg, int ctrlId): - CCtrlBase(dlg, ctrlId), m_hIml(NULL), m_pActivePage(NULL) -{ -} - -void CCtrlPages::OnInit() -{ - CSuper::OnInit(); - Subclass(); -} - -LRESULT CCtrlPages::CustomWndProc(UINT msg, WPARAM wParam, LPARAM lParam) -{ - if (msg == WM_SIZE) - ShowPage(m_pActivePage); - - return CSuper::CustomWndProc(msg, wParam, lParam); -} - -void CCtrlPages::AddPage(TCHAR *ptszName, HICON hIcon, CCallback onCreate, void *param) -{ - TPageInfo *info = new TPageInfo; - info->m_onCreate = onCreate; - info->m_param = param; - info->m_pDlg = NULL; - - TCITEM tci = {0}; - tci.mask = TCIF_PARAM|TCIF_TEXT; - tci.lParam = (LPARAM)info; - tci.pszText = ptszName; - if (hIcon) - { - if (!m_hIml) - { - m_hIml = ImageList_Create(16, 16, ILC_COLOR32 | ILC_MASK, 0, 1); - TabCtrl_SetImageList(m_hwnd, m_hIml); - } - - tci.mask |= TCIF_IMAGE; - tci.iImage = ImageList_AddIcon(m_hIml, hIcon); - } - - TabCtrl_InsertItem(m_hwnd, TabCtrl_GetItemCount(m_hwnd), &tci); -} - -void CCtrlPages::AttachDialog(int iPage, CDlgBase *pDlg) -{ - if ((iPage < 0) || (iPage >= TabCtrl_GetItemCount(m_hwnd))) - return; - - TCITEM tci = {0}; - tci.mask = TCIF_PARAM; - TabCtrl_GetItem(m_hwnd, iPage, &tci); - - if (TPageInfo *info = (TPageInfo *)tci.lParam) { - if (info->m_pDlg) - info->m_pDlg->Close(); - - info->m_pDlg = pDlg; - //SetParent(info->m_pDlg->GetHwnd(), m_hwnd); - - if (iPage == TabCtrl_GetCurSel(m_hwnd)) { - m_pActivePage = info->m_pDlg; - ShowPage(info->m_pDlg); - } - } -} - -void CCtrlPages::ShowPage(CDlgBase *pDlg) -{ - if (!pDlg) return; - - RECT rc; - GetClientRect(m_hwnd, &rc); - TabCtrl_AdjustRect(m_hwnd, FALSE, &rc); - MapWindowPoints(m_hwnd, ::GetParent(m_hwnd), (LPPOINT)&rc, 2); - SetWindowPos(pDlg->GetHwnd(), HWND_TOP, rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, SWP_SHOWWINDOW); -} - -void CCtrlPages::ActivatePage(int iPage) -{ - TabCtrl_SetCurSel(m_hwnd, iPage); - //ShowPage(iPage); -} - -BOOL CCtrlPages::OnNotify(int /*idCtrl*/, NMHDR *pnmh) -{ - switch (pnmh->code) { - case TCN_SELCHANGING: - { - TCITEM tci = {0}; - tci.mask = TCIF_PARAM; - TabCtrl_GetItem(m_hwnd, TabCtrl_GetCurSel(m_hwnd), &tci); - - if (TPageInfo *info = (TPageInfo *)tci.lParam) { - if (info->m_pDlg) { - m_pActivePage = NULL; - ShowWindow(info->m_pDlg->GetHwnd(), SW_HIDE); - } - } - } - return TRUE; - - case TCN_SELCHANGE: - { - TCITEM tci = {0}; - tci.mask = TCIF_PARAM; - TabCtrl_GetItem(m_hwnd, TabCtrl_GetCurSel(m_hwnd), &tci); - - if (TPageInfo *info = (TPageInfo *)tci.lParam) { - if (info->m_pDlg) { - m_pActivePage = info->m_pDlg; - ShowPage(info->m_pDlg); - } - else { - m_pActivePage = NULL; - info->m_onCreate(info->m_param); - } - } - } - return TRUE; - } - - return FALSE; -} - -void CCtrlPages::OnDestroy() -{ - int count = TabCtrl_GetItemCount(m_hwnd); - for (int i=0; i < count; i++) { - TCITEM tci = {0}; - tci.mask = TCIF_PARAM; - TabCtrl_GetItem(m_hwnd, i, &tci); - - if (TPageInfo *info = (TPageInfo *)tci.lParam) { - if (info->m_pDlg) - info->m_pDlg->Close(); - - delete info; - } - } - - TabCtrl_DeleteAllItems(m_hwnd); - - if (m_hIml) { - TabCtrl_SetImageList(m_hwnd, NULL); - ImageList_Destroy(m_hIml); - } -} - -///////////////////////////////////////////////////////////////////////////////////////// -// CCtrlBase - -CCtrlBase::CCtrlBase(CDlgBase *wnd, int idCtrl) : - m_parentWnd(wnd), - m_idCtrl(idCtrl), - m_hwnd(NULL), - m_wndproc(NULL) -{ - if (wnd) { - m_next = wnd->m_first; - wnd->m_first = this; -} } - -void CCtrlBase::OnInit() -{ - m_hwnd = (m_idCtrl && m_parentWnd && m_parentWnd->GetHwnd()) ? GetDlgItem(m_parentWnd->GetHwnd(), m_idCtrl) : NULL; -} - -void CCtrlBase::OnDestroy() -{ - Unsubclass(); - m_hwnd = NULL; -} - -void CCtrlBase::Enable(int bIsEnable) -{ - ::EnableWindow(m_hwnd, bIsEnable); -} - -BOOL CCtrlBase::Enabled() const -{ - return (m_hwnd) ? IsWindowEnabled(m_hwnd) : FALSE; -} - -LRESULT CCtrlBase::SendMsg(UINT Msg, WPARAM wParam, LPARAM lParam) -{ - return ::SendMessage(m_hwnd, Msg, wParam, lParam); -} - -void CCtrlBase::SetText(const TCHAR *text) -{ - ::SetWindowText(m_hwnd, text); -} - -void CCtrlBase::SetTextA(const char *text) -{ - ::SetWindowTextA(m_hwnd, text); -} - -void CCtrlBase::SetInt(int value) -{ - TCHAR buf[32] = {0}; - mir_sntprintf(buf, SIZEOF(buf), _T("%d"), value); - SetWindowText(m_hwnd, buf); -} - -TCHAR* CCtrlBase::GetText() -{ - int length = GetWindowTextLength(m_hwnd) + 1; - TCHAR *result = (TCHAR *)mir_alloc(length * sizeof(TCHAR)); - GetWindowText(m_hwnd, result, length); - return result; -} - -char* CCtrlBase::GetTextA() -{ - int length = GetWindowTextLength(m_hwnd) + 1; - char *result = (char *)mir_alloc(length * sizeof(char)); - GetWindowTextA(m_hwnd, result, length); - return result; -} - -TCHAR* CCtrlBase::GetText(TCHAR *buf, int size) -{ - GetWindowText(m_hwnd, buf, size); - buf[size-1] = 0; - return buf; -} - -char* CCtrlBase::GetTextA(char *buf, int size) -{ - GetWindowTextA(m_hwnd, buf, size); - buf[size-1] = 0; - return buf; -} - -int CCtrlBase::GetInt() -{ - int length = GetWindowTextLength(m_hwnd) + 1; - TCHAR *result = (TCHAR *)_alloca(length * sizeof(TCHAR)); - GetWindowText(m_hwnd, result, length); - return _ttoi(result); -} - -LRESULT CCtrlBase::CustomWndProc(UINT msg, WPARAM wParam, LPARAM lParam) -{ - if (msg == WM_DESTROY) Unsubclass(); - return CallWindowProc(m_wndproc, m_hwnd, msg, wParam, lParam); -} - -void CCtrlBase::Subclass() -{ - SetWindowLongPtr(m_hwnd, GWLP_USERDATA, (LONG_PTR)this); - m_wndproc = (WNDPROC)SetWindowLongPtr(m_hwnd, GWLP_WNDPROC, (LONG_PTR)GlobalSubclassWndProc); -} - -void CCtrlBase::Unsubclass() -{ - if (m_wndproc) { - SetWindowLongPtr(m_hwnd, GWLP_WNDPROC, (LONG_PTR)m_wndproc); - SetWindowLongPtr(m_hwnd, GWLP_USERDATA, 0); - m_wndproc = 0; -} } - -///////////////////////////////////////////////////////////////////////////////////////// -// CDbLink class - -CDbLink::CDbLink(const char *szModule, const char *szSetting, BYTE type, DWORD iValue, bool bSigned): CDataLink(type, bSigned) -{ - m_szModule = mir_strdup(szModule); - m_szSetting = mir_strdup(szSetting); - m_iDefault = iValue; - m_szDefault = 0; - dbv.type = DBVT_DELETED; -} - -CDbLink::CDbLink(const char *szModule, const char *szSetting, BYTE type, TCHAR *szValue): CDataLink(type, false) -{ - m_szModule = mir_strdup(szModule); - m_szSetting = mir_strdup(szSetting); - m_szDefault = mir_tstrdup(szValue); - dbv.type = DBVT_DELETED; -} - -CDbLink::~CDbLink() -{ - mir_free(m_szModule); - mir_free(m_szSetting); - mir_free(m_szDefault); - if (dbv.type != DBVT_DELETED) - db_free(&dbv); -} - -DWORD CDbLink::LoadUnsigned() -{ - switch (m_type) { - case DBVT_BYTE: return db_get_b(NULL, m_szModule, m_szSetting, m_iDefault); - case DBVT_WORD: return db_get_w(NULL, m_szModule, m_szSetting, m_iDefault); - case DBVT_DWORD: return db_get_dw(NULL, m_szModule, m_szSetting, m_iDefault); - default: return m_iDefault; - } -} - -int CDbLink::LoadSigned() -{ - switch (m_type) { - case DBVT_BYTE: return (signed char)db_get_b(NULL, m_szModule, m_szSetting, m_iDefault); - case DBVT_WORD: return (signed short)db_get_w(NULL, m_szModule, m_szSetting, m_iDefault); - case DBVT_DWORD: return (signed int)db_get_dw(NULL, m_szModule, m_szSetting, m_iDefault); - default: return m_iDefault; - } -} - -void CDbLink::SaveInt(DWORD value) -{ - switch (m_type) { - case DBVT_BYTE: db_set_b(NULL, m_szModule, m_szSetting, (BYTE)value); break; - case DBVT_WORD: db_set_w(NULL, m_szModule, m_szSetting, (WORD)value); break; - case DBVT_DWORD: db_set_dw(NULL, m_szModule, m_szSetting, value); break; - } -} - -TCHAR* CDbLink::LoadText() -{ - if (dbv.type != DBVT_DELETED) db_free(&dbv); - if (!db_get_ts(NULL, m_szModule, m_szSetting, &dbv)) { - if (dbv.type == DBVT_TCHAR) - return dbv.ptszVal; - return m_szDefault; - } - - dbv.type = DBVT_DELETED; - return m_szDefault; -} - -void CDbLink::SaveText(TCHAR *value) -{ - db_set_ts(NULL, m_szModule, m_szSetting, value); -} - -///////////////////////////////////////////////////////////////////////////////////////// -// Base protocol dialog - -void CProtoIntDlgBase::SetStatusText(const TCHAR *statusText) -{ - if (m_hwndStatus) - SendMessage(m_hwndStatus, SB_SETTEXT, 0, (LPARAM)statusText); -} - -INT_PTR CProtoIntDlgBase::DlgProc(UINT msg, WPARAM wParam, LPARAM lParam) -{ - INT_PTR result; - - switch (msg) { - case WM_INITDIALOG: // call inherited init code first - result = CSuper::DlgProc(msg, wParam, lParam); - if (m_show_label) { - m_hwndStatus = CreateStatusWindow(WS_CHILD | WS_VISIBLE, NULL, m_hwnd, IDC_STATUSBAR); - SetWindowPos(m_hwndStatus, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); - UpdateStatusBar(); - UpdateProtoTitle(); - } - return result; - - case WM_SETTEXT: - if (m_show_label && IsWindowUnicode(m_hwnd)) { - TCHAR *szTitle = (TCHAR *)lParam; - if (!_tcsstr(szTitle, m_proto_interface->m_tszUserName)) { - UpdateProtoTitle(szTitle); - return TRUE; - } - } - break; - - case WM_SIZE: - if (m_hwndStatus) { - RECT rcStatus; GetWindowRect(m_hwndStatus, &rcStatus); - RECT rcClient; GetClientRect(m_hwnd, &rcClient); - SetWindowPos(m_hwndStatus, NULL, 0, rcClient.bottom-(rcStatus.bottom-rcStatus.top), rcClient.right, (rcStatus.bottom-rcStatus.top), SWP_NOZORDER); - UpdateStatusBar(); - } - break; - - // Protocol events - case WM_PROTO_ACTIVATE: - OnProtoActivate(wParam, lParam); - return m_lresult; - - case WM_PROTO_CHECK_ONLINE: - if (m_hwndStatus) - UpdateStatusBar(); - OnProtoCheckOnline(wParam, lParam); - return m_lresult; - - case WM_PROTO_REFRESH: - OnProtoRefresh(wParam, lParam); - return m_lresult; - } - - return CSuper::DlgProc(msg, wParam, lParam); -} - -void CProtoIntDlgBase::UpdateProtoTitle(const TCHAR *szText) -{ - if (!m_show_label) return; - - int curLength; - const TCHAR *curText; - - if (szText) { - curText = szText; - curLength = (int)mir_tstrlen(curText); - } - else { - curLength = GetWindowTextLength(m_hwnd) + 1; - TCHAR *tmp = (TCHAR *)_alloca(curLength * sizeof(TCHAR)); - GetWindowText(m_hwnd, tmp, curLength); - curText = tmp; - } - - if (!_tcsstr(curText, m_proto_interface->m_tszUserName)) { - size_t length = curLength + mir_tstrlen(m_proto_interface->m_tszUserName) + 256; - TCHAR *text = (TCHAR *)_alloca(length * sizeof(TCHAR)); - mir_sntprintf(text, length, _T("%s [%s: %s]"), curText, TranslateT("Account"), m_proto_interface->m_tszUserName); - SetWindowText(m_hwnd, text); - } -} - -void CProtoIntDlgBase::UpdateStatusBar() -{ - SIZE sz; - - HDC hdc = GetDC(m_hwndStatus); - HFONT hFntSave = (HFONT)SelectObject(hdc, GetStockObject(DEFAULT_GUI_FONT)); - GetTextExtentPoint32(hdc, m_proto_interface->m_tszUserName, (int)mir_tstrlen(m_proto_interface->m_tszUserName), &sz); - sz.cx += GetSystemMetrics(SM_CXSMICON) * 3; - SelectObject(hdc, hFntSave); - ReleaseDC(m_hwndStatus, hdc); - - RECT rcStatus; GetWindowRect(m_hwndStatus, &rcStatus); - int parts[] = { rcStatus.right-rcStatus.left - sz.cx, -1 }; - SendMessage(m_hwndStatus, SB_SETPARTS, 2, (LPARAM)parts); - SendMessage(m_hwndStatus, SB_SETICON, 1, (LPARAM)LoadSkinnedProtoIcon(m_proto_interface->m_szModuleName, m_proto_interface->m_iStatus)); - SendMessage(m_hwndStatus, SB_SETTEXT, 1, (LPARAM)m_proto_interface->m_tszUserName); -} - -///////////////////////////////////////////////////////////////////////////////////////// -// Misc utilities - -int UIEmulateBtnClick(HWND hwndDlg, UINT idcButton) -{ - if (IsWindowEnabled(GetDlgItem(hwndDlg, idcButton))) - PostMessage(hwndDlg, WM_COMMAND, MAKEWPARAM(idcButton, BN_CLICKED), (LPARAM)GetDlgItem(hwndDlg, idcButton)); - return 0; -} - -void UIShowControls(HWND hwndDlg, int *idList, int nCmdShow) -{ - for (; *idList; ++idList) - ShowWindow(GetDlgItem(hwndDlg, *idList), nCmdShow); -} -- cgit v1.2.3