// 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 XFA_FWL_BASEWIDGET_IFWL_SPINBUTTON_H_
#define XFA_FWL_BASEWIDGET_IFWL_SPINBUTTON_H_

#include "xfa/fwl/core/fwl_widgetimp.h"

#define FWL_CLASS_SpinButton L"FWL_SPINBUTTON"
#define FWL_CLASSHASH_SpinButton 3793043646
#define FWL_STYLEEXE_SPB_Vert (1L << 0)
#define FWL_PART_SPB_Border 1
#define FWL_PART_SPB_Edge 2
#define FWL_PART_SPB_UpButton 3
#define FWL_PART_SPB_DownButton 4
#define FWL_PARTSTATE_SPB_Normal (0L << 0)
#define FWL_PARTSTATE_SPB_Hovered (1L << 0)
#define FWL_PARTSTATE_SPB_Pressed (2L << 0)
#define FWL_PARTSTATE_SPB_Disabled (3L << 0)
#define FWL_WGTHITTEST_SPB_UpButton (FWL_WGTHITTEST_MAX + 1)
#define FWL_WGTHITTEST_SPB_DownButton (FWL_WGTHITTEST_MAX + 2)
#define FWL_EVT_SPB_Click L"FWL_EVENT_SPB_Click"
#define FWL_EVTHASH_SPB_Click 2927651187

BEGIN_FWL_EVENT_DEF(CFWL_EvtSpbClick, FWL_EVTHASH_SPB_Click)
FX_BOOL m_bUp;
END_FWL_EVENT_DEF

class IFWL_SpinButton : public IFWL_Widget {
 public:
  static IFWL_SpinButton* Create(const CFWL_WidgetImpProperties& properties,
                                 IFWL_Widget* pOuter);

  FWL_ERR EnableButton(FX_BOOL bEnable, FX_BOOL bUp = TRUE);
  FX_BOOL IsButtonEnable(FX_BOOL bUp = TRUE);

 protected:
  IFWL_SpinButton();
};

#endif  // XFA_FWL_BASEWIDGET_IFWL_SPINBUTTON_H_
