Merge XFA to PDFium master at 4dc95e7 on 10/28/2014
[pdfium.git] / xfa / src / fwl / src / core / include / fwl_gridimp.h
1 // Copyright 2014 PDFium Authors. All rights reserved.\r
2 // Use of this source code is governed by a BSD-style license that can be\r
3 // found in the LICENSE file.\r
4 \r
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com\r
6 \r
7 #ifndef _FWL_GRID_IMP_H\r
8 #define _FWL_GRID_IMP_H\r
9 class CFWL_Content;\r
10 class IFWL_Widget;\r
11 class CFWL_GridLength;\r
12 class CFWL_GridColRow;\r
13 class CFWL_GridWidgetInfo;\r
14 class CFWL_GridImp;\r
15 class CFWL_GridLength : public CFX_Object\r
16 {\r
17 public:\r
18     CFWL_GridLength()\r
19         : fLength(0)\r
20         , eUnit(FWL_GRIDUNIT_Fixed)\r
21     {\r
22     }\r
23     CFWL_GridLength(FX_FLOAT fValue, FWL_GRIDUNIT e)\r
24         : fLength(fValue)\r
25         , eUnit(e)\r
26     {\r
27     }\r
28     FX_FLOAT fLength;\r
29     FWL_GRIDUNIT eUnit;\r
30 };\r
31 class CFWL_GridColRow : public CFX_Object\r
32 {\r
33 public:\r
34     CFWL_GridColRow()\r
35         : m_Size (1, FWL_GRIDUNIT_Scaled)\r
36         , m_MinSize(0, FWL_GRIDUNIT_Fixed)\r
37         , m_MaxSize(0, FWL_GRIDUNIT_Infinity)\r
38         , m_fActualSize(0)\r
39         , m_fActualPos(0)\r
40     {\r
41     }\r
42     CFWL_GridLength     m_Size;\r
43     CFWL_GridLength     m_MinSize;\r
44     CFWL_GridLength     m_MaxSize;\r
45     FX_FLOAT            m_fActualSize;\r
46     FX_FLOAT            m_fActualPos;\r
47 };\r
48 class CFWL_GridWidgetInfo : public CFX_Object\r
49 {\r
50 public:\r
51     CFWL_GridWidgetInfo()\r
52         : m_iColumn (0)\r
53         , m_iColumnSpan(1)\r
54         , m_iRow(0)\r
55         , m_iRowSpan(1)\r
56         , m_dwMarginFlag(0)\r
57         , m_fActualWidth(0)\r
58         , m_fActualHeight(0)\r
59     {\r
60         m_Size[FWL_GRIDSIZE_Width].eUnit = FWL_GRIDUNIT_Auto;\r
61         m_Size[FWL_GRIDSIZE_Width].fLength = 0;\r
62         m_Size[FWL_GRIDSIZE_Height].eUnit = FWL_GRIDUNIT_Auto;\r
63         m_Size[FWL_GRIDSIZE_Height].fLength = 0;\r
64         m_Size[FWL_GRIDSIZE_MinWidth].eUnit = FWL_GRIDUNIT_Fixed;\r
65         m_Size[FWL_GRIDSIZE_MinWidth].fLength = 0;\r
66         m_Size[FWL_GRIDSIZE_MaxWidth].eUnit = FWL_GRIDUNIT_Infinity;\r
67         m_Size[FWL_GRIDSIZE_MaxWidth].fLength = 0;\r
68         m_Size[FWL_GRIDSIZE_MinHeight].eUnit = FWL_GRIDUNIT_Fixed;\r
69         m_Size[FWL_GRIDSIZE_MinHeight].fLength = 0;\r
70         m_Size[FWL_GRIDSIZE_MaxHeight].eUnit = FWL_GRIDUNIT_Infinity;\r
71         m_Size[FWL_GRIDSIZE_MaxHeight].fLength = 0;\r
72         m_Margin[0] = m_Margin[1] = m_Margin[2] = m_Margin[3] = 0;\r
73     }\r
74     FX_INT32 m_iColumn;\r
75     FX_INT32 m_iColumnSpan;\r
76     FX_INT32 m_iRow;\r
77     FX_INT32 m_iRowSpan;\r
78     CFWL_GridLength     m_Size[6];\r
79     FX_DWORD            m_dwMarginFlag;\r
80     FX_FLOAT            m_Margin[4];\r
81     FX_FLOAT            m_fActualWidth;\r
82     FX_FLOAT            m_fActualHeight;\r
83 };\r
84 class CFWL_GridImp : public CFWL_ContentImp\r
85 {\r
86 public:\r
87     CFWL_GridImp();\r
88     CFWL_GridImp(const CFWL_WidgetImpProperties &properties);\r
89     virtual ~CFWL_GridImp();\r
90     virtual FWL_ERR             GetClassName(CFX_WideString &wsClass) const;\r
91     virtual FX_DWORD    GetClassID() const;\r
92     virtual FWL_ERR             Initialize();\r
93     virtual FWL_ERR             Finalize();\r
94     virtual FWL_ERR             GetWidgetRect(CFX_RectF &rect, FX_BOOL bAutoSize = FALSE);\r
95     virtual FWL_ERR             SetWidgetRect(const CFX_RectF &rect);\r
96     virtual     FWL_ERR         Update();\r
97     virtual FWL_ERR             DrawWidget(CFX_Graphics *pGraphics, const CFX_Matrix *pMatrix = NULL);\r
98 \r
99     virtual FWL_ERR                     InsertWidget(IFWL_Widget *pChild, FX_INT32 nIndex = -1);\r
100     virtual FWL_ERR                     RemoveWidget(IFWL_Widget *pWidget);\r
101     virtual FWL_HGRIDCOLROW             InsertColRow(FX_BOOL bColumn, FX_INT32 nIndex = -1);\r
102     virtual FX_INT32                    CountColRows(FX_BOOL bColumn);\r
103     virtual FWL_HGRIDCOLROW             GetColRow(FX_BOOL bColumn, FX_INT32 nIndex);\r
104     virtual FX_INT32                    GetIndex(FWL_HGRIDCOLROW hColRow);\r
105     virtual FX_FLOAT                    GetSize(FWL_HGRIDCOLROW hColRow, FWL_GRIDUNIT &eUnit);\r
106     virtual FWL_ERR                             SetSize(FWL_HGRIDCOLROW hColRow, FX_FLOAT fSize, FWL_GRIDUNIT eUnit);\r
107     virtual FX_FLOAT                    GetMinSize(FWL_HGRIDCOLROW hColRow, FWL_GRIDUNIT &eUnit);\r
108     virtual     FWL_ERR                         SetMinSize(FWL_HGRIDCOLROW hColRow, FX_FLOAT fSize, FWL_GRIDUNIT eUnit);\r
109     virtual FX_FLOAT                    GetMaxSize(FWL_HGRIDCOLROW hColRow, FWL_GRIDUNIT &eUnit);\r
110     virtual     FWL_ERR                         SetMaxSize(FWL_HGRIDCOLROW hColRow, FX_FLOAT fSize, FWL_GRIDUNIT eUnit);\r
111     virtual FX_BOOL                             DeleteColRow(FWL_HGRIDCOLROW hColRow);\r
112     virtual FX_BOOL                             IsColumn(FWL_HGRIDCOLROW hColRow);\r
113     virtual FX_INT32                    GetWidgetPos(IFWL_Widget *pWidget, FX_BOOL bColumn);\r
114     virtual FWL_ERR                             SetWidgetPos(IFWL_Widget *pWidget, FX_INT32 iPos, FX_BOOL bColumn);\r
115     virtual FX_INT32                    GetWidgetSpan(IFWL_Widget *pWidget, FX_BOOL bColumn);\r
116     virtual FWL_ERR                             SetWidgetSpan(IFWL_Widget *pWidget, FX_INT32 iSpan, FX_BOOL bColumn);\r
117     virtual FX_FLOAT                    GetWidgetSize(IFWL_Widget *pWidget, FWL_GRIDSIZE eSize, FWL_GRIDUNIT &eUnit);\r
118     virtual FWL_ERR                             SetWidgetSize(IFWL_Widget *pWidget, FWL_GRIDSIZE eSize, FX_FLOAT fSize, FWL_GRIDUNIT eUit);\r
119     virtual FX_BOOL                             GetWidgetMargin(IFWL_Widget *pWidget, FWL_GRIDMARGIN eMargin, FX_FLOAT &fMargin);\r
120     virtual FWL_ERR                             SetWidgetMargin(IFWL_Widget *pWidget, FWL_GRIDMARGIN eMargin, FX_FLOAT fMargin);\r
121     virtual FWL_ERR                             RemoveWidgetMargin(IFWL_Widget *pWidget, FWL_GRIDMARGIN eMargin);\r
122     virtual FX_FLOAT                    GetGridSize(FWL_GRIDSIZE eSize, FWL_GRIDUNIT &eUnit);\r
123     virtual FWL_ERR                             SetGridSize(FWL_GRIDSIZE eSize, FX_FLOAT fSize, FWL_GRIDUNIT eUit);\r
124 protected:\r
125     CFWL_GridWidgetInfo*        GetWidgetInfo(IFWL_Widget* pWidget);\r
126     void                        ProcFixedColRow(CFWL_GridColRow *pColRow, FX_INT32 nIndex, FX_FLOAT fColRowSize, FX_BOOL bColumn);\r
127     void                        ProcAutoColRow(CFWL_GridColRow *pColRow, FX_INT32 nIndex, FX_BOOL bColumn);\r
128     void                        ProcScaledColRow(CFWL_GridColRow *pColRow, FX_INT32 nIndex, FX_FLOAT fColRowSize, FX_BOOL bColumn);\r
129     void                        CalcWidgetWidth(IFWL_Widget *pWidget, CFWL_GridWidgetInfo *pInfo, FX_FLOAT fColunmWidth);\r
130     void                        CalcWidgetHeigt(IFWL_Widget *pWidget, CFWL_GridWidgetInfo *pInfo, FX_FLOAT fRowHeigt);\r
131     FX_FLOAT            CalcAutoColumnWidgetWidth(IFWL_Widget *pWidget, CFWL_GridWidgetInfo* pInfo);\r
132     FX_FLOAT            CalcAutoColumnWidgetHeight(IFWL_Widget *pWidget, CFWL_GridWidgetInfo* pInfo);\r
133     FX_FLOAT            ProcessColumns(FX_FLOAT fWidth);\r
134     FX_FLOAT            ProcessRows(FX_FLOAT fHeight);\r
135     FX_FLOAT            ProcessUnCertainColumns();\r
136     FX_FLOAT            ProcessUnCertainRows();\r
137     FX_BOOL                     SetColRowActualSize(CFWL_GridColRow *pColRow, FX_FLOAT fSize, FX_BOOL bSetBeyond = FALSE);\r
138     FX_FLOAT            SetWidgetActualWidth(CFWL_GridWidgetInfo *pInfo, FX_FLOAT fWidth);\r
139     FX_FLOAT            SetWidgetActualHeight(CFWL_GridWidgetInfo *pInfo, FX_FLOAT fHeight);\r
140     void                        SetAllWidgetsRect();\r
141     FX_BOOL                     IsGrid(IFWL_Widget *pWidget);\r
142     void                        SetSpanAutoColRowSize(const CFX_PtrArray &spanAutos, FX_FLOAT fTotalSize);\r
143     void                        SetSpanScaledColRowSize(const CFX_PtrArray &spanScaleds, FX_FLOAT fTotalSize, FX_FLOAT fTotalScaledNum);\r
144     void                        SetScaledColRowsSize(const CFX_PtrArray &spanScaleds, FX_FLOAT fTotalSize, FX_FLOAT fTotalScaledNum);\r
145     CFX_PtrArray                                m_Rows;\r
146     CFX_PtrArray                                m_Columns;\r
147     CFX_PtrArray                                m_Widgets;\r
148     CFX_MapPtrToPtr                             m_mapWidgetInfo;\r
149     CFWL_GridLength                             m_Size[6];\r
150     friend class CFWL_GridDelegate;\r
151 };\r
152 class CFWL_GridDelegate : public CFWL_WidgetImpDelegate\r
153 {\r
154 public:\r
155     CFWL_GridDelegate(CFWL_GridImp *pOwner);\r
156     virtual FX_INT32    OnProcessMessage(CFWL_Message *pMessage);\r
157     virtual FWL_ERR             OnDrawWidget(CFX_Graphics *pGraphics, const CFX_Matrix *pMatrix = NULL);\r
158 protected:\r
159     CFWL_GridImp *m_pOwner;\r
160 };\r
161 #endif\r