// // Okzoniom::RPG // Copyright (C) 2010 - 2013 // // - Louis SCHNELLBACH // #ifndef WIDGET_H_INCLUDED #define WIDGET_H_INCLUDED #include #include #include "Callback.h" #include "../Drawable.h" #include "../TexCoord.h" namespace okz { class UI; class Widget : public Drawable, public priv::Callback { friend class UI; public: static float Z_DECREMENT; Widget(const std::string& id, Widget* parent=NULL); virtual ~Widget(); virtual void update(const sf::Event& event); virtual void call(const sf::Event& event); void setID(const std::string&); std::string getID() const; Widget* getParent(); void addChild(Widget* w); void removeChild(Widget* w); Widget* getRootParent(); virtual void visible(bool b); bool isVisible() const; virtual void focus(bool b); void focusable(bool); bool isFocused() const; bool isKeepingFocus() const; bool isFocusable() const; void movable(bool); bool isMovable() const; float setZ(float); virtual void setSize(const okz::fVertex&); virtual okz::fVertex getSize() const; virtual void setOffset(const okz::fVertex&); virtual okz::fVertex getOffset() const; virtual void setPosition(const okz::fVertex&); virtual okz::fVertex getPosition() const; virtual bool contains(float x, float y) const; virtual void initialize(); virtual void render(); virtual void createVBO(); protected: std::string _id; std::string _type; //---------------------- bool _visible; bool _focus; bool _keepFocus; bool _focusable; bool _movable; std::vector _child; Widget* _parent; okz::fVertex _offset; okz::fVertex _size; //Specific OpenGL texture attribute okz::VBOTemplate _texCoords; float _shaderTime; private: //Used by UI bool _destroyMe; void __propagateDestruction(); }; //Comparison functor struct pWidget_comp { bool operator() (const Widget*, const Widget*) const; }; } #endif // WIDGET_H_INCLUDED