phoenix-firestorm/indra/newview/llconversationloglistitem.cpp

190 lines
5.6 KiB
C++

/**
* @file llconversationloglistitem.cpp
*
* $LicenseInfo:firstyear=2012&license=viewerlgpl$
* Second Life Viewer Source Code
* Copyright (C) 2012, Linden Research, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
#include "llviewerprecompiledheaders.h"
// llui
#include "lliconctrl.h"
#include "lltextbox.h"
#include "lltextutil.h"
#include "llbutton.h" // <FS:CR>
// newview
#include "llavataractions.h"
#include "llavatariconctrl.h"
#include "llconversationlog.h"
#include "llconversationloglistitem.h"
#include "llgroupactions.h"
#include "llgroupiconctrl.h"
#include "llinventoryicon.h"
LLConversationLogListItem::LLConversationLogListItem(const LLConversation* conversation)
: LLPanel(),
mConversation(conversation),
mConversationName(NULL),
mConversationDate(NULL)
{
buildFromFile("panel_conversation_log_list_item.xml");
// <FS:CR> [Firestorm Communications UI]
//LLFloaterIMSession* floater = LLFloaterIMSession::findInstance(mConversation->getSessionID());
FSFloaterIM* floater = FSFloaterIM::findInstance(mConversation->getSessionID());
//bool ims_are_read = LLFloaterIMSession::isVisible(floater) && floater->hasFocus();
bool ims_are_read = FSFloaterIM::isVisible(floater) && floater->hasFocus();
if (mConversation->hasOfflineMessages() && !ims_are_read)
{
//mIMFloaterShowedConnection = LLFloaterIMSession::setIMFloaterShowedCallback(boost::bind(&LLConversationLogListItem::onIMFloaterShown, this, _1));
mIMFloaterShowedConnection = FSFloaterIM::setIMFloaterShowedCallback(boost::bind(&LLConversationLogListItem::onIMFloaterShown, this, _1));
// </FS:CR>
}
}
LLConversationLogListItem::~LLConversationLogListItem()
{
mIMFloaterShowedConnection.disconnect();
}
BOOL LLConversationLogListItem::postBuild()
{
initIcons();
// set conversation name
mConversationName = getChild<LLTextBox>("conversation_name");
mConversationName->setValue(mConversation->getConversationName());
// set conversation date and time
mConversationDate = getChild<LLTextBox>("date_time");
mConversationDate->setValue(mConversation->getTimestamp());
getChild<LLButton>("delete_btn")->setClickedCallback(boost::bind(&LLConversationLogListItem::onRemoveBtnClicked, this));
setDoubleClickCallback(boost::bind(&LLConversationLogListItem::onDoubleClick, this));
return TRUE;
}
void LLConversationLogListItem::initIcons()
{
switch (mConversation->getConversationType())
{
case LLIMModel::LLIMSession::P2P_SESSION:
case LLIMModel::LLIMSession::ADHOC_SESSION:
{
LLAvatarIconCtrl* avatar_icon = getChild<LLAvatarIconCtrl>("avatar_icon");
avatar_icon->setVisible(TRUE);
avatar_icon->setValue(mConversation->getParticipantID());
break;
}
case LLIMModel::LLIMSession::GROUP_SESSION:
{
LLGroupIconCtrl* group_icon = getChild<LLGroupIconCtrl>("group_icon");
group_icon->setVisible(TRUE);
group_icon->setValue(mConversation->getSessionID());
break;
}
default:
break;
}
if (mConversation->hasOfflineMessages())
{
getChild<LLIconCtrl>("unread_ims_icon")->setVisible(TRUE);
}
}
void LLConversationLogListItem::updateTimestamp()
{
mConversationDate->setValue(mConversation->getTimestamp());
}
void LLConversationLogListItem::updateName()
{
mConversationName->setValue(mConversation->getConversationName());
}
void LLConversationLogListItem::updateOfflineIMs()
{
getChild<LLIconCtrl>("unread_ims_icon")->setVisible(mConversation->hasOfflineMessages());
}
void LLConversationLogListItem::onMouseEnter(S32 x, S32 y, MASK mask)
{
getChildView("hovered_icon")->setVisible(true);
LLPanel::onMouseEnter(x, y, mask);
}
void LLConversationLogListItem::onMouseLeave(S32 x, S32 y, MASK mask)
{
getChildView("hovered_icon")->setVisible(false);
LLPanel::onMouseLeave(x, y, mask);
}
void LLConversationLogListItem::setValue(const LLSD& value)
{
if (!value.isMap() || !value.has("selected"))
{
return;
}
getChildView("selected_icon")->setVisible(value["selected"]);
}
void LLConversationLogListItem::onIMFloaterShown(const LLUUID& session_id)
{
if (mConversation->getSessionID() == session_id)
{
getChild<LLIconCtrl>("unread_ims_icon")->setVisible(FALSE);
}
}
void LLConversationLogListItem::onRemoveBtnClicked()
{
LLConversationLog::instance().removeConversation(*mConversation);
}
void LLConversationLogListItem::highlightNameDate(const std::string& highlited_text)
{
LLStyle::Params params;
LLTextUtil::textboxSetHighlightedVal(mConversationName, params, mConversation->getConversationName(), highlited_text);
LLTextUtil::textboxSetHighlightedVal(mConversationDate, params, mConversation->getTimestamp(), highlited_text);
}
void LLConversationLogListItem::onDoubleClick()
{
switch (mConversation->getConversationType())
{
case LLIMModel::LLIMSession::P2P_SESSION:
LLAvatarActions::startIM(mConversation->getParticipantID());
break;
case LLIMModel::LLIMSession::GROUP_SESSION:
LLGroupActions::startIM(mConversation->getSessionID());
break;
default:
break;
}
}