X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b07664068bc48173d08e3146ca05dceac275aa6a..51dc95a4c8ccb00741be48f6353749ada3e9f39a:/src/msw/treectrl.cpp diff --git a/src/msw/treectrl.cpp b/src/msw/treectrl.cpp index f42d35f685..e34ecfac62 100644 --- a/src/msw/treectrl.cpp +++ b/src/msw/treectrl.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: treectrl.cpp +// Name: src/msw/treectrl.cpp // Purpose: wxTreeCtrl // Author: Julian Smart // Modified by: Vadim Zeitlin to be less MSW-specific on 10.10.98 @@ -16,6 +16,7 @@ // ---------------------------------------------------------------------------- // headers // ---------------------------------------------------------------------------- + #ifdef __GNUG__ #pragma implementation "treectrl.h" #endif @@ -27,9 +28,12 @@ #pragma hdrstop #endif +#if wxUSE_TREECTRL + #include "wx/msw/private.h" -// Set this to 1 to be _absolutely_ sure that repainting will work for all comctl32.dll versions +// Set this to 1 to be _absolutely_ sure that repainting will work for all +// comctl32.dll versions #define wxUSE_COMCTL32_SAFELY 0 // Mingw32 is a bit mental even though this is done in winundef @@ -54,7 +58,7 @@ #include "wx/msw/gnuwin32/extra.h" #endif -#if defined(__WIN95__) && !(defined(__GNUWIN32_OLD__) || defined(__TWIN32__)) +#if defined(__WIN95__) && !((defined(__GNUWIN32_OLD__) || defined(__TWIN32__)) && !defined(__CYGWIN10__)) #include #endif @@ -1042,6 +1046,7 @@ void wxTreeCtrl::SetItemTextColour(const wxTreeItemId& item, } attr->SetTextColour(col); + Refresh(); } void wxTreeCtrl::SetItemBackgroundColour(const wxTreeItemId& item, @@ -1058,6 +1063,7 @@ void wxTreeCtrl::SetItemBackgroundColour(const wxTreeItemId& item, } attr->SetBackgroundColour(col); + Refresh(); } void wxTreeCtrl::SetItemFont(const wxTreeItemId& item, const wxFont& font) @@ -1073,6 +1079,7 @@ void wxTreeCtrl::SetItemFont(const wxTreeItemId& item, const wxFont& font) } attr->SetFont(font); + Refresh(); } // ---------------------------------------------------------------------------- @@ -1639,6 +1646,7 @@ wxTextCtrl* wxTreeCtrl::EditLabel(const wxTreeItemId& item, } m_textCtrl = (wxTextCtrl *)textControlClass->CreateObject(); + m_textCtrl->SetParent(this); m_textCtrl->SetHWND((WXHWND)hWnd); m_textCtrl->SubclassWin((WXHWND)hWnd); @@ -1778,7 +1786,6 @@ long wxTreeCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam) { bool processed = FALSE; long rc = 0; - bool isMultiple = (GetWindowStyle() & wxTR_MULTIPLE) != 0; if ( (nMsg >= WM_MOUSEFIRST) && (nMsg <= WM_MOUSELAST) ) @@ -1970,7 +1977,6 @@ long wxTreeCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam) } } #endif // !wxUSE_CHECKBOXES_IN_MULTI_SEL_TREE - if ( !processed ) rc = wxControl::MSWWindowProc(nMsg, wParam, lParam); @@ -2062,9 +2068,6 @@ bool wxTreeCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result) } case TVN_ITEMEXPANDING: - event.m_code = FALSE; - // fall through - case TVN_ITEMEXPANDED: { NM_TREEVIEW* tv = (NM_TREEVIEW*)lParam; @@ -2096,7 +2099,13 @@ bool wxTreeCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result) eventType = wxEVT_COMMAND_TREE_KEY_DOWN; TV_KEYDOWN *info = (TV_KEYDOWN *)lParam; - event.m_code = wxCharCodeMSWToWX(info->wVKey); + // we pass 0 as last CreateKeyEvent() parameter because we + // don't have access to the real key press flags here - but as + // it is only used to determin wxKeyEvent::m_altDown flag it's + // not too bad + event.m_evtKey = CreateKeyEvent(wxEVT_KEY_DOWN, + wxCharCodeMSWToWX(info->wVKey), + 0); // a separate event for Space/Return if ( !wxIsCtrlDown() && !wxIsShiftDown() && @@ -2133,19 +2142,19 @@ bool wxTreeCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result) } break; -#if defined(_WIN32_IE) && _WIN32_IE >= 0x300 && !wxUSE_COMCTL32_SAFELY +#if defined(_WIN32_IE) && _WIN32_IE >= 0x300 && !wxUSE_COMCTL32_SAFELY && !( defined(__GNUWIN32__) && !wxCHECK_W32API_VERSION( 1, 0 ) ) case NM_CUSTOMDRAW: { LPNMTVCUSTOMDRAW lptvcd = (LPNMTVCUSTOMDRAW)lParam; NMCUSTOMDRAW& nmcd = lptvcd->nmcd; - switch( nmcd.dwDrawStage ) + switch ( nmcd.dwDrawStage ) { case CDDS_PREPAINT: // if we've got any items with non standard attributes, // notify us before painting each item *result = m_hasAnyAttr ? CDRF_NOTIFYITEMDRAW : CDRF_DODEFAULT; - return TRUE; + break; case CDDS_ITEMPREPAINT: { @@ -2155,7 +2164,8 @@ bool wxTreeCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result) if ( !attr ) { // nothing to do for this item - return CDRF_DODEFAULT; + *result = CDRF_DODEFAULT; + break; } HFONT hFont; @@ -2218,16 +2228,16 @@ bool wxTreeCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result) { *result = CDRF_DODEFAULT; } - - return TRUE; } + break; default: *result = CDRF_DODEFAULT; - return TRUE; } } -// break; // can never be reached + + // we always process it + return TRUE; #endif // _WIN32_IE >= 0x300 case NM_DBLCLK: @@ -2378,9 +2388,9 @@ bool wxTreeCtrl::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result) // for the other messages the return value is ignored and there is // nothing special to do } - return processed; } #endif // __WIN95__ +#endif // wxUSE_TREECTRL