Merge branch 'grid-align'

Fix value returned from wxGridCellAttr::GetNonDefaultAlignment() for the
default attribute.

See https://github.com/wxWidgets/wxWidgets/pull/1636
This commit is contained in:
Vadim Zeitlin
2019-11-04 19:33:47 +01:00
3 changed files with 58 additions and 8 deletions

View File

@@ -565,15 +565,21 @@ GridFrame::GridFrame()
grid->SetCellAlignment(3, 9, wxALIGN_CENTRE, wxALIGN_TOP);
grid->SetCellValue(3, 10, "<- This numeric cell should be centred");
grid->SetCellValue(0, 13, "Localized date\ncolumn");
grid->SetColFormatDate(13); // Localized by default.
grid->SetCellValue(1, 13, "Today");
grid->SetCellValue(0, 14, "ISO 8601 date\ncolumn");
grid->SetColFormatDate(14, "%Y-%m-%d"); // ISO 8601 date format.
grid->SetCellValue(1, 14, "Tomorrow");
grid->SetCellValue(7, 0, "Today");
grid->SetCellRenderer(7, 0, new wxGridCellDateRenderer);
grid->SetCellEditor(7, 0, new wxGridCellDateEditor);
grid->SetCellValue(8, 0, "Tomorrow");
grid->SetCellRenderer(8, 0, new wxGridCellDateRenderer("%Y-%m-%d"));
grid->SetCellEditor(8, 0, new wxGridCellDateEditor);
grid->SetCellValue(13, 0, "Date cell:");
grid->SetCellValue(13, 1, "Today");
grid->SetCellRenderer(13, 1, new wxGridCellDateRenderer);
grid->SetCellEditor(13, 1, new wxGridCellDateEditor);
grid->SetCellValue(14, 0, "ISO date cell:");
grid->SetCellValue(14, 1, "Tomorrow");
grid->SetCellRenderer(14, 1, new wxGridCellDateRenderer("%Y-%m-%d"));
grid->SetCellEditor(14, 1, new wxGridCellDateEditor);
const wxString choices[] =
{

View File

@@ -579,6 +579,11 @@ void wxGridCellAttr::GetAlignment(int *hAlign, int *vAlign) const
void wxGridCellAttr::GetNonDefaultAlignment(int *hAlign, int *vAlign) const
{
// Default attribute can only have default alignment, so don't return it
// from this function.
if ( this == m_defGridAttr )
return;
if ( hAlign && m_hAlign != wxALIGN_INVALID )
*hAlign = m_hAlign;

View File

@@ -31,6 +31,28 @@
#include "waitforpaint.h"
namespace
{
// Derive a new class inheriting from wxGrid just to get access to its
// protected GetCellAttr(). This is not pretty, but we don't have any other way
// of testing this function.
class TestableGrid : public wxGrid
{
public:
explicit TestableGrid(wxWindow* parent)
: wxGrid(parent, wxID_ANY)
{
}
wxGridCellAttr* CallGetCellAttr(int row, int col) const
{
return GetCellAttr(row, col);
}
};
} // anonymous namespace
class GridTestCase : public CppUnit::TestCase
{
public:
@@ -60,6 +82,7 @@ private:
CPPUNIT_TEST( Labels );
CPPUNIT_TEST( SelectionMode );
CPPUNIT_TEST( CellFormatting );
CPPUNIT_TEST( GetNonDefaultAlignment );
WXUISIM_TEST( Editable );
WXUISIM_TEST( ReadOnly );
WXUISIM_TEST( ResizeScrolledHeader );
@@ -100,6 +123,7 @@ private:
void Labels();
void SelectionMode();
void CellFormatting();
void GetNonDefaultAlignment();
void Editable();
void ReadOnly();
void WindowAsEditorControl();
@@ -127,7 +151,7 @@ private:
static bool ms_nativeheader;
static bool ms_nativelabels;
wxGrid *m_grid;
TestableGrid *m_grid;
wxDECLARE_NO_COPY_CLASS(GridTestCase);
};
@@ -144,7 +168,7 @@ bool GridTestCase::ms_nativelabels = false;
void GridTestCase::setUp()
{
m_grid = new wxGrid(wxTheApp->GetTopWindow(), wxID_ANY);
m_grid = new TestableGrid(wxTheApp->GetTopWindow());
m_grid->CreateGrid(10, 2);
m_grid->SetSize(400, 200);
@@ -805,6 +829,21 @@ void GridTestCase::CellFormatting()
CPPUNIT_ASSERT_EQUAL(*wxGREEN, m_grid->GetCellTextColour(0, 0));
}
void GridTestCase::GetNonDefaultAlignment()
{
// GetNonDefaultAlignment() is used by several renderers having their own
// preferred alignment, so check that if we don't reset the alignment
// explicitly, it doesn't override the alignment used by default.
wxGridCellAttr* attr = NULL;
int align = wxALIGN_RIGHT;
attr = m_grid->CallGetCellAttr(0, 0);
REQUIRE( attr );
attr->GetNonDefaultAlignment(&align, NULL);
CHECK( align == wxALIGN_RIGHT );
}
void GridTestCase::Editable()
{
#if wxUSE_UIACTIONSIMULATOR