Index: orxonox/branches/levelloader/src/lib/gui/gui/orxonox_gui_gtk.h
===================================================================
--- orxonox/branches/levelloader/src/lib/gui/gui/orxonox_gui_gtk.h	(revision 3605)
+++ orxonox/branches/levelloader/src/lib/gui/gui/orxonox_gui_gtk.h	(revision 3746)
@@ -39,12 +39,11 @@
 
  public:
+  Widget(void);
   virtual ~Widget(void);
-  void init(void);
-  void destroy(void);
 
   void show(void);
   void hide(void);
   void setSize(int width, int height);
-  virtual void setTitle(char* title) = 0;  //!< An abstract Function, that sets the title of Widgets.
+  virtual void setTitle(const char* title);  //!< An abstract Function, that sets the title of Widgets.
 
   Widget* findWidgetByName(char* name, unsigned int depth);
@@ -90,9 +89,9 @@
 {
  public:
+  Packer(void);
+  virtual ~Packer(void);
+
   Widget* down; //!< this points to the Widget below this.
   char* groupName; //!< For each Packer you can specify a Groupname under which the lowerWidgets will be saved.
-
-  void init(void);
-  void destroy(void);
 
   void setGroupName(char* name);
@@ -115,9 +114,7 @@
   
  public:
-  void init(void);
-  void destroy(void);
-
+  Container(void);
+  virtual ~Container(void);
   //  void setBorderWidth(int borderwidth);
-  //  virtual void setTitle(char* title) = 0;
   void fill(Widget* lowerWidget);
 };
@@ -138,9 +135,8 @@
   Window(void);
   Window(char* windowName);
-  ~Window(void);
-  void init(void);
-  void destroy(void);
-  
-  void setTitle(char* title);
+  virtual ~Window(void);
+  void init(void);
+  
+  void setTitle(const char* title);
   void showall(void);
   void open(void);
@@ -164,9 +160,8 @@
   Frame(void);
   Frame(char* frameName);
-  ~Frame(void);
-  void init(void);
-  void destroy(void);
-  
-  void setTitle(char* title);
+  virtual ~Frame(void);
+  void init(void);
+
+  void setTitle(const char* title);
 };
 
@@ -180,9 +175,6 @@
   EventBox(void);
   EventBox(char* eventBoxName);
-  ~EventBox(void);
-  void init(void);
-  void destroy(void);
-  
-  void setTitle(char* title);
+  virtual ~EventBox(void);
+  void init(void);
 };
 
@@ -198,11 +190,8 @@
   Box(void);
   Box(char boxtype);
-  ~Box(void);
+  virtual ~Box(void);
   void init(char boxtype);
-  void destroy(void);
   
   void fill(Widget* lowerWidget);
-
-  void setTitle(char* title);
 };
 
@@ -217,6 +206,7 @@
   
  public:
-  void init(void);
-  void destroy(void);
+  Option(void);
+  virtual ~Option(void);
+  void init(void);
 
   int value; //!< every option has a value either true or false(0,1) or something else like 25 for 25% of the volume
@@ -227,4 +217,7 @@
   void saveability(void);
   void saveability(bool isSaveable);
+  virtual char* save(void);
+  virtual void load(char* loadString);
+
   bool isSaveable(void);
   void setFlagName(char* flagname, int defaultvalue);
@@ -246,9 +239,8 @@
  public:
   Button(char* buttonname);
-  ~Button(void);
-  void init(void);
-  void destroy(void);
-
-  void setTitle(char* title);
+  virtual ~Button(void);
+  void init(void);
+
+  void setTitle(const char* title);
   void redraw(void);
   void changeOption(void);
@@ -262,9 +254,8 @@
  public:
   CheckButton(char* buttonname);
-  ~CheckButton(void);
-  void init(void);
-  void destroy(void);
-
-  void setTitle(char* title);
+  virtual ~CheckButton(void);
+  void init(void);
+
+  void setTitle(const char* title);
   bool isActive(void);           //!< a Bool value to see, if this CheckButton is active.
   void redraw(void);
@@ -283,9 +274,7 @@
  public:
   Slider(char* slidername, int start, int end);
-  ~Slider(void);
+  virtual ~Slider(void);
   void init(int start, int end);
-  void destroy(void);
-
-  void setTitle(char* title);
+
   void setValue(int value);
   void redraw(void);
@@ -299,15 +288,28 @@
 #ifdef HAVE_GTK2
   GtkWidget* menu;                      //!< The menu That will hold the Options.
-  GtkWidget* item;                      //!< One Item From a Menu.
-#endif /* HAVE_GTK2 */
-  va_list itemlist;                     //!< The list to readin multiple Options.
-  
- public:
+#endif /* HAVE_GTK2 */
+
+  //! A struct to handle the MenuItems
+  struct MenuItem
+  {
+    char* name;                         //!< The name of this entry.
+    int itemNumber;                     //!< The n'th entry of this menu;
+#ifdef HAVE_GTK2
+    GtkWidget* item;                    //!< One Item From a Menu.
+#endif /* HAVE_GTK2 */
+    MenuItem* next;                     //!< Pointer to the next MenuItem.
+  };
+  MenuItem* firstItem;                  //!< Pointer to the first Item.
+  MenuItem* currItem;                   //!< Pointer to the current Item.
+  
+ public:
+  Menu(const char* menuName);
   Menu(char* menuname, ...);
-  ~Menu(void);
-  void init(void);
-  void destroy(void);
-  
-  void setTitle(char* title);
+  virtual ~Menu(void);
+  void init(void);
+
+  virtual char* save(void);
+  virtual void load(char* loadString);
+  
   void addItem(char* itemName);
   void redraw(void);
@@ -322,11 +324,12 @@
  public:
   OptionLabel(char* label, char* value);
-  ~OptionLabel(void);
-  void init(void);
-  void destroy(void);
-  
+  virtual ~OptionLabel(void);
+  void init(void);
   
   void setValue(char* newValue);
-  void setTitle(char* title);
+
+  virtual char* save(void);
+  virtual void load(char* loadString);
+
   void redraw(void);
   void changeOption(void);
@@ -342,7 +345,6 @@
   Label(void);
   Label(char* text);
-  ~Label(void);
-  void init(void);
-  void destroy(void);
+  virtual ~Label(void);
+  void init(void);
   
   void setTitle(char* text);
@@ -359,9 +361,7 @@
   ProgressBar(void);
   ProgressBar(char* label);
-  ~ProgressBar(void);
-  void init(void);
-  void destroy(void);
-
-  void setTitle(char* title);
+  virtual ~ProgressBar(void);
+  void init(void);
+
   void setProgress(double progress);
   void setTotalSize(double totalSize);
@@ -385,9 +385,6 @@
  public:
   Image(char* imgaename);
-  ~Image(void);
-  void init(void);
-  void destroy(void);
-
-  void setTitle(char* title);
+  virtual ~Image(void);
+  void init(void);
 };
 
