summaryrefslogtreecommitdiff
path: root/indra/newview/llimfloater.cpp
diff options
context:
space:
mode:
authorRick Pasetto <rick@lindenlab.com>2009-11-25 09:54:19 -0800
committerRick Pasetto <rick@lindenlab.com>2009-11-25 09:54:19 -0800
commit05ae52a37f9f4d2519c40fe38f1b7143270c46ee (patch)
treeba3ea89cda34343550a909700f53ab18043a5d4a /indra/newview/llimfloater.cpp
parente2e7d544b6a114e70e3b46f516a4f0e8d7db4bd1 (diff)
parent46b36d4fde4de97cd9960553ea77a64fbbe34b6a (diff)
merge
Diffstat (limited to 'indra/newview/llimfloater.cpp')
-rw-r--r--indra/newview/llimfloater.cpp91
1 files changed, 57 insertions, 34 deletions
diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp
index 4a487bd5a7..ee93a9349a 100644
--- a/indra/newview/llimfloater.cpp
+++ b/indra/newview/llimfloater.cpp
@@ -53,6 +53,10 @@
#include "lltransientfloatermgr.h"
#include "llinventorymodel.h"
+#ifdef USE_IM_CONTAINER
+ #include "llimfloatercontainer.h" // to replace separate IM Floaters with multifloater container
+#endif
+
LLIMFloater::LLIMFloater(const LLUUID& session_id)
@@ -257,7 +261,11 @@ BOOL LLIMFloater::postBuild()
//*TODO if session is not initialized yet, add some sort of a warning message like "starting session...blablabla"
//see LLFloaterIMPanel for how it is done (IB)
+#ifdef USE_IM_CONTAINER
+ return LLFloater::postBuild();
+#else
return LLDockableFloater::postBuild();
+#endif
}
// virtual
@@ -318,6 +326,11 @@ void LLIMFloater::onSlide()
//static
LLIMFloater* LLIMFloater::show(const LLUUID& session_id)
{
+#ifdef USE_IM_CONTAINER
+ LLIMFloater* target_floater = findInstance(session_id);
+ bool not_existed = NULL == target_floater;
+
+#else
//hide all
LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("impanel");
for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin();
@@ -329,12 +342,25 @@ LLIMFloater* LLIMFloater::show(const LLUUID& session_id)
floater->setVisible(false);
}
}
+#endif
LLIMFloater* floater = LLFloaterReg::showTypedInstance<LLIMFloater>("impanel", session_id);
floater->updateMessages();
floater->mInputEditor->setFocus(TRUE);
+#ifdef USE_IM_CONTAINER
+ // do not add existed floaters to avoid adding torn off instances
+ if (not_existed)
+ {
+ // LLTabContainer::eInsertionPoint i_pt = user_initiated ? LLTabContainer::RIGHT_OF_CURRENT : LLTabContainer::END;
+ // TODO: mantipov: use LLTabContainer::RIGHT_OF_CURRENT if it exists
+ LLTabContainer::eInsertionPoint i_pt = LLTabContainer::END;
+
+ LLIMFloaterContainer* floater_container = LLFloaterReg::showTypedInstance<LLIMFloaterContainer>("im_container");
+ floater_container->addFloater(floater, TRUE, i_pt);
+ }
+#else
if (floater->getDockControl() == NULL)
{
LLChiclet* chiclet =
@@ -352,13 +378,14 @@ LLIMFloater* LLIMFloater::show(const LLUUID& session_id)
floater->setDockControl(new LLDockControl(chiclet, floater, floater->getDockTongue(),
LLDockControl::TOP, boost::bind(&LLIMFloater::getAllowedRect, floater, _1)));
}
+#endif
return floater;
}
void LLIMFloater::getAllowedRect(LLRect& rect)
{
- rect = gViewerWindow->getWorldViewRectScaled();
+ rect = gViewerWindow->getWorldViewRectRaw();
}
void LLIMFloater::setDocked(bool docked, bool pop_on_undock)
@@ -368,7 +395,9 @@ void LLIMFloater::setDocked(bool docked, bool pop_on_undock)
(LLNotificationsUI::LLChannelManager::getInstance()->
findChannelByID(LLUUID(gSavedSettings.getString("NotificationChannelUUID"))));
+#ifndef USE_IM_CONTAINER
LLTransientDockableFloater::setDocked(docked, pop_on_undock);
+#endif
// update notification channel state
if(channel)
@@ -394,6 +423,7 @@ void LLIMFloater::setVisible(BOOL visible)
//static
bool LLIMFloater::toggle(const LLUUID& session_id)
{
+#ifndef USE_IM_CONTAINER
LLIMFloater* floater = LLFloaterReg::findTypedInstance<LLIMFloater>("impanel", session_id);
if (floater && floater->getVisible() && floater->isDocked())
{
@@ -409,6 +439,7 @@ bool LLIMFloater::toggle(const LLUUID& session_id)
return true;
}
else
+#endif
{
// ensure the list of messages is updated when floater is made visible
show(session_id);
@@ -451,6 +482,8 @@ void LLIMFloater::sessionInitReplyReceived(const LLUUID& im_session_id)
void LLIMFloater::updateMessages()
{
+ bool use_plain_text_chat_history = gSavedSettings.getBOOL("PlainTextChatHistory");
+
std::list<LLSD> messages;
LLIMModel::instance().getMessages(mSessionID, messages, mLastMessageIndex+1);
@@ -476,39 +509,7 @@ void LLIMFloater::updateMessages()
chat.mText = message;
chat.mTimeStr = time;
- //Handle IRC styled /me messages.
- std::string prefix = message.substr(0, 4);
- if (prefix == "/me " || prefix == "/me'")
- {
-
- LLColor4 txt_color = LLUIColorTable::instance().getColor("White");
- LLViewerChat::getChatColor(chat,txt_color);
- LLFontGL* fontp = LLViewerChat::getChatFont();
- std::string font_name = LLFontGL::nameFromFont(fontp);
- std::string font_size = LLFontGL::sizeFromFont(fontp);
- LLStyle::Params append_style_params;
- append_style_params.color(txt_color);
- append_style_params.readonly_color(txt_color);
- append_style_params.font.name(font_name);
- append_style_params.font.size(font_size);
-
- if (from.size() > 0)
- {
- append_style_params.font.style = "ITALIC";
- chat.mText = from;
- mChatHistory->appendWidgetMessage(chat, append_style_params);
- }
-
- message = message.substr(3);
- append_style_params.font.style = "ITALIC";
- mChatHistory->appendText(message, FALSE, append_style_params);
- }
- else
- {
- chat.mText = message;
- mChatHistory->appendWidgetMessage(chat);
- }
-
+ mChatHistory->appendMessage(chat, use_plain_text_chat_history);
mLastMessageIndex = msg["index"].asInteger();
}
}
@@ -639,6 +640,28 @@ void LLIMFloater::processAgentListUpdates(const LLSD& body)
}
}
+void LLIMFloater::updateChatHistoryStyle()
+{
+ mChatHistory->clear();
+ mLastMessageIndex = -1;
+ updateMessages();
+}
+
+void LLIMFloater::processChatHistoryStyleUpdate(const LLSD& newvalue)
+{
+ LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("impanel");
+ for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin();
+ iter != inst_list.end(); ++iter)
+ {
+ LLIMFloater* floater = dynamic_cast<LLIMFloater*>(*iter);
+ if (floater)
+ {
+ floater->updateChatHistoryStyle();
+ }
+ }
+
+}
+
void LLIMFloater::processSessionUpdate(const LLSD& session_update)
{
// *TODO : verify following code when moderated mode will be implemented