summaryrefslogtreecommitdiffhomepage
path: root/StarsEx/Layout.h
blob: e5fc5f0e0b3976c85886c13602ea5ac41e370a12 (plain)
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
/*  Starshatter: The Open Source Project
    Copyright (c) 2021-2024, Starshatter: The Open Source Project Contributors
    Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors
    Copyright (c) 1997-2006, Destroyer Studios LLC.

    AUTHOR:       John DiCamillo


    OVERVIEW
    ========
    Layout Manager class for ActiveWindow panels
*/

#ifndef Layout_h
#define Layout_h

#include "ActiveWindow.h"

// +--------------------------------------------------------------------+

class Layout
{
public:
    static const char* TYPENAME() { return "Layout"; }

    Layout();
    virtual ~Layout();

    virtual bool   DoLayout(ActiveWindow* panel);

    virtual void   Clear();
    virtual void   AddCol(DWORD min_width,  float col_factor);
    virtual void   AddRow(DWORD min_height, float row_factor);

    virtual void   SetConstraints(const std::vector<DWORD>& min_x,
    const std::vector<DWORD>& min_y,
    const std::vector<float>& weight_x,
    const std::vector<float>& weight_y);

    virtual void   SetConstraints(const std::vector<float>& min_x,
    const std::vector<float>& min_y,
    const std::vector<float>& weight_x,
    const std::vector<float>& weight_y);

    virtual void   SetConstraints(int            ncols,
    int            nrows,
    const int*     min_x,
    const int*     min_y,
    const float*   weight_x,
    const float*   weight_y);


protected:
    virtual void   ScaleWeights();
    virtual void   CalcCells(DWORD w, DWORD h, std::vector<DWORD>& cell_x, std::vector<DWORD>& cell_y);

    std::vector<DWORD>   cols;
    std::vector<DWORD>   rows;
    std::vector<float>   col_weights;
    std::vector<float>   row_weights;
};

#endif  // Layout_h