Index: /orxonox/trunk/gui/orxonox_gui.cc
===================================================================
--- /orxonox/trunk/gui/orxonox_gui.cc	(revision 2604)
+++ /orxonox/trunk/gui/orxonox_gui.cc	(revision 2605)
@@ -99,4 +99,26 @@
 
 /* WIDGET */
+
+/**
+ \brief deletes any given Widget
+ This is still pretty crappy.
+*/
+Widget::~Widget()
+{
+  //  cout << "hiding: " <<this->label <<"\n";
+  this->hide();
+  //  cout << "check if Packer: "<<this->label <<"\n";
+  if (this->is_option < 0)
+    {
+      //  cout << "get Down "<<this->label <<"\n";
+      static_cast<Packer*>(this)->down->~Widget();
+    }
+  //  cout << "next != NULL?: " <<this->label <<"\n";
+  if (this->next != NULL)
+    this->next->~Widget();
+  cout << "delete Widget: " <<this->label <<"\n";
+  //  delete widget;
+}
+
 /**
  * Initializes a widget.
@@ -108,4 +130,30 @@
 }
 
+/**
+ * makes the widget visible.
+ */
+void Widget::show()
+{
+  gtk_widget_show (this->widget);
+}
+
+/**
+ * hides the widget.
+ */
+void Widget::hide()
+{
+  gtk_widget_hide (this->widget);
+}
+
+/**
+ \brief Sets the resolution of a specific widget to the given size.
+ \param width the width of the widget to set.
+ \param height the height of the widget to set.
+*/
+void Widget::setSize(int width, int height)
+{
+  gtk_widget_set_usize (this->widget, width, height);
+}
+
 /** 
  * Connect any signal to any given Sub-widget
@@ -130,13 +178,4 @@
 {
   g_signal_connect (G_OBJECT (this->widget), event, G_CALLBACK (signal), extObj);
-}
-
-
-/**
- * Function to Shows a specific widget.
- */
-void Widget::show()
-{
-  gtk_widget_show (this->widget);
 }
 
@@ -149,12 +188,7 @@
 {
   function(this);
-  switch (this->is_option)
+  if (this->is_option < 0)
     {
-    case -1:
-      static_cast<Container*>(this)->down->walkThrough (function);
-      break;
-    case -2:
-      static_cast<Box*>(this)->down->walkThrough (function);
-      break;
+      static_cast<Packer*>(this)->down->walkThrough (function);
     } 
 
@@ -163,5 +197,4 @@
 }
 
-
 /** 
  * This is for listing the option of "widget"
@@ -171,5 +204,5 @@
 {
   if (widget->is_option >= 1)
-    cout << static_cast<Option*>(widget)->option_name <<" is : " << static_cast<Option*>(widget)->value <<endl;
+    cout << static_cast<Option*>(widget)->label <<" is : " << static_cast<Option*>(widget)->value <<endl;
 }
 
@@ -184,5 +217,19 @@
 }
 
-/* CONTAINERS*/
+//void deleteWidget(Widget* lastWidget)
+
+
+/* PACKERS */
+
+/**
+ * Initializes a Packer.
+ * nothing to do here
+ */
+void Packer::init (void)
+{
+  return;
+}
+
+/* CONTAINERS */
 
 /**
@@ -234,18 +281,11 @@
 
 /**
- * Destoying a Window (very BAD implemented).
- * For now it just hides the window.
- */
-Window::~Window ()
-{
-  gtk_widget_hide (widget);
-}
-
-/**
  *initializes a new Window
  */
 void Window::init()
 {
+  isOpen = true;
   is_option = -1;
+  label = "";
   next = NULL;
   down = NULL;
@@ -263,4 +303,5 @@
 void Window::showall ()
 {
+  isOpen = true;
   gtk_widget_show_all  (widget);
 }
@@ -272,4 +313,5 @@
 void Window::setTitle (char* title)
 {
+  label=title;
   gtk_window_set_title (GTK_WINDOW (widget), title);
 }
@@ -311,11 +353,4 @@
 }
 
