made wxTreeCtrl::GetNextVisible() behave in the same way in Win32 as in the generic version and implemented GetPrevVisible() in the generic version
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@49085 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -195,6 +195,8 @@ All (GUI):
|
||||
- Added wxSYS_DCLICK_TIME system metric constant (Arne Steinarson)
|
||||
- Added wxApp::Get/SetAppDisplayName() (Brian A. Vanderburg II)
|
||||
- Added wxWindow::GetPopupMenuSelectionFromUser() (Arne Steinarson)
|
||||
- Implemented wxTreeCtrl::GetPrevVisible() in the generic version and made the
|
||||
behaviour of GetNextSibling() consistent between wxMSW and generic versions
|
||||
|
||||
wxGTK:
|
||||
|
||||
|
@@ -332,7 +332,7 @@ will be sent which can be vetoed as well.
|
||||
|
||||
\func{void}{EndEditLabel}{\param{bool }{cancelEdit}}
|
||||
|
||||
Ends label editing. If {\it cancelEdit} is {\tt true}, the edit will be cancelled.
|
||||
Ends label editing. If {\it cancelEdit} is \true, the edit will be cancelled.
|
||||
|
||||
This function is currently supported under Windows only.
|
||||
|
||||
@@ -371,13 +371,13 @@ Expands the given item and all its children recursively.
|
||||
|
||||
\membersection{wxTreeCtrl::GetBoundingRect}\label{wxtreectrlgetitemrect}
|
||||
|
||||
\constfunc{bool}{GetBoundingRect}{\param{const wxTreeItemId\&}{ item}, \param{wxRect\& }{rect}, \param{bool }{textOnly = {\tt false}}}
|
||||
\constfunc{bool}{GetBoundingRect}{\param{const wxTreeItemId\&}{ item}, \param{wxRect\& }{rect}, \param{bool }{textOnly = \false}}
|
||||
|
||||
Retrieves the rectangle bounding the {\it item}. If {\it textOnly} is {\tt true},
|
||||
Retrieves the rectangle bounding the {\it item}. If {\it textOnly} is \true,
|
||||
only the rectangle around the item's label will be returned, otherwise the
|
||||
item's image is also taken into account.
|
||||
|
||||
The return value is {\tt true} if the rectangle was successfully retrieved or {\tt false}
|
||||
The return value is \true if the rectangle was successfully retrieved or \false
|
||||
if it was not (in this case {\it rect} is not changed) -- for example, if the
|
||||
item is currently invisible.
|
||||
|
||||
@@ -404,9 +404,9 @@ This function is only available in the generic version.
|
||||
|
||||
\membersection{wxTreeCtrl::GetChildrenCount}\label{wxtreectrlgetchildrencount}
|
||||
|
||||
\constfunc{unsigned int}{GetChildrenCount}{\param{const wxTreeItemId\&}{ item}, \param{bool}{ recursively = {\tt true}}}
|
||||
\constfunc{unsigned int}{GetChildrenCount}{\param{const wxTreeItemId\&}{ item}, \param{bool}{ recursively = \true}}
|
||||
|
||||
Returns the number of items in the branch. If {\it recursively} is {\tt true}, returns the total number
|
||||
Returns the number of items in the branch. If {\it recursively} is \true, returns the total number
|
||||
of descendants, otherwise only one level of children is counted.
|
||||
|
||||
|
||||
@@ -439,7 +439,7 @@ to make these functions reentrant (i.e. allow more than one
|
||||
enumeration on one and the same object simultaneously). The cookie passed to
|
||||
GetFirstChild and GetNextChild should be the same variable.
|
||||
|
||||
Returns an invalid tree item (i.e. IsOk() returns {\tt false}) if there are no further children.
|
||||
Returns an invalid tree item (i.e. IsOk() returns \false) if there are no further children.
|
||||
|
||||
\wxheading{See also}
|
||||
|
||||
@@ -603,7 +603,10 @@ Returns an invalid tree item if there are no further siblings.
|
||||
|
||||
\constfunc{wxTreeItemId}{GetNextVisible}{\param{const wxTreeItemId\&}{ item}}
|
||||
|
||||
Returns the next visible item.
|
||||
Returns the next visible item or an invalid item if this item is the last
|
||||
visible one.
|
||||
|
||||
Notice that the \arg{item} itself must be visible.
|
||||
|
||||
|
||||
\membersection{wxTreeCtrl::GetItemParent}\label{wxtreectrlgetitemparent}
|
||||
@@ -630,7 +633,10 @@ Returns an invalid tree item if there are no further children.
|
||||
|
||||
\constfunc{wxTreeItemId}{GetPrevVisible}{\param{const wxTreeItemId\&}{ item}}
|
||||
|
||||
Returns the previous visible item.
|
||||
Returns the previous visible item or an invalid item if this item is the first
|
||||
visible one.
|
||||
|
||||
Notice that the \arg{item} itself must be visible.
|
||||
|
||||
|
||||
\membersection{wxTreeCtrl::GetQuickBestSize}\label{wxtreectrlgetquickbestsize}
|
||||
@@ -657,7 +663,7 @@ Returns the root item for the tree control.
|
||||
\constfunc{int}{GetItemSelectedImage}{\param{const wxTreeItemId\& }{item}}
|
||||
|
||||
Gets the selected item image (this function is obsolete, use
|
||||
{\tt GetItemImage(item, wxTreeItemIcon\_Selected}) instead).
|
||||
{\tt GetItemImage(item, wxTreeItemIcon\_Selected)} instead).
|
||||
|
||||
|
||||
\membersection{wxTreeCtrl::GetSelection}\label{wxtreectrlgetselection}
|
||||
@@ -747,7 +753,7 @@ both selected and unselected items.
|
||||
|
||||
\constfunc{bool}{IsBold}{\param{const wxTreeItemId\& }{item}}
|
||||
|
||||
Returns {\tt true} if the given item is in bold state.
|
||||
Returns \true if the given item is in bold state.
|
||||
|
||||
See also: \helpref{SetItemBold}{wxtreectrlsetitembold}
|
||||
|
||||
@@ -763,28 +769,28 @@ Returns \true if the control is empty (i.e. has no items, even no root one).
|
||||
|
||||
\constfunc{bool}{IsExpanded}{\param{const wxTreeItemId\&}{ item}}
|
||||
|
||||
Returns {\tt true} if the item is expanded (only makes sense if it has children).
|
||||
Returns \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.
|
||||
Returns \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).
|
||||
Returns \true if the item is visible on the screen.
|
||||
|
||||
|
||||
\membersection{wxTreeCtrl::ItemHasChildren}\label{wxtreectrlitemhaschildren}
|
||||
|
||||
\constfunc{bool}{ItemHasChildren}{\param{const wxTreeItemId\&}{ item}}
|
||||
|
||||
Returns {\tt true} if the item has children.
|
||||
Returns \true if the item has children.
|
||||
|
||||
|
||||
\membersection{wxTreeCtrl::OnCompareItems}\label{wxtreectrloncompareitems}
|
||||
@@ -879,9 +885,9 @@ 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}}}
|
||||
\func{void}{SetItemBold}{\param{const wxTreeItemId\& }{item}, \param{bool}{ bold = \true}}
|
||||
|
||||
Makes item appear in bold font if {\it bold} parameter is {\tt true} or resets it to
|
||||
Makes item appear in bold font if {\it bold} parameter is \true or resets it to
|
||||
the normal state.
|
||||
|
||||
See also: \helpref{IsBold}{wxtreectrlisbold}
|
||||
@@ -911,7 +917,7 @@ tree->GetItemData(item)->SetData(data).}
|
||||
|
||||
\membersection{wxTreeCtrl::SetItemDropHighlight}\label{wxtreectrlsetitemdrophighlight}
|
||||
|
||||
\func{void}{SetItemDropHighlight}{\param{const wxTreeItemId\&}{ item}, \param{bool}{highlight = {\tt true}}}
|
||||
\func{void}{SetItemDropHighlight}{\param{const wxTreeItemId\&}{ item}, \param{bool}{highlight = \true}}
|
||||
|
||||
Gives the item the visual feedback for Drag'n'Drop actions, which is
|
||||
useful if something is dragged from the outside onto the tree control
|
||||
@@ -933,7 +939,7 @@ although font attributes may vary.
|
||||
|
||||
\membersection{wxTreeCtrl::SetItemHasChildren}\label{wxtreectrlsetitemhaschildren}
|
||||
|
||||
\func{void}{SetItemHasChildren}{\param{const wxTreeItemId\&}{ item}, \param{bool }{hasChildren = {\tt true}}}
|
||||
\func{void}{SetItemHasChildren}{\param{const wxTreeItemId\&}{ item}, \param{bool }{hasChildren = \true}}
|
||||
|
||||
Force appearance of the button next to the item. This is useful to
|
||||
allow the user to expand the items which don't have any children now,
|
||||
@@ -954,7 +960,8 @@ for the description of the {\it which} parameter.
|
||||
|
||||
\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).
|
||||
Sets the selected item image (this function is obsolete, use
|
||||
{\tt SetItemImage(item, wxTreeItemIcon\_Selected)} instead).
|
||||
|
||||
|
||||
\membersection{wxTreeCtrl::SetItemText}\label{wxtreectrlsetitemtext}
|
||||
|
@@ -111,6 +111,13 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
|
||||
MENU_LINK(DecSpacing)
|
||||
MENU_LINK(ToggleIcon)
|
||||
MENU_LINK(SelectRoot)
|
||||
|
||||
MENU_LINK(ShowFirstVisible)
|
||||
#ifdef wxHAS_LAST_VISIBLE
|
||||
MENU_LINK(ShowLastVisible)
|
||||
#endif // wxHAS_LAST_VISIBLE
|
||||
MENU_LINK(ShowNextVisible)
|
||||
MENU_LINK(ShowPrevVisible)
|
||||
#undef MENU_LINK
|
||||
|
||||
END_EVENT_TABLE()
|
||||
@@ -140,7 +147,7 @@ BEGIN_EVENT_TABLE(MyTreeCtrl, wxTreeCtrl)
|
||||
EVT_TREE_KEY_DOWN(TreeTest_Ctrl, MyTreeCtrl::OnTreeKeyDown)
|
||||
EVT_TREE_ITEM_ACTIVATED(TreeTest_Ctrl, MyTreeCtrl::OnItemActivated)
|
||||
|
||||
// so many differents ways to handle right mouse button clicks...
|
||||
// so many different ways to handle right mouse button clicks...
|
||||
EVT_CONTEXT_MENU(MyTreeCtrl::OnContextMenu)
|
||||
// EVT_TREE_ITEM_MENU is the preferred event for creating context menus
|
||||
// on a tree control, because it includes the point of the click or item,
|
||||
@@ -254,6 +261,13 @@ MyFrame::MyFrame(const wxString& title, int x, int y, int w, int h)
|
||||
item_menu->Append(TreeTest_ClearBold, wxT("Make item ¬ bold"));
|
||||
item_menu->AppendSeparator();
|
||||
item_menu->Append(TreeTest_ToggleIcon, wxT("Toggle the item's &icon"));
|
||||
item_menu->AppendSeparator();
|
||||
item_menu->Append(TreeTest_ShowFirstVisible, wxT("Show &first visible"));
|
||||
#ifdef wxHAS_LAST_VISIBLE
|
||||
item_menu->Append(TreeTest_ShowLastVisible, wxT("Show &last visible"));
|
||||
#endif // wxHAS_LAST_VISIBLE
|
||||
item_menu->Append(TreeTest_ShowNextVisible, wxT("Show &next visible"));
|
||||
item_menu->Append(TreeTest_ShowPrevVisible, wxT("Show &previous visible"));
|
||||
|
||||
#ifndef NO_MULTIPLE_SELECTION
|
||||
item_menu->AppendSeparator();
|
||||
@@ -701,6 +715,38 @@ void MyFrame::OnToggleIcon(wxCommandEvent& WXUNUSED(event))
|
||||
m_treeCtrl->DoToggleIcon(item);
|
||||
}
|
||||
|
||||
void MyFrame::DoShowFirstOrLast(TreeFunc0_t pfn, const wxString& label)
|
||||
{
|
||||
const wxTreeItemId item = (m_treeCtrl->*pfn)();
|
||||
|
||||
if ( !item.IsOk() )
|
||||
wxLogMessage("There is no %s item", label);
|
||||
else
|
||||
wxLogMessage("The %s item is \"%s\"",
|
||||
label, m_treeCtrl->GetItemText(item));
|
||||
}
|
||||
|
||||
void MyFrame::DoShowNextOrPrev(TreeFunc1_t pfn, const wxString& label)
|
||||
{
|
||||
wxTreeItemId item = m_treeCtrl->GetSelection();
|
||||
|
||||
CHECK_ITEM( item );
|
||||
|
||||
if ( !m_treeCtrl->IsVisible(item) )
|
||||
{
|
||||
wxLogMessage("The selected item must be visible.");
|
||||
return;
|
||||
}
|
||||
|
||||
item = (m_treeCtrl->*pfn)(item);
|
||||
|
||||
if ( !item.IsOk() )
|
||||
wxLogMessage("There is no %s item", label);
|
||||
else
|
||||
wxLogMessage("The %s item is \"%s\"",
|
||||
label, m_treeCtrl->GetItemText(item));
|
||||
}
|
||||
|
||||
void MyFrame::OnSetFgColour(wxCommandEvent& WXUNUSED(event))
|
||||
{
|
||||
wxColour col = wxGetColourFromUser(this, m_treeCtrl->GetForegroundColour());
|
||||
|
@@ -225,6 +225,18 @@ public:
|
||||
|
||||
void OnToggleIcon(wxCommandEvent& event);
|
||||
|
||||
void OnShowFirstVisible(wxCommandEvent& WXUNUSED(event))
|
||||
{ DoShowFirstOrLast(&wxTreeCtrl::GetFirstVisibleItem, "first visible"); }
|
||||
#ifdef wxHAS_LAST_VISIBLE // we don't have it currently but may add later
|
||||
void OnShowLastVisible(wxCommandEvent& WXUNUSED(event))
|
||||
{ DoShowFirstOrLast(&wxTreeCtrl::GetLastVisibleItem, "last visible"); }
|
||||
#endif // wxHAS_LAST_VISIBLE
|
||||
|
||||
void OnShowNextVisible(wxCommandEvent& WXUNUSED(event))
|
||||
{ DoShowNextOrPrev(&wxTreeCtrl::GetNextVisible, "next visible"); }
|
||||
void OnShowPrevVisible(wxCommandEvent& WXUNUSED(event))
|
||||
{ DoShowNextOrPrev(&wxTreeCtrl::GetPrevVisible, "previous visible"); }
|
||||
|
||||
void OnIdle(wxIdleEvent& event);
|
||||
void OnSize(wxSizeEvent& event);
|
||||
|
||||
@@ -238,6 +250,14 @@ private:
|
||||
void CreateTreeWithDefStyle();
|
||||
void CreateTree(long style);
|
||||
|
||||
// common parts of OnShowFirst/LastVisible() and OnShowNext/PrevVisible()
|
||||
typedef wxTreeItemId (wxTreeCtrl::*TreeFunc0_t)() const;
|
||||
void DoShowFirstOrLast(TreeFunc0_t pfn, const wxString& label);
|
||||
|
||||
typedef wxTreeItemId (wxTreeCtrl::*TreeFunc1_t)(const wxTreeItemId&) const;
|
||||
void DoShowNextOrPrev(TreeFunc1_t pfn, const wxString& label);
|
||||
|
||||
|
||||
wxPanel *m_panel;
|
||||
MyTreeCtrl *m_treeCtrl;
|
||||
#if wxUSE_LOG
|
||||
@@ -297,5 +317,9 @@ enum
|
||||
TreeTest_Select,
|
||||
TreeTest_Unselect,
|
||||
TreeTest_SelectRoot,
|
||||
TreeTest_ShowFirstVisible,
|
||||
TreeTest_ShowLastVisible,
|
||||
TreeTest_ShowNextVisible,
|
||||
TreeTest_ShowPrevVisible,
|
||||
TreeTest_Ctrl = 1000
|
||||
};
|
||||
|
@@ -1315,6 +1315,7 @@ wxTreeItemId wxGenericTreeCtrl::GetFirstVisibleItem() const
|
||||
wxTreeItemId wxGenericTreeCtrl::GetNextVisible(const wxTreeItemId& item) const
|
||||
{
|
||||
wxCHECK_MSG( item.IsOk(), wxTreeItemId(), wxT("invalid tree item") );
|
||||
wxASSERT_MSG( IsVisible(item), wxT("this item itself should be visible") );
|
||||
|
||||
wxTreeItemId id = item;
|
||||
if (id.IsOk())
|
||||
@@ -1331,10 +1332,37 @@ wxTreeItemId wxGenericTreeCtrl::GetNextVisible(const wxTreeItemId& item) const
|
||||
wxTreeItemId wxGenericTreeCtrl::GetPrevVisible(const wxTreeItemId& item) const
|
||||
{
|
||||
wxCHECK_MSG( item.IsOk(), wxTreeItemId(), wxT("invalid tree item") );
|
||||
wxASSERT_MSG( IsVisible(item), wxT("this item itself should be visible") );
|
||||
|
||||
wxFAIL_MSG(wxT("not implemented"));
|
||||
// find out the starting point
|
||||
wxTreeItemId prevItem = GetPrevSibling(item);
|
||||
if ( !prevItem.IsOk() )
|
||||
{
|
||||
prevItem = GetItemParent(item);
|
||||
}
|
||||
|
||||
// find the first visible item after it
|
||||
while ( prevItem.IsOk() && !IsVisible(prevItem) )
|
||||
{
|
||||
prevItem = GetNext(prevItem);
|
||||
if ( !prevItem.IsOk() || prevItem == item )
|
||||
{
|
||||
// there are no visible items before item
|
||||
return wxTreeItemId();
|
||||
}
|
||||
}
|
||||
|
||||
// from there we must be able to navigate until this item
|
||||
while ( prevItem.IsOk() )
|
||||
{
|
||||
const wxTreeItemId nextItem = GetNextVisible(prevItem);
|
||||
if ( !nextItem.IsOk() || nextItem == item )
|
||||
break;
|
||||
|
||||
prevItem = nextItem;
|
||||
}
|
||||
|
||||
return prevItem;
|
||||
}
|
||||
|
||||
// called by wxTextTreeCtrl when it marks itself for deletion
|
||||
|
@@ -1354,7 +1354,15 @@ wxTreeItemId wxTreeCtrl::GetNextVisible(const wxTreeItemId& item) const
|
||||
wxCHECK_MSG( item.IsOk(), wxTreeItemId(), wxT("invalid tree item") );
|
||||
wxASSERT_MSG( IsVisible(item), wxT("The item you call GetNextVisible() for must be visible itself!"));
|
||||
|
||||
return wxTreeItemId(TreeView_GetNextVisible(GetHwnd(), HITEM(item)));
|
||||
wxTreeItemId next(TreeView_GetNextVisible(GetHwnd(), HITEM(item)));
|
||||
if ( next.IsOk() && !IsVisible(next) )
|
||||
{
|
||||
// Win32 considers that any non-collapsed item is visible while we want
|
||||
// to return only really visible items
|
||||
next.Unset();
|
||||
}
|
||||
|
||||
return next;
|
||||
}
|
||||
|
||||
wxTreeItemId wxTreeCtrl::GetPrevVisible(const wxTreeItemId& item) const
|
||||
@@ -1362,7 +1370,15 @@ wxTreeItemId wxTreeCtrl::GetPrevVisible(const wxTreeItemId& item) const
|
||||
wxCHECK_MSG( item.IsOk(), wxTreeItemId(), wxT("invalid tree item") );
|
||||
wxASSERT_MSG( IsVisible(item), wxT("The item you call GetPrevVisible() for must be visible itself!"));
|
||||
|
||||
return wxTreeItemId(TreeView_GetPrevVisible(GetHwnd(), HITEM(item)));
|
||||
wxTreeItemId prev(TreeView_GetPrevVisible(GetHwnd(), HITEM(item)));
|
||||
if ( prev.IsOk() && !IsVisible(prev) )
|
||||
{
|
||||
// just as above, Win32 function will happily return the previous item
|
||||
// in the tree for the first visible item too
|
||||
prev.Unset();
|
||||
}
|
||||
|
||||
return prev;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
Reference in New Issue
Block a user