// This file is part of VSTGUI. It is subject to the license terms 
// in the LICENSE file found in the top-level directory of this
// distribution and at http://github.com/steinbergmedia/vstgui/LICENSE

#pragma once

#include "../enumbitset.h"
#include "ccontrol.h"

namespace VSTGUI {

//-----------------------------------------------------------------------------
// CVuMeter Declaration
//!
/// @ingroup controls
//-----------------------------------------------------------------------------
class CVuMeter : public CControl
{
public:
	enum class Style : int32_t
	{
		kHorizontal,
		kVertical,
	};

	CVuMeter (const CRect& size, CBitmap* onBitmap, CBitmap* offBitmap, int32_t nbLed,
			  Style style = Style::kVertical);
	CVuMeter (const CVuMeter& vuMeter);
  
	//-----------------------------------------------------------------------------
	/// @name CVuMeter Methods
	//-----------------------------------------------------------------------------
	//@{
	float getDecreaseStepValue () const { return decreaseValue; }
	virtual void setDecreaseStepValue (float value) { decreaseValue = value; }

	virtual CBitmap* getOnBitmap () const { return getBackground (); }
	virtual CBitmap* getOffBitmap () const { return offBitmap; }
	virtual void setOnBitmap (CBitmap* bitmap) { setBackground (bitmap); }
	virtual void setOffBitmap (CBitmap* bitmap);
	
	int32_t getNbLed () const { return nbLed; }
	void setNbLed (int32_t nb) { nbLed = nb; invalid (); }

	void setStyle (Style newStyle)
	{
		style = newStyle;
		invalid ();
	}
	Style getStyle () const { return style; }
	//@}

	// overrides
	void setDirty (bool state) override;
	void draw (CDrawContext* pContext) override;
	void setViewSize (const CRect& newSize, bool invalid = true) override;
	bool sizeToFit () override;
	void onIdle () override;
	
	CLASS_METHODS(CVuMeter, CControl)
protected:
	~CVuMeter () noexcept override;

	CBitmap* offBitmap;

	int32_t nbLed;
	Style style;
	float decreaseValue;

	CRect rectOn;
	CRect rectOff;
};

} // VSTGUI