-/**
- * Destroys given Frame (not implemented yet)
- */
-Frame::~Frame ()
-{
-}
-
 /** 
  * Initializes a new Frame with default settings
@@ -324,4 +359,5 @@
 {
   is_option = -1;
+  label = "";
   next = NULL;
   down = NULL;
@@ -336,4 +372,5 @@
 void Frame::setTitle (char* title)
 {
+  label = title;
   gtk_frame_set_label (GTK_FRAME (widget), title);
 }
@@ -365,4 +402,5 @@
 {
   is_option = -1;
+  label = "eventBox";
   next = NULL;
   down = NULL;
@@ -378,14 +416,6 @@
 void EventBox::setTitle (char* title)
 {
-
-}
-
-/**
- * Destructs an EventBox (not Implemented)
- */
-EventBox::~EventBox ()
-{
-}
-
+  label = title;
+}
 
 /* BOX */
@@ -409,11 +439,4 @@
 
 /**
- * Destroys given Box (not implemented yet)
- */
-Box::~Box ()
-{
-}
-
-/**
  * Initializes a new Box with type boxtype
  \param boxtype see Box(char boxtype)
@@ -422,4 +445,5 @@
 {
   is_option = -2;
+  label = "box";
   next = NULL;
   down = NULL;
@@ -469,4 +493,5 @@
   this->init();
   widget = gtk_image_new_from_file (imagename);
+  label = imagename;
 }
 
@@ -477,4 +502,5 @@
 {
   is_option = 0;
+  label = "";
   next = NULL;
 }
@@ -501,5 +527,5 @@
   flag_name = flagname;
   default_value = defaultvalue;
-  cout << "Set Flagname of " << option_name << " to " << flagname << endl;
+  cout << "Set Flagname of " << label << " to " << flagname << endl;
 }
 
@@ -515,5 +541,5 @@
   flag_name_short = flagnameshort;
   default_value = defaultvalue;
-  cout << "Set Flagname of " << option_name << " to " << flagname << endl;
+  cout << "Set Flagname of " << label << " to " << flagname << endl;
 }
 
@@ -539,5 +565,5 @@
   value = 0;
   next = NULL;
-  option_name ="";
+  label ="";
   flag_name = "";
   flag_name_short = "";
@@ -552,5 +578,5 @@
 void Button::setTitle (char *title)
 {
-  option_name = title;
+  label = title;
   gtk_button_set_label (GTK_BUTTON(widget), title);
 }
@@ -578,11 +604,4 @@
 }
 
-/** 
- * Destructs a CheckButton (not Implemented yet).
- */
-CheckButton::~CheckButton()
-{
-}
-
 /**
  * Initiali a new CheckButton with default settings
@@ -593,5 +612,5 @@
   value = 0;
   next = NULL;
-  option_name = "";
+  label = "";
   flag_name = "";
   flag_name_short = "";
@@ -606,5 +625,5 @@
 void CheckButton::setTitle(char* title)
 {
-  option_name = title;
+  label = title;
   gtk_button_set_label(GTK_BUTTON(widget), title);
 }
@@ -620,5 +639,5 @@
   static_cast<CheckButton*>(checkbutton)->value = (int)gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON ((CheckButton*)checkbutton->widget));
   flags->setTextFromFlags(orxonoxGUI);
-  cout << static_cast<CheckButton*>(checkbutton)->option_name << " set to: " << static_cast<CheckButton*>(checkbutton)->value << endl;
+  cout << static_cast<CheckButton*>(checkbutton)->label << " set to: " << static_cast<CheckButton*>(checkbutton)->value << endl;
 }
 
@@ -649,11 +668,4 @@
 
 /**
- * Destructs a Slider (not implemented yet)
- */
-Slider::~Slider()
-{
-}
-
-/**
  * Initializes a Slider with start and end Values
  * params: see Slider::Slider (char* slidername, int start, int end)
@@ -664,5 +676,5 @@
   value = 0;
   next = NULL;
-  option_name = "";
+  label = "";
   flag_name = "";
   flag_name_short = "";
@@ -677,5 +689,5 @@
 void Slider::setTitle(char* title)
 {
-  option_name = title;
+  label = title;
 }
 
@@ -698,5 +710,5 @@
   static_cast<Slider*>(slider)->value = (int)gtk_range_get_value (GTK_RANGE ((Slider*)slider->widget));
   flags->setTextFromFlags(orxonoxGUI);
-  cout << static_cast<Slider*>(slider)->option_name << " set to: "<< static_cast<Slider*>(slider)->value << endl;
+  cout << static_cast<Slider*>(slider)->label << " set to: "<< static_cast<Slider*>(slider)->value << endl;
 }
 
@@ -758,5 +770,5 @@
 void Menu::setTitle(char* title)
 {
-  option_name = title;
+  label = title;
 }
 
@@ -779,5 +791,5 @@
   static_cast<Menu*>(menu)->value = (int)gtk_option_menu_get_history (GTK_OPTION_MENU (menu->widget));
   flags->setTextFromFlags(orxonoxGUI);
-  cout << static_cast<Menu*>(menu)->option_name << " changed to : " << static_cast<Menu*>(menu)->value << endl;
+  cout << static_cast<Menu*>(menu)->label << " changed to : " << static_cast<Menu*>(menu)->value << endl;
 }
 
@@ -806,25 +818,17 @@
 Label:: Label (char* text)
 {
+  this->init();
+  this->setText(text);
+}
+
+/**
+ * initializes a new Label
+ */
+void Label::init(void)
+{
   is_option = 0;
-  next = NULL;
-  widget = gtk_label_new (text);
-  gtk_label_set_line_wrap (GTK_LABEL(widget), TRUE);
-}
-
-/** 
- * Destructs a Label
- */
-Label::~Label ()
-{}
-
-/**
- * initializes a new Label
- */
-void Label::init(void)
-{
-  is_option = 0;
+  label = "";
   next = NULL;
   widget = gtk_label_new ("");
-  gtk_widget_set_usize (widget, 260, 60);
   gtk_label_set_line_wrap (GTK_LABEL(widget), TRUE);
 }
