summaryrefslogtreecommitdiff
path: root/xfa/src/fwl/src/core/include/fwl_gridimp.h
blob: 1bd7ada04bae021183f5d28a339256299c66f812 (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
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

#ifndef _FWL_GRID_IMP_H
#define _FWL_GRID_IMP_H
class CFWL_Content;
class IFWL_Widget;
class CFWL_GridLength;
class CFWL_GridColRow;
class CFWL_GridWidgetInfo;
class CFWL_GridImp;
class CFWL_GridLength
{
public:
    CFWL_GridLength()
        : fLength(0)
        , eUnit(FWL_GRIDUNIT_Fixed)
    {
    }
    CFWL_GridLength(FX_FLOAT fValue, FWL_GRIDUNIT e)
        : fLength(fValue)
        , eUnit(e)
    {
    }
    FX_FLOAT fLength;
    FWL_GRIDUNIT eUnit;
};
class CFWL_GridColRow
{
public:
    CFWL_GridColRow()
        : m_Size (1, FWL_GRIDUNIT_Scaled)
        , m_MinSize(0, FWL_GRIDUNIT_Fixed)
        , m_MaxSize(0, FWL_GRIDUNIT_Infinity)
        , m_fActualSize(0)
        , m_fActualPos(0)
    {
    }
    CFWL_GridLength	m_Size;
    CFWL_GridLength	m_MinSize;
    CFWL_GridLength	m_MaxSize;
    FX_FLOAT		m_fActualSize;
    FX_FLOAT		m_fActualPos;
};
class CFWL_GridWidgetInfo
{
public:
    CFWL_GridWidgetInfo()
        : m_iColumn (0)
        , m_iColumnSpan(1)
        , m_iRow(0)
        , m_iRowSpan(1)
        , m_dwMarginFlag(0)
        , m_fActualWidth(0)
        , m_fActualHeight(0)
    {
        m_Size[FWL_GRIDSIZE_Width].eUnit = FWL_GRIDUNIT_Auto;
        m_Size[FWL_GRIDSIZE_Width].fLength = 0;
        m_Size[FWL_GRIDSIZE_Height].eUnit = FWL_GRIDUNIT_Auto;
        m_Size[FWL_GRIDSIZE_Height].fLength = 0;
        m_Size[FWL_GRIDSIZE_MinWidth].eUnit = FWL_GRIDUNIT_Fixed;
        m_Size[FWL_GRIDSIZE_MinWidth].fLength = 0;
        m_Size[FWL_GRIDSIZE_MaxWidth].eUnit = FWL_GRIDUNIT_Infinity;
        m_Size[FWL_GRIDSIZE_MaxWidth].fLength = 0;
        m_Size[FWL_GRIDSIZE_MinHeight].eUnit = FWL_GRIDUNIT_Fixed;
        m_Size[FWL_GRIDSIZE_MinHeight].fLength = 0;
        m_Size[FWL_GRIDSIZE_MaxHeight].eUnit = FWL_GRIDUNIT_Infinity;
        m_Size[FWL_GRIDSIZE_MaxHeight].fLength = 0;
        m_Margin[0] = m_Margin[1] = m_Margin[2] = m_Margin[3] = 0;
    }
    FX_INT32 m_iColumn;
    FX_INT32 m_iColumnSpan;
    FX_INT32 m_iRow;
    FX_INT32 m_iRowSpan;
    CFWL_GridLength	m_Size[6];
    FX_DWORD		m_dwMarginFlag;
    FX_FLOAT		m_Margin[4];
    FX_FLOAT		m_fActualWidth;
    FX_FLOAT		m_fActualHeight;
};
class CFWL_GridImp : public CFWL_ContentImp
{
public:
    CFWL_GridImp();
    CFWL_GridImp(const CFWL_WidgetImpProperties &properties);
    virtual ~CFWL_GridImp();
    virtual FWL_ERR		GetClassName(CFX_WideString &wsClass) const;
    virtual FX_DWORD	GetClassID() const;
    virtual FWL_ERR		Initialize();
    virtual FWL_ERR		Finalize();
    virtual FWL_ERR		GetWidgetRect(CFX_RectF &rect, FX_BOOL bAutoSize = FALSE);
    virtual FWL_ERR		SetWidgetRect(const CFX_RectF &rect);
    virtual	FWL_ERR		Update();
    virtual FWL_ERR		DrawWidget(CFX_Graphics *pGraphics, const CFX_Matrix *pMatrix = NULL);

    virtual FWL_ERR			InsertWidget(IFWL_Widget *pChild, FX_INT32 nIndex = -1);
    virtual FWL_ERR			RemoveWidget(IFWL_Widget *pWidget);
    virtual FWL_HGRIDCOLROW		InsertColRow(FX_BOOL bColumn, FX_INT32 nIndex = -1);
    virtual FX_INT32			CountColRows(FX_BOOL bColumn);
    virtual FWL_HGRIDCOLROW		GetColRow(FX_BOOL bColumn, FX_INT32 nIndex);
    virtual FX_INT32			GetIndex(FWL_HGRIDCOLROW hColRow);
    virtual FX_FLOAT			GetSize(FWL_HGRIDCOLROW hColRow, FWL_GRIDUNIT &eUnit);
    virtual FWL_ERR				SetSize(FWL_HGRIDCOLROW hColRow, FX_FLOAT fSize, FWL_GRIDUNIT eUnit);
    virtual FX_FLOAT			GetMinSize(FWL_HGRIDCOLROW hColRow, FWL_GRIDUNIT &eUnit);
    virtual	FWL_ERR				SetMinSize(FWL_HGRIDCOLROW hColRow, FX_FLOAT fSize, FWL_GRIDUNIT eUnit);
    virtual FX_FLOAT			GetMaxSize(FWL_HGRIDCOLROW hColRow, FWL_GRIDUNIT &eUnit);
    virtual	FWL_ERR				SetMaxSize(FWL_HGRIDCOLROW hColRow, FX_FLOAT fSize, FWL_GRIDUNIT eUnit);
    virtual FX_BOOL				DeleteColRow(FWL_HGRIDCOLROW hColRow);
    virtual FX_BOOL				IsColumn(FWL_HGRIDCOLROW hColRow);
    virtual FX_INT32			GetWidgetPos(IFWL_Widget *pWidget, FX_BOOL bColumn);
    virtual FWL_ERR				SetWidgetPos(IFWL_Widget *pWidget, FX_INT32 iPos, FX_BOOL bColumn);
    virtual FX_INT32			GetWidgetSpan(IFWL_Widget *pWidget, FX_BOOL bColumn);
    virtual FWL_ERR				SetWidgetSpan(IFWL_Widget *pWidget, FX_INT32 iSpan, FX_BOOL bColumn);
    virtual FX_FLOAT			GetWidgetSize(IFWL_Widget *pWidget, FWL_GRIDSIZE eSize, FWL_GRIDUNIT &eUnit);
    virtual FWL_ERR				SetWidgetSize(IFWL_Widget *pWidget, FWL_GRIDSIZE eSize, FX_FLOAT fSize, FWL_GRIDUNIT eUit);
    virtual FX_BOOL				GetWidgetMargin(IFWL_Widget *pWidget, FWL_GRIDMARGIN eMargin, FX_FLOAT &fMargin);
    virtual FWL_ERR				SetWidgetMargin(IFWL_Widget *pWidget, FWL_GRIDMARGIN eMargin, FX_FLOAT fMargin);
    virtual FWL_ERR				RemoveWidgetMargin(IFWL_Widget *pWidget, FWL_GRIDMARGIN eMargin);
    virtual FX_FLOAT			GetGridSize(FWL_GRIDSIZE eSize, FWL_GRIDUNIT &eUnit);
    virtual FWL_ERR				SetGridSize(FWL_GRIDSIZE eSize, FX_FLOAT fSize, FWL_GRIDUNIT eUit);
protected:
    CFWL_GridWidgetInfo*	GetWidgetInfo(IFWL_Widget* pWidget);
    void			ProcFixedColRow(CFWL_GridColRow *pColRow, FX_INT32 nIndex, FX_FLOAT fColRowSize, FX_BOOL bColumn);
    void			ProcAutoColRow(CFWL_GridColRow *pColRow, FX_INT32 nIndex, FX_BOOL bColumn);
    void			ProcScaledColRow(CFWL_GridColRow *pColRow, FX_INT32 nIndex, FX_FLOAT fColRowSize, FX_BOOL bColumn);
    void			CalcWidgetWidth(IFWL_Widget *pWidget, CFWL_GridWidgetInfo *pInfo, FX_FLOAT fColunmWidth);
    void			CalcWidgetHeigt(IFWL_Widget *pWidget, CFWL_GridWidgetInfo *pInfo, FX_FLOAT fRowHeigt);
    FX_FLOAT		CalcAutoColumnWidgetWidth(IFWL_Widget *pWidget, CFWL_GridWidgetInfo* pInfo);
    FX_FLOAT		CalcAutoColumnWidgetHeight(IFWL_Widget *pWidget, CFWL_GridWidgetInfo* pInfo);
    FX_FLOAT		ProcessColumns(FX_FLOAT fWidth);
    FX_FLOAT		ProcessRows(FX_FLOAT fHeight);
    FX_FLOAT		ProcessUnCertainColumns();
    FX_FLOAT		ProcessUnCertainRows();
    FX_BOOL			SetColRowActualSize(CFWL_GridColRow *pColRow, FX_FLOAT fSize, FX_BOOL bSetBeyond = FALSE);
    FX_FLOAT		SetWidgetActualWidth(CFWL_GridWidgetInfo *pInfo, FX_FLOAT fWidth);
    FX_FLOAT		SetWidgetActualHeight(CFWL_GridWidgetInfo *pInfo, FX_FLOAT fHeight);
    void			SetAllWidgetsRect();
    FX_BOOL			IsGrid(IFWL_Widget *pWidget);
    void			SetSpanAutoColRowSize(const CFX_PtrArray &spanAutos, FX_FLOAT fTotalSize);
    void			SetSpanScaledColRowSize(const CFX_PtrArray &spanScaleds, FX_FLOAT fTotalSize, FX_FLOAT fTotalScaledNum);
    void			SetScaledColRowsSize(const CFX_PtrArray &spanScaleds, FX_FLOAT fTotalSize, FX_FLOAT fTotalScaledNum);
    CFX_PtrArray				m_Rows;
    CFX_PtrArray				m_Columns;
    CFX_PtrArray				m_Widgets;
    CFX_MapPtrToPtr				m_mapWidgetInfo;
    CFWL_GridLength				m_Size[6];
    friend class CFWL_GridDelegate;
};
class CFWL_GridDelegate : public CFWL_WidgetImpDelegate
{
public:
    CFWL_GridDelegate(CFWL_GridImp *pOwner);
    virtual FX_INT32	OnProcessMessage(CFWL_Message *pMessage);
    virtual FWL_ERR		OnDrawWidget(CFX_Graphics *pGraphics, const CFX_Matrix *pMatrix = NULL);
protected:
    CFWL_GridImp *m_pOwner;
};
#endif