1// Copyright 2014 PDFium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7#ifndef XFA_FWL_CFWL_FORM_H_
8#define XFA_FWL_CFWL_FORM_H_
9
10#include <memory>
11
12#include "core/fxcrt/fx_system.h"
13#include "xfa/fwl/cfwl_widget.h"
14#include "xfa/fwl/cfwl_widgetproperties.h"
15
16#define FWL_CLASS_Form L"FWL_FORM"
17#define FWL_CLASS_FormProxy L"FWL_FORMPROXY"
18
19#if (_FX_OS_ == _FX_MACOSX_)
20#define FWL_UseMacSystemBorder
21#endif
22
23class CFWL_MessageMouse;
24class CFWL_NoteLoop;
25class CFWL_Widget;
26class IFWL_ThemeProvider;
27
28class CFWL_Form : public CFWL_Widget {
29 public:
30  CFWL_Form(const CFWL_App* app,
31            std::unique_ptr<CFWL_WidgetProperties> properties,
32            CFWL_Widget* pOuter);
33  ~CFWL_Form() override;
34
35  // CFWL_Widget
36  FWL_Type GetClassID() const override;
37  bool IsInstance(const CFX_WideStringC& wsClass) const override;
38  CFX_RectF GetClientRect() override;
39  void Update() override;
40  FWL_WidgetHit HitTest(const CFX_PointF& point) override;
41  void DrawWidget(CFX_Graphics* pGraphics, const CFX_Matrix* pMatrix) override;
42  void OnProcessMessage(CFWL_Message* pMessage) override;
43  void OnDrawWidget(CFX_Graphics* pGraphics,
44                    const CFX_Matrix* pMatrix) override;
45
46  CFWL_Widget* DoModal();
47  void EndDoModal();
48
49  CFWL_Widget* GetSubFocus() const { return m_pSubFocus; }
50  void SetSubFocus(CFWL_Widget* pWidget) { m_pSubFocus = pWidget; }
51
52 private:
53  void DrawBackground(CFX_Graphics* pGraphics, IFWL_ThemeProvider* pTheme);
54  CFX_RectF GetEdgeRect();
55  void SetWorkAreaRect();
56  void Layout();
57  void RegisterForm();
58  void UnRegisterForm();
59  void OnLButtonDown(CFWL_MessageMouse* pMsg);
60  void OnLButtonUp(CFWL_MessageMouse* pMsg);
61
62  CFX_RectF m_rtRestore;
63  CFX_RectF m_rtRelative;
64  std::unique_ptr<CFWL_NoteLoop> m_pNoteLoop;
65  CFWL_Widget* m_pSubFocus;
66  FX_FLOAT m_fCXBorder;
67  FX_FLOAT m_fCYBorder;
68};
69
70#endif  // XFA_FWL_CFWL_FORM_H_
71