#ifndef _COMMON_ELASTICCONTROL_HPP_
#define _COMMON_ELASTICCONTROL_HPP_
#ifndef _COMMON_RUBBERCONTROL_HPP_
#include <common/rubber.hpp>
#endif
#ifndef _COMMON_CONTROL_HPP_
#include <common/control.hpp>
#endif

class ElasticControl : public Control, private RubberControl
{
public:
  ElasticControl(void);
	virtual ~ElasticControl();
	virtual HWND createControl(const String &className,const String &windowName,DWORD dwStyle,const Rect &initRect,GUIWindow &parentWindow,int controlID);
	virtual HWND createControl(DWORD extendedStyle,const String &className,const String &windowName,DWORD dwStyle,const Rect &initRect,GUIWindow &parentWindow,int controlID);
  virtual HWND assumeControl(GUIWindow &parentWindow,HWND hControlWnd,UINT controlID);
protected:
	virtual GUIWindow &controlWindow(void);
private:
	ElasticControl(const ElasticControl &someElasticControl);
	ElasticControl &operator=(const ElasticControl &someElasticControl);
	HWND createControl(const String &className,const String &windowName,DWORD dwStyle,const Rect &initRect,HWND hParentWnd,int controlID);
	HWND createControl(DWORD extendedStyle,const String &className,const String &windowName,DWORD dwStyle,const Rect &initRect,HWND hParent,int controlID);
	CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData);

	Callback<ElasticControl> mSizeHandler;
	GUIWindow *mlpParentWindow;
};

inline
ElasticControl::ElasticControl(void)
: mlpParentWindow(0)
{
  mSizeHandler.setCallback(this,&ElasticControl::sizeHandler);
}

inline
ElasticControl::ElasticControl(const ElasticControl &/*someElasticControl*/)
{ // no implementation
}

inline
ElasticControl::~ElasticControl()
{
}

inline
ElasticControl &ElasticControl::operator=(const ElasticControl &/*someElasticControl*/)
{ // no implementation
  return *this;
}
#endif