Add wxTreeCtrl::{Clear,Set}FocusedItem().

Allow changing just the currently focused (not selected) item and also
removing the focus completely.

Closes #11599.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64196 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2010-05-02 12:01:30 +00:00
parent bd235295fb
commit 5708ae18f2
9 changed files with 69 additions and 3 deletions

View File

@ -515,6 +515,7 @@ All (GUI):
- Added wxTransparentColour.
- Added wxToolBar::GetToolByPos().
- Added wxProgressDialog::Was{Cancelled,Skipped}() (Julien Weinzorn).
- Added wxTreeCtrl::{Clear,Set}FocusedItem() (Nikolay Tiushkov).
GTK:

View File

@ -122,6 +122,9 @@ public:
virtual size_t GetSelections(wxArrayTreeItemIds&) const;
virtual wxTreeItemId GetFocusedItem() const { return m_current; }
virtual void ClearFocusedItem();
virtual void SetFocusedItem(const wxTreeItemId& item);
virtual wxTreeItemId GetItemParent(const wxTreeItemId& item) const;
virtual wxTreeItemId GetFirstChild(const wxTreeItemId& item,
wxTreeItemIdValue& cookie) const;

View File

@ -129,6 +129,10 @@ public:
virtual size_t GetSelections(wxArrayTreeItemIds& selections) const;
virtual wxTreeItemId GetFocusedItem() const;
virtual void ClearFocusedItem();
virtual void SetFocusedItem(const wxTreeItemId& item);
virtual wxTreeItemId GetItemParent(const wxTreeItemId& item) const;
virtual wxTreeItemId GetFirstChild(const wxTreeItemId& item,
wxTreeItemIdValue& cookie) const;
@ -285,9 +289,6 @@ private:
// and the tree has wxTR_HIDE_ROOT style)
bool IsHiddenRoot(const wxTreeItemId& item) const;
// clears/sets the currently focused item
void ClearFocusedItem();
void SetFocusedItem(const wxTreeItemId& item);
// check if the given flags (taken from TV_HITTESTINFO structure)
// indicate a position "on item": this is less trivial than just checking

View File

@ -214,6 +214,13 @@ public:
// equivalent to GetSelection() if not wxTR_MULTIPLE
virtual wxTreeItemId GetFocusedItem() const = 0;
// Clears the currently focused item
virtual void ClearFocusedItem() = 0;
// Sets the currently focused item. Item should be valid
virtual void SetFocusedItem(const wxTreeItemId& item) = 0;
// get the parent of this item (may return NULL if root)
virtual wxTreeItemId GetItemParent(const wxTreeItemId& item) const = 0;

View File

@ -437,6 +437,24 @@ public:
*/
virtual wxTreeItemId GetFocusedItem() const;
/**
Clears the currently focused item
@since 2.9.1
*/
virtual void ClearFocusedItem();
/**
Sets the currently focused item.
@param item
The item to make the current one. It must be valid.
@since 2.9.1
*/
virtual void SetFocusedItem(const wxTreeItemId& item);
/**
Returns the normal image list.
*/

View File

@ -129,6 +129,8 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
MENU_LINK(ToggleIcon)
MENU_LINK(ToggleState)
MENU_LINK(SelectRoot)
MENU_LINK(SetFocusedRoot)
MENU_LINK(ClearFocused)
MENU_LINK(ShowFirstVisible)
#ifdef wxHAS_LAST_VISIBLE
@ -263,6 +265,9 @@ MyFrame::MyFrame(const wxString& title, int x, int y, int w, int h)
tree_menu->Append(TreeTest_DeleteChildren, wxT("Delete &children"));
tree_menu->Append(TreeTest_DeleteAll, wxT("Delete &all items"));
tree_menu->Append(TreeTest_SelectRoot, wxT("Select root item"));
tree_menu->AppendSeparator();
tree_menu->Append(TreeTest_SetFocusedRoot, wxT("Set focus to root item"));
tree_menu->Append(TreeTest_ClearFocused, wxT("Reset focus"));
tree_menu->AppendSeparator();
tree_menu->Append(TreeTest_Count, wxT("Count children of current item"));
@ -592,6 +597,17 @@ void MyFrame::OnSelectRoot(wxCommandEvent& WXUNUSED(event))
m_treeCtrl->SelectItem(m_treeCtrl->GetRootItem());
}
void MyFrame::OnSetFocusedRoot(wxCommandEvent& WXUNUSED(event))
{
if ( !m_treeCtrl->HasFlag(wxTR_HIDE_ROOT) )
m_treeCtrl->SetFocusedItem(m_treeCtrl->GetRootItem());
}
void MyFrame::OnClearFocused(wxCommandEvent& WXUNUSED(event))
{
m_treeCtrl->ClearFocusedItem();
}
void MyFrame::OnUnselect(wxCommandEvent& WXUNUSED(event))
{
m_treeCtrl->UnselectAll();

View File

@ -212,6 +212,8 @@ public:
void OnSelectChildren(wxCommandEvent& event);
#endif // NO_MULTIPLE_SELECTION
void OnSelectRoot(wxCommandEvent& event);
void OnSetFocusedRoot(wxCommandEvent& event);
void OnClearFocused(wxCommandEvent& event);
void OnDelete(wxCommandEvent& event);
void OnDeleteChildren(wxCommandEvent& event);
void OnDeleteAll(wxCommandEvent& event);
@ -355,6 +357,8 @@ enum
TreeTest_Select,
TreeTest_Unselect,
TreeTest_SelectRoot,
TreeTest_ClearFocused,
TreeTest_SetFocusedRoot,
TreeTest_SelectChildren,
TreeTest_ShowFirstVisible,
TreeTest_ShowLastVisible,

View File

@ -1953,6 +1953,20 @@ void wxGenericTreeCtrl::Unselect()
}
}
void wxGenericTreeCtrl::ClearFocusedItem()
{
wxTreeItemId item = GetFocusedItem();
if ( item.IsOk() )
SelectItem(item, false);
}
void wxGenericTreeCtrl::SetFocusedItem(const wxTreeItemId& item)
{
wxCHECK_RET( item.IsOk(), wxT("invalid tree item") );
SelectItem(item, true);
}
void wxGenericTreeCtrl::UnselectAllChildren(wxGenericTreeItem *item)
{
if (item->IsSelected())

View File

@ -2137,6 +2137,8 @@ void wxTreeCtrl::ClearFocusedItem()
void wxTreeCtrl::SetFocusedItem(const wxTreeItemId& item)
{
wxCHECK_RET( item.IsOk(), wxT("invalid tree item") );
TempSetter set(m_changingSelection);
::SetFocus(GetHwnd(), HITEM(item));