Subversion Repositories AndroidProjects

Rev

Blame | Last modification | View Log | RSS feed

#ifndef __WIDGETCONTAINER_H__
#define __WIDGETCONTAINER_H__

#include "Common.h"
#include "Rect.h"
#include "Flags.h"

namespace Sexy
{

class Graphics;
class Widget;
class WidgetManager;

typedef std::list<Widget*> WidgetList;


class WidgetContainer
{
public:
        WidgetList                              mWidgets;
        WidgetManager*                  mWidgetManager;
        WidgetContainer*                mParent;

        bool                                    mUpdateIteratorModified;
        WidgetList::iterator    mUpdateIterator;
        ulong                                   mLastWMUpdateCount;
        int                                             mUpdateCnt;
        bool                                    mDirty;
        int                                             mX;
        int                                             mY;
        int                                             mWidth;
        int                                             mHeight;
        bool                                    mHasAlpha;
        bool                                    mClip;
        FlagsMod                                mWidgetFlagsMod;
        int                                             mPriority;
        int                                             mZOrder;

public:
        Widget*                                 GetWidgetAtHelper(int x, int y, int theFlags, bool* found, int* theWidgetX, int* theWidgetY);
        bool                                    IsBelowHelper(Widget* theWidget1, Widget* theWidget2, bool* found);
        void                                    InsertWidgetHelper(const WidgetList::iterator &where, Widget *theWidget);

public:
        WidgetContainer();
        virtual ~WidgetContainer();

        virtual Rect                    GetRect();
        virtual bool                    Intersects(WidgetContainer* theWidget);

        virtual void                    AddWidget(Widget* theWidget);
        virtual void                    RemoveWidget(Widget* theWidget);       
        virtual bool                    HasWidget(Widget* theWidget);  
        virtual void                    DisableWidget(Widget* theWidget);
        virtual void                    RemoveAllWidgets(bool doDelete = false, bool recursive = false);
       
        virtual void                    SetFocus(Widget* theWidget);
        virtual bool                    IsBelow(Widget* theWidget1, Widget* theWidget2);                       
        virtual void                    MarkAllDirty();
        virtual void                    BringToFront(Widget* theWidget);
        virtual void                    BringToBack(Widget* theWidget);
        virtual void                    PutBehind(Widget* theWidget, Widget* theRefWidget);
        virtual void                    PutInfront(Widget* theWidget, Widget* theRefWidget);
        virtual Point                   GetAbsPos(); // relative to top level

        virtual void                    MarkDirty();
        virtual void                    MarkDirtyFull();
        virtual void                    MarkDirtyFull(WidgetContainer* theWidget);
        virtual void                    MarkDirty(WidgetContainer* theWidget);

        virtual void                    AddedToManager(WidgetManager* theWidgetManager);
        virtual void                    RemovedFromManager(WidgetManager* theWidgetManager);                   

        virtual void                    Update();
        virtual void                    UpdateAll(ModalFlags* theFlags);
        virtual void                    UpdateF(float theFrac);
        virtual void                    UpdateFAll(ModalFlags* theFlags, float theFrac);
        virtual void                    Draw(Graphics* g);
        virtual void                    DrawAll(ModalFlags* theFlags, Graphics* g);    
        virtual void                    SysColorChangedAll();
        virtual void                    SysColorChanged();
};

};

#endif //__WIDGETCONTAINER_H__