[Orxonox-commit 2194] r6910 - in code/branches/chat2: data/gui/layouts src/orxonox src/orxonox/graphics
smerkli at orxonox.net
smerkli at orxonox.net
Mon May 17 15:22:10 CEST 2010
Author: smerkli
Date: 2010-05-17 15:22:10 +0200 (Mon, 17 May 2010)
New Revision: 6910
Removed:
code/branches/chat2/src/orxonox/graphics/ChatBox.cc
code/branches/chat2/src/orxonox/graphics/ChatBox.h
Modified:
code/branches/chat2/data/gui/layouts/ChatBox.layout
code/branches/chat2/src/orxonox/ChatHistory.cc
code/branches/chat2/src/orxonox/ChatInputHandler.cc
code/branches/chat2/src/orxonox/ChatInputHandler.h
Log:
Added final comments, getting ready for merge
Modified: code/branches/chat2/data/gui/layouts/ChatBox.layout
===================================================================
--- code/branches/chat2/data/gui/layouts/ChatBox.layout 2010-05-17 13:21:51 UTC (rev 6909)
+++ code/branches/chat2/data/gui/layouts/ChatBox.layout 2010-05-17 13:22:10 UTC (rev 6910)
@@ -10,7 +10,8 @@
<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}}" />
+ <!--<Property Name="UnifiedAreaRect" Value="{{0.01,0},{0.03,0},{0.6,0},{0.69375,0}}" />-->
+ <Property Name="UnifiedAreaRect" Value="{{0.35,0},{0.10,0},{0.98,0},{0.65,0}}" />
<Window Type="MenuWidgets/Listbox" Name="orxonox/ChatBox/history" >
<Property Name="Font" Value="Monofur-10" />
<Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />
Modified: code/branches/chat2/src/orxonox/ChatHistory.cc
===================================================================
--- code/branches/chat2/src/orxonox/ChatHistory.cc 2010-05-17 13:21:51 UTC (rev 6909)
+++ code/branches/chat2/src/orxonox/ChatHistory.cc 2010-05-17 13:22:10 UTC (rev 6910)
@@ -79,17 +79,18 @@
/* --> a) look up the actual name of the sender */
std::string text;
- //COUT(0) << "Meow.\n";
-
#ifndef CHATTEST
+ /* get sender ID and prepend it to the message */
if (senderID != CLIENTID_UNKNOWN)
{
- std::string name = "unknown";
- PlayerInfo* player = PlayerManager::getInstance().getClient(senderID);
- if (player)
- name = player->getName();
+ /* if we can't find anything, use "unknown" as default */
+ std::string name = "unknown";
- text = name + ": " + message;
+ PlayerInfo* player = PlayerManager::getInstance().getClient(senderID);
+ if (player)
+ name = player->getName();
+
+ text = name + ": " + message;
}
else
text = message;
@@ -163,8 +164,13 @@
/* close logfile */
void ChatHistory::chat_hist_closelog()
{
+ /* see if we've actually got a logfile */
if( this->hist_logfile )
- { this->chat_hist_logline( "--- Logfile closed ---" );
+ {
+ /* yes, we've got one, add a line that shows we're closing it */
+ this->chat_hist_logline( "--- Logfile closed ---" );
+
+ /* actually close down the file */
this->hist_logfile.close();
}
}
Modified: code/branches/chat2/src/orxonox/ChatInputHandler.cc
===================================================================
--- code/branches/chat2/src/orxonox/ChatInputHandler.cc 2010-05-17 13:21:51 UTC (rev 6909)
+++ code/branches/chat2/src/orxonox/ChatInputHandler.cc 2010-05-17 13:22:10 UTC (rev 6910)
@@ -74,6 +74,7 @@
void ChatInputHandler::configureInputBuffer()
{
+ /* INSTALL CALLBACKS */
/* input has changed */
this->inpbuf->registerListener(this, &ChatInputHandler::inputChanged, true);
@@ -97,11 +98,14 @@
this->inpbuf->registerListener(this, &ChatInputHandler::cursorEnd, KeyCode::End);
this->inpbuf->registerListener(this, &ChatInputHandler::cursorHome, KeyCode::Home);
- /* get window pointers */
+ /* GET WINDOW POINTERS */
input = CEGUI::WindowManager::getSingleton().getWindow( "orxonox/ChatBox/input" );
inputonly = CEGUI::WindowManager::getSingleton().getWindow( "orxonox/ChatBox-inputonly/input" );
+ /* get pointer to the history window */
CEGUI::Window *history = CEGUI::WindowManager::getSingleton().getWindow( "orxonox/ChatBox/history" );
+
+ /* cast it to a listbox */
lb_history = dynamic_cast<CEGUI::Listbox*>(history);
/* assert wee */
Modified: code/branches/chat2/src/orxonox/ChatInputHandler.h
===================================================================
--- code/branches/chat2/src/orxonox/ChatInputHandler.h 2010-05-17 13:21:51 UTC (rev 6909)
+++ code/branches/chat2/src/orxonox/ChatInputHandler.h 2010-05-17 13:22:10 UTC (rev 6910)
@@ -77,38 +77,57 @@
/** adjust display offset depending on cursor position */
void sub_adjust_dispoffset( int maxlen, int cursorpos, int inplen );
- /* singleton pointer */
+ /** singleton pointer */
static ChatInputHandler* singletonPtr_s;
- /* cegui stuff */
+ /** cegui window handles */
CEGUI::Window *input, *inputonly;
+
+ /** cegui handle for the history window */
CEGUI::Listbox *lb_history;
+ /* callbacks for input handler */
+ void inputChanged();
+ void addline();
+ void backspace();
+ void deleteChar();
+ void cursorRight();
+ void cursorLeft();
+ void cursorEnd();
+ void cursorHome();
+ void exit();
+
public:
/** constructor */
ChatInputHandler();
friend class Singleton<ChatInputHandler>;
- /* start listening, stop listening */
+ /** start listening */
static void activate_static();
+
+ /** stop listening */
static void activate_small_static();
+ /** \param message the message text
+ * \param senderID ID of the player who sent the message
+ *
+ * Deal with incoming chat (which means in our case: Add it to the
+ * history window of the full chat window)
+ */
void incomingChat( const std::string& message,
unsigned int senderID );
+ /** \param full true means show full chat window with history,
+ false means show only an input line
+ *
+ * Show the chat window and redirect the game's keyboard input
+ * into it.
+ */
void activate( bool full );
+
+ /** Deactivate the chat window, meaning: hide it. */
void deactivate();
- /* callbacks for input handler */
- void inputChanged();
- void addline();
- void backspace();
- void deleteChar();
- void cursorRight();
- void cursorLeft();
- void cursorEnd();
- void cursorHome();
- void exit();
};
Deleted: code/branches/chat2/src/orxonox/graphics/ChatBox.cc
===================================================================
--- code/branches/chat2/src/orxonox/graphics/ChatBox.cc 2010-05-17 13:21:51 UTC (rev 6909)
+++ code/branches/chat2/src/orxonox/graphics/ChatBox.cc 2010-05-17 13:22:10 UTC (rev 6910)
@@ -1,343 +0,0 @@
-#include "ChatBox.h"
-
-#include "CEGuiSample.h"
-#include "CEGUI/CEGUI.h"
-#include "CEGUI/CEGUIXMLAttributes.h"
-
-bool ChatBox::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(&ChatBox::Event_HistorySizeChange, this));
-
- // Configure the text Editbox
- // Pressing <ENTER> puts the text into the history Listbox
- chatText->subscribeEvent(Editbox::EventTextAccepted, Event::Subscriber(&ChatBox::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(&ChatBox::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(&ChatBox::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 ChatBox::cleanupSample(void)
-{
-}
-
-bool ChatBox::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 ChatBox::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 ChatBox::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 ChatBox::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 ChatBox::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 ChatBox::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);
- }
- }
-}
-
-CEGUI::Font* ChatBox::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 ChatBox::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);
- }
-}
-
Deleted: code/branches/chat2/src/orxonox/graphics/ChatBox.h
===================================================================
--- code/branches/chat2/src/orxonox/graphics/ChatBox.h 2010-05-17 13:21:51 UTC (rev 6909)
+++ code/branches/chat2/src/orxonox/graphics/ChatBox.h 2010-05-17 13:22:10 UTC (rev 6910)
@@ -1,43 +0,0 @@
-#ifndef _ChatBox_h_
-#define _ChatBox_h_
-
-#include "CEGuiSample.h"
-#include "CEGUI/CEGUI.h"
-#include "CEGUI/CEGUIXMLAttributes.h"
-
-class ChatBox : public CEGuiSample
-{
- public:
- bool initialiseSample();
- void cleanupSample(void);
- bool Event_HistorySizeChange(const CEGUI::EventArgs& args);
- bool Event_ChatTextAdded(const CEGUI::EventArgs& args);
- bool Event_FontChange(const CEGUI::EventArgs& args);
- void setHistorySize(const size_t& pSize);
- void addChatText(const CEGUI::String& pText);
- void registerFont(const CEGUI::String& pLogicalName, const CEGUI::String& pFileName);
-
- protected:
- CEGUI::Font* makeFont(const CEGUI::String& pFontName, const CEGUI::String& pFileName, const CEGUI::String& pSize);
- void changeFont(const CEGUI::String& pFontLogicalName, const CEGUI::String& pFontSize);
-
- 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
\ No newline at end of file
More information about the Orxonox-commit
mailing list