From 3e9af289ed81a98bbbf9bb183d0ed03ac627ba32 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Tue, 10 Feb 2004 18:58:27 +0000 Subject: [PATCH] added wxTreeCtrl::UnselectItem() and ToggleItemSelection() (includes patch 832281) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@25714 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- docs/latex/wx/treectrl.tex | 94 +++++++++++++++++++++++++++++++++++++- include/wx/msw/treectrl.h | 7 ++- src/msw/treectrl.cpp | 34 +++++++++----- 3 files changed, 121 insertions(+), 14 deletions(-) diff --git a/docs/latex/wx/treectrl.tex b/docs/latex/wx/treectrl.tex index 7f5a1b3eb7..fb72fb3618 100644 --- a/docs/latex/wx/treectrl.tex +++ b/docs/latex/wx/treectrl.tex @@ -110,6 +110,7 @@ to a newer version: see \latexignore{\rtfignore{\wxheading{Members}}} + \membersection{wxTreeCtrl::wxTreeCtrl}\label{wxtreectrlconstr} \func{}{wxTreeCtrl}{\void} @@ -143,12 +144,14 @@ appropriately.} \helpref{wxTreeCtrl::Create}{wxtreectrlcreate}, \helpref{wxValidator}{wxvalidator} + \membersection{wxTreeCtrl::\destruct{wxTreeCtrl}} \func{void}{\destruct{wxTreeCtrl}}{\void} Destructor, destroying the list control. + \membersection{wxTreeCtrl::AddRoot}\label{wxtreectrladdroot} \func{wxTreeItemId}{AddRoot}{\param{const wxString\&}{ text}, @@ -162,6 +165,7 @@ selected items, respectively. If {\it image} > -1 and {\it selImage} is -1, the same image is used for both selected and unselected items. + \membersection{wxTreeCtrl::AppendItem}\label{wxtreectrlappenditem} \func{wxTreeItemId}{AppendItem}{\param{const wxTreeItemId\& }{parent}, \param{const wxString\&}{ text}, @@ -175,6 +179,7 @@ selected items, respectively. If {\it image} > -1 and {\it selImage} is -1, the same image is used for both selected and unselected items. + \membersection{wxTreeCtrl::AssignButtonsImageList}\label{wxtreectrlassignbuttonsimagelist} \func{void}{AssignButtonsImageList}{\param{wxImageList*}{ imageList}} @@ -191,6 +196,7 @@ This function is only available in the generic version. See also \helpref{SetButtonsImageList}{wxtreectrlsetbuttonsimagelist}. + \membersection{wxTreeCtrl::AssignImageList}\label{wxtreectrlassignimagelist} \func{void}{AssignImageList}{\param{wxImageList*}{ imageList}} @@ -201,6 +207,7 @@ be automatically deleted by wxTreeCtrl as appropriate See also \helpref{SetImageList}{wxtreectrlsetimagelist}. + \membersection{wxTreeCtrl::AssignStateImageList}\label{wxtreectrlassignstateimagelist} \func{void}{AssignStateImageList}{\param{wxImageList*}{ imageList}} @@ -212,18 +219,21 @@ be automatically deleted by wxTreeCtrl as appropriate See also \helpref{SetStateImageList}{wxtreectrlsetstateimagelist}. + \membersection{wxTreeCtrl::Collapse}\label{wxtreectrlcollapse} \func{void}{Collapse}{\param{const wxTreeItemId\&}{ item}} Collapses the given item. + \membersection{wxTreeCtrl::CollapseAndReset}\label{wxtreectrlcollapseandreset} \func{void}{CollapseAndReset}{\param{const wxTreeItemId\&}{ item}} Collapses the given item and removes all children. + \membersection{wxTreeCtrl::Create}\label{wxtreectrlcreate} \func{bool}{wxTreeCtrl}{\param{wxWindow*}{ parent}, \param{wxWindowID}{ id},\rtfsp @@ -232,6 +242,7 @@ Collapses the given item and removes all children. Creates the tree control. See \helpref{wxTreeCtrl::wxTreeCtrl}{wxtreectrlconstr} for further details. + \membersection{wxTreeCtrl::Delete}\label{wxtreectrldelete} \func{void}{Delete}{\param{const wxTreeItemId\&}{ item}} @@ -241,6 +252,7 @@ generated. This function may cause a subsequent call to GetNextChild to fail. + \membersection{wxTreeCtrl::DeleteAllItems}\label{wxtreectrldeleteallitems} \func{void}{DeleteAllItems}{\void} @@ -249,6 +261,7 @@ Deletes all the items in the control. Note that this may not generate {\tt EVT\_TREE\_DELETE\_ITEM} events under some Windows versions although normally such event is generated for each removed item. + \membersection{wxTreeCtrl::DeleteChildren}\label{wxtreectrldeletechildren} \func{void}{DeleteChildren}{\param{const wxTreeItemId\& }{item}} @@ -261,6 +274,7 @@ If you have called \helpref{wxTreeCtrl::SetItemHasChildren}{wxtreectrlsetitemhas may need to call it again since {\it DeleteChildren} does not automatically clear the setting. + \membersection{wxTreeCtrl::EditLabel}\label{wxtreectrleditlabel} \func{void}{EditLabel}{\param{const wxTreeItemId\&}{ item}} @@ -278,6 +292,7 @@ will be sent which can be vetoed as well. \helpref{wxTreeCtrl::EndEditLabel}{wxtreectrlendeditlabel}, \helpref{wxTreeEvent}{wxtreeevent} + \membersection{wxTreeCtrl::EndEditLabel}\label{wxtreectrlendeditlabel} \func{void}{EndEditLabel}{\param{bool }{cancelEdit}} @@ -290,18 +305,21 @@ This function is currently supported under Windows only. \helpref{wxTreeCtrl::EditLabel}{wxtreectrleditlabel} + \membersection{wxTreeCtrl::EnsureVisible}\label{wxtreectrlensurevisible} \func{void}{EnsureVisible}{\param{const wxTreeItemId\&}{ item}} Scrolls and/or expands items to ensure that the given item is visible. + \membersection{wxTreeCtrl::Expand}\label{wxtreectrlexpand} \func{void}{Expand}{\param{const wxTreeItemId\&}{ item}} Expands the given item. + \membersection{wxTreeCtrl::GetBoundingRect}\label{wxtreectrlgetitemrect} \constfunc{bool}{GetBoundingRect}{\param{const wxTreeItemId\&}{ item}, \param{wxRect\& }{rect}, \param{bool }{textOnly = {\tt false}}} @@ -321,6 +339,7 @@ item is currently invisible. \perlnote{In wxPerl this method only takes the parameters {\tt item} and {\tt textOnly}, and returns a Wx::Rect ( or undef ).} + \membersection{wxTreeCtrl::GetButtonsImageList}\label{wxtreectrlgetbuttonsimagelist} \constfunc{wxImageList*}{GetButtonsImageList}{\void} @@ -329,6 +348,7 @@ Returns the buttons image list (from which application-defined button images are This function is only available in the generic version. + \membersection{wxTreeCtrl::GetChildrenCount}\label{wxtreectrlgetchildrencount} \constfunc{size\_t}{GetChildrenCount}{\param{const wxTreeItemId\&}{ item}, \param{bool}{ recursively = {\tt true}}} @@ -336,12 +356,14 @@ This function is only available in the generic version. Returns the number of items in the branch. If {\it recursively} is {\tt true}, returns the total number of descendants, otherwise only one level of children is counted. + \membersection{wxTreeCtrl::GetCount}\label{wxtreectrlgetcount} \constfunc{int}{GetCount}{\void} Returns the number of items in the control. + \membersection{wxTreeCtrl::GetEditControl}\label{wxtreectrlgeteditcontrol} \constfunc{wxTextCtrl *}{GetEditControl}{\void} @@ -351,6 +373,7 @@ if no label is being edited. {\bf NB:} It is currently only implemented for wxMSW. + \membersection{wxTreeCtrl::GetFirstChild}\label{wxtreectrlgetfirstchild} \constfunc{wxTreeItemId}{GetFirstChild}{\param{const wxTreeItemId\&}{ item}, \param{wxTreeItemIdValue \& }{cookie}} @@ -376,30 +399,35 @@ value are both returned as a tuple containing the two values.} \perlnote{In wxPerl this method only takes the {\tt item} parameter, and returns a 2-element list {\tt ( item, cookie )}.} + \membersection{wxTreeCtrl::GetFirstVisibleItem}\label{wxtreectrlgetfirstvisibleitem} \constfunc{wxTreeItemId}{GetFirstVisibleItem}{\void} Returns the first visible item. + \membersection{wxTreeCtrl::GetImageList}\label{wxtreectrlgetimagelist} \constfunc{wxImageList*}{GetImageList}{\void} Returns the normal image list. + \membersection{wxTreeCtrl::GetIndent}\label{wxtreectrlgetindent} \constfunc{int}{GetIndent}{\void} Returns the current tree control indentation. + \membersection{wxTreeCtrl::GetItemBackgroundColour}\label{wxtreectrlgetitembackgroundcolour} \constfunc{wxColour}{GetItemBackgroundColour}{\param{const wxTreeItemId\&}{ item}} Returns the background colour of the item. + \membersection{wxTreeCtrl::GetItemData}\label{wxtreectrlgetitemdata} \constfunc{wxTreeItemData*}{GetItemData}{\param{const wxTreeItemId\&}{ item}} @@ -427,12 +455,14 @@ tree->GetItemData( item )->GetData(); ).} \end{twocollist}} } + \membersection{wxTreeCtrl::GetItemFont}\label{wxtreectrlgetitemfont} \constfunc{wxFont}{GetItemFont}{\param{const wxTreeItemId\&}{ item}} Returns the font of the item label. + \membersection{wxTreeCtrl::GetItemImage}\label{wxtreectrlgetitemimage} \constfunc{int}{GetItemImage}{\param{const wxTreeItemId\& }{item}, @@ -451,18 +481,21 @@ item is expanded and the normal image is shown when it is collapsed) (which is shown when an expanded item is currently selected) \end{itemize} + \membersection{wxTreeCtrl::GetItemText}\label{wxtreectrlgetitemtext} \constfunc{wxString}{GetItemText}{\param{const wxTreeItemId\&}{ item}} Returns the item label. + \membersection{wxTreeCtrl::GetItemTextColour}\label{wxtreectrlgetitemtextcolour} \constfunc{wxColour}{GetItemTextColour}{\param{const wxTreeItemId\&}{ item}} Returns the colour of the item label. + \membersection{wxTreeCtrl::GetLastChild}\label{wxtreectrlgetlastchild} \constfunc{wxTreeItemId}{GetLastChild}{\param{const wxTreeItemId\&}{ item}} @@ -475,6 +508,7 @@ Returns the last child of the item (or an invalid tree item if this item has no \helpref{wxTreeCtrl::GetNextSibling}{wxtreectrlgetnextsibling}, \helpref{GetLastChild}{wxtreectrlgetlastchild} + \membersection{wxTreeCtrl::GetNextChild}\label{wxtreectrlgetnextchild} \constfunc{wxTreeItemId}{GetNextChild}{\param{const wxTreeItemId\&}{ item}, \param{wxTreeItemIdValue \& }{cookie}} @@ -499,6 +533,7 @@ value are both returned as a tuple containing the two values.} \perlnote{In wxPerl this method returns a 2-element list {\tt ( item, cookie )}, instead of modifying its parameters.} + \membersection{wxTreeCtrl::GetNextSibling}\label{wxtreectrlgetnextsibling} \constfunc{wxTreeItemId}{GetNextSibling}{\param{const wxTreeItemId\&}{ item}} @@ -511,18 +546,21 @@ Returns an invalid tree item if there are no further siblings. \helpref{wxTreeCtrl::GetPrevSibling}{wxtreectrlgetprevsibling} + \membersection{wxTreeCtrl::GetNextVisible}\label{wxtreectrlgetnextvisible} \constfunc{wxTreeItemId}{GetNextVisible}{\param{const wxTreeItemId\&}{ item}} Returns the next visible item. + \membersection{wxTreeCtrl::GetItemParent}\label{wxtreectrlgetitemparent} \constfunc{wxTreeItemId}{GetItemParent}{\param{const wxTreeItemId\&}{ item}} Returns the item's parent. + \membersection{wxTreeCtrl::GetParent}\label{wxtreectrlgetparent} \constfunc{wxTreeItemId}{GetParent}{\param{const wxTreeItemId\&}{ item}} @@ -535,6 +573,7 @@ Returns the item's parent. \pythonnote{This method is named {\tt GetItemParent} to avoid a name clash with wxWindow::GetParent.} + \membersection{wxTreeCtrl::GetPrevSibling}\label{wxtreectrlgetprevsibling} \constfunc{wxTreeItemId}{GetPrevSibling}{\param{const wxTreeItemId\&}{ item}} @@ -547,18 +586,21 @@ Returns an invalid tree item if there are no further children. \helpref{wxTreeCtrl::GetNextSibling}{wxtreectrlgetnextsibling} + \membersection{wxTreeCtrl::GetPrevVisible}\label{wxtreectrlgetprevvisible} \constfunc{wxTreeItemId}{GetPrevVisible}{\param{const wxTreeItemId\&}{ item}} Returns the previous visible item. + \membersection{wxTreeCtrl::GetRootItem}\label{wxtreectrlgetrootitem} \constfunc{wxTreeItemId}{GetRootItem}{\void} Returns the root item for the tree control. + \membersection{wxTreeCtrl::GetItemSelectedImage}\label{wxtreectrlgetitemselectedimage} \constfunc{int}{GetItemSelectedImage}{\param{const wxTreeItemId\& }{item}} @@ -566,6 +608,7 @@ Returns the root item for the tree control. Gets the selected item image (this function is obsolete, use {\tt GetItemImage(item, wxTreeItemIcon\_Selected}) instead). + \membersection{wxTreeCtrl::GetSelection}\label{wxtreectrlgetselection} \constfunc{wxTreeItemId}{GetSelection}{\void} @@ -575,6 +618,7 @@ This function only works with the controls without wxTR\_MULTIPLE style, use \helpref{GetSelections}{wxtreectrlgetselections} for the controls which do have this style. + \membersection{wxTreeCtrl::GetSelections}\label{wxtreectrlgetselections} \constfunc{size\_t}{GetSelections}{\param{wxArrayTreeItemIds\& }{selection}} @@ -590,12 +634,14 @@ and returns a Python list of {\tt wxTreeItemId}s.} \perlnote{In wxPerl this method takes no parameters and returns a list of {\tt Wx::TreeItemId}s.} + \membersection{wxTreeCtrl::GetStateImageList}\label{wxtreectrlgetstateimagelist} \constfunc{wxImageList*}{GetStateImageList}{\void} Returns the state image list (from which application-defined state images are taken). + \membersection{wxTreeCtrl::HitTest}\label{wxtreectrlhittest} \func{wxTreeItemId}{HitTest}{\param{const wxPoint\& }{point}, \param{int\& }{flags}} @@ -624,6 +670,7 @@ returned as a tuple.} \perlnote{In wxPerl this method only takes the {\tt point} parameter and returns a 2-element list {\tt ( item, flags )}.} + \membersection{wxTreeCtrl::InsertItem}\label{wxtreectrlinsertitem} \func{wxTreeItemId}{InsertItem}{\param{const wxTreeItemId\& }{parent}, \param{const wxTreeItemId\& }{previous}, \param{const wxString\&}{ text}, @@ -644,6 +691,7 @@ both selected and unselected items. \pythonnote{The second form of this method is called {\tt InsertItemBefore} in wxPython.} + \membersection{wxTreeCtrl::IsBold}\label{wxtreectrlisbold} \constfunc{bool}{IsBold}{\param{const wxTreeItemId\& }{item}} @@ -652,30 +700,35 @@ Returns {\tt true} if the given item is in bold state. See also: \helpref{SetItemBold}{wxtreectrlsetitembold} + \membersection{wxTreeCtrl::IsExpanded}\label{wxtreectrlisexpanded} \constfunc{bool}{IsExpanded}{\param{const wxTreeItemId\&}{ item}} Returns {\tt true} if the item is expanded (only makes sense if it has children). + \membersection{wxTreeCtrl::IsSelected}\label{wxtreectrlisselected} \constfunc{bool}{IsSelected}{\param{const wxTreeItemId\&}{ item}} Returns {\tt true} if the item is selected. + \membersection{wxTreeCtrl::IsVisible}\label{wxtreectrlisvisible} \constfunc{bool}{IsVisible}{\param{const wxTreeItemId\&}{ item}} Returns {\tt true} if the item is visible (it might be outside the view, or not expanded). + \membersection{wxTreeCtrl::ItemHasChildren}\label{wxtreectrlitemhaschildren} \constfunc{bool}{ItemHasChildren}{\param{const wxTreeItemId\&}{ item}} Returns {\tt true} if the item has children. + \membersection{wxTreeCtrl::OnCompareItems}\label{wxtreectrloncompareitems} \func{int}{OnCompareItems}{\param{const wxTreeItemId\& }{item1}, \param{const wxTreeItemId\& }{item2}} @@ -689,6 +742,7 @@ The base class version compares items alphabetically. See also: \helpref{SortChildren}{wxtreectrlsortchildren} + \membersection{wxTreeCtrl::PrependItem}\label{wxtreectrlprependitem} \func{wxTreeItemId}{PrependItem}{\param{const wxTreeItemId\& }{parent}, \param{const wxString\&}{ text}, @@ -702,17 +756,21 @@ selected items, respectively. If {\it image} > -1 and {\it selImage} is -1, the same image is used for both selected and unselected items. + \membersection{wxTreeCtrl::ScrollTo}\label{wxtreectrlscrollto} \func{void}{ScrollTo}{\param{const wxTreeItemId\&}{ item}} Scrolls the specified item into view. + \membersection{wxTreeCtrl::SelectItem}\label{wxtreectrlselectitem} -\func{bool}{SelectItem}{\param{const wxTreeItemId\&}{ item}} +\func{bool}{SelectItem}{\param{const wxTreeItemId\&}{ item}, \param{bool }{select = \true}} + +Selects the given item. In multiple selection controls, can be also used to +deselect a currently selected item if the value of \arg{select} is false. -Selects the given item. \membersection{wxTreeCtrl::SetButtonsImageList}\label{wxtreectrlsetbuttonsimagelist} @@ -730,12 +788,14 @@ This function is only available in the generic version. See also \helpref{AssignButtonsImageList}{wxtreectrlassignbuttonsimagelist}. + \membersection{wxTreeCtrl::SetIndent}\label{wxtreectrlsetindent} \func{void}{SetIndent}{\param{int }{indent}} Sets the indentation for the tree control. + \membersection{wxTreeCtrl::SetImageList}\label{wxtreectrlsetimagelist} \func{void}{SetImageList}{\param{wxImageList*}{ imageList}} @@ -746,12 +806,14 @@ Sets the normal image list. Image list assigned with this method will See also \helpref{AssignImageList}{wxtreectrlassignimagelist}. + \membersection{wxTreeCtrl::SetItemBackgroundColour}\label{wxtreectrlsetitembackgroundcolour} \func{void}{SetItemBackgroundColour}{\param{const wxTreeItemId\&}{ item}, \param{const wxColour\& }{col}} Sets the colour of the item's background. + \membersection{wxTreeCtrl::SetItemBold}\label{wxtreectrlsetitembold} \func{void}{SetItemBold}{\param{const wxTreeItemId\& }{item}, \param{bool}{ bold = {\tt true}}} @@ -761,6 +823,7 @@ the normal state. See also: \helpref{IsBold}{wxtreectrlisbold} + \membersection{wxTreeCtrl::SetItemData}\label{wxtreectrlsetitemdata} \func{void}{SetItemData}{\param{const wxTreeItemId\&}{ item}, \param{wxTreeItemData* }{data}} @@ -783,6 +846,7 @@ tree->GetItemData( item )->SetData( data ); ).} \end{twocollist}} } + \membersection{wxTreeCtrl::SetItemFont}\label{wxtreectrlsetitemfont} \func{void}{SetItemFont}{\param{const wxTreeItemId\&}{ item}, \param{const wxFont\& }{font}} @@ -795,6 +859,7 @@ although font attributes may vary. \helpref{SetItemBold}{wxtreectrlsetitembold} + \membersection{wxTreeCtrl::SetItemHasChildren}\label{wxtreectrlsetitemhaschildren} \func{void}{SetItemHasChildren}{\param{const wxTreeItemId\&}{ item}, \param{bool }{hasChildren = {\tt true}}} @@ -804,6 +869,7 @@ allow the user to expand the items which don't have any children now, but instead adding them only when needed, thus minimizing memory usage and loading time. + \membersection{wxTreeCtrl::SetItemImage}\label{wxtreectrlsetitemimage} \func{void}{SetItemImage}{\param{const wxTreeItemId\&}{ item}, @@ -812,24 +878,28 @@ usage and loading time. Sets the specified item image. See \helpref{GetItemImage}{wxtreectrlgetitemimage} for the description of the {\it which} parameter. + \membersection{wxTreeCtrl::SetItemSelectedImage}\label{wxtreectrlsetitemselectedimage} \func{void}{SetItemSelectedImage}{\param{const wxTreeItemId\&}{ item}, \param{int }{selImage}} Sets the selected item image (this function is obsolete, use {\tt SetItemImage(item, wxTreeItemIcon\_Selected}) instead). + \membersection{wxTreeCtrl::SetItemText}\label{wxtreectrlsetitemtext} \func{void}{SetItemText}{\param{const wxTreeItemId\&}{ item}, \param{const wxString\& }{text}} Sets the item label. + \membersection{wxTreeCtrl::SetItemTextColour}\label{wxtreectrlsetitemtextcolour} \func{void}{SetItemTextColour}{\param{const wxTreeItemId\&}{ item}, \param{const wxColour\& }{col}} Sets the colour of the item's text. + \membersection{wxTreeCtrl::SetStateImageList}\label{wxtreectrlsetstateimagelist} \func{void}{SetStateImageList}{\param{wxImageList*}{ imageList}} @@ -846,6 +916,7 @@ Sets the mode flags associated with the display of the tree control. The new mode takes effect immediately. (Generic only; MSW ignores changes.) + \membersection{wxTreeCtrl::SortChildren}\label{wxtreectrlsortchildren} \func{void}{SortChildren}{\param{const wxTreeItemId\&}{ item}} @@ -859,18 +930,29 @@ case-sensitive alphabetical order). \helpref{wxTreeItemData}{wxtreeitemdata}, \helpref{OnCompareItems}{wxtreectrloncompareitems} + \membersection{wxTreeCtrl::Toggle}\label{wxtreectrltoggle} \func{void}{Toggle}{\param{const wxTreeItemId\&}{ item}} Toggles the given item between collapsed and expanded states. + +\membersection{wxTreeCtrl::ToggleItemSelection}\label{wxtreectrltoggleitemselection} + +\func{void}{ToggleItemSelection}{\param{const wxTreeItemId\&}{ item}} + +Toggles the given item between selected and unselected states. For +multiselection controls only. + + \membersection{wxTreeCtrl::Unselect}\label{wxtreectrlunselect} \func{void}{Unselect}{\void} Removes the selection from the currently selected item (if any). + \membersection{wxTreeCtrl::UnselectAll}\label{wxtreectrlunselectall} \func{void}{UnselectAll}{\void} @@ -879,3 +961,11 @@ This function either behaves the same as \helpref{Unselect}{wxtreectrlunselect} if the control doesn't have wxTR\_MULTIPLE style, or removes the selection from all items if it does have this style. + +\membersection{wxTreeCtrl::UnselectItem}\label{wxtreectrlunselectitem} + +\func{void}{UnselectItem}{\param{const wxTreeItemId\& }{item}} + +Unselects the given item. This works in multiselection controls only. + + diff --git a/include/wx/msw/treectrl.h b/include/wx/msw/treectrl.h index 83b30bcff9..4a0a5278f8 100644 --- a/include/wx/msw/treectrl.h +++ b/include/wx/msw/treectrl.h @@ -317,7 +317,12 @@ public: // unselect all items (only makes sense for multiple selection control) void UnselectAll(); // select this item - void SelectItem(const wxTreeItemId& item); + void SelectItem(const wxTreeItemId& item, bool select = true); + // unselect this item + void UnselectItem(const wxTreeItemId& item); + // toggle item selection + void ToggleItemSelection(const wxTreeItemId& item); + // make sure this item is visible (expanding the parent item and/or // scrolling to this item if necessary) void EnsureVisible(const wxTreeItemId& item); diff --git a/src/msw/treectrl.cpp b/src/msw/treectrl.cpp index 26ba49eea1..d99f419e09 100644 --- a/src/msw/treectrl.cpp +++ b/src/msw/treectrl.cpp @@ -97,7 +97,7 @@ static bool IsItemSelected(HWND hwndTV, HTREEITEM hItem) return (tvi.state & TVIS_SELECTED) != 0; } -static void SelectItem(HWND hwndTV, HTREEITEM hItem, bool select = true) +static bool SelectItem(HWND hwndTV, HTREEITEM hItem, bool select = true) { TV_ITEM tvi; tvi.mask = TVIF_STATE | TVIF_HANDLE; @@ -108,7 +108,10 @@ static void SelectItem(HWND hwndTV, HTREEITEM hItem, bool select = true) if ( TreeView_SetItem(hwndTV, &tvi) == -1 ) { wxLogLastError(wxT("TreeView_SetItem")); + return false; } + + return true; } static inline void UnselectItem(HWND hwndTV, HTREEITEM htItem) @@ -1864,19 +1867,22 @@ void wxTreeCtrl::UnselectAll() } } -void wxTreeCtrl::SelectItem(const wxTreeItemId& item) +void wxTreeCtrl::SelectItem(const wxTreeItemId& item, bool select) { if ( m_windowStyle & wxTR_MULTIPLE ) { #if wxUSE_CHECKBOXES_IN_MULTI_SEL_TREE // selecting the item means checking it - SetItemCheck(item); + SetItemCheck(item, select); #else // !wxUSE_CHECKBOXES_IN_MULTI_SEL_TREE - ::SelectItem(GetHwnd(), HITEM(item)); + ::SelectItem(GetHwnd(), HITEM(item), select); #endif // wxUSE_CHECKBOXES_IN_MULTI_SEL_TREE/!wxUSE_CHECKBOXES_IN_MULTI_SEL_TREE } else { + wxASSERT_MSG( select, + _T("SelectItem(false) works only for multiselect") ); + // inspite of the docs (MSDN Jan 99 edition), we don't seem to receive // the notification from the control (i.e. TVN_SELCHANG{ED|ING}), so // send them ourselves @@ -1888,11 +1894,7 @@ void wxTreeCtrl::SelectItem(const wxTreeItemId& item) event.SetEventType(wxEVT_COMMAND_TREE_SEL_CHANGING); if ( !GetEventHandler()->ProcessEvent(event) || event.IsAllowed() ) { - if ( !TreeView_SelectItem(GetHwnd(), HITEM(item)) ) - { - wxLogLastError(wxT("TreeView_SelectItem")); - } - else + if ( ::SelectItem(GetHwnd(), HITEM(item), select) ) { event.SetEventType(wxEVT_COMMAND_TREE_SEL_CHANGED); (void)GetEventHandler()->ProcessEvent(event); @@ -1902,6 +1904,16 @@ void wxTreeCtrl::SelectItem(const wxTreeItemId& item) } } +void wxTreeCtrl::UnselectItem(const wxTreeItemId& item) +{ + SelectItem(item, false); +} + +void wxTreeCtrl::ToggleItemSelection(const wxTreeItemId& item) +{ + SelectItem(item, !IsSelected(item)); +} + void wxTreeCtrl::EnsureVisible(const wxTreeItemId& item) { // no error return @@ -2162,7 +2174,7 @@ long wxTreeCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam) SetFocus(); // toggle selected state - ToggleItemSelection(GetHwnd(), htItem); + ::ToggleItemSelection(GetHwnd(), htItem); ::SetFocus(GetHwnd(), htItem); @@ -2325,7 +2337,7 @@ long wxTreeCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam) { if ( bCtrl ) { - ToggleItemSelection(GetHwnd(), htSel); + ::ToggleItemSelection(GetHwnd(), htSel); } else { -- 2.45.2