@@ -836,4 +840,5 @@
 void Label::setText (char * text)
 {
+  label = text;
   gtk_label_set_text (GTK_LABEL (this->widget), text);
 }
Index: /orxonox/trunk/gui/orxonox_gui.h
===================================================================
--- /orxonox/trunk/gui/orxonox_gui.h	(revision 2604)
+++ /orxonox/trunk/gui/orxonox_gui.h	(revision 2605)
@@ -39,13 +39,21 @@
  private:
  public:
+  ~Widget ();
+
   Widget* next; //!< next always points to the next Widget in the list. Every Widget has a next one, or has NULL as next
   GtkWidget* widget; //!< widget is the gtk_widget that the specific Object Contains.
   virtual void init(void);
   int is_option; //!< with this Paramenter one can set the IsOption type: -2:Container, -1: Box, 0: not an Option, 1: Bool-option, 2: int-option
-  enum option { containerType = -2, boxType = -1, nothingType = 0, boolType = 1, intType = 2}; //!< defines is_option states
+  /**
+     \briefdefines is_option states
+  */
+  enum option { containerType = -2, boxType = -1, nothingType = 0, boolType = 1, intType = 2}; 
+  char* label; //!< The name of the Widget. Some do display it, Options need it to save;
   void connectSignal (char* event, gint (*signal)(GtkWidget*, GdkEvent*, void *));
   void connectSignal (char* event, gint (*signal)(GtkWidget*, Widget *));
   void connectSignal (char* event, void* extObj, gint (*signal)(GtkWidget*, GdkEvent*, void *));
   void show ();
+  void hide ();
+  void setSize(int width, int height);
 
   void walkThrough (void (*function)(Widget*));
@@ -55,4 +63,12 @@
 };
 
+//! This is a Packer Object, which has the ability to Pack other Widgets into itself.
+class Packer : public Widget
+{
+ public:
+  Widget* down; //!< this points to the Widget below this.
+
+  void init(void);
+};
 
 //! This is a Container Class, it can contain one sub-Widget: down.
@@ -62,14 +78,12 @@
  * The derived classes of Container can be displayed
 */
