00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 #ifndef HEADER_CONSTRUO_GUI_MANAGER_HXX
00021 #define HEADER_CONSTRUO_GUI_MANAGER_HXX
00022 
00023 #include <vector>
00024 
00025 class GUIComponent;
00026 struct ButtonEvent;
00027 
00029 class GUIManager
00030 {
00031 private:
00032   unsigned int frame_count;
00033   unsigned int start_time;
00034 
00036   GUIComponent* last_component;
00037   GUIComponent* current_component;
00038 
00039   GUIComponent* grabbing_component;
00040   
00041   int last_x;
00042   int last_y;
00043 
00045   typedef std::vector<GUIComponent*> ComponentLst;
00046   ComponentLst components;
00047 
00048   void process_events ();
00049   void process_button_events (ButtonEvent&);
00050   GUIComponent* find_component_at (int, int);
00051 public:
00052   GUIManager ();
00053   virtual ~GUIManager ();
00054   
00056   virtual void run_once ();
00057 
00059   void draw ();
00060   virtual void update() {}
00061 
00062   virtual void draw_overlay () {}
00063 
00065   void quit();
00066 
00069   void add (GUIComponent*);
00070 
00071   void grab_mouse (GUIComponent*);
00072   void ungrab_mouse (GUIComponent*);
00073 };
00074 
00075 #endif
00076 
00077