1 /*
2  * Window.h
3  * Copyright (C) 2007 by Bryan Duff <duff0097@gmail.com>
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
18  * USA
19  */
20 #ifndef _GUI_WINDOW_H_
21 #define _GUI_WINDOW_H_
22 
23 #include "Quaternions.h"
24 #include <GL/gl.h>
25 #include <GL/glu.h>
26 
27 #include <string>
28 #include <vector>
29 
30 #include "Threads.h"
31 
32 class Window {
33 public:
Window()34   Window() {
35   };
36   virtual ~Window();
37 
getName()38   const char *getName() {
39     return name.c_str();
40   }
attach(Window * window)41   void attach(Window *window) {
42     children.push_back(window);
43     //printf("'%s' children: %u\n", name.c_str(), children.size());
44   }
45   Window *getWindow(const char *winName);
setName(const char * winName)46   void setName(const char *winName) {
47     name = winName;
48   }
49 
50   virtual void draw();
51 
52 protected:
53   std::vector <Window*>children;
54 
55 private:
56   string name;
57 };
58 
59 class WindowMgr {
60 public:
61   static WindowMgr & getInstance();
~WindowMgr()62   ~WindowMgr() {
63     delete root;
64   }
getRoot()65   Window *getRoot() {
66     return root;
67   }
draw()68   void draw() {
69     root->draw();
70   }
71 
72 protected:
WindowMgr()73   WindowMgr() {
74     root = new Window();
75   }
76 
77 private:
78   static std::auto_ptr < WindowMgr > instance;
79   static Mutex m;
80   Window *root;
81 };
82 
83 #endif
84