merging into latest changes

master
MaximB ProductEngine 2012-11-08 22:05:01 +02:00
commit b8a229032e
27 changed files with 491 additions and 220 deletions

View File

@ -410,8 +410,8 @@ void LLFolderViewItem::selectItem(void)
{
if (mIsSelected == FALSE)
{
getViewModelItem()->selectItem();
mIsSelected = TRUE;
getViewModelItem()->selectItem();
}
}

View File

@ -260,7 +260,7 @@ public:
// virtual void handleDropped();
virtual void draw();
void drawOpenFolderArrow(const Params& default_params, const LLUIColor& fg_color);
virtual void drawOpenFolderArrow(const Params& default_params, const LLUIColor& fg_color);
void drawHighlight(const BOOL showContent, const BOOL hasKeyboardFocus, const LLUIColor &bgColor, const LLUIColor &outlineColor, const LLUIColor &mouseOverColor);
void drawLabel(const LLFontGL * font, const F32 x, const F32 y, const LLColor4& color, F32 &right_x);
virtual BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,

View File

@ -133,6 +133,7 @@ BOOL LLConversationViewSession::postBuild()
LLGroupIconCtrl* icon = mItemPanel->getChild<LLGroupIconCtrl>("group_icon");
icon->setVisible(true);
mSpeakingIndicator->setSpeakerId(gAgentID, vmi->getUUID(), true);
break;
}
case LLConversationItem::CONV_SESSION_GROUP:
{
@ -202,6 +203,17 @@ void LLConversationViewSession::draw()
LLView::draw();
}
BOOL LLConversationViewSession::handleMouseDown( S32 x, S32 y, MASK mask )
{
LLConversationItem* item = dynamic_cast<LLConversationItem *>(getViewModelItem());
LLUUID session_id = item? item->getUUID() : LLUUID();
(LLFloaterReg::getTypedInstance<LLIMFloaterContainer>("im_container"))->
selectConversationPair(session_id, false);
return LLFolderViewFolder::handleMouseDown(x, y, mask);
}
// virtual
S32 LLConversationViewSession::arrange(S32* width, S32* height)
{
@ -232,29 +244,6 @@ void LLConversationViewSession::toggleOpen()
}
}
void LLConversationViewSession::selectItem()
{
LLConversationItem* item = dynamic_cast<LLConversationItem*>(mViewModelItem);
LLFloater* session_floater = LLIMConversation::getConversation(item->getUUID());
LLMultiFloater* host_floater = session_floater->getHost();
if (host_floater == mContainer)
{
// Always expand the message pane if the panel is hosted by the container
mContainer->collapseMessagesPane(false);
// Switch to the conversation floater that is being selected
mContainer->selectFloater(session_floater);
}
// Set the focus on the selected floater
session_floater->setFocus(TRUE);
// Store the active session
LLIMFloaterContainer::getInstance()->setSelectedSession(item->getUUID());
LLFolderViewItem::selectItem();
}
void LLConversationViewSession::toggleMinimizedMode(bool is_minimized)
{
@ -343,6 +332,15 @@ void LLConversationViewSession::onCurrentVoiceSessionChanged(const LLUUID& sessi
}
}
void LLConversationViewSession::drawOpenFolderArrow(const LLFolderViewItem::Params& default_params, const LLUIColor& fg_color)
{
LLConversationItem * itemp = dynamic_cast<LLConversationItem*>(getViewModelItem());
if (itemp && itemp->getType() != LLConversationItem::CONV_SESSION_1_ON_1)
{
LLFolderViewFolder::drawOpenFolderArrow(default_params, fg_color);
}
}
//
// Implementation of conversations list participant (avatar) widgets
//
@ -431,31 +429,6 @@ void LLConversationViewParticipant::draw()
LLView::draw();
}
void LLConversationViewParticipant::selectItem()
{
LLConversationItem* vmi = this->getParentFolder() ? static_cast<LLConversationItem*>(this->getParentFolder()->getViewModelItem()) : NULL;
LLIMFloaterContainer* container = LLIMFloaterContainer::getInstance();
LLFloater* session_floater;
if(vmi)
{
session_floater = LLIMConversation::getConversation(vmi->getUUID());
//Only execute when switching floaters (conversations)
if(vmi->getUUID() != container->getSelectedSession())
{
container->selectFloater(session_floater);
// Store the active session
container->setSelectedSession(vmi->getUUID());
}
//Redirect focus to the conversation floater
session_floater->setFocus(TRUE);
}
LLFolderViewItem::selectItem();
}
void LLConversationViewParticipant::refresh()
{
// Refresh the participant view from its model data
@ -504,6 +477,23 @@ void LLConversationViewParticipant::onMouseLeave(S32 x, S32 y, MASK mask)
LLFolderViewItem::onMouseLeave(x, y, mask);
}
BOOL LLConversationViewParticipant::handleMouseDown( S32 x, S32 y, MASK mask )
{
LLConversationItem* item = NULL;
LLConversationViewSession* session_widget =
dynamic_cast<LLConversationViewSession *>(this->getParentFolder());
if (session_widget)
{
item = dynamic_cast<LLConversationItem*>(session_widget->getViewModelItem());
}
LLUUID session_id = item? item->getUUID() : LLUUID();
(LLFloaterReg::getTypedInstance<LLIMFloaterContainer>("im_container"))->
selectConversationPair(session_id, false);
return LLFolderViewItem::handleMouseDown(x, y, mask);
}
S32 LLConversationViewParticipant::getLabelXPos()
{
return mAvatarIcon->getRect().mRight + mIconPad;

View File

@ -60,10 +60,10 @@ protected:
public:
virtual ~LLConversationViewSession();
virtual void selectItem();
/*virtual*/ BOOL postBuild();
/*virtual*/ void draw();
/*virtual*/ BOOL handleMouseDown( S32 x, S32 y, MASK mask );
/*virtual*/ S32 arrange(S32* width, S32* height);
@ -71,6 +71,8 @@ public:
/*virtual*/ bool isMinimized() { return mMinimizedMode; }
/*virtual*/ void drawOpenFolderArrow(const LLFolderViewItem::Params& default_params, const LLUIColor& fg_color);
void toggleMinimizedMode(bool is_minimized);
void setVisibleIfDetached(BOOL visible);
@ -115,11 +117,13 @@ public:
};
virtual ~LLConversationViewParticipant( void ) { }
void selectItem();
bool hasSameValue(const LLUUID& uuid) { return (uuid == mUUID); }
virtual void refresh();
void addToFolder(LLFolderViewFolder* folder);
/*virtual*/ BOOL handleMouseDown( S32 x, S32 y, MASK mask );
void onMouseEnter(S32 x, S32 y, MASK mask);
void onMouseLeave(S32 x, S32 y, MASK mask);

