File: wrapsizer.cpp

package info (click to toggle)
wxpython4.0 4.2.4%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 218,584 kB
  • sloc: cpp: 962,669; python: 231,226; ansic: 170,755; makefile: 51,757; sh: 9,342; perl: 1,564; javascript: 584; php: 326; xml: 200
file content (112 lines) | stat: -rw-r--r-- 3,913 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
///////////////////////////////////////////////////////////////////////////////
// Name:        tests/sizers/wrapsizer.cpp
// Purpose:     Unit tests for wxWrapSizer
// Author:      Catalin Raceanu
// Created:     2010-10-23
// Copyright:   (c) 2010 wxWidgets development team
///////////////////////////////////////////////////////////////////////////////

// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------

#include "testprec.h"


#ifndef WX_PRECOMP
    #include "wx/app.h"
#endif // WX_PRECOMP

#include "wx/wrapsizer.h"

#include "asserthelper.h"

TEST_CASE("wxWrapSizer::CalcMin", "[wxWrapSizer]")
{
    wxScopedPtr<wxWindow> win(new wxWindow(wxTheApp->GetTopWindow(), wxID_ANY));
    win->SetClientSize(180, 240);

    wxSizer *sizer = new wxWrapSizer(wxHORIZONTAL);
    win->SetSizer(sizer);

    wxSize sizeMinExpected;

    // With a single child the min size must be the same as child size.
    const wxSize sizeChild1 = wxSize(80, 60);
    sizeMinExpected = sizeChild1;

    wxWindow * const
        child1 = new wxWindow(win.get(), wxID_ANY, wxDefaultPosition, sizeChild1);
    child1->SetBackgroundColour(*wxRED);
    sizer->Add(child1);
    win->Layout();

    CHECK( sizeMinExpected == sizer->CalcMin() );

    // If both children can fit in the same row, the minimal size of the sizer
    // is determined by the sum of their minimal horizontal dimensions and
    // the maximum of their minimal vertical dimensions.
    const wxSize sizeChild2 = wxSize(100, 80);
    sizeMinExpected.x += sizeChild2.x;
    sizeMinExpected.y = wxMax(sizeChild1.y, sizeChild2.y);

    wxWindow * const
        child2 = new wxWindow(win.get(), wxID_ANY, wxDefaultPosition, sizeChild2);
    child2->SetBackgroundColour(*wxYELLOW);
    sizer->Add(child2);
    win->Layout();

    CHECK( sizeMinExpected == sizer->CalcMin() );

    // Three children will take at least two rows so the minimal size in
    // vertical direction must increase.
    const wxSize sizeChild3 = wxSize(90, 40);
    sizeMinExpected.y += sizeChild3.y;

    wxWindow * const
        child3 = new wxWindow(win.get(), wxID_ANY, wxDefaultPosition, sizeChild3);
    child3->SetBackgroundColour(*wxGREEN);
    sizer->Add(child3);
    win->Layout();

    CHECK( sizeMinExpected == sizer->CalcMin() );
}

TEST_CASE("wxWrapSizer::CalcMinFromMinor", "[wxWrapSizer]")
{
    wxScopedPtr<wxWindow> win(new wxWindow(wxTheApp->GetTopWindow(), wxID_ANY));
    win->SetClientSize(180, 240);

    wxSizer* boxSizer = new wxBoxSizer(wxHORIZONTAL);
    win->SetSizer(boxSizer);

    // To test CalcMinFromMinor function the wrap sizer with the
    // horizonral align added to the box sizer with horizontal align.
    wxSizer* wrapSizer = new wxWrapSizer(wxHORIZONTAL);
    boxSizer->Add(wrapSizer);

    // Add three child windows. Sum of the first and the second windows widths should
    // be less than the width of the third window.
    const wxSize sizeChild1 = wxSize(40, 60);
    wxWindow * const
        child1 = new wxWindow(win.get(), wxID_ANY, wxDefaultPosition, sizeChild1);
    child1->SetBackgroundColour(*wxRED);
    wrapSizer->Add(child1);

    const wxSize sizeChild2 = wxSize(50, 80);
    wxWindow * const
        child2 = new wxWindow(win.get(), wxID_ANY, wxDefaultPosition, sizeChild2);
    child2->SetBackgroundColour(*wxGREEN);
    wrapSizer->Add(child2);

    const wxSize sizeChild3 = wxSize(100, 120);
    wxWindow * const
        child3 = new wxWindow(win.get(), wxID_ANY, wxDefaultPosition, sizeChild3);
    child3->SetBackgroundColour(*wxBLUE);
    wrapSizer->Add(child3);

    // First two windows should be in a first row and the third in a second row.
    const wxSize sizeMinExpected = wxSize(sizeChild3.x, sizeChild2.y + sizeChild3.y);
    win->Layout();
    CHECK(sizeMinExpected == wrapSizer->CalcMin());
}