Add wxListBox::GetTopItem() and GetCountPerPage()
Implement these methods for all the major ports, add them to the widgets sample and documentation. Closes #17189.
This commit is contained in:
committed by
Vadim Zeitlin
parent
256f644861
commit
6a01623a80
@@ -96,6 +96,7 @@ All (GUI):
|
|||||||
- Allow customizing window shown by wxBusyInfo.
|
- Allow customizing window shown by wxBusyInfo.
|
||||||
- Add wxAddRemoveCtrl.
|
- Add wxAddRemoveCtrl.
|
||||||
- Add wxAppProgressIndicator for MSW (Chaobin Zhang) and OS X (Tobias Taschner).
|
- Add wxAppProgressIndicator for MSW (Chaobin Zhang) and OS X (Tobias Taschner).
|
||||||
|
- Add wxListBox::GetTopItem() and GetCountPerPage() (Andreas Falkenhahn).
|
||||||
- Add wxTextEntry::ForceUpper().
|
- Add wxTextEntry::ForceUpper().
|
||||||
- Add wxTextEntryDialog::ForceUpper().
|
- Add wxTextEntryDialog::ForceUpper().
|
||||||
- Add wxEVT_MAGNIFY mouse event (Joost Nieuwenhuijse).
|
- Add wxEVT_MAGNIFY mouse event (Joost Nieuwenhuijse).
|
||||||
|
@@ -74,6 +74,8 @@ public:
|
|||||||
|
|
||||||
virtual void EnsureVisible(int n) wxOVERRIDE;
|
virtual void EnsureVisible(int n) wxOVERRIDE;
|
||||||
|
|
||||||
|
virtual int GetTopItem() const wxOVERRIDE;
|
||||||
|
|
||||||
virtual void Update() wxOVERRIDE;
|
virtual void Update() wxOVERRIDE;
|
||||||
|
|
||||||
static wxVisualAttributes
|
static wxVisualAttributes
|
||||||
|
@@ -72,6 +72,9 @@ public:
|
|||||||
// necessary
|
// necessary
|
||||||
virtual void EnsureVisible(int n);
|
virtual void EnsureVisible(int n);
|
||||||
|
|
||||||
|
virtual int GetTopItem() const { return wxNOT_FOUND; }
|
||||||
|
virtual int GetCountPerPage() const;
|
||||||
|
|
||||||
// a combination of Append() and EnsureVisible(): appends the item to the
|
// a combination of Append() and EnsureVisible(): appends the item to the
|
||||||
// listbox and ensures that it is visible i.e. not scrolled out of view
|
// listbox and ensures that it is visible i.e. not scrolled out of view
|
||||||
void AppendAndEnsureVisible(const wxString& s);
|
void AppendAndEnsureVisible(const wxString& s);
|
||||||
@@ -133,6 +136,8 @@ protected:
|
|||||||
// single selection mode on platforms other than MSW).
|
// single selection mode on platforms other than MSW).
|
||||||
void UpdateOldSelections();
|
void UpdateOldSelections();
|
||||||
|
|
||||||
|
wxCoord GetLineHeight() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
wxDECLARE_NO_COPY_CLASS(wxListBoxBase);
|
wxDECLARE_NO_COPY_CLASS(wxListBoxBase);
|
||||||
};
|
};
|
||||||
|
@@ -95,6 +95,9 @@ public:
|
|||||||
|
|
||||||
virtual void EnsureVisible(int n);
|
virtual void EnsureVisible(int n);
|
||||||
|
|
||||||
|
virtual int GetTopItem() const;
|
||||||
|
virtual int GetCountPerPage() const;
|
||||||
|
|
||||||
// ownerdrawn wxListBox and wxCheckListBox support
|
// ownerdrawn wxListBox and wxCheckListBox support
|
||||||
#if wxUSE_OWNER_DRAWN
|
#if wxUSE_OWNER_DRAWN
|
||||||
// override base class virtuals
|
// override base class virtuals
|
||||||
|
@@ -609,6 +609,7 @@ public:
|
|||||||
// display
|
// display
|
||||||
|
|
||||||
virtual void ListScrollTo( unsigned int n ) = 0;
|
virtual void ListScrollTo( unsigned int n ) = 0;
|
||||||
|
virtual int ListGetTopItem() const = 0;
|
||||||
virtual void UpdateLine( unsigned int n, wxListWidgetColumn* col = NULL ) = 0;
|
virtual void UpdateLine( unsigned int n, wxListWidgetColumn* col = NULL ) = 0;
|
||||||
virtual void UpdateLineToEnd( unsigned int n) = 0;
|
virtual void UpdateLineToEnd( unsigned int n) = 0;
|
||||||
|
|
||||||
|
@@ -108,6 +108,8 @@ public:
|
|||||||
|
|
||||||
virtual void EnsureVisible(int n) wxOVERRIDE;
|
virtual void EnsureVisible(int n) wxOVERRIDE;
|
||||||
|
|
||||||
|
virtual int GetTopItem() const wxOVERRIDE;
|
||||||
|
|
||||||
virtual wxVisualAttributes GetDefaultAttributes() const wxOVERRIDE
|
virtual wxVisualAttributes GetDefaultAttributes() const wxOVERRIDE
|
||||||
{
|
{
|
||||||
return GetClassDefaultAttributes(GetWindowVariant());
|
return GetClassDefaultAttributes(GetWindowVariant());
|
||||||
|
@@ -297,10 +297,29 @@ public:
|
|||||||
*/
|
*/
|
||||||
virtual bool IsSorted() const;
|
virtual bool IsSorted() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Return the number of items that can fit vertically in the visible area of
|
||||||
|
the listbox.
|
||||||
|
|
||||||
|
Returns -1 if the number of items per page couldn't be determined.
|
||||||
|
|
||||||
|
@since 3.1.0
|
||||||
|
*/
|
||||||
|
int GetCountPerPage() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Return the index of the topmost visible item.
|
||||||
|
|
||||||
|
Returns ::wxNOT_FOUND if the method is not implemented for the current
|
||||||
|
platform.
|
||||||
|
|
||||||
|
@since 3.1.0
|
||||||
|
*/
|
||||||
|
int GetTopItem() const;
|
||||||
|
|
||||||
// NOTE: Phoenix needs to see the implementation of pure virtuals so it
|
// NOTE: Phoenix needs to see the implementation of pure virtuals so it
|
||||||
// knows that this class is not abstract.
|
// knows that this class is not abstract.
|
||||||
virtual unsigned int GetCount() const;
|
virtual unsigned int GetCount() const;
|
||||||
virtual wxString GetString(unsigned int n) const;
|
virtual wxString GetString(unsigned int n) const;
|
||||||
virtual void SetString(unsigned int n, const wxString& s);
|
virtual void SetString(unsigned int n, const wxString& s);
|
||||||
virtual int FindString(const wxString& s, bool bCase = false) const;
|
virtual int FindString(const wxString& s, bool bCase = false) const;
|
||||||
|
@@ -69,7 +69,9 @@ enum
|
|||||||
ListboxPage_Listbox,
|
ListboxPage_Listbox,
|
||||||
ListboxPage_EnsureVisible,
|
ListboxPage_EnsureVisible,
|
||||||
ListboxPage_EnsureVisibleText,
|
ListboxPage_EnsureVisibleText,
|
||||||
ListboxPage_ContainerTests
|
ListboxPage_ContainerTests,
|
||||||
|
ListboxPage_GetTopItem,
|
||||||
|
ListboxPage_GetCountPerPage
|
||||||
};
|
};
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -99,6 +101,8 @@ protected:
|
|||||||
void OnButtonAdd(wxCommandEvent& event);
|
void OnButtonAdd(wxCommandEvent& event);
|
||||||
void OnButtonAddSeveral(wxCommandEvent& event);
|
void OnButtonAddSeveral(wxCommandEvent& event);
|
||||||
void OnButtonAddMany(wxCommandEvent& event);
|
void OnButtonAddMany(wxCommandEvent& event);
|
||||||
|
void OnButtonTopItem(wxCommandEvent& event);
|
||||||
|
void OnButtonPageCount(wxCommandEvent& event);
|
||||||
|
|
||||||
void OnListbox(wxCommandEvent& event);
|
void OnListbox(wxCommandEvent& event);
|
||||||
void OnListboxDClick(wxCommandEvent& event);
|
void OnListboxDClick(wxCommandEvent& event);
|
||||||
@@ -186,6 +190,8 @@ wxBEGIN_EVENT_TABLE(ListboxWidgetsPage, WidgetsPage)
|
|||||||
EVT_BUTTON(ListboxPage_AddSeveral, ListboxWidgetsPage::OnButtonAddSeveral)
|
EVT_BUTTON(ListboxPage_AddSeveral, ListboxWidgetsPage::OnButtonAddSeveral)
|
||||||
EVT_BUTTON(ListboxPage_AddMany, ListboxWidgetsPage::OnButtonAddMany)
|
EVT_BUTTON(ListboxPage_AddMany, ListboxWidgetsPage::OnButtonAddMany)
|
||||||
EVT_BUTTON(ListboxPage_ContainerTests, ItemContainerWidgetsPage::OnButtonTestItemContainer)
|
EVT_BUTTON(ListboxPage_ContainerTests, ItemContainerWidgetsPage::OnButtonTestItemContainer)
|
||||||
|
EVT_BUTTON(ListboxPage_GetTopItem, ListboxWidgetsPage::OnButtonTopItem)
|
||||||
|
EVT_BUTTON(ListboxPage_GetCountPerPage, ListboxWidgetsPage::OnButtonPageCount)
|
||||||
|
|
||||||
EVT_TEXT_ENTER(ListboxPage_AddText, ListboxWidgetsPage::OnButtonAdd)
|
EVT_TEXT_ENTER(ListboxPage_AddText, ListboxWidgetsPage::OnButtonAdd)
|
||||||
EVT_TEXT_ENTER(ListboxPage_DeleteText, ListboxWidgetsPage::OnButtonDelete)
|
EVT_TEXT_ENTER(ListboxPage_DeleteText, ListboxWidgetsPage::OnButtonDelete)
|
||||||
@@ -333,6 +339,12 @@ void ListboxWidgetsPage::CreateContent()
|
|||||||
btn = new wxButton(this, ListboxPage_Clear, wxT("&Clear"));
|
btn = new wxButton(this, ListboxPage_Clear, wxT("&Clear"));
|
||||||
sizerMiddle->Add(btn, 0, wxALL | wxGROW, 5);
|
sizerMiddle->Add(btn, 0, wxALL | wxGROW, 5);
|
||||||
|
|
||||||
|
btn = new wxButton(this, ListboxPage_GetTopItem, wxT("Get top item"));
|
||||||
|
sizerMiddle->Add(btn, 0, wxALL | wxGROW, 5);
|
||||||
|
|
||||||
|
btn = new wxButton(this, ListboxPage_GetCountPerPage, wxT("Get count per page"));
|
||||||
|
sizerMiddle->Add(btn, 0, wxALL | wxGROW, 5);
|
||||||
|
|
||||||
btn = new wxButton(this, ListboxPage_ContainerTests, wxT("Run &tests"));
|
btn = new wxButton(this, ListboxPage_ContainerTests, wxT("Run &tests"));
|
||||||
sizerMiddle->Add(btn, 0, wxALL | wxGROW, 5);
|
sizerMiddle->Add(btn, 0, wxALL | wxGROW, 5);
|
||||||
|
|
||||||
@@ -514,6 +526,18 @@ void ListboxWidgetsPage::OnButtonClear(wxCommandEvent& WXUNUSED(event))
|
|||||||
m_lbox->Clear();
|
m_lbox->Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ListboxWidgetsPage::OnButtonTopItem(wxCommandEvent& WXUNUSED(event))
|
||||||
|
{
|
||||||
|
int item = m_lbox->GetTopItem();
|
||||||
|
wxLogMessage("Topmost visible item is: %d", item);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ListboxWidgetsPage::OnButtonPageCount(wxCommandEvent& WXUNUSED(event))
|
||||||
|
{
|
||||||
|
int count = m_lbox->GetCountPerPage();
|
||||||
|
wxLogMessage("%d items fit into this listbox.", count);
|
||||||
|
}
|
||||||
|
|
||||||
void ListboxWidgetsPage::OnButtonAdd(wxCommandEvent& WXUNUSED(event))
|
void ListboxWidgetsPage::OnButtonAdd(wxCommandEvent& WXUNUSED(event))
|
||||||
{
|
{
|
||||||
static unsigned int s_item = 0;
|
static unsigned int s_item = 0;
|
||||||
|
@@ -33,6 +33,15 @@
|
|||||||
#include "wx/log.h"
|
#include "wx/log.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// the spacing between the lines (in report mode)
|
||||||
|
static const int LINE_SPACING = 0;
|
||||||
|
|
||||||
|
#ifdef __WXGTK__
|
||||||
|
static const int EXTRA_HEIGHT = 6;
|
||||||
|
#else
|
||||||
|
static const int EXTRA_HEIGHT = 4;
|
||||||
|
#endif
|
||||||
|
|
||||||
extern WXDLLEXPORT_DATA(const char) wxListBoxNameStr[] = "listBox";
|
extern WXDLLEXPORT_DATA(const char) wxListBoxNameStr[] = "listBox";
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
@@ -340,4 +349,23 @@ void wxListBoxBase::EnsureVisible(int WXUNUSED(n))
|
|||||||
// call SetFirstItem() but this is probably even more stupid)
|
// call SetFirstItem() but this is probably even more stupid)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wxCoord wxListBoxBase::GetLineHeight() const
|
||||||
|
{
|
||||||
|
wxListBoxBase *self = wxConstCast(this, wxListBoxBase);
|
||||||
|
|
||||||
|
wxClientDC dc( self );
|
||||||
|
dc.SetFont( GetFont() );
|
||||||
|
|
||||||
|
wxCoord y;
|
||||||
|
dc.GetTextExtent(wxT("H"), NULL, &y);
|
||||||
|
|
||||||
|
y += EXTRA_HEIGHT;
|
||||||
|
|
||||||
|
return y + LINE_SPACING;
|
||||||
|
}
|
||||||
|
|
||||||
|
int wxListBoxBase::GetCountPerPage() const
|
||||||
|
{
|
||||||
|
return GetClientSize().y / GetLineHeight();
|
||||||
|
}
|
||||||
#endif // wxUSE_LISTBOX
|
#endif // wxUSE_LISTBOX
|
||||||
|
@@ -771,6 +771,24 @@ void wxListBox::EnsureVisible(int n)
|
|||||||
DoScrollToCell(n, 0.5, 0);
|
DoScrollToCell(n, 0.5, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int wxListBox::GetTopItem() const
|
||||||
|
{
|
||||||
|
int idx = wxNOT_FOUND;
|
||||||
|
|
||||||
|
GtkTreePath *start;
|
||||||
|
if ( gtk_tree_view_get_visible_range(m_treeview, &start, NULL) )
|
||||||
|
{
|
||||||
|
gint *ptr = gtk_tree_path_get_indices(start);
|
||||||
|
|
||||||
|
if ( ptr )
|
||||||
|
idx = *ptr;
|
||||||
|
|
||||||
|
gtk_tree_path_free(start);
|
||||||
|
}
|
||||||
|
|
||||||
|
return idx;
|
||||||
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// hittest
|
// hittest
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
@@ -253,6 +253,22 @@ void wxListBox::EnsureVisible(int n)
|
|||||||
DoSetFirstItem(n - countVisible + 1);
|
DoSetFirstItem(n - countVisible + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int wxListBox::GetTopItem() const
|
||||||
|
{
|
||||||
|
return SendMessage(GetHwnd(), LB_GETTOPINDEX, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int wxListBox::GetCountPerPage() const
|
||||||
|
{
|
||||||
|
const LRESULT lineHeight = SendMessage(GetHwnd(), LB_GETITEMHEIGHT, 0, 0);
|
||||||
|
if ( lineHeight == LB_ERR || lineHeight == 0 )
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
const RECT r = wxGetClientRect(GetHwnd());
|
||||||
|
|
||||||
|
return (r.bottom - r.top) / lineHeight;
|
||||||
|
}
|
||||||
|
|
||||||
void wxListBox::DoSetFirstItem(int N)
|
void wxListBox::DoSetFirstItem(int N)
|
||||||
{
|
{
|
||||||
wxCHECK_RET( IsValid(N),
|
wxCHECK_RET( IsValid(N),
|
||||||
|
@@ -129,6 +129,8 @@ public :
|
|||||||
|
|
||||||
virtual void ListScrollTo( unsigned int n ) wxOVERRIDE ;
|
virtual void ListScrollTo( unsigned int n ) wxOVERRIDE ;
|
||||||
|
|
||||||
|
virtual int ListGetTopItem() conswxOVERRIDE t;
|
||||||
|
|
||||||
// accessing content
|
// accessing content
|
||||||
|
|
||||||
virtual unsigned int ListGetCount() const wxOVERRIDE ;
|
virtual unsigned int ListGetCount() const wxOVERRIDE ;
|
||||||
@@ -534,6 +536,13 @@ void wxListWidgetCocoaImpl::ListScrollTo( unsigned int n )
|
|||||||
[m_tableView scrollRowToVisible:n];
|
[m_tableView scrollRowToVisible:n];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int wxListWidgetCocoaImpl::ListGetTopItem() const
|
||||||
|
{
|
||||||
|
NSScrollView *scrollView = [m_tableView enclosingScrollView];
|
||||||
|
NSRect visibleRect = scrollView.contentView.visibleRect;
|
||||||
|
NSRange range = [m_tableView rowsInRect:visibleRect];
|
||||||
|
return range.location;
|
||||||
|
}
|
||||||
|
|
||||||
void wxListWidgetCocoaImpl::UpdateLine( unsigned int WXUNUSED(n), wxListWidgetColumn* WXUNUSED(col) )
|
void wxListWidgetCocoaImpl::UpdateLine( unsigned int WXUNUSED(n), wxListWidgetColumn* WXUNUSED(col) )
|
||||||
{
|
{
|
||||||
|
@@ -145,6 +145,11 @@ void wxListBox::EnsureVisible(int n)
|
|||||||
GetListPeer()->ListScrollTo( n );
|
GetListPeer()->ListScrollTo( n );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int wxListBox::GetTopItem() const
|
||||||
|
{
|
||||||
|
return GetListPeer()->ListGetTopItem();
|
||||||
|
}
|
||||||
|
|
||||||
void wxListBox::DoDeleteOneItem(unsigned int n)
|
void wxListBox::DoDeleteOneItem(unsigned int n)
|
||||||
{
|
{
|
||||||
wxCHECK_RET( IsValid(n), wxT("invalid index in wxListBox::Delete") );
|
wxCHECK_RET( IsValid(n), wxT("invalid index in wxListBox::Delete") );
|
||||||
|
Reference in New Issue
Block a user