diff --git a/samples/grid/griddemo.cpp b/samples/grid/griddemo.cpp index 30617b9ee7..aa6f348e5e 100644 --- a/samples/grid/griddemo.cpp +++ b/samples/grid/griddemo.cpp @@ -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[] = { diff --git a/src/generic/grid.cpp b/src/generic/grid.cpp index 6bd351dd84..f940fbbd40 100644 --- a/src/generic/grid.cpp +++ b/src/generic/grid.cpp @@ -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; diff --git a/tests/controls/gridtest.cpp b/tests/controls/gridtest.cpp index cadc110392..722e34e913 100644 --- a/tests/controls/gridtest.cpp +++ b/tests/controls/gridtest.cpp @@ -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