//
// Tools_GUIMenu_Element_Base.h
//
// Created by Richard Rice - 30/11/2006
// 
// Copyright (C) 2006 Rebellion, All Rights Reserved.
//


#ifdef ASURA_USE_PRAGMA_ONCE
    #pragma once
#endif


#ifndef _TOOLS_GUIMENU_ELEMENT_BASE_H_
#define _TOOLS_GUIMENU_ELEMENT_BASE_H_
#ifdef ASURA_USE_GUI_MENU_SYSTEM

#include "GUIMenu/Tools_GUIMenu_Root.h"


class Asura_GUIMenu_Element_Base;

class Tools_GUIMenu_Element_Base : public Tools_GUIMenu_Root
{
	typedef Tools_GUIMenu_Root PARENT;

public :
	Tools_GUIMenu_Element_Base(Asura_GUIMenu_Element_Base* pxAsuraElement,Tools_GUIMenu_Root* pxToolsParent);

	virtual bool CanBeResized() const {return true;}
	virtual bool CanEditWidth() const;
	virtual bool CanEditHeight() const;
	virtual bool CanBeMoved() const;
	virtual void Copy(const Tools_GUIMenu_Root* pxSource);

	virtual bool IsElement() const {return true;}

	virtual void OnSelection();
	virtual void OnDeselection();

	virtual bool NeedsPosOptions() const {return true;}

protected :
	virtual void Update();

	virtual void AddBasicOverlayControls(Asura_Overlay* pxOverlay,Asura_Vector_2& xOffset);
	virtual void AddOverlayControls(Asura_Overlay* pxOverlay,Asura_Vector_2& xOffset);
	virtual void Render();
	virtual u_int GetFlagsToEdit() const;
	virtual const char* GetLocalDataFlagName(u_int uFlagValue) const;
	virtual bool IsModifierTypeSupported( ASURA_GUIMENU_MODIFY_TYPE eType ) const;
	virtual void AddModifierOverlayControls(Asura_GUIMenu_Modifier* pxModifier, Asura_Vector_2& xOffset);
	virtual void InitialiseModifier(Asura_GUIMenu_Modifier* pxModifier);

private :

	virtual bool CanEditDisplayWidth() const;
	virtual bool CanEditDisplayHeight() const;

	bool CanEditDimXPercentages() const;
	bool CanEditDimYPercentages() const;

	Asura_GUIMenu_Element_Base* m_pxAsuraElement;

	Asura_Vector_2			m_xPercentageDims;
	bool					m_bPercDimsChanged;

	static Tools_GUIMenu_Element_Base* s_pxCurrentElement;
};




#endif //ASURA_USE_GUI_MENU_SYSTEM
#endif //_TOOLS_GUIMENU_ELEMENT_BASE_H_