-class Container : public Widget
+class Container : public Packer
 {
  private:
   int borderwidth;
   int policy;
-  char* label;
-  
- public:
-  void init(void);
-  Widget* down; //!< this points to the Widget below this.
+  
+ public:
+  void init(void);
   //  void setBorderWidth (int borderwidth);
   //  virtual void setTitle (char* title) = 0;
@@ -84,8 +98,9 @@
 class Window : public Container
 {
+ private:
+  bool isOpen;
  public:
   Window (char* windowName);
   Window (void);
-  ~Window ();
   void init ();
   
@@ -105,5 +120,4 @@
   Frame (char* frameName);
   Frame (void);
-  ~Frame ();
   void init(void);
   
@@ -120,5 +134,4 @@
   EventBox (char* eventBoxName);
   EventBox (void);
-  ~EventBox ();
   void init(void);
   
@@ -132,13 +145,11 @@
  * A Box is always filled left->right (horizontally) or up->down (vertically)
  */
-class Box : public Widget
+class Box : public Packer
 {
  public:
   Box (void);
   Box (char boxtype);
-  ~Box (void);
   void init(char boxtype);
 
-  Widget* down; //!< the Lower Widget of a Box.
   void fill (Widget* lowerWidget);
 
@@ -154,5 +165,4 @@
  public:
   Image (char* imgaename);
-  ~Image ();
   void init(void);
 };
@@ -169,5 +179,4 @@
 
   int value; //!< every option has a value either true or false (0,1) or something else like 25 for 25% of the volume
-  char* option_name; //!< options have a name, that can be displayed around them
   char* flag_name; //!< options have a flag name that will be appendet if you start the Program from the GUI.
   char* flag_name_short; //!< like flag_name but shorter
@@ -187,5 +196,4 @@
  public:
   Button (char* buttonname);
-  ~Button (void);
   void init(void);
 
@@ -202,5 +210,4 @@
  public:
   CheckButton (char* buttonname);
-  ~CheckButton (void);
   static gint OptionChange (GtkWidget* widget, Widget* checkbutton);
   
@@ -219,5 +226,4 @@
  public:
   Slider (char* slidername,int start, int end);
-  ~Slider ();
   void init(int start, int end);
 
@@ -239,5 +245,4 @@
  public:
   Menu (char* menuname, ...);
-  ~Menu ();
   void init(void);
 
@@ -255,5 +260,4 @@
   Label ();
   Label (char* text);
-  ~Label ();
   void init(void);
   
Index: /orxonox/trunk/gui/orxonox_gui_banner.cc
===================================================================
--- /orxonox/trunk/gui/orxonox_gui_banner.cc	(revision 2604)
+++ /orxonox/trunk/gui/orxonox_gui_banner.cc	(revision 2605)
@@ -88,5 +88,5 @@
 {
   logoWindowIsOpen = 0;
-  logoWindow->~Window();
+  logoWindow->hide();
 }
 
Index: /orxonox/trunk/gui/orxonox_gui_exec.cc
===================================================================
--- /orxonox/trunk/gui/orxonox_gui_exec.cc	(revision 2604)
+++ /orxonox/trunk/gui/orxonox_gui_exec.cc	(revision 2605)
@@ -124,5 +124,5 @@
 	char Buffer[256];
 	char* space2under;
-	sprintf (Buffer, "%s", static_cast<Option*>(widget)->option_name);
+	sprintf (Buffer, "%s", static_cast<Option*>(widget)->label);
 	if (strchr (Buffer, '_'))
 	  cout << "Warning Optionname" << Buffer << " is not Valid for Saving, because it includes an underscore" << endl; 
@@ -189,5 +189,5 @@
 {
   if (widget->is_option >= 1)
-    if (!strcmp (static_cast<Option*>(widget)->option_name, variableName))
+    if (!strcmp (static_cast<Option*>(widget)->label, variableName))
 	static_cast<Option*>(widget)->value = variableValue;
 
Index: /orxonox/trunk/gui/orxonox_gui_flags.cc
===================================================================
--- /orxonox/trunk/gui/orxonox_gui_flags.cc	(revision 2604)
+++ /orxonox/trunk/gui/orxonox_gui_flags.cc	(revision 2605)
@@ -39,4 +39,5 @@
 
   flagsLabel = new Label ();
+  flagsLabel->setSize (260,60);
   flagsBox->fill (flagsLabel);
   shortFlags = new CheckButton ("shortFlags");
