Index: trunk/src/lib/gui/gl/Makefile.am
===================================================================
--- trunk/src/lib/gui/gl/Makefile.am	(revision 8495)
+++ trunk/src/lib/gui/gl/Makefile.am	(revision 8518)
@@ -29,5 +29,7 @@
 		glgui_image.cc \
 		glgui_window.cc \
-		glgui_cursor.cc
+		glgui_cursor.cc \
+		\
+		specials/glgui_notifier.cc
 
 
@@ -54,5 +56,8 @@
 		glgui_image.h \
 		glgui_window.h \
-		glgui_cursor.h
+		glgui_cursor.h \
+		\
+		specials/glgui_notifier.h
+
 
 
Index: trunk/src/lib/gui/gl/glgui_inputline.cc
===================================================================
--- trunk/src/lib/gui/gl/glgui_inputline.cc	(revision 8495)
+++ trunk/src/lib/gui/gl/glgui_inputline.cc	(revision 8518)
@@ -48,4 +48,5 @@
     this->setFocusable(true);
 
+    this->_clearOnEnter = false;
     this->_text.setParent2D(this);
     this->_text.setRelCoor2D(4,4);
@@ -100,4 +101,10 @@
   }
 
+  void GLGuiInputLine::clear()
+  {
+    this->_text.clear();
+    this->changedText();
+  }
+
   /**
    * @brief If the Text has been changed this function is called.
@@ -124,4 +131,17 @@
   }
 
+  /**
+   * @brief handles the EnterPush-Event.
+   *
+   * Emmits th EnterPushed Signal with the current Line,
+   * and if _clearOnEnter is pushed clears the Line.
+   */
+  void GLGuiInputLine::pushEnter()
+  {
+    emit(this->enterPushed(this->_text.getText()));
+    if (this->_clearOnEnter)
+      this->clear();
+  }
+
 
   /**
@@ -140,4 +160,9 @@
         this->pressedKeyName = SDLK_BACKSPACE;
         this->removeCharacters(1);
+        return true;
+      }
+      else if(event.type == SDLK_RETURN || event.type == SDLK_KP_ENTER)
+      {
+        this->pushEnter();
         return true;
       }
Index: trunk/src/lib/gui/gl/glgui_inputline.h
===================================================================
--- trunk/src/lib/gui/gl/glgui_inputline.h	(revision 8495)
+++ trunk/src/lib/gui/gl/glgui_inputline.h	(revision 8518)
@@ -38,4 +38,7 @@
     void appendCharacter(char character);
     void removeCharacters(unsigned int chars);
+    void clear();
+
+    void clearOnEnter(bool clear = true) { this->_clearOnEnter = clear; };
 
     virtual void removedFocus();
@@ -47,4 +50,5 @@
 
     DeclareSignal1(textChanged, const std::string&);
+    DeclareSignal1(enterPushed, const std::string&);
 
   protected:
@@ -57,8 +61,11 @@
   private:
     void init();
+    void pushEnter();
     void changedText();
+
 
   private:
     Text                    _text;            //!< The Text to display inside of the InputLine.
+    bool                    _clearOnEnter;    //!< Clear on Enter
 
     Uint16                  pressedKey;       //!< the pressed key that will be repeated.
Index: trunk/src/lib/gui/gl/glgui_style.cc
===================================================================
--- trunk/src/lib/gui/gl/glgui_style.cc	(revision 8495)
+++ trunk/src/lib/gui/gl/glgui_style.cc	(revision 8518)
@@ -29,4 +29,8 @@
   GLGuiStyle::GLGuiStyle (const TiXmlElement* root)
   {
+    _font = NULL;
+    this->reset();
+
+
     if (root != NULL)
       this->loadParams(root);
@@ -43,7 +47,24 @@
   }
 
+  void GLGuiStyle::reset()
+  {
+    this->setBorderLeft(1.0);
+    this->setBorderRight(1.0);
+    this->setBorderTop(1.0);
+    this->setBorderBottom(1.0);
+
+    this->setTextSize(20.0);
+    this->setBackgroundColor(1.0);
+    this->setForegroundColor(1.0);
+
+    this->setFeaturePosition(FeatureLeft);
+    this->setFont(NULL);
+
+    this->setAnimated(true);
+    this->setAnimatedStateChanges(true);
+  }
+
   void GLGuiStyle::loadParams(const TiXmlElement* root)
-  {
-  }
+  {}
 
   void GLGuiStyle::setBorderLeft(float value)
@@ -54,8 +75,11 @@
 
   void GLGuiStyle::setBorderLeft(float value, OrxGui::State state)
-{}
+  {
+    _style[state]._borderLeft = value;
+  }
 
   void GLGuiStyle::setBorderLeftS(float value, const std::string& state)
-  {}
+  {
+  }
 
 
@@ -67,5 +91,7 @@
 
   void GLGuiStyle::setBorderRight(float value, OrxGui::State state)
-{}
+  {
+    _style[state]._borderRight = value;
+  }
 
   void GLGuiStyle::setBorderRightS(float value, const std::string& state)
@@ -80,5 +106,7 @@
 
   void GLGuiStyle::setBorderTop(float value, OrxGui::State state)
-{}
+  {
+    _style[state]._borderTop = value;
+  }
 
   void GLGuiStyle::setBorderTopS(float value, const std::string& state)
@@ -93,5 +121,7 @@
 
   void GLGuiStyle::setBorderBottom(float value, OrxGui::State state)
-{}
+  {
+    _style[state]._borderBottom = value;
+  }
 
   void GLGuiStyle::setBorderBottomS(float value, const std::string& state)
@@ -106,5 +136,7 @@
 
   void GLGuiStyle::setTextSize(float value, OrxGui::State state)
-{}
+  {
+    _style[state]._textSize = value;
+  }
 
   void GLGuiStyle::setTextSizeS(float value, const std::string& state)
@@ -119,5 +151,7 @@
 
   void GLGuiStyle::setBackgroundColor(const Color& color, OrxGui::State state)
-{}
+  {
+    _style[state]._backgroundColor = color;
+  }
 
   void GLGuiStyle::setBackgroundColorS(float r, float g, float b, float a, const std::string& state)
@@ -132,5 +166,7 @@
 
   void GLGuiStyle::setBackgroundTexture(const Texture& texture, OrxGui::State state)
-{}
+  {
+    _style[state]._backgroundTexture = texture;
+  }
 
   void GLGuiStyle::setBackgroundTexture(const std::string& textureName, const std::string& state)
@@ -145,5 +181,7 @@
 
   void GLGuiStyle::setForegroundColor(const Color& color, OrxGui::State state)
-  {}
+  {
+    _style[state]._foregroundColor = color;
+  }
 
   void GLGuiStyle::setForegroundColorS(float r, float g, float b, float a, const std::string& state)
@@ -158,7 +196,5 @@
 
   void GLGuiStyle::setFeaturePosition(const std::string& featurePosition)
-  {
-
-  }
+  {}
 
 
@@ -179,5 +215,5 @@
   }
 
-  void GLGuiStyle::animatedStateChanges(bool animated)
+  void GLGuiStyle::setAnimatedStateChanges(bool animated)
   {
     this->_animatedStateChanges = animated;
Index: trunk/src/lib/gui/gl/glgui_style.h
===================================================================
--- trunk/src/lib/gui/gl/glgui_style.h	(revision 8495)
+++ trunk/src/lib/gui/gl/glgui_style.h	(revision 8518)
@@ -43,4 +43,5 @@
 
     /// SETUP
+    void reset();
     void loadParams(const TiXmlElement* root);
 
@@ -85,5 +86,5 @@
 
     void setAnimated(bool animated);
-    void animatedStateChanges(bool animated);
+    void setAnimatedStateChanges(bool animated);
 
   private:
Index: trunk/src/lib/gui/gl/glgui_widget.h
===================================================================
--- trunk/src/lib/gui/gl/glgui_widget.h	(revision 8495)
+++ trunk/src/lib/gui/gl/glgui_widget.h	(revision 8518)
@@ -66,4 +66,7 @@
     void disconnect(GLGuiWidget* sender, Signal& signal, BaseObject* receiver);
 
+
+    GLGuiStyle& style() { return this->_style; };
+    const GLGuiStyle style() const { return this->_style; };
 
     /// MATERIAL (looks)
Index: trunk/src/lib/gui/gl/specials/glgui_notifier.cc
===================================================================
--- trunk/src/lib/gui/gl/specials/glgui_notifier.cc	(revision 8518)
+++ trunk/src/lib/gui/gl/specials/glgui_notifier.cc	(revision 8518)
@@ -0,0 +1,202 @@
+/*
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Benjamin Grauer
+   co-programmer: ...
+*/
+
+#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_SHELL
+
+#include "glgui_notifier.h"
+#include "multi_line_text.h"
+
+#include "debug.h"
+
+namespace OrxGui
+{
+
+  /**
+   * standard constructor
+   */
+  GLGuiNotifier::GLGuiNotifier ()
+  {
+    this->setClassID(CL_GLGUI_NOTIFIER, "GLGuiNotifier");
+
+    // Element2D and generals
+    this->lineSpacing = 0;
+    this->linesProcessed = 0;
+
+    this->setDisplayLineCount(10);
+  }
+
+  /**
+   * @brief standard deconstructor
+   */
+  GLGuiNotifier::~GLGuiNotifier ()
+  {
+    // delete the displayable Buffers
+    /*    while (!this->displayLines.empty())
+        {
+          delete this->displayLines.front().text;
+          this->displayLines.pop_front();
+        }
+
+        while (!this->hiddenText.empty())
+        {
+          delete this->hiddenText.top();
+          this->hiddenText.pop();
+        }*/
+  }
+
+  void GLGuiNotifier::pushNotifyMessage(const std::string& message)
+  {
+    if (!this->hiddenText.empty())
+    {
+      printf("%s\n", message.c_str());
+      DisplayLine dl;
+      dl.text = this->hiddenText.top();
+
+      dl.text->setBlending(1.0f);
+      dl.text->setText(message);
+      this->hiddenText.pop();
+      dl.age = 0.0f;
+      this->displayLines.push_front(dl);
+
+      dl.text->setVisibility(true);
+      dl.text->setRelCoor2D(this->calculateLinePosition(0));
+      this->repositionText();
+    }
+    else
+    {
+      this->inputBuffer.push_front(message);
+      //printf("grumble... must be fixed\n");
+    }
+  }
+
+
+  void GLGuiNotifier::setDisplayLineCount(unsigned int count)
+  {
+    unsigned int currentCount = displayLines.size() + hiddenText.size();
+
+    for (unsigned int i = currentCount; i < count; ++i)
+    {
+      MultiLineText* text = new MultiLineText();
+      this->applyTextSettings(text);
+      this->hiddenText.push(text);
+    }
+    bufferDisplaySize = count;
+  }
+
+
+  /**
+   * @brief repositiones all the Texts to their position.
+   */
+  void GLGuiNotifier::repositionText()
+  {
+    int linePos = -1;
+    std::list<DisplayLine>::iterator textIt;
+    for (textIt = this->displayLines.begin() ; textIt != this->displayLines.end(); ++textIt )
+    {
+      linePos += (*textIt).text->getLineCount();
+      (*textIt).text->setRelCoorSoft2D(this->calculateLinePosition(linePos), 8);
+      //      printf("%f %f\n", (*textIt).text->getAbsCoor2D().x, (*textIt).text->getAbsCoor2D().y);
+    }
+  }
+
+
+  /**
+   * @brief applies the GLGuiNotifiers Settings to a single Text of the GLGuiNotifier.
+   * @param text the Text to apply the settings to.
+   */
+  void GLGuiNotifier::applyTextSettings(MultiLineText* text)
+  {
+    text->setSize(this->style().textSize());
+    text->setLineWidth( 300 );
+    text->setFont("fonts/final_frontier.ttf", (int)this->style().textSize());
+
+    text->setColor(this->style().foregroundColor() );
+    if (text->getParent2D() != this)
+      text->setParent2D(this);
+  }
+
+
+  void GLGuiNotifier::tick(float dt)
+  {
+    std::list<DisplayLine>::iterator line;
+    for (line = this->displayLines.begin() ; line != this->displayLines.end(); ++line )
+    {
+      (*line).age+=dt;
+      if ((*line).age > 3.0f)
+      {
+        (*line).text->setBlending(4.0 - (*line).age);
+        if ((*line).age > 4.0f)
+        {
+          std::list<DisplayLine>::iterator tmp = line;
+          ++line;
+
+          (*tmp).text->setVisibility(false);
+          this->hiddenText.push((*tmp).text);
+          this->displayLines.erase(tmp);
+
+          if (!inputBuffer.empty())
+          {
+            this->pushNotifyMessage(inputBuffer.back());
+            inputBuffer.pop_back();
+          }
+        }
+      }
+    }
+  }
+
+
+  /**
+   * displays the GLGuiNotifier
+   */
+  void GLGuiNotifier::draw() const
+  {
+    // transform for alignment.
+    // setting the Blending effects
+    this->beginDraw();
+
+    this->backMaterial().select();
+    this->drawRect(this->backRect());
+    this->endDraw();
+  }
+
+  ///////////////////////
+  // HELPER FUNCTIONS  //
+  ///////////////////////
+
+  /**
+   * @brief calculates the position of a Buffer-Display Line
+   * @param lineNumber the lineNumber from the bottom to calculate the position from
+   * @returns the Position of the Line.
+   */
+  Vector2D GLGuiNotifier::calculateLinePosition(unsigned int lineNumber)
+  {
+    return Vector2D(0.0f, (float)(this->style().textSize() + this->lineSpacing)*(float)((int)this->bufferDisplaySize - (int)lineNumber - (int)1));
+  }
+
+
+  void GLGuiNotifier::resize()
+  {}
+
+  /**
+   * @brief displays some nice output from the GLGuiNotifier
+   */
+  void GLGuiNotifier::debug() const
+  {
+    PRINT(3)("Debugging output to console (not this shell)\n");
+
+    //   if (this->pressedKey != SDLK_FIRST)
+    //     printf("%s::%f %f\n", SDLKToKeyname(this->pressedKey), this->delayed, this->repeatDelay);
+  }
+}
Index: trunk/src/lib/gui/gl/specials/glgui_notifier.h
===================================================================
--- trunk/src/lib/gui/gl/specials/glgui_notifier.h	(revision 8518)
+++ trunk/src/lib/gui/gl/specials/glgui_notifier.h	(revision 8518)
@@ -0,0 +1,80 @@
+/*!
+ * @file shell.h
+ * Definition of a on-screen-shell
+ *
+ * @todo Buffer Display in different Colors for different debug mode.
+ * @todo choose color of the Font and the background.
+ */
+
+#ifndef _GLGUI_NOTIFIER_H
+#define _GLGUI_NOTIFIER_H
+
+#include "glgui_widget.h"
+#include "event_listener.h"
+
+#include <stack>
+
+// FORWARD DECLARATION
+class MultiLineText;
+class Text;
+
+//! Namespace of the GLGuiNotifier of ORXONOX.
+namespace OrxGui
+{
+  class GLGuiNotifier : public GLGuiWidget
+  {
+  public:
+    GLGuiNotifier();
+    virtual ~GLGuiNotifier();
+
+    void pushNotifyMessage(const std::string& message);
+
+    // BUFFERS
+    void setDisplayLineCount(unsigned int count);
+
+    void clear();
+
+    // Element2D-functions
+    virtual void tick(float dt);
+    virtual void draw() const;
+
+    void debug() const;
+
+  protected:
+    virtual void resize();
+
+  private:
+    void repositionText();
+    void applyTextSettings(MultiLineText* text);
+    void applySettings();
+    // helpers //
+    Vector2D calculateLinePosition(unsigned int lineNumber);
+
+
+
+  private:
+    typedef struct
+    {
+      float             age;
+      MultiLineText*    text;
+
+    }
+    DisplayLine;
+
+    unsigned int                lineSpacing;            //!< The Spacing between lines.
+
+    // BUFFER
+    unsigned int                bufferDisplaySize;      //!< The Size of the Display-buffer, in lines (not in characters).
+    std::list<DisplayLine>      displayLines;           //!< A list of stored bufferTexts for the display of the buffer.
+
+    std::stack<MultiLineText*>  hiddenText;             //!< Text that is not shown, and not used is thrown in here
+
+
+    unsigned long               linesProcessed;         //!< How many Lines have been processed so far.
+    std::list<std::string>      inputBuffer;            //!<
+
+  };
+
+}
+
+#endif /* _GLGUI_NOTIFIER_H */
