#pragma once

#include <System/Windows/Controls/Control.h>
#include <System/Windows/RoutedPropertyChangedEventArgs.h>

namespace System
{
	namespace Windows
	{
		namespace Controls
		{
			namespace Primitives
			{
				// Represents an element that has a value within a specific range, such as the System::Windows::Controls::ProgressBar, System::Windows::Controls::Primitives::ScrollBar, and System::Windows::Controls::Slider controls.
				class RangeBase : public Control
				{
				private:
					int maximum;
					int minimum;
					int value;

				protected:
					RangeBase();

					virtual void OnMaximumChanged(const int oldValue, int newValue);
					virtual void OnMinimumChanged(const int oldValue, int newValue);
					virtual void OnValueChanged(const int oldValue, int newValue);

				public:
					int getMaximum() const;
					void setMaximum(const int value);
					int getMinimum() const;
					void setMinimum(const int value);
					int LargeChange;
					int SmallChange;
					int getValue() const;
					void setValue(const int value);

					virtual ~RangeBase();

					int GetType() const;
					const char* ToString() const;

					Event<Object*, RoutedPropertyChangedEventArgs<int>* > ValueChanged;

					bool operator ==(const RangeBase& right) const;
					bool operator !=(const RangeBase& right) const;
				};
			}
		}
	}
}