Add wxListCtrl::IsVisible()
Allow checking if the given item is (at least partially) visible on screen. Closes https://github.com/wxWidgets/wxWidgets/pull/1444 Closes #9949.
This commit is contained in:
parent
3bb74df215
commit
43c519e04f
@ -130,6 +130,7 @@ public:
|
|||||||
bool EndEditLabel(bool cancel);
|
bool EndEditLabel(bool cancel);
|
||||||
|
|
||||||
wxTextCtrl* GetEditControl() const;
|
wxTextCtrl* GetEditControl() const;
|
||||||
|
bool IsVisible(long item) const wxOVERRIDE;
|
||||||
void Edit( long item ) { EditLabel(item); }
|
void Edit( long item ) { EditLabel(item); }
|
||||||
|
|
||||||
bool EnsureVisible( long item );
|
bool EnsureVisible( long item );
|
||||||
|
@ -400,6 +400,9 @@ public:
|
|||||||
bool InReportView() const { return HasFlag(wxLC_REPORT); }
|
bool InReportView() const { return HasFlag(wxLC_REPORT); }
|
||||||
bool IsVirtual() const { return HasFlag(wxLC_VIRTUAL); }
|
bool IsVirtual() const { return HasFlag(wxLC_VIRTUAL); }
|
||||||
|
|
||||||
|
// Check if the item is visible
|
||||||
|
virtual bool IsVisible(long WXUNUSED(item)) const { return false; }
|
||||||
|
|
||||||
// Enable or disable beep when incremental match doesn't find any item.
|
// Enable or disable beep when incremental match doesn't find any item.
|
||||||
// Only implemented in the generic version currently.
|
// Only implemented in the generic version currently.
|
||||||
virtual void EnableBellOnNoMatch(bool WXUNUSED(on) = true) { }
|
virtual void EnableBellOnNoMatch(bool WXUNUSED(on) = true) { }
|
||||||
|
@ -154,6 +154,9 @@ public:
|
|||||||
// Gets information about the item
|
// Gets information about the item
|
||||||
bool GetItem(wxListItem& info) const;
|
bool GetItem(wxListItem& info) const;
|
||||||
|
|
||||||
|
// Check if the item is visible
|
||||||
|
bool IsVisible(long item) const wxOVERRIDE;
|
||||||
|
|
||||||
// Sets information about the item
|
// Sets information about the item
|
||||||
bool SetItem(wxListItem& info);
|
bool SetItem(wxListItem& info);
|
||||||
|
|
||||||
|
@ -1088,6 +1088,16 @@ public:
|
|||||||
*/
|
*/
|
||||||
void SetImageList(wxImageList* imageList, int which);
|
void SetImageList(wxImageList* imageList, int which);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Check if the item is visible.
|
||||||
|
|
||||||
|
An item is considered visible if at least one pixel of it is present
|
||||||
|
on the screen.
|
||||||
|
|
||||||
|
@since 3.1.3
|
||||||
|
*/
|
||||||
|
bool IsVisible(long item) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Sets the data of an item.
|
Sets the data of an item.
|
||||||
|
|
||||||
|
@ -151,6 +151,7 @@ wxBEGIN_EVENT_TABLE(MyFrame, wxFrame)
|
|||||||
EVT_MENU(LIST_TOGGLE_LINES, MyFrame::OnToggleLines)
|
EVT_MENU(LIST_TOGGLE_LINES, MyFrame::OnToggleLines)
|
||||||
EVT_MENU(LIST_TOGGLE_HEADER, MyFrame::OnToggleHeader)
|
EVT_MENU(LIST_TOGGLE_HEADER, MyFrame::OnToggleHeader)
|
||||||
EVT_MENU(LIST_TOGGLE_BELL, MyFrame::OnToggleBell)
|
EVT_MENU(LIST_TOGGLE_BELL, MyFrame::OnToggleBell)
|
||||||
|
EVT_MENU(LIST_CHECKVISIBILITY, MyFrame::OnCheckVisibility)
|
||||||
#ifdef __WXOSX__
|
#ifdef __WXOSX__
|
||||||
EVT_MENU(LIST_MAC_USE_GENERIC, MyFrame::OnToggleMacUseGeneric)
|
EVT_MENU(LIST_MAC_USE_GENERIC, MyFrame::OnToggleMacUseGeneric)
|
||||||
#endif // __WXOSX__
|
#endif // __WXOSX__
|
||||||
@ -267,6 +268,7 @@ MyFrame::MyFrame(const wxString& title)
|
|||||||
menuList->AppendCheckItem(LIST_TOGGLE_HEADER, "Toggle &header\tCtrl-H");
|
menuList->AppendCheckItem(LIST_TOGGLE_HEADER, "Toggle &header\tCtrl-H");
|
||||||
menuList->Check(LIST_TOGGLE_HEADER, true);
|
menuList->Check(LIST_TOGGLE_HEADER, true);
|
||||||
menuList->AppendCheckItem(LIST_TOGGLE_BELL, "Toggle &bell on no match");
|
menuList->AppendCheckItem(LIST_TOGGLE_BELL, "Toggle &bell on no match");
|
||||||
|
menuList->Append( LIST_CHECKVISIBILITY, "Check if lines 2 and 9 are visible" );
|
||||||
menuList->AppendSeparator();
|
menuList->AppendSeparator();
|
||||||
menuList->AppendCheckItem(LIST_TOGGLE_CHECKBOXES,
|
menuList->AppendCheckItem(LIST_TOGGLE_CHECKBOXES,
|
||||||
"&Enable Checkboxes");
|
"&Enable Checkboxes");
|
||||||
@ -377,6 +379,18 @@ void MyFrame::OnToggleBell(wxCommandEvent& event)
|
|||||||
m_listCtrl->EnableBellOnNoMatch(event.IsChecked());
|
m_listCtrl->EnableBellOnNoMatch(event.IsChecked());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MyFrame::OnCheckVisibility(wxCommandEvent& WXUNUSED(event))
|
||||||
|
{
|
||||||
|
if ( m_listCtrl->IsVisible(2) )
|
||||||
|
wxLogMessage( "Line 2 is visible" );
|
||||||
|
else
|
||||||
|
wxLogMessage( "Line 2 is not visible" );
|
||||||
|
if ( m_listCtrl->IsVisible(9) )
|
||||||
|
wxLogMessage( "Line 9 is visible" );
|
||||||
|
else
|
||||||
|
wxLogMessage( "Line 9 is not visible" );
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef __WXOSX__
|
#ifdef __WXOSX__
|
||||||
|
|
||||||
void MyFrame::OnToggleMacUseGeneric(wxCommandEvent& event)
|
void MyFrame::OnToggleMacUseGeneric(wxCommandEvent& event)
|
||||||
|
@ -117,7 +117,7 @@ protected:
|
|||||||
void OnSmallIconTextView(wxCommandEvent& event);
|
void OnSmallIconTextView(wxCommandEvent& event);
|
||||||
void OnVirtualView(wxCommandEvent& event);
|
void OnVirtualView(wxCommandEvent& event);
|
||||||
void OnSmallVirtualView(wxCommandEvent& event);
|
void OnSmallVirtualView(wxCommandEvent& event);
|
||||||
|
void OnCheckVisibility(wxCommandEvent& event);
|
||||||
void OnSetItemsCount(wxCommandEvent& event);
|
void OnSetItemsCount(wxCommandEvent& event);
|
||||||
|
|
||||||
|
|
||||||
@ -247,6 +247,6 @@ enum
|
|||||||
#ifdef __WXOSX__
|
#ifdef __WXOSX__
|
||||||
LIST_MAC_USE_GENERIC,
|
LIST_MAC_USE_GENERIC,
|
||||||
#endif
|
#endif
|
||||||
|
LIST_CHECKVISIBILITY,
|
||||||
LIST_CTRL = 1000
|
LIST_CTRL = 1000
|
||||||
};
|
};
|
||||||
|
@ -151,6 +151,23 @@ wxListItemData::wxListItemData(wxListMainWindow *owner)
|
|||||||
m_rect = new wxRect;
|
m_rect = new wxRect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check if the item is visible
|
||||||
|
bool wxGenericListCtrl::IsVisible(long item) const
|
||||||
|
{
|
||||||
|
wxRect itemRect;
|
||||||
|
GetItemRect( item, itemRect );
|
||||||
|
const wxRect clientRect = GetClientRect();
|
||||||
|
bool visible = clientRect.Intersects( itemRect );
|
||||||
|
if ( visible && m_headerWin )
|
||||||
|
{
|
||||||
|
wxRect headerRect = m_headerWin->GetClientRect();
|
||||||
|
// take into account the +1 added in GetSubItemRect()
|
||||||
|
headerRect.height++;
|
||||||
|
visible = itemRect.GetBottom() > headerRect.GetBottom();
|
||||||
|
}
|
||||||
|
return visible;
|
||||||
|
}
|
||||||
|
|
||||||
void wxListItemData::SetItem( const wxListItem &info )
|
void wxListItemData::SetItem( const wxListItem &info )
|
||||||
{
|
{
|
||||||
if ( info.m_mask & wxLIST_MASK_TEXT )
|
if ( info.m_mask & wxLIST_MASK_TEXT )
|
||||||
|
@ -67,6 +67,10 @@
|
|||||||
#define NO_ITEM (-1)
|
#define NO_ITEM (-1)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef LVM_ISITEMVISIBLE
|
||||||
|
#define LVM_ISITEMVISIBLE (LVM_FIRST + 182)
|
||||||
|
#endif
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// private functions
|
// private functions
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@ -880,6 +884,25 @@ bool wxListCtrl::GetItem(wxListItem& info) const
|
|||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check if the item is visible
|
||||||
|
bool wxListCtrl::IsVisible(long item) const
|
||||||
|
{
|
||||||
|
bool result = ::SendMessage( GetHwnd(), LVM_ISITEMVISIBLE, (WPARAM) item, 0 ) != 0;
|
||||||
|
if ( result )
|
||||||
|
{
|
||||||
|
HWND hwndHdr = ListView_GetHeader(GetHwnd());
|
||||||
|
wxRect itemRect;
|
||||||
|
RECT headerRect;
|
||||||
|
if ( Header_GetItemRect( hwndHdr, 0, &headerRect ) )
|
||||||
|
{
|
||||||
|
GetItemRect( item, itemRect );
|
||||||
|
wxRect rectHeader = wxRectFromRECT( headerRect );
|
||||||
|
result = itemRect.GetBottom() > rectHeader.GetBottom();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
// Sets information about the item
|
// Sets information about the item
|
||||||
bool wxListCtrl::SetItem(wxListItem& info)
|
bool wxListCtrl::SetItem(wxListItem& info)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user