#ifndef _COBJECTSIZEBAR_H_
#define _COBJECTSIZEBAR_H_

#include "CObjectBase.h"
#include "../x/Objstr.h"

#define SB_SHADOW		(1<<(LAST_OBJ_FLAG+1))

#define SB_HORIZONTAL	1
#define SB_VERTICAL		2

class CObjectSizeBar:public CObjectBase
{
private:
	int		SBshadowActive;		// presence de l'ombre
	int		SBdir;				// direction
	int		SBcurPos;			// position courante de l'ombre
	int		SBoldPos;			// ancienne position de l'ombre
	int		SBsizeCursor;		// curseur de redimensionnement
	int		SBpreviousCursor;	// curseur precedent
	
	int		SBminmaxdefined;	// min/max defined
	int		SBminPos;			// valeur minimale
	int		SBmaxPos;			// valeur maximale

	Layer *	SBshadowLayer;		// layer de l'ombre


	int GetIndexShadow();
	int ValidCoordinates(int,int);	//fonction verifinat la validité des coordonnées
	
	void AddShadow(int,int);		// fonction d'ajout de l'ombre
	void RemShadow();				// fonction de suppression de l'ombre
	void MoveShadow(int,int,int);	// fonction de deplacement de l'ombre
	

	// fonctions de modifs du curseur
	void ChangeCursorToSize();
	void RetrieveDefaultCursor();

	// fonction d'execution du reflexe de fin de redimensionnement
	int ExecuteReflexeEndResize();
public:
	CObjectSizeBar(container *,Layer *,Layer *,int,int,int,int,int,int,int,int);
	~CObjectSizeBar();
	
	Rect2D RectangleIncludingObject();

	// les methodes virtuelles
	int IsMouseOnObject(int,int,int);
	int CursorMove(int,int,int,int,int);
	int CursorMoveIn(int,int,int,int,int);
	int CursorMoveInWithBtnPushed(int,int,int,int,int);
	int CursorMoveOut(int,int,int,int,int);
	int CursorMoveOutWithBtnPushed(int,int,int,int,int);
	int CursorMoveOutsideWithBtnPushed(int,int,int,int,int);
	int ClickIn(int,int,int,int,int,int);
	int UnClickIn(int,int,int,int,int,int);
	int ClickOut(int,int,int,int,int,int);
	int UnClickOut(int,int,int,int,int,int);
	int DblClickIn(int,int,int,int,int,int);
	int MouseWheel(int,int,int,int,int,int);
	int KeyUp(UINT,int,UINT,int);
	int KeyDown(UINT,int,int,UINT,int);
	int SetFocus(int,int,int);
	int KillFocus(int,int);

	int Timer(int);

	Layer *GetLayer(mmachine m,int p_tab);
	Layer *GetLayerPart(mmachine m,Rect2D *area2redraw,int p_tab);
	
	int DestroyAllLayers();
	int ResizeLayer(int,int,int);

	// fonction mettant à jour la valeur maximale et minimale de deplacement
	int SetMinMax(int,int);
};




int _CRcompSizeBar(mmachine);
int _DScompSizeBar(mmachine);
int _SETcompSizeBarMinMax(mmachine);
int _CONVERTcompSizeBarToObjNode(mmachine);
int _CBcompSizeBarEndResize(mmachine);
int _CBcompSizeBarResizeResource(mmachine);
int _CBcompSizeBarResize(mmachine);

#endif