[Orxonox-commit 1879] r6596 - in code/branches/chat: data/gui/layouts src/libraries/network src/orxonox/graphics

smerkli at orxonox.net smerkli at orxonox.net
Mon Mar 22 15:28:41 CET 2010


Author: smerkli
Date: 2010-03-22 15:28:40 +0100 (Mon, 22 Mar 2010)
New Revision: 6596

Added:
   code/branches/chat/data/gui/layouts/ChatBox.layout
   code/branches/chat/src/orxonox/graphics/CEGuiSample.h
   code/branches/chat/src/orxonox/graphics/ChatBox.h
Modified:
   code/branches/chat/src/libraries/network/ChatListener.cc
Log:
Adding chatbox related files

Added: code/branches/chat/data/gui/layouts/ChatBox.layout
===================================================================
--- code/branches/chat/data/gui/layouts/ChatBox.layout	                        (rev 0)
+++ code/branches/chat/data/gui/layouts/ChatBox.layout	2010-03-22 14:28:40 UTC (rev 6596)
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<GUILayout >
+    <Window Type="DefaultWindow" Name="Root" >
+        <Property Name="InheritsAlpha" Value="False" />
+        <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />
+        <Property Name="UnifiedAreaRect" Value="{{0,0},{0,0},{1,0},{1,0}}" />
+        <Window Type="TaharezLook/FrameWindow" Name="/ChatBox" >
+            <Property Name="Text" Value="Chat" />
+            <Property Name="TitlebarFont" Value="Commonwealth-10" />
+            <Property Name="InheritsAlpha" Value="False" />
+            <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />
+            <Property Name="TitlebarEnabled" Value="True" />
+            <Property Name="UnifiedAreaRect" Value="{{0.01,0},{0.03,0},{0.6,0},{0.69375,0}}" />
+            <Window Type="TaharezLook/Listbox" Name="/ChatBox/List" >
+                <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />
+                <Property Name="UnifiedAreaRect" Value="{{0.02,0},{0.078,0},{0.98,0},{1,-30}}" />
+            </Window>
+            <Window Type="TaharezLook/Editbox" Name="/ChatBox/Text" >
+                <Property Name="Text" Value="Error: you did not register any font or none were valid" />
+                <Property Name="MaxTextLength" Value="1073741823" />
+                <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />
+                <Property Name="UnifiedAreaRect" Value="{{0.02,0},{1,-30},{0.98,0},{1,-5}}" />
+            </Window>
+        </Window>
+        <Window Type="TaharezLook/Editbox" Name="/ChatBox/History" >
+            <Property Name="Text" Value="5" />
+            <Property Name="MaxTextLength" Value="1073741823" />
+            <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />
+            <Property Name="UnifiedAreaRect" Value="{{0.77,0},{0.03,0},{0.81,0},{0.1,0}}" />
+        </Window>
+        <Window Type="TaharezLook/StaticText" Name="/ChatBox/HistoryLabel" >
+            <Property Name="Text" Value="History size:" />
+            <Property Name="HorzFormatting" Value="RightAligned" />
+            <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />
+            <Property Name="UnifiedAreaRect" Value="{{0.65,0},{0.03,0},{0.77,0},{0.1,0}}" />
+        </Window>
+        <Window Type="TaharezLook/StaticText" Name="/ChatBox/FonSizeLabel" >
+            <Property Name="Font" Value="Commonwealth-10" />
+            <Property Name="Text" Value="Font size:" />
+            <Property Name="HorzFormatting" Value="RightAligned" />
+            <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />
+            <Property Name="UnifiedAreaRect" Value="{{0.65,0},{0.1,0},{0.77,0},{0.17,0}}" />
+        </Window>
+        <Window Type="TaharezLook/Spinner" Name="/ChatBox/FontSize" >
+            <Property Name="Text" Value="10" />
+            <Property Name="StepSize" Value="1" />
+            <Property Name="CurrentValue" Value="10" />
+            <Property Name="MaximumValue" Value="72" />
+            <Property Name="MinimumValue" Value="-32768" />
+            <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />
+            <Property Name="UnifiedAreaRect" Value="{{0.77,0},{0.1,0},{0.83,0},{0.17,0}}" />
+        </Window>
+        <Window Type="TaharezLook/StaticText" Name="/ChatBox/FontNameLabel" >
+            <Property Name="Font" Value="Commonwealth-10" />
+            <Property Name="Text" Value="Font name:" />
+            <Property Name="HorzFormatting" Value="RightAligned" />
+            <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />
+            <Property Name="UnifiedAreaRect" Value="{{0.65,0},{0.17,0},{0.77,0},{0.24,0}}" />
+        </Window>
+        <Window Type="TaharezLook/Combobox" Name="/ChatBox/FontName" >
+            <Property Name="Text" Value="ChatBoxFont" />
+            <Property Name="ReadOnly" Value="True" />
+            <Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />
+            <Property Name="UnifiedAreaRect" Value="{{0.77,0},{0.17,0},{0.99,0},{0.45,0}}" />
+            <Property Name="MaxEditTextLength" Value="1073741823" />
+        </Window>
+    </Window>
+</GUILayout>