View File

@ -54,6 +54,7 @@ LLIMConversation::LLIMConversation(const LLSD& session_id)
, mInputEditor(NULL)
, mInputEditorTopPad(0)
, mRefreshTimer(new LLTimer())
, mIsHostAttached(false)
{
mSession = LLIMModel::getInstance()->findIMSession(mSessionID);
@ -127,6 +128,22 @@ void LLIMConversation::setVisible(BOOL visible)
setFocus(visible);
}
/*virtual*/
void LLIMConversation::setFocus(BOOL focus)
{
LLTransientDockableFloater::setFocus(focus);
//Redirect focus to input editor
if (focus)
{
updateMessages();
if (mInputEditor)
{
mInputEditor->setFocus(TRUE);
}
}
}
void LLIMConversation::addToHost(const LLUUID& session_id)
@ -242,7 +259,6 @@ void LLIMConversation::enableDisableCallBtn()
&& mSession->mCallBackEnabled);
}
void LLIMConversation::onFocusReceived()
{
setBackgroundOpaque(true);
@ -253,6 +269,12 @@ void LLIMConversation::onFocusReceived()
}
LLTransientDockableFloater::onFocusReceived();
LLIMFloaterContainer* container = LLFloaterReg::getTypedInstance<LLIMFloaterContainer>("im_container");
if (container)
{
container->selectConversationPair(mSessionID, true);
}
}
void LLIMConversation::onFocusLost()

View File

@ -79,7 +79,9 @@ public:
/*virtual*/ BOOL postBuild();
/*virtual*/ void draw();
/*virtual*/ void setVisible(BOOL visible);
/*virtual*/ void setFocus(BOOL focus);
virtual void updateMessages() {}
protected:

View File

@ -671,19 +671,6 @@ void LLIMFloater::setDocked(bool docked, bool pop_on_undock)
}
}
void LLIMFloater::setFocus(BOOL focusFlag)
{
LLTransientDockableFloater::setFocus(focusFlag);
//Redirect focus to input editor
if (focusFlag)
{
updateMessages();
mInputEditor->setFocus(TRUE);
}
}
void LLIMFloater::setVisible(BOOL visible)
{
LLNotificationsUI::LLScreenChannel* channel = static_cast<LLNotificationsUI::LLScreenChannel*>

View File

@ -65,7 +65,6 @@ public:
// LLView overrides
/*virtual*/ BOOL postBuild();
/*virtual*/ void setFocus(BOOL focusFlag);
/*virtual*/ void setVisible(BOOL visible);
/*virtual*/ BOOL getVisible();
// Check typing timeout timer.
@ -86,7 +85,7 @@ public:
void sessionInitReplyReceived(const LLUUID& im_session_id);
// get new messages from LLIMModel
void updateMessages();
/*virtual*/ void updateMessages();
void reloadMessages();
static void onSendMsg(LLUICtrl*, void*);
void sendMsgFromInputEditor();

View File

@ -331,6 +331,7 @@ void LLIMFloaterContainer::onExpandCollapseButtonClicked()
{
collapseConversationsPane(!mConversationsPane->isCollapsed());
}
selectConversation(mSelectedSession);
}
LLIMFloaterContainer* LLIMFloaterContainer::findInstance()
@ -423,15 +424,21 @@ bool LLIMFloaterContainer::onConversationModelEvent(const LLSD& event)
LLConversationItemSession* session_model = dynamic_cast<LLConversationItemSession*>(mConversationsItems[session_id]);
if (session_model)
{
LLConversationItemParticipant* participant_model = session_model->findParticipant(participant_id);
if (participant_model)
const LLUUID& uuid = session_model->getUUID();
LLIMModel::LLIMSession * im_sessionp = LLIMModel::getInstance()->findIMSession(uuid);
if (uuid.isNull() || im_sessionp && !im_sessionp->isP2PSessionType())
{
participant_view = createConversationViewParticipant(participant_model);
participant_view->addToFolder(session_view);
participant_view->setVisible(TRUE);
LLConversationItemParticipant* participant_model = session_model->findParticipant(participant_id);
if (participant_model)
{
participant_view = createConversationViewParticipant(participant_model);
participant_view->addToFolder(session_view);
participant_view->setVisible(TRUE);
}
}
}
}
}
else if (type == "update_participant")
@ -1084,6 +1091,47 @@ void LLIMFloaterContainer::selectConversation(const LLUUID& session_id)
}
}
// Synchronous select the conversation item and the conversation floater
BOOL LLIMFloaterContainer::selectConversationPair(const LLUUID& session_id, bool select_widget)
{
BOOL handled = TRUE;
/* widget processing */
if (select_widget)
{
LLFolderViewItem* widget = mConversationsWidgets[session_id];
if (widget && widget->getParentFolder())
{
widget->getParentFolder()->setSelection(widget, FALSE, FALSE);
}
}
/* floater processing */
if (session_id != getSelectedSession())
{
// Store the active session
setSelectedSession(session_id);
LLIMConversation* session_floater = LLIMConversation::getConversation(session_id);
if (session_floater->getHost())
{
// Always expand the message pane if the panel is hosted by the container
collapseMessagesPane(false);
// Switch to the conversation floater that is being selected
selectFloater(session_floater);
}
// Set the focus on the selected floater
if (!session_floater->hasFocus())
{
session_floater->setFocus(TRUE);
}
}
return handled;
}
void LLIMFloaterContainer::setTimeNow(const LLUUID& session_id, const LLUUID& participant_id)
{
@ -1174,17 +1222,22 @@ void LLIMFloaterContainer::addConversationListItem(const LLUUID& uuid, bool isWi
// Add a new conversation widget to the root folder of the folder view
widget->addToFolder(mConversationsRoot);
widget->requestArrange();
LLIMModel::LLIMSession * im_sessionp = LLIMModel::getInstance()->findIMSession(uuid);
// Create the participants widgets now
// Note: usually, we do not get an updated avatar list at that point
LLFolderViewModelItemCommon::child_list_t::const_iterator current_participant_model = item->getChildrenBegin();
LLFolderViewModelItemCommon::child_list_t::const_iterator end_participant_model = item->getChildrenEnd();
while (current_participant_model != end_participant_model)
if (uuid.isNull() || im_sessionp && !im_sessionp->isP2PSessionType())
{
LLConversationItem* participant_model = dynamic_cast<LLConversationItem*>(*current_participant_model);
LLConversationViewParticipant* participant_view = createConversationViewParticipant(participant_model);
participant_view->addToFolder(widget);
current_participant_model++;
LLFolderViewModelItemCommon::child_list_t::const_iterator current_participant_model = item->getChildrenBegin();
LLFolderViewModelItemCommon::child_list_t::const_iterator end_participant_model = item->getChildrenEnd();
while (current_participant_model != end_participant_model)
{
LLConversationItem* participant_model = dynamic_cast<LLConversationItem*>(*current_participant_model);
LLConversationViewParticipant* participant_view = createConversationViewParticipant(participant_model);
participant_view->addToFolder(widget);
current_participant_model++;
}
}
// set the widget to minimized mode if conversations pane is collapsed

View File

@ -68,6 +68,8 @@ public:
void showConversation(const LLUUID& session_id);
void selectConversation(const LLUUID& session_id);
BOOL selectConversationPair(const LLUUID& session_id, bool select_widget);
/*virtual*/ void tabClose();
static LLFloater* getCurrentVoiceFloater();

View File

@ -121,7 +121,14 @@ void toast_callback(const LLSD& msg){
// Skip toasting if we have open window of IM with this session id
LLIMFloater* open_im_floater = LLIMFloater::findInstance(msg["session_id"]);
if (open_im_floater && open_im_floater->isInVisibleChain() && open_im_floater->hasFocus())
if (
open_im_floater
&& open_im_floater->isInVisibleChain()
&& open_im_floater->hasFocus()
&& !open_im_floater->isMinimized()
&& !(open_im_floater->getHost()
&& open_im_floater->getHost()->isMinimized())
)
{
return;
}

View File

@ -195,8 +195,13 @@ BOOL LLNearbyChat::handleMouseDown(S32 x, S32 y, MASK mask)
//background opaque. This all happenn since NearByChat is "chrome" and didn't process focus change.
if(mChatHistory)
{
mChatHistory->setFocus(TRUE);
return LLPanel::handleMouseDown(x, y, mask);
}
BOOL handled = LLPanel::handleMouseDown(x, y, mask);
setFocus(handled);
return handled;
}
void LLNearbyChat::reloadMessages()
@ -270,17 +275,6 @@ void LLNearbyChat::removeScreenChat()
}
}
void LLNearbyChat::setFocus(BOOL focusFlag)
{
LLTransientDockableFloater::setFocus(focusFlag);
//Redirect focus to input editor
if (focusFlag)
{
mInputEditor->setFocus(TRUE);
}
}
void LLNearbyChat::setVisible(BOOL visible)
{

View File

@ -53,7 +53,6 @@ public:
/*virtual*/ BOOL postBuild();
/*virtual*/ void onOpen(const LLSD& key);
/*virtual*/ void onClose(bool app_quitting);
/*virtual*/ void setFocus(BOOL focusFlag);
/*virtual*/ void setVisible(BOOL visible);
void loadHistory();

View File

@ -322,7 +322,6 @@ void LLViewerFloaterReg::registerFloaters()
LLFloaterReg::add("upload_script", "floater_script_preview.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterScriptPreview>, "upload");
LLFloaterReg::add("upload_sound", "floater_sound_preview.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSoundPreview>, "upload");
LLFloaterReg::add("voice_controls", "floater_voice_controls.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLCallFloater>);
LLFloaterReg::add("voice_effect", "floater_voice_effect.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterVoiceEffect>);
LLFloaterReg::add("web_content", "floater_web_content.xml", (LLFloaterBuildFunc)&LLFloaterWebContent::create);

Binary file not shown.

Before

Width:  |  Height:  |  Size: 322 B

After

Width:  |  Height:  |  Size: 373 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 301 B

After

Width:  |  Height:  |  Size: 215 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 293 B

After

Width:  |  Height:  |  Size: 211 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 262 B

After

Width:  |  Height:  |  Size: 275 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 663 B

After

Width:  |  Height:  |  Size: 345 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 662 B

After

Width:  |  Height:  |  Size: 342 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 460 B

After

Width:  |  Height:  |  Size: 459 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 485 B

After

Width:  |  Height:  |  Size: 366 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 195 B

After

Width:  |  Height:  |  Size: 144 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 196 B

After

Width:  |  Height:  |  Size: 230 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 553 B

After

Width:  |  Height:  |  Size: 399 B

View File

@ -54,14 +54,14 @@
visible="false"
width="20">
<icon
height="20"
height="18"
follows="top|right|left"
image_name="Conv_toolbar_open_call"
layout="topleft"
left="0"
name="selected_icon"
top="2"
width="20" />
top="3"
width="18" />
</layout_panel>
<layout_panel
auto_resize="true"

View File

@ -9,151 +9,364 @@
name="chat"
top="1"
width="517">
<text
follows="left|top"
layout="topleft"
left="30"
height="12"
name="font_size"
width="120"
top="10">
Font size:
</text>
<radio_group
height="30"
layout="topleft"
left="40"
control_name="ChatFontSize"
name="chat_font_size"
top_pad="0"
width="440">
<radio_item
height="16"
label="Small"
layout="topleft"
left="0"
name="radio"
value="0"
top="10"
width="125" />
<radio_item
height="16"
label="Medium"
layout="topleft"
left_delta="145"
name="radio2"
value="1"
top_delta="0"
width="125" />
<radio_item
height="16"
label="Large"
layout="topleft"
left_delta="170"
name="radio3"
value="2"
top_delta="0"
width="125" />
</radio_group>
<panel
border="false"
follows="left|top"
height="90"
layout="topleft"
top="10"
left="13"
width="517">
<check_box
control_name="PlayTypingAnim"
height="16"
initial_value="true"
label="Play typing animation when chatting"
layout="topleft"
left="30"
name="play_typing_animation"
top_pad="10"
width="400" />
control_name="PlayTypingAnim"
height="16"
initial_value="true"
label="Play typing animation when chatting"
layout="topleft"
top="0"
name="play_typing_animation"
width="330" />
<check_box
enabled="false"
height="16"
label="Email me IMs when I'm offline"
layout="topleft"
left_delta="0"
name="send_im_to_email"
top_pad="5"
width="400" />
top_pad="6"
width="330" />
<check_box
height="16"
label="Keep a conversation log and transcripts"
layout="topleft"
name="keep_convo_log_and_transcripts"
top_pad="6"
width="330" />
<check_box
control_name="UseChatBubbles"
follows="left|top"
height="16"
label="Bubble Chat"
layout="topleft"
left_delta="0"
top_pad="5"
top_pad="6"
name="bubble_text_chat"
width="150" />
width="330" />
<text
name="disable_toast_label"
follows="left|top"
layout="topleft"
top_pad="20"
left="30"
height="10"
width="400">
Enable incoming chat popups:
</text>
left="345"
height="12"
name="font_size"
width="120"
top="0">
Font size:
</text>
<radio_group
height="90"
layout="topleft"
left="352"
control_name="ChatFontSize"
name="chat_font_size"
top_pad="0"
width="50">
<radio_item
height="16"
label="Small"
layout="topleft"
name="radio"
value="0"
top="10"
width="125" />
<radio_item
height="16"
label="Medium"
layout="topleft"
name="radio2"
value="1"
top_pad="6"
width="125" />
<radio_item
height="16"
label="Large"
layout="topleft"
name="radio3"
value="2"
top_pad="6"
width="125" />
</radio_group>
</panel>
<panel
border="false"
follows="left|top"
height="193"
layout="topleft"
left="13"
width="517">
<text
follows="left|top"
layout="topleft"
height="12"
name="notifications"
left="0"
width="120">
Notifications:
</text>
<text
follows="left|top"
layout="topleft"
height="12"
name="friend_ims"
width="145"
left="0"
top_pad="15"
>
Friend IMs:
</text>
<combo_box
control_name="NotificationFriendIMOptions"
height="23"
layout="topleft"
left_pad="5"
top_delta="-6"
name="FriendIMOptions"
width="223">
<combo_box.item
label="Pop up the message"
name="0"
value="0"/>
<combo_box.item
label="Flash toolbar button"
name="1"
value="1"/>
<combo_box.item
label="None"
name="2"
value="2"/>
</combo_box>
<text
follows="left|top"
layout="topleft"
height="12"
name="non_friend_ims"
width="145"
left="0"
top_pad="15"
>
Non-friend IMs:
</text>
<combo_box
control_name="NotificationNonFriendIMOptions"
height="23"
layout="topleft"
left_pad="5"
top_delta="-6"
name="NonFriendIMOptions"
width="223">
<combo_box.item
label="Pop up the message"
name="0"
value="0"/>
<combo_box.item
label="Flash toolbar button"
name="1"
value="1"/>
<combo_box.item
label="None"
name="2"
value="2"/>
</combo_box>
<text
follows="left|top"
layout="topleft"
left="0"
height="13"
name="conference_ims"
width="145"
top_pad="14"
>
Conference IMs:
</text>
<combo_box
control_name="NotificationConferenceIMOptions"
height="23"
layout="topleft"
left_pad="5"
top_delta="-6"
name="ConferenceIMOptions"
width="223">
<combo_box.item
label="Pop up the message"
name="0"
value="0"/>
<combo_box.item
label="Flash toolbar button"
name="1"
value="1"/>
<combo_box.item
label="None"
name="2"
value="2"/>
</combo_box>
<text
follows="left|top"
layout="topleft"
left="0"
height="13"
name="group_chat"
width="145"
top_pad="14"
>
Group chat:
</text>
<combo_box
control_name="NotificationGroupChatOptions"
height="23"
layout="topleft"
left_pad="5"
top_delta="-6"
name="GroupChatOptions"
width="223">
<combo_box.item
label="Pop up the message"
name="0"
value="0"/>
<combo_box.item
label="Flash toolbar button"
name="1"
value="1"/>
<combo_box.item
label="None"
name="2"
value="2"/>
</combo_box>
<text
follows="left|top"
layout="topleft"
left="0"
height="12"
name="nearby_chat"
width="145"
top_pad="14"
>
Nearby chat:
</text>
<combo_box
control_name="NotificationNearbyChatOptions"
height="23"
layout="topleft"
left_pad="5"
top_delta="-6"
name="NearbyChatOptions"
width="223">
<combo_box.item
label="Pop up the message"
name="0"
value="0"/>
<combo_box.item
label="Flash toolbar button"
name="1"
value="1"/>
<combo_box.item
label="None"
name="2"
value="2"/>
</combo_box>
<text
follows="left|top"
layout="topleft"
left="0"
height="12"
name="notifications_alert"
width="350"
top_pad="11"
visible="true"
text_color="DrYellow"
>
To temporarily stop all notifications, use Me > Status > Busy.
</text>
</panel>
<panel
border="false"
follows="left|top"
height="1"
layout="topleft"
left="13"
width="517">
<text
follows="left|top"
layout="topleft"
left="0"
name="play_sound"
width="100"
top_pad="13"
visible="true">
Play sound:
</text>
<check_box
control_name="EnableGroupChatPopups"
name="EnableGroupChatPopups"
label="Group Chats"
layout="topleft"
top_pad="5"
left_delta="10"
height="20"
tool_tip="Check to see popups when a Group Chat message arrives"
width="400" />
control_name="NewConversation"
height="16"
initial_value="true"
label="New conversation"
layout="topleft"
left_pad="15"
top_pad="-10"
name="new_conversation"
width="150" />
<check_box
control_name="EnableIMChatPopups"
name="EnableIMChatPopups"
label="IM Chats"
layout="topleft"
top_pad="5"
height="16"
tool_tip="Check to see popups when an instant message arrives"
width="400" />
<spinner
control_name="NearbyToastLifeTime"
decimal_digits="0"
follows="left|top"
height="23"
increment="1"
initial_value="23"
label="Nearby chat toasts life time:"
label_width="285"
layout="topleft"
left="45"
max_val="60"
min_val="1"
name="nearby_toasts_lifetime"
top_pad="10"
width="325" />
<spinner
control_name="NearbyToastFadingTime"
decimal_digits="0"
follows="left|top"
height="23"
increment="1"
initial_value="3"
label="Nearby chat toasts fading time:"
label_width="285"
layout="topleft"
left_delta="0"
max_val="60"
min_val="0"
name="nearby_toasts_fadingtime"
top_pad="3"
width="325" />
control_name="IncomingVoiceCall"
height="16"
initial_value="true"
label="Incoming voice call"
layout="topleft"
top_pad="6"
name="incoming_voice_call"
width="150" />
<check_box
control_name="GroupChatMessages"
height="16"
initial_value="false"
label="Group chat messages"
layout="topleft"
top_pad="6"
name="group_chat_messages"
width="150" />
<check_box
control_name="TeleportOffer"
height="16"
initial_value="true"
label="Teleport offer"
layout="topleft"
left_pad="35"
top_pad="-59"
name="teleport_offer"
width="150" />
<check_box
control_name="InventoryOffer"
height="16"
initial_value="false"
label="Inventory offer"
layout="topleft"
top_pad="6"
name="inventory_offer"
width="150" />
</panel>
<button
follows="left|top"
height="23"
label="Translation..."
layout="topleft"
left="30"
left="9"
name="ok_btn"
top="-50"
top="-29"
width="170">
<button.commit_callback
function="Pref.TranslationSettings" />