From bfc7f00a09d0e845f182b0b69642d63be18c7f91 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Wed, 20 May 2015 19:38:58 +0000 Subject: tabbed control validator git-svn-id: http://svn.miranda-ng.org/main/trunk@13722 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- src/mir_core/src/mir_core.def | 3 + src/mir_core/src/mir_core64.def | 3 + src/mir_core/src/ui_utils.cpp | 191 +++++++++++++++++++++------------------- 3 files changed, 104 insertions(+), 93 deletions(-) (limited to 'src/mir_core') diff --git a/src/mir_core/src/mir_core.def b/src/mir_core/src/mir_core.def index 0373655320..b2157d77e4 100644 --- a/src/mir_core/src/mir_core.def +++ b/src/mir_core/src/mir_core.def @@ -1090,3 +1090,6 @@ Proto_RegisterModule @1074 NONAME ?UnselectAll@CCtrlTreeView@@QAEXXZ @1093 NONAME ?MoveItemAbove@CCtrlTreeView@@AAEPAU_TREEITEM@@PAU2@0@Z @1094 NONAME ?GetCurrPage@CCtrlPages@@AAEPAUTPageInfo@1@XZ @1095 NONAME +?Fail@CDlgBase@@QAEXXZ @1096 NONAME +?OnApply@CCtrlPages@@MAEXXZ @1097 NONAME +?OnReset@CCtrlPages@@MAEXXZ @1098 NONAME diff --git a/src/mir_core/src/mir_core64.def b/src/mir_core/src/mir_core64.def index 29ae97a79f..3b8d10cae3 100644 --- a/src/mir_core/src/mir_core64.def +++ b/src/mir_core/src/mir_core64.def @@ -1090,3 +1090,6 @@ Proto_RegisterModule @1074 NONAME ?UnselectAll@CCtrlTreeView@@QEAAXXZ @1093 NONAME ?MoveItemAbove@CCtrlTreeView@@AEAAPEAU_TREEITEM@@PEAU2@0@Z @1094 NONAME ?GetCurrPage@CCtrlPages@@AEAAPEAUTPageInfo@1@XZ @1095 NONAME +?Fail@CDlgBase@@QEAAXXZ @1096 NONAME +?OnApply@CCtrlPages@@MEAAXXZ @1097 NONAME +?OnReset@CCtrlPages@@MEAAXXZ @1098 NONAME diff --git a/src/mir_core/src/ui_utils.cpp b/src/mir_core/src/ui_utils.cpp index 53b4cc5f0e..c560d78643 100644 --- a/src/mir_core/src/ui_utils.cpp +++ b/src/mir_core/src/ui_utils.cpp @@ -178,8 +178,10 @@ INT_PTR CDlgBase::DlgProc(UINT msg, WPARAM wParam, LPARAM lParam) NMHDR *pnmh = (NMHDR *)lParam; if (pnmh->idFrom == 0) { if (pnmh->code == PSN_APPLY) { + m_lresult = true; NotifyControls(&CCtrlBase::OnApply); - OnApply(); + if (m_lresult) + OnApply(); } else if (pnmh->code == PSN_RESET) { NotifyControls(&CCtrlBase::OnReset); @@ -2063,8 +2065,8 @@ void CCtrlPages::OnInit() CSuper::OnInit(); Subclass(); - for (int i = 0; i < m_pages.getCount(); i++) { - TPageInfo *p = m_pages[i]; + for (int i = 0; i < m_pages.getCount(); i++) { + TPageInfo *p = m_pages[i]; TCITEM tci = { 0 }; tci.mask = TCIF_PARAM | TCIF_TEXT; tci.lParam = (LPARAM)p; @@ -2082,25 +2084,25 @@ void CCtrlPages::OnInit() p->m_pageId = TabCtrl_InsertItem(m_hwnd, TabCtrl_GetItemCount(m_hwnd), &tci); } - ::SetWindowLong(m_hwnd, GWL_EXSTYLE, ::GetWindowLong(m_hwnd, GWL_EXSTYLE) | WS_EX_CONTROLPARENT); + ::SetWindowLongPtr(m_hwnd, GWL_EXSTYLE, ::GetWindowLongPtr(m_hwnd, GWL_EXSTYLE) | WS_EX_CONTROLPARENT); TPageInfo *info = GetCurrPage(); if (info) { m_pActivePage = info->m_pDlg; ShowPage(m_pActivePage); - PSHNOTIFY pshn; - pshn.hdr.code = PSN_INFOCHANGED; - pshn.hdr.hwndFrom = m_pActivePage->GetHwnd(); - pshn.hdr.idFrom = 0; - pshn.lParam = 0; - SendMessage(pshn.hdr.hwndFrom, WM_NOTIFY, 0, (LPARAM)&pshn); - } + PSHNOTIFY pshn; + pshn.hdr.code = PSN_INFOCHANGED; + pshn.hdr.hwndFrom = m_pActivePage->GetHwnd(); + pshn.hdr.idFrom = 0; + pshn.lParam = 0; + SendMessage(pshn.hdr.hwndFrom, WM_NOTIFY, 0, (LPARAM)&pshn); + } } LRESULT CCtrlPages::CustomWndProc(UINT msg, WPARAM wParam, LPARAM lParam) { - PSHNOTIFY pshn; + PSHNOTIFY pshn; switch (msg) { case WM_SIZE: @@ -2108,28 +2110,28 @@ LRESULT CCtrlPages::CustomWndProc(UINT msg, WPARAM wParam, LPARAM lParam) GetClientRect(m_hwnd, &rc); TabCtrl_AdjustRect(m_hwnd, FALSE, &rc); - for (int i = 0; i < m_pages.getCount(); i++) { - TPageInfo *p = m_pages[i]; - if (p->m_pDlg->GetHwnd() != NULL) + for (int i = 0; i < m_pages.getCount(); i++) { + TPageInfo *p = m_pages[i]; + if (p->m_pDlg->GetHwnd() != NULL) SetWindowPos(m_pActivePage->GetHwnd(), HWND_TOP, rc.left, rc.top, 0, 0, SWP_NOSIZE | SWP_SHOWWINDOW); - } + } break; - case PSM_CHANGED: + case PSM_CHANGED: if (TPageInfo *info = GetCurrPage()) - info->m_bChanged = TRUE; - return TRUE; - - case PSM_FORCECHANGED: - pshn.hdr.code = PSN_INFOCHANGED; - pshn.hdr.idFrom = 0; - pshn.lParam = 0; - for (int i = 0; i < m_pages.getCount(); i++) { - pshn.hdr.hwndFrom = m_pages[i]->m_pDlg->GetHwnd(); - if (pshn.hdr.hwndFrom != NULL) - SendMessage(pshn.hdr.hwndFrom, WM_NOTIFY, 0, (LPARAM)&pshn); - } - break; + info->m_bChanged = TRUE; + return TRUE; + + case PSM_FORCECHANGED: + pshn.hdr.code = PSN_INFOCHANGED; + pshn.hdr.idFrom = 0; + pshn.lParam = 0; + for (int i = 0; i < m_pages.getCount(); i++) { + pshn.hdr.hwndFrom = m_pages[i]->m_pDlg->GetHwnd(); + if (pshn.hdr.hwndFrom != NULL) + SendMessage(pshn.hdr.hwndFrom, WM_NOTIFY, 0, (LPARAM)&pshn); + } + break; } return CSuper::CustomWndProc(msg, wParam, lParam); @@ -2182,32 +2184,32 @@ void CCtrlPages::ShowPage(CDlgBase *pDlg) EnableThemeDialogTexture(pDlg->GetHwnd(), ETDT_ENABLETAB); - PSHNOTIFY pshn; - pshn.hdr.code = PSN_INFOCHANGED; - pshn.hdr.hwndFrom = pDlg->GetHwnd(); - pshn.hdr.idFrom = 0; - pshn.lParam = 0; - SendMessage(pshn.hdr.hwndFrom, WM_NOTIFY, 0, (LPARAM)&pshn); - } - ShowWindow(pDlg->GetHwnd(), SW_SHOW); + PSHNOTIFY pshn; + pshn.hdr.code = PSN_INFOCHANGED; + pshn.hdr.hwndFrom = pDlg->GetHwnd(); + pshn.hdr.idFrom = 0; + pshn.lParam = 0; + SendMessage(pshn.hdr.hwndFrom, WM_NOTIFY, 0, (LPARAM)&pshn); + } + ShowWindow(pDlg->GetHwnd(), SW_SHOW); } BOOL CCtrlPages::OnNotify(int /*idCtrl*/, NMHDR *pnmh) { TPageInfo *info; - PSHNOTIFY pshn; + PSHNOTIFY pshn; switch (pnmh->code) { case TCN_SELCHANGING: if (info = GetCurrPage()) { - pshn.hdr.code = PSN_KILLACTIVE; - pshn.hdr.hwndFrom = info->m_pDlg->GetHwnd(); - pshn.hdr.idFrom = 0; - pshn.lParam = 0; - if (SendMessage(pshn.hdr.hwndFrom, WM_NOTIFY, 0, (LPARAM)&pshn)) { - SetWindowLongPtr(GetParent()->GetHwnd(), DWLP_MSGRESULT, TRUE); - return TRUE; - } + pshn.hdr.code = PSN_KILLACTIVE; + pshn.hdr.hwndFrom = info->m_pDlg->GetHwnd(); + pshn.hdr.idFrom = 0; + pshn.lParam = 0; + if (SendMessage(pshn.hdr.hwndFrom, WM_NOTIFY, 0, (LPARAM)&pshn)) { + SetWindowLongPtr(GetParent()->GetHwnd(), DWLP_MSGRESULT, TRUE); + return TRUE; + } } return TRUE; @@ -2229,51 +2231,54 @@ BOOL CCtrlPages::OnNotify(int /*idCtrl*/, NMHDR *pnmh) void CCtrlPages::OnReset() { CSuper::OnReset(); - - PSHNOTIFY pshn; - pshn.hdr.code = PSN_INFOCHANGED; - pshn.hdr.idFrom = 0; - pshn.lParam = 0; - - for (int i = 0; i < m_pages.getCount(); i++) { - TPageInfo *p = m_pages[i]; - if (p->m_pDlg->GetHwnd() == NULL || !p->m_bChanged) - continue; - - pshn.hdr.hwndFrom = p->m_pDlg->GetHwnd(); - SendMessage(pshn.hdr.hwndFrom, WM_NOTIFY, 0, (LPARAM)&pshn); + + PSHNOTIFY pshn; + pshn.hdr.code = PSN_INFOCHANGED; + pshn.hdr.idFrom = 0; + pshn.lParam = 0; + + for (int i = 0; i < m_pages.getCount(); i++) { + TPageInfo *p = m_pages[i]; + if (p->m_pDlg->GetHwnd() == NULL || !p->m_bChanged) + continue; + + pshn.hdr.hwndFrom = p->m_pDlg->GetHwnd(); + SendMessage(pshn.hdr.hwndFrom, WM_NOTIFY, 0, (LPARAM)&pshn); } } void CCtrlPages::OnApply() { - PSHNOTIFY pshn; - pshn.hdr.idFrom = 0; - pshn.lParam = 0; - - if (m_pActivePage != NULL) { - pshn.hdr.code = PSN_KILLACTIVE; - pshn.hdr.hwndFrom = m_pActivePage->GetHwnd(); - if (SendMessage(pshn.hdr.hwndFrom, WM_NOTIFY, 0, (LPARAM)&pshn)) - return; - } - - pshn.hdr.code = PSN_APPLY; - for (int i = 0; i < m_pages.getCount(); i++) { - TPageInfo *p = m_pages[i]; - if (p->m_pDlg->GetHwnd() == NULL || !p->m_bChanged) - continue; - - pshn.hdr.hwndFrom = p->m_pDlg->GetHwnd(); - SendMessage(pshn.hdr.hwndFrom, WM_NOTIFY, 0, (LPARAM)&pshn); - if (GetWindowLongPtr(pshn.hdr.hwndFrom, DWLP_MSGRESULT) == PSNRET_INVALID_NOCHANGEPAGE) { - TabCtrl_SetCurSel(m_hwnd, p->m_pageId); - if (m_pActivePage != NULL) - ShowWindow(m_pActivePage->GetHwnd(), SW_HIDE); - m_pActivePage = p->m_pDlg; - ShowWindow(m_pActivePage->GetHwnd(), SW_SHOW); - return; - } + PSHNOTIFY pshn; + pshn.hdr.idFrom = 0; + pshn.lParam = 0; + + if (m_pActivePage != NULL) { + pshn.hdr.code = PSN_KILLACTIVE; + pshn.hdr.hwndFrom = m_pActivePage->GetHwnd(); + if (SendMessage(pshn.hdr.hwndFrom, WM_NOTIFY, 0, (LPARAM)&pshn)) { + m_parentWnd->Fail(); + return; + } + } + + pshn.hdr.code = PSN_APPLY; + for (int i = 0; i < m_pages.getCount(); i++) { + TPageInfo *p = m_pages[i]; + if (p->m_pDlg->GetHwnd() == NULL || !p->m_bChanged) + continue; + + pshn.hdr.hwndFrom = p->m_pDlg->GetHwnd(); + SendMessage(pshn.hdr.hwndFrom, WM_NOTIFY, 0, (LPARAM)&pshn); + if (GetWindowLongPtr(pshn.hdr.hwndFrom, DWLP_MSGRESULT) == PSNRET_INVALID_NOCHANGEPAGE) { + TabCtrl_SetCurSel(m_hwnd, p->m_pageId); + if (m_pActivePage != NULL) + ShowWindow(m_pActivePage->GetHwnd(), SW_HIDE); + m_pActivePage = p->m_pDlg; + ShowWindow(m_pActivePage->GetHwnd(), SW_SHOW); + m_parentWnd->Fail(); + return; + } } CSuper::OnApply(); @@ -2281,12 +2286,12 @@ void CCtrlPages::OnApply() void CCtrlPages::OnDestroy() { - for (int i = 0; i < m_pages.getCount(); i++) { - TPageInfo *p = m_pages[i]; - if (p->m_pDlg->GetHwnd()) - p->m_pDlg->Close(); - delete p; - } + for (int i = 0; i < m_pages.getCount(); i++) { + TPageInfo *p = m_pages[i]; + if (p->m_pDlg->GetHwnd()) + p->m_pDlg->Close(); + delete p; + } TabCtrl_DeleteAllItems(m_hwnd); -- cgit v1.2.3