Modified: code/branches/chat/src/libraries/network/ChatListener.cc
===================================================================
--- code/branches/chat/src/libraries/network/ChatListener.cc	2010-03-22 13:47:10 UTC (rev 6595)
+++ code/branches/chat/src/libraries/network/ChatListener.cc	2010-03-22 14:28:40 UTC (rev 6596)
@@ -35,6 +35,7 @@
     {
         RegisterRootObject(ChatListener);
     }
+
 }
 
 

Added: code/branches/chat/src/orxonox/graphics/CEGuiSample.h
===================================================================
--- code/branches/chat/src/orxonox/graphics/CEGuiSample.h	                        (rev 0)
+++ code/branches/chat/src/orxonox/graphics/CEGuiSample.h	2010-03-22 14:28:40 UTC (rev 6596)
@@ -0,0 +1,130 @@
+/***********************************************************************
+    filename:   CEGuiSample.h
+    created:    24/9/2004
+    author:     Paul D Turner
+*************************************************************************/
+/***************************************************************************
+ *   Copyright (C) 2004 - 2006 Paul D Turner & The CEGUI Development Team
+ *
+ *   Permission is hereby granted, free of charge, to any person obtaining
+ *   a copy of this software and associated documentation files (the
+ *   "Software"), to deal in the Software without restriction, including
+ *   without limitation the rights to use, copy, modify, merge, publish,
+ *   distribute, sublicense, and/or sell copies of the Software, and to
+ *   permit persons to whom the Software is furnished to do so, subject to
+ *   the following conditions:
+ *
+ *   The above copyright notice and this permission notice shall be
+ *   included in all copies or substantial portions of the Software.
+ *
+ *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ *   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ *   IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ *   OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ *   ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ *   OTHER DEALINGS IN THE SOFTWARE.
+ ***************************************************************************/
+#ifndef _CEGuiSample_h_
+#define _CEGuiSample_h_
+
+#if (defined( __WIN32__ ) || defined( _WIN32 )) && !defined (CEGUI_STATIC)
+#   ifdef CEGUISAMPLE_EXPORTS
+#       define CEGUISAMPLE_API __declspec(dllexport)
+#   else
+#       define CEGUISAMPLE_API __declspec(dllimport)
+#   endif
+#else
+#       define CEGUISAMPLE_API
+#endif
+
+
+// forward declarations
+class CEGuiBaseApplication;
+class CEGuiRendererSelector;
+
+
+/*!
+\brief
+    This is a base class that is intended to be used for all sample applications.
+    Here we take care of common things such the renderer selection and application
+    startup.
+*/
+class CEGUISAMPLE_API CEGuiSample
+{
+public:
+    /*!
+    \brief
+        Constructor.
+    */
+    CEGuiSample();
+
+
+    /*!
+    \brief
+        Destructor.
+    */
+    virtual ~CEGuiSample();
+
+
+    /*!
+    \brief
+        Application entry point.
+
+    \return
+        code to be returned by the application.
+    */
+    int run();
+
+
+    /*!
+    \brief
+        Sample specific initialisation goes here.  This method is called by the application base object created
+        as part of the initialise call.
+
+    \return
+        false if something went wrong.
+    */
+    virtual bool initialiseSample()  = 0;
+
+
+    /*!
+    \brief
+        Cleans up resources allocated in the initialiseSample call.
+    */
+    virtual void cleanupSample() = 0;
+
+
+protected:
+    /*!
+    \brief
+        Initialises the sample system, this includes asking the user for a render to use and
+        the subsequent creation of the required systems to support that renderer.
+
+    \return
+        false if anything went wrong.
+    */
+    virtual bool initialise();
+
+
+    /*!
+    \brief
+        Cleans up all resources allocated by the initialise call.
+    */
+    virtual void cleanup();
+
+
+    /*!
+    \brief
+        Output a message to the user in some OS independant way.
+    */
+    void outputExceptionMessage(const char* message) const;
+
+    /*************************************************************************
+        Data fields
+    *************************************************************************/
+    CEGuiRendererSelector*  d_rendererSelector;     //!< Points to the renderer selector object.
+    CEGuiBaseApplication*   d_sampleApp;            //!< Pointer to the base application object.
+};
+
+#endif  // end of guard _CEGuiSample_h_

Added: code/branches/chat/src/orxonox/graphics/ChatBox.h
===================================================================
--- code/branches/chat/src/orxonox/graphics/ChatBox.h	                        (rev 0)
+++ code/branches/chat/src/orxonox/graphics/ChatBox.h	2010-03-22 14:28:40 UTC (rev 6596)
@@ -0,0 +1,367 @@
+#ifndef _ChatBox_h_
+#define _ChatBox_h_
+
+#include "CEGuiSample.h"
+#include "CEGUI/CEGUI.h"
+#include "CEGUI/CEGUIXMLAttributes.h"
+
+class DemoSample : public CEGuiSample
+{
+public:
+        bool initialiseSample()
+	{
+		using namespace CEGUI;
+		try
+		{
+			// Retrieve the window manager
+			WindowManager& winMgr = WindowManager::getSingleton();
+
+			// Load the TaharezLook scheme and set up the default mouse cursor and font
+			SchemeManager::getSingleton().loadScheme("TaharezLook.scheme");
+			System::getSingleton().setDefaultMouseCursor("TaharezLook", "MouseArrow");
+			if(!FontManager::getSingleton().isFontPresent("Commonwealth-10"))
+				FontManager::getSingleton().createFont("Commonwealth-10.font");
+
+			// Set the GUI Sheet
+			Window* sheet = winMgr.createWindow("DefaultWindow", "root_wnd");
+			System::getSingleton().setGUISheet(sheet);
+
+			// Load a layout
+			Window* guiLayout = winMgr.loadWindowLayout("ChatBox.layout");
+			sheet->addChildWindow(guiLayout);
+
+			// Obtain the handles of some widgets
+			Window* historySize = winMgr.getWindow("/ChatBox/History");
+			Window* fontName = winMgr.getWindow("/ChatBox/FontName");
+			Spinner* fontSize = static_cast<Spinner*>(winMgr.getWindow("/ChatBox/FontSize"));
+			Window* chatText = winMgr.getWindow("/ChatBox/Text");
+
+			// Disable widgets until a valid font is registered
+			fontName->setEnabled(false);
+			fontSize->setEnabled(false);
+			chatText->setEnabled(false);
+
+			// Retrieve the design-specified values
+			mHistorySize = static_cast<size_t>(PropertyHelper::stringToUint(historySize->getText()));
+			mDefaultFontSize = fontSize->getText();
+			mChatFontName = fontName->getText();
+			setHistorySize(mHistorySize);
+			fontName->setText("");
+
+			// Configure the history size
+			// Pressing <ENTER> changes the maximal number of entries within the history Listbox
+			historySize->subscribeEvent(Editbox::EventTextAccepted,	Event::Subscriber(&DemoSample::Event_HistorySizeChange, this)); 
+
+			// Configure the text Editbox
+			// Pressing <ENTER> puts the text into the history Listbox
+			chatText->subscribeEvent(Editbox::EventTextAccepted,	Event::Subscriber(&DemoSample::Event_ChatTextAdded,	this)); 
+
+			// Configure the font name Combobox
+			// Selecting a name changes the font used in the history Listbox and the text Editbox
+			fontName->subscribeEvent(Combobox::EventTextChanged,	Event::Subscriber(&DemoSample::Event_FontChange,	this)); 
+
+			// Configure the font size Spinner
+			// Selecting a size changes the font size used in the history Listbox and the text Editbox
+			fontSize->subscribeEvent(Spinner::EventValueChanged,	Event::Subscriber(&DemoSample::Event_FontChange,	this)); 
+			fontSize->setTextInputMode(Spinner::Integer);
+			fontSize->setMinimumValue(4.0f);
+			fontSize->setMaximumValue(72.0f);
+			fontSize->setStepSize(1.0f);
+			fontSize->setCurrentValue(PropertyHelper::stringToFloat(mDefaultFontSize));
+
+			// Initialize the list of fonts
+			// The first registered font becomes the active font
+			registerFont("Commonwealth",	"Commonv2c.ttf");
+			registerFont("DejaVuSans",		"DejaVuSans.ttf");
+			registerFont("Iconified",		"Iconiv2.ttf");
+			registerFont("MissingFile",		"MissingFile.ttf");  // What happens if a font is missing?
+			registerFont("Pixmap Font",		"FairChar-30.font"); // And what about a non-Freetype font?
+		}
+		catch(Exception &e)
+		{
+			#if defined( __WIN32__ ) || defined( _WIN32 )
+				MessageBox(NULL, e.getMessage().c_str(), "Error initializing the demo", MB_OK | MB_ICONERROR | MB_TASKMODAL);
+			#else
+				//std::cout << "Error initializing the demo:" << e.getMessage().c_str() << "\n";
+			#endif
+		}
+
+		return true;
+	}
+
+	void cleanupSample(void)
+	{
+	}
+
+	bool Event_HistorySizeChange(const CEGUI::EventArgs& args)
+	{
+		using namespace CEGUI;
+
+		WindowManager& winMgr = WindowManager::getSingleton();
+		CEGUI::Window* historySize = winMgr.getWindow("/ChatBox/History");
+		int size = PropertyHelper::stringToInt( historySize->getText() );
+		setHistorySize(size);
+		return true;
+	}
+
+	bool Event_ChatTextAdded(const CEGUI::EventArgs& args)
+	{
+		using namespace CEGUI;
+
+		WindowManager& winMgr = WindowManager::getSingleton();
+		Editbox* chatText = static_cast<Editbox*> (winMgr.getWindow("/ChatBox/Text"));
+		addChatText(chatText->getText());
+
+		// Clear the text in the Editbox
+		chatText->setText("");
+		return true;
+	}
+
+	bool Event_FontChange(const CEGUI::EventArgs& args)
+	{
+		using namespace CEGUI;
+		WindowManager& winMgr = WindowManager::getSingleton();
+		Window* fontName = winMgr.getWindow("/ChatBox/FontName");
+		String name = fontName->getText();
+
+		Spinner* fontSize = static_cast<Spinner*>(winMgr.getWindow("/ChatBox/FontSize"));
+		String size = PropertyHelper::floatToString(fontSize->getCurrentValue());
+
+		Window* chatText = winMgr.getWindow("/ChatBox/Text");
+		chatText->setText(name + " - " + size);
+
+		changeFont(name, size);
+		return true;
+	}
+
+	void setHistorySize(const size_t& pSize)
+	{
+		using namespace CEGUI;
+
+		if(pSize > 0)
+		{
+			// A better validation would be to enforce a minimal and a maximal size
+			mHistorySize = pSize;
+
+			WindowManager& winMgr = WindowManager::getSingleton();
+			Listbox* chatHistory = static_cast<Listbox*> (winMgr.getWindow("/ChatBox/List"));
+			ListboxItem* chatItem;
+			while(chatHistory->getItemCount() > mHistorySize)
+			{
+				// There are too many items within the history Listbox, purging them one at a time
+				chatItem = chatHistory->getListboxItemFromIndex(0);
+				chatHistory->removeItem(chatItem);
+			}
+		}
+	}
+
+	void addChatText(const CEGUI::String& pText)
+	{
+		using namespace CEGUI;
+
+		WindowManager& winMgr = WindowManager::getSingleton();
+		Listbox* chatHistory = static_cast<Listbox*> (winMgr.getWindow("/ChatBox/List"));
+
+		// If there's text then add it
+		if(pText.size())
+		{
+			// Add the Editbox text to the history Listbox
+			ListboxTextItem* chatItem;
+			if(chatHistory->getItemCount() == mHistorySize)
+			{
+				/* We have reached the capacity of the Listbox so re-use the first Listbox item.
+				   This code is a little crafty.  By default the ListboxTextItem is created with
+				   the auto-delete flag set to true, which results in its automatic deletion when
+				   removed from the Listbox.  So we change that flag to false, extract the item
+				   from the Listbox, change its text, put the auto-delete flag back to true, and
+				   finally put the item back into the Listbox. */
+				chatItem = static_cast<ListboxTextItem*>(chatHistory->getListboxItemFromIndex(0));
+				chatItem->setAutoDeleted(false);
+				chatHistory->removeItem(chatItem);
+				chatItem->setAutoDeleted(true);
+				chatItem->setText(pText);
+			}
+			else
+			{
+				// Create a new listbox item
+				chatItem = new ListboxTextItem(pText);
+			}
+			chatHistory->addItem(chatItem);
+			chatHistory->ensureItemIsVisible(chatHistory->getItemCount());
+		}
+	}
+
+	void registerFont(const CEGUI::String& pLogicalName, const CEGUI::String& pFileName)
+	{
+		using namespace CEGUI;
+
+		// Ensure that font names are registered only once
+		if(mFontList.find(pLogicalName) == mFontList.end())
+		{
+			// Test the font so that only valid fonts are available
+			String testFont = mChatFontName;
+			if(mFontList.size() != 0)
+			{
+				// If the list is empty then attempt to create the font using the "real" font name
+				// Otherwise use a "test" font name so as not to corrupt the "real" one
+				testFont += "__test_font__";
+			}
+			Font* font = makeFont(testFont, pFileName, mDefaultFontSize);
+			if(mFontList.size() != 0 
+				&& FontManager::getSingleton().isFontPresent(testFont))
+			{
+				// Since this was only a test font we destroy it
+				FontManager::getSingleton().destroyFont(testFont);
+			}
+			if(!font)
+			{
+				// This font is invalid
+				if(FontManager::getSingleton().isFontPresent(testFont))
+					return;
+				else
+				return;
+			}
+
+			WindowManager& winMgr = WindowManager::getSingleton();
+			Combobox* fontName = static_cast<Combobox*>(winMgr.getWindow("/ChatBox/FontName"));
+			mFontList[pLogicalName] = pFileName;
+			ListboxTextItem* fontNameItem = new ListboxTextItem(pLogicalName);
+			fontNameItem->setSelectionBrushImage("TaharezLook", "MultiListSelectionBrush");
+			fontName->addItem(fontNameItem);
+			if(fontName->getItemCount() == 1)
+			{
+				// Enable widgets now that at least one valid font has been found
+				Spinner* fontSize = static_cast<Spinner*>(winMgr.getWindow("/ChatBox/FontSize"));
+				Window* chatText = winMgr.getWindow("/ChatBox/Text");
+				fontName->setEnabled(true);
+				fontSize->setEnabled(true);
+				chatText->setEnabled(true);
+
+				// The first registered font becomes the active font
+				fontName->setText(pLogicalName); // This triggers a call to changeFont
+				fontName->setItemSelectState(fontNameItem, true);
+			}
+		}
+	}
+
+protected:
+	CEGUI::Font* makeFont(const CEGUI::String& pFontName, const CEGUI::String& pFileName, const CEGUI::String& pSize)
+	{
+		using namespace CEGUI;
+
+		Font* font;
+		try
+		{
+			if(FontManager::getSingleton().isFontPresent(pFontName))
+			{
+				// The chat font is reused rather than deleted and recreated
+				// every time an attribute changes.  For this reason it is
+				// important to use a unique logical name for the font.
+				font = FontManager::getSingleton().getFont(pFontName);
+				font->setProperty("FileName", pFileName);
+				font->setProperty("PointSize", pSize);
+			}
+			else
+			{
+				// This is the first time we make the chat font so we need to create it
+				XMLAttributes xmlAttributes;
+
+				// CEGUIFont.cpp
+				xmlAttributes.add("Name", pFontName);
+				xmlAttributes.add("Filename", pFileName);
+				xmlAttributes.add("ResourceGroup", "");
+				xmlAttributes.add("AutoScaled", "true");
+				xmlAttributes.add("NativeHorzRes", "800");
+				xmlAttributes.add("NativeVertRes", "600");
+
+				// CEGUIXMLAttributes.cpp
+				xmlAttributes.add("Size", pSize);
+				xmlAttributes.add("AntiAlias", "true");
+
+				font = FontManager::getSingleton().createFont("FreeType", xmlAttributes);
+			}
+			font->load();
+		}
+		catch(Exception& e)
+		{
+			// Display the error message in the chat window
+			addChatText(e.getMessage());
+			font = 0;
+		}
+
+		return font;
+	}
+
+	void changeFont(const CEGUI::String& pFontLogicalName, const CEGUI::String& pFontSize)
+	{
+		using namespace CEGUI;
+		WindowManager& winMgr = WindowManager::getSingleton();
+
+		if(!FontManager::getSingleton().isFontPresent(mChatFontName))
+		{
+			addChatText("You must call registerFont() at least once with a valid font");
+			return;
+		}
+
+		FontList::iterator itFontList = mFontList.find(pFontLogicalName);
+		if(itFontList == mFontList.end())
+		{
+			addChatText(pFontLogicalName + " has not been registered");
+			return;
+		}
+
+		// Measure the height of the selected font
+		Font* currentFont = makeFont(mChatFontName, (*itFontList).second, pFontSize);
+		float fontHeight = currentFont->getFontHeight();
+
+		/* Alter the area of the Editbox.  The original value is {{0.01,0},{1,-30},{0.99,0},{1,-5}}
+		   The value we are altering is the "-30" within the second couplet, defining the position of
+		   the upper y coordinate of the Editbox.  We base the new value on the position of the lower
+		   y coordinate, which is "-5", and the height of the font.  To this we add some space "10" to
+		   account for the Editbox's border. */
+		Editbox* editBox = static_cast<Editbox*> (winMgr.getWindow("/ChatBox/Text"));
+		URect chatTextArea = editBox->getArea();
+		chatTextArea.d_min.d_y.d_offset = chatTextArea.d_max.d_y.d_offset
+										- fontHeight
+										- 10;
+		editBox->setArea(chatTextArea);
+		editBox->setFont(currentFont);
+
+		/* Alther the area of the Listbox.  Here we only need the lower y coordinate.  Since this
+		   value is the same as the upper y coordinate of the Editbox we do not need to calculate
+		   it.  We also change the font of the Listbox and call upon handleUpdatedItemData() to
+		   update the current Listbox items.  Finally we ensure that the last entry is still
+		   visible. */
+		Listbox* listBox = static_cast<Listbox*> (winMgr.getWindow("/ChatBox/List"));
+		URect listTextArea = listBox->getArea();
+		listTextArea.d_max.d_y.d_offset = chatTextArea.d_min.d_y.d_offset;
+		listBox->setArea(listTextArea);
+		listBox->setFont(currentFont);
+		listBox->handleUpdatedItemData();
+		size_t itemCount = listBox->getItemCount();
+		if(itemCount)
+		{
+			ListboxItem* currentItem = listBox->getListboxItemFromIndex(itemCount - 1);
+			listBox->ensureItemIsVisible(currentItem);
+		}
+	}
+
+private:
+	// Type of list for registered fonts
+	typedef std::map<CEGUI::String, CEGUI::String> FontList;
+
+	// List of registered fonts
+	FontList mFontList;
+
+	// Maximal number of entries to retain within the Listbox
+	size_t mHistorySize;
+
+	// Logical font name dedicated to the chat box
+	// This allows us to modify the properties of that font and not affect the fonts used elsewhere
+	CEGUI::String mChatFontName;
+
+	// Default font size
+	CEGUI::String mDefaultFontSize;
+};
+
+#endif // _ChatBox_h_




More information about the Orxonox-commit mailing list