diff --git a/src/common/sizer.cpp b/src/common/sizer.cpp index 18c06c0da4..ccb4f06eb4 100644 --- a/src/common/sizer.cpp +++ b/src/common/sizer.cpp @@ -114,7 +114,17 @@ static const int SIZER_FLAGS_MASK = #endif // wxDEBUG_LEVEL -#define ASSERT_VALID_SIZER_FLAGS(f) wxASSERT_VALID_FLAGS(f, SIZER_FLAGS_MASK) +#define ASSERT_INCOMPATIBLE_NOT_USED_IMPL(f, f1, n1, f2, n2) \ + wxASSERT_MSG(((f) & (f1 | f2)) != (f1 | f2), \ + n1 " and " n2 " can't be used together") + +#define ASSERT_INCOMPATIBLE_NOT_USED(f, f1, f2) \ + ASSERT_INCOMPATIBLE_NOT_USED_IMPL(f, f1, #f1, f2, #f2) + +#define ASSERT_VALID_SIZER_FLAGS(f) \ + wxASSERT_VALID_FLAGS(f, SIZER_FLAGS_MASK); \ + ASSERT_INCOMPATIBLE_NOT_USED(f, wxALIGN_CENTRE_HORIZONTAL, wxALIGN_RIGHT); \ + ASSERT_INCOMPATIBLE_NOT_USED(f, wxALIGN_CENTRE_VERTICAL, wxALIGN_BOTTOM) void wxSizerItem::Init(const wxSizerFlags& flags) diff --git a/tests/sizers/boxsizer.cpp b/tests/sizers/boxsizer.cpp index c8f59273ac..75534d2c96 100644 --- a/tests/sizers/boxsizer.cpp +++ b/tests/sizers/boxsizer.cpp @@ -44,6 +44,7 @@ private: CPPUNIT_TEST( BestSizeRespectsMaxSize ); CPPUNIT_TEST( RecalcSizesRespectsMaxSize1 ); CPPUNIT_TEST( RecalcSizesRespectsMaxSize2 ); + CPPUNIT_TEST( IncompatibleFlags ); CPPUNIT_TEST_SUITE_END(); void Size1(); @@ -52,6 +53,7 @@ private: void BestSizeRespectsMaxSize(); void RecalcSizesRespectsMaxSize1(); void RecalcSizesRespectsMaxSize2(); + void IncompatibleFlags(); wxWindow *m_win; wxSizer *m_sizer; @@ -376,3 +378,10 @@ void BoxSizerTestCase::RecalcSizesRespectsMaxSize2() CPPUNIT_ASSERT_EQUAL(50, child2->GetSize().GetHeight()); CPPUNIT_ASSERT_EQUAL(125, child3->GetSize().GetHeight()); } + +void BoxSizerTestCase::IncompatibleFlags() +{ + WX_ASSERT_FAILS_WITH_ASSERT( + m_sizer->Add(10, 10, 0, wxALIGN_BOTTOM | wxALIGN_CENTRE_VERTICAL) + ); +}