Merge branch 'listctrl-col-count'
Ensure wxListCtrl::GetColumnCount() behaves consistently on all platforms with wxLC_LIST style. See #22497. Closes #22482.
This commit is contained in:
commit
7faa70a4a9
@ -566,6 +566,11 @@ public:
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
Returns the number of columns.
|
Returns the number of columns.
|
||||||
|
|
||||||
|
The control can have multiple columns only in wxLC_REPORT mode. In
|
||||||
|
wxLC_LIST mode this function returns 1, as a list is still considered
|
||||||
|
to have a (single) column. In wxLC_SMALL_ICON and wxLC_ICON modes, it
|
||||||
|
returns 0 as there are no columns at all.
|
||||||
*/
|
*/
|
||||||
int GetColumnCount() const;
|
int GetColumnCount() const;
|
||||||
|
|
||||||
|
@ -2331,8 +2331,10 @@ void wxListMainWindow::SendNotify( size_t line,
|
|||||||
wxEventType command,
|
wxEventType command,
|
||||||
const wxPoint& point )
|
const wxPoint& point )
|
||||||
{
|
{
|
||||||
wxListEvent le( command, GetParent()->GetId() );
|
wxGenericListCtrl* const listctrl = GetListCtrl();
|
||||||
le.SetEventObject( GetParent() );
|
|
||||||
|
wxListEvent le( command, listctrl->GetId() );
|
||||||
|
le.SetEventObject( listctrl );
|
||||||
|
|
||||||
le.m_item.m_itemId =
|
le.m_item.m_itemId =
|
||||||
le.m_itemIndex = line;
|
le.m_itemIndex = line;
|
||||||
@ -2349,12 +2351,12 @@ void wxListMainWindow::SendNotify( size_t line,
|
|||||||
|
|
||||||
// provide information about the (first column of the) item in the event if
|
// provide information about the (first column of the) item in the event if
|
||||||
// we have a valid item and any columns at all
|
// we have a valid item and any columns at all
|
||||||
if ( line != (size_t)-1 && GetColumnCount() )
|
if ( line != (size_t)-1 && listctrl->GetColumnCount() )
|
||||||
{
|
{
|
||||||
GetLine(line)->GetItem( 0, le.m_item );
|
GetLine(line)->GetItem( 0, le.m_item );
|
||||||
}
|
}
|
||||||
|
|
||||||
GetParent()->GetEventHandler()->ProcessEvent( le );
|
listctrl->GetEventHandler()->ProcessEvent( le );
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxListMainWindow::ChangeCurrentWithoutEvent(size_t current)
|
bool wxListMainWindow::ChangeCurrentWithoutEvent(size_t current)
|
||||||
@ -4906,6 +4908,10 @@ void wxGenericListCtrl::Init()
|
|||||||
|
|
||||||
wxGenericListCtrl::~wxGenericListCtrl()
|
wxGenericListCtrl::~wxGenericListCtrl()
|
||||||
{
|
{
|
||||||
|
// Don't wait until the base class does it because our subwindows expect
|
||||||
|
// their parent window to be a wxListCtrl, but this won't be the case any
|
||||||
|
// more when we get to the base class dtor (it will be only a wxWindow).
|
||||||
|
DestroyChildren();
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxGenericListCtrl::CreateOrDestroyHeaderWindowAsNeeded()
|
void wxGenericListCtrl::CreateOrDestroyHeaderWindowAsNeeded()
|
||||||
@ -5353,7 +5359,11 @@ int wxGenericListCtrl::GetItemCount() const
|
|||||||
|
|
||||||
int wxGenericListCtrl::GetColumnCount() const
|
int wxGenericListCtrl::GetColumnCount() const
|
||||||
{
|
{
|
||||||
return m_mainWin->GetColumnCount();
|
// wxLC_LIST is special as we want to return 1 for it, for compatibility
|
||||||
|
// with the native wxMSW version and not the real number of columns, which
|
||||||
|
// is 0. For the other non-wxLC_REPORT modes returning 0 is fine, however,
|
||||||
|
// as wxMSW does it too.
|
||||||
|
return HasFlag(wxLC_LIST) ? 1 : m_mainWin->GetColumnCount();
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxGenericListCtrl::SetItemSpacing( int spacing, bool isSmall )
|
void wxGenericListCtrl::SetItemSpacing( int spacing, bool isSmall )
|
||||||
|
@ -48,10 +48,12 @@ private:
|
|||||||
WXUISIM_TEST( ColumnClick );
|
WXUISIM_TEST( ColumnClick );
|
||||||
WXUISIM_TEST( ColumnDrag );
|
WXUISIM_TEST( ColumnDrag );
|
||||||
CPPUNIT_TEST( SubitemRect );
|
CPPUNIT_TEST( SubitemRect );
|
||||||
|
CPPUNIT_TEST( ColumnCount );
|
||||||
CPPUNIT_TEST_SUITE_END();
|
CPPUNIT_TEST_SUITE_END();
|
||||||
|
|
||||||
void EditLabel();
|
void EditLabel();
|
||||||
void SubitemRect();
|
void SubitemRect();
|
||||||
|
void ColumnCount();
|
||||||
#if wxUSE_UIACTIONSIMULATOR
|
#if wxUSE_UIACTIONSIMULATOR
|
||||||
// Column events are only supported in wxListCtrl currently so we test them
|
// Column events are only supported in wxListCtrl currently so we test them
|
||||||
// here rather than in ListBaseTest
|
// here rather than in ListBaseTest
|
||||||
@ -139,6 +141,33 @@ void ListCtrlTestCase::SubitemRect()
|
|||||||
CHECK(rectLabel.GetRight() == rectItem.GetRight());
|
CHECK(rectLabel.GetRight() == rectItem.GetRight());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ListCtrlTestCase::ColumnCount()
|
||||||
|
{
|
||||||
|
CHECK(m_list->GetColumnCount() == 0);
|
||||||
|
m_list->InsertColumn(0, "Column 0");
|
||||||
|
m_list->InsertColumn(1, "Column 1");
|
||||||
|
CHECK(m_list->GetColumnCount() == 2);
|
||||||
|
|
||||||
|
// Recreate the control in other modes to check the count there as well.
|
||||||
|
delete m_list;
|
||||||
|
m_list = new wxListCtrl(wxTheApp->GetTopWindow(), wxID_ANY,
|
||||||
|
wxDefaultPosition, wxDefaultSize,
|
||||||
|
wxLC_LIST);
|
||||||
|
CHECK(m_list->GetColumnCount() == 1);
|
||||||
|
|
||||||
|
delete m_list;
|
||||||
|
m_list = new wxListCtrl(wxTheApp->GetTopWindow(), wxID_ANY,
|
||||||
|
wxDefaultPosition, wxDefaultSize,
|
||||||
|
wxLC_ICON);
|
||||||
|
CHECK(m_list->GetColumnCount() == 0);
|
||||||
|
|
||||||
|
delete m_list;
|
||||||
|
m_list = new wxListCtrl(wxTheApp->GetTopWindow(), wxID_ANY,
|
||||||
|
wxDefaultPosition, wxDefaultSize,
|
||||||
|
wxLC_SMALL_ICON);
|
||||||
|
CHECK(m_list->GetColumnCount() == 0);
|
||||||
|
}
|
||||||
|
|
||||||
#if wxUSE_UIACTIONSIMULATOR
|
#if wxUSE_UIACTIONSIMULATOR
|
||||||
void ListCtrlTestCase::ColumnDrag()
|
void ListCtrlTestCase::ColumnDrag()
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user