cfwl_spinbutton.h revision 5ae9d0c6fd838a2967cca72aa5751b51dadc2769
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_SPINBUTTON_H_
8#define XFA_FWL_CFWL_SPINBUTTON_H_
9
10#include <memory>
11
12#include "xfa/fwl/cfwl_timer.h"
13#include "xfa/fwl/cfwl_widget.h"
14#include "xfa/fxfa/cxfa_eventparam.h"
15
16#define FWL_STYLEEXE_SPB_Vert (1L << 0)
17
18class CFWL_MessageMouse;
19class CFWL_WidgetProperties;
20
21class CFWL_SpinButton : public CFWL_Widget {
22 public:
23  CFWL_SpinButton(const CFWL_App* app,
24                  std::unique_ptr<CFWL_WidgetProperties> properties);
25  ~CFWL_SpinButton() override;
26
27  // CFWL_Widget
28  FWL_Type GetClassID() const override;
29  void Update() override;
30  FWL_WidgetHit HitTest(const CFX_PointF& point) override;
31  void DrawWidget(CFX_Graphics* pGraphics, const CFX_Matrix* pMatrix) override;
32  void OnProcessMessage(CFWL_Message* pMessage) override;
33  void OnDrawWidget(CFX_Graphics* pGraphics,
34                    const CFX_Matrix* pMatrix) override;
35
36 private:
37  class Timer : public CFWL_Timer {
38   public:
39    explicit Timer(CFWL_SpinButton* pToolTip);
40    ~Timer() override {}
41
42    void Run(CFWL_TimerInfo* pTimerInfo) override;
43  };
44  friend class CFWL_SpinButton::Timer;
45
46  void DisableButton();
47  bool IsUpButtonEnabled();
48  bool IsDownButtonEnabled();
49  void DrawUpButton(CFX_Graphics* pGraphics,
50                    IFWL_ThemeProvider* pTheme,
51                    const CFX_Matrix* pMatrix);
52  void DrawDownButton(CFX_Graphics* pGraphics,
53                      IFWL_ThemeProvider* pTheme,
54                      const CFX_Matrix* pMatrix);
55  void OnFocusChanged(CFWL_Message* pMsg, bool bSet);
56  void OnLButtonDown(CFWL_MessageMouse* pMsg);
57  void OnLButtonUp(CFWL_MessageMouse* pMsg);
58  void OnMouseMove(CFWL_MessageMouse* pMsg);
59  void OnMouseLeave(CFWL_MessageMouse* pMsg);
60  void OnKeyDown(CFWL_MessageKey* pMsg);
61
62  CFX_RectF m_rtClient;
63  CFX_RectF m_rtUpButton;
64  CFX_RectF m_rtDnButton;
65  uint32_t m_dwUpState;
66  uint32_t m_dwDnState;
67  int32_t m_iButtonIndex;
68  bool m_bLButtonDwn;
69  CFWL_TimerInfo* m_pTimerInfo;
70  CFWL_SpinButton::Timer m_Timer;
71};
72
73#endif  // XFA_FWL_CFWL_SPINBUTTON_H_
74