Merged in chui beta code.

meow-7.2.2
prep@lindenlab.com 2013-04-02 17:15:48 -05:00
commit ef6242d729
12 changed files with 157 additions and 73 deletions

View File

@ -1215,9 +1215,11 @@ void LLTabContainer::removeTabPanel(LLPanel* child)
removeChild( tuple->mButton );
}
delete tuple->mButton;
tuple->mButton = NULL;
removeChild( tuple->mTabPanel );
// delete tuple->mTabPanel;
tuple->mTabPanel = NULL;
mTabList.erase( iter );
delete tuple;
@ -1279,9 +1281,11 @@ void LLTabContainer::deleteAllTabs()
removeChild( tuple->mButton );
delete tuple->mButton;
tuple->mButton = NULL;
removeChild( tuple->mTabPanel );
// delete tuple->mTabPanel;
tuple->mTabPanel = NULL;
}
// Actually delete the tuples themselves
@ -1484,9 +1488,8 @@ BOOL LLTabContainer::setTab(S32 which)
{
LLTabTuple* tuple = *iter;
BOOL is_selected = ( tuple == selected_tuple );
// Although the selected tab must be complete, we may have hollow LLTabTuple tucked in the list
if (tuple->mButton)
if (tuple && tuple->mButton)
{
tuple->mButton->setUseEllipses(mUseTabEllipses);
tuple->mButton->setHAlign(mFontHalign);
@ -1494,7 +1497,7 @@ BOOL LLTabContainer::setTab(S32 which)
// RN: this limits tab-stops to active button only, which would require arrow keys to switch tabs
tuple->mButton->setTabStop( is_selected );
}
if (tuple->mTabPanel)
if (tuple && tuple->mTabPanel)
{
tuple->mTabPanel->setVisible( is_selected );
//tuple->mTabPanel->setFocus(is_selected); // not clear that we want to do this here.
@ -1525,7 +1528,7 @@ BOOL LLTabContainer::setTab(S32 which)
else
{
S32 available_width_with_arrows = getRect().getWidth() - mRightTabBtnOffset - 2 * (LLPANEL_BORDER_WIDTH + tabcntr_arrow_btn_size + tabcntr_arrow_btn_size + 1);
S32 running_tab_width = tuple->mButton->getRect().getWidth();
S32 running_tab_width = (tuple && tuple->mButton ? tuple->mButton->getRect().getWidth() : 0);
S32 j = i - 1;
S32 min_scroll_pos = i;
if (running_tab_width < available_width_with_arrows)
@ -1533,7 +1536,7 @@ BOOL LLTabContainer::setTab(S32 which)
while (j >= 0)
{
LLTabTuple* other_tuple = getTab(j);
running_tab_width += other_tuple->mButton->getRect().getWidth();
running_tab_width += (other_tuple && other_tuple->mButton ? other_tuple->mButton->getRect().getWidth() : 0);
if (running_tab_width > available_width_with_arrows)
{
break;

View File

@ -408,16 +408,7 @@ public:
S32 user_name_width = user_name_rect.getWidth();
S32 time_box_width = time_box->getRect().getWidth();
if (time_box->getVisible() && user_name_width <= mMinUserNameWidth)
{
time_box->setVisible(FALSE);
user_name_rect.mRight += time_box_width;
user_name->reshape(user_name_rect.getWidth(), user_name_rect.getHeight());
user_name->setRect(user_name_rect);
}
if (!time_box->getVisible() && user_name_width > mMinUserNameWidth + time_box_width)
if (!time_box->getVisible() && user_name_width > mMinUserNameWidth)
{
user_name_rect.mRight -= time_box_width;
user_name->reshape(user_name_rect.getWidth(), user_name_rect.getHeight());

View File

@ -585,6 +585,28 @@ void LLFloaterIMContainer::returnFloaterToHost()
floater->onTearOffClicked();
}
void LLFloaterIMContainer::setMinimized(BOOL b)
{
bool was_minimized = isMinimized();
LLMultiFloater::setMinimized(b);
//Switching from minimized to un-minimized
if(was_minimized && !b)
{
LLFloaterIMSessionTab* session_floater = LLFloaterIMSessionTab::findConversation(mSelectedSession);
if(session_floater && !session_floater->isTornOff())
{
//When in DND mode, remove stored IM notifications
//Nearby chat (Null) IMs are not stored while in DND mode, so can ignore removal
if(gAgent.isDoNotDisturb() && mSelectedSession.notNull())
{
LLDoNotDisturbNotificationStorage::getInstance()->removeNotification(LLDoNotDisturbNotificationStorage::toastName, mSelectedSession);
}
}
}
}
void LLFloaterIMContainer::setVisible(BOOL visible)
{ LLFloaterIMNearbyChat* nearby_chat;
if (visible)
@ -597,10 +619,21 @@ void LLFloaterIMContainer::setVisible(BOOL visible)
// *TODO: find a way to move this to XML as a default panel or something like that
LLSD name("nearby_chat");
LLFloaterReg::toggleInstanceOrBringToFront(name);
setSelectedSession(LLUUID(NULL));
selectConversationPair(LLUUID(NULL), false, false);
}
openNearbyChat();
selectConversationPair(getSelectedSession(), false, false);
flashConversationItemWidget(mSelectedSession,false);
LLFloaterIMSessionTab* session_floater = LLFloaterIMSessionTab::findConversation(mSelectedSession);
if(session_floater && !session_floater->isMinimized())
{
//When in DND mode, remove stored IM notifications
//Nearby chat (Null) IMs are not stored while in DND mode, so can ignore removal
if(gAgent.isDoNotDisturb() && mSelectedSession.notNull())
{
LLDoNotDisturbNotificationStorage::getInstance()->removeNotification(LLDoNotDisturbNotificationStorage::toastName, mSelectedSession);
}
}
}
nearby_chat = LLFloaterReg::findTypedInstance<LLFloaterIMNearbyChat>("nearby_chat");
@ -1389,13 +1422,6 @@ BOOL LLFloaterIMContainer::selectConversationPair(const LLUUID& session_id, bool
widget->getParentFolder()->setSelection(widget, FALSE, FALSE);
mConversationsRoot->scrollToShowSelection();
}
//When in DND mode, remove stored IM notifications
//Nearby chat (Null) IMs are not stored while in DND mode, so can ignore removal
if(gAgent.isDoNotDisturb() && session_id.notNull())
{
LLDoNotDisturbNotificationStorage::getInstance()->removeNotification(LLDoNotDisturbNotificationStorage::toastName, session_id);
}
}
/* floater processing */
@ -1420,14 +1446,19 @@ BOOL LLFloaterIMContainer::selectConversationPair(const LLUUID& session_id, bool
{
showStub(true);
}
//When in DND mode, remove stored IM notifications
//Nearby chat (Null) IMs are not stored while in DND mode, so can ignore removal
if(gAgent.isDoNotDisturb() && session_id.notNull())
{
LLDoNotDisturbNotificationStorage::getInstance()->removeNotification(LLDoNotDisturbNotificationStorage::toastName, session_id);
}
}
// Set the focus on the selected floater
if (!session_floater->hasFocus())
if (!session_floater->hasFocus() && !session_floater->isMinimized())
{
BOOL is_minimized = session_floater->isMinimized();
session_floater->setFocus(focus_floater);
session_floater->setMinimized(is_minimized);
}
}
flashConversationItemWidget(session_id,false);
@ -1986,8 +2017,11 @@ void LLFloaterIMContainer::closeFloater(bool app_quitting/* = false*/)
{
// Always unminimize before trying to close.
// Most of the time the user will never see this state.
setMinimized(FALSE);
if(isMinimized())
{
LLMultiFloater::setMinimized(FALSE);
}
LLFloater::closeFloater(app_quitting);
}

View File

@ -59,6 +59,7 @@ public:
/*virtual*/ BOOL postBuild();
/*virtual*/ void onOpen(const LLSD& key);
/*virtual*/ void draw();
/*virtual*/ void setMinimized(BOOL b);
/*virtual*/ void setVisible(BOOL visible);
/*virtual*/ void setVisibleAndFrontmost(BOOL take_focus=TRUE, const LLSD& key = LLSD());
/*virtual*/ void updateResizeLimits();

View File

@ -264,7 +264,7 @@ void LLFloaterIMNearbyChat::setVisibleAndFrontmost(BOOL take_focus, const LLSD&
if(!isTornOff() && matchesKey(key))
{
LLFloaterIMContainer::getInstance()->selectConversationPair(mSessionID, true, false);
LLFloaterIMContainer::getInstance()->selectConversationPair(mSessionID, true, take_focus);
}
}
@ -328,7 +328,7 @@ void LLFloaterIMNearbyChat::onChatFontChange(LLFontGL* fontp)
void LLFloaterIMNearbyChat::show()
{
openFloater(getKey());
}
}
bool LLFloaterIMNearbyChat::isChatVisible() const
{

View File

@ -39,6 +39,7 @@
#include "llchannelmanager.h"
#include "llchiclet.h"
#include "llchicletbar.h"
#include "lldonotdisturbnotificationstorage.h"
#include "llfloaterreg.h"
#include "llfloateravatarpicker.h"
#include "llfloaterimcontainer.h" // to replace separate IM Floaters with multifloater container
@ -645,6 +646,23 @@ void LLFloaterIMSession::setDocked(bool docked, bool pop_on_undock)
}
}
void LLFloaterIMSession::setMinimized(BOOL b)
{
bool wasMinimized = isMinimized();
LLFloaterIMSessionTab::setMinimized(b);
//Switching from minimized state to un-minimized state
if(wasMinimized && !b)
{
//When in DND mode, remove stored IM notifications
//Nearby chat (Null) IMs are not stored while in DND mode, so can ignore removal
if(gAgent.isDoNotDisturb())
{
LLDoNotDisturbNotificationStorage::getInstance()->removeNotification(LLDoNotDisturbNotificationStorage::toastName, mSessionID);
}
}
}
void LLFloaterIMSession::setVisible(BOOL visible)
{
LLNotificationsUI::LLScreenChannel* channel = static_cast<LLNotificationsUI::LLScreenChannel*>
@ -713,6 +731,18 @@ BOOL LLFloaterIMSession::getVisible()
return visible;
}
void LLFloaterIMSession::setFocus(BOOL focus)
{
LLFloaterIMSessionTab::setFocus(focus);
//When in DND mode, remove stored IM notifications
//Nearby chat (Null) IMs are not stored while in DND mode, so can ignore removal
if(focus && gAgent.isDoNotDisturb())
{
LLDoNotDisturbNotificationStorage::getInstance()->removeNotification(LLDoNotDisturbNotificationStorage::toastName, mSessionID);
}
}
//static
bool LLFloaterIMSession::toggle(const LLUUID& session_id)
{

View File

@ -65,8 +65,10 @@ public:
// LLView overrides
/*virtual*/ BOOL postBuild();
/*virtual*/ void setMinimized(BOOL b);
/*virtual*/ void setVisible(BOOL visible);
/*virtual*/ BOOL getVisible();
/*virtual*/ void setFocus(BOOL focus);
// Check typing timeout timer.
/*virtual*/ void draw();

View File

@ -183,18 +183,19 @@ void on_new_message(const LLSD& msg)
{
conversations_floater_status = CLOSED;
}
else if (!session_floater || !LLFloater::isVisible(session_floater)
|| session_floater->isMinimized() || !session_floater->hasFocus())
else if (!im_box->hasFocus() &&
!(session_floater && LLFloater::isVisible(session_floater)
&& !session_floater->isMinimized() && session_floater->hasFocus()))
{
conversations_floater_status = NOT_ON_TOP;
}
else if ((session_floater->hasFocus()) && (im_box->getSelectedSession() == session_id))
else if (im_box->getSelectedSession() != session_id)
{
conversations_floater_status = ON_TOP_AND_ITEM_IS_SELECTED;
conversations_floater_status = ON_TOP;
}
else
{
conversations_floater_status = ON_TOP;
conversations_floater_status = ON_TOP_AND_ITEM_IS_SELECTED;
}
// determine user prefs for this session
@ -227,7 +228,7 @@ void on_new_message(const LLSD& msg)
// 0. nothing - exit
if (("none" == user_preferences ||
ON_TOP_AND_ITEM_IS_SELECTED == conversations_floater_status)
&& session_floater->isMessagePaneExpanded())
&& session_floater->isMessagePaneExpanded())
{
return;
}
@ -2850,6 +2851,8 @@ LLUUID LLIMMgr::addSession(
//we don't need to show notes about online/offline, mute/unmute users' statuses for existing sessions
if (!new_session) return session_id;
llinfos << "LLIMMgr::addSession, new session added, name = " << name << ", session id = " << session_id << llendl;
//Per Plan's suggestion commented "explicit offline status warning" out to make Dessie happier (see EXT-3609)
//*TODO After February 2010 remove this commented out line if no one will be missing that warning
//noteOfflineUsers(session_id, floater, ids);
@ -2885,6 +2888,8 @@ void LLIMMgr::removeSession(const LLUUID& session_id)
LLIMModel::getInstance()->clearSession(session_id);
llinfos << "LLIMMgr::removeSession, session removed, session id = " << session_id << llendl;
notifyObserverSessionRemoved(session_id);
}

View File

@ -8291,8 +8291,6 @@ void initialize_menus()
view_listener_t::addEnable(new LLUploadCostCalculator(), "Upload.CalculateCosts");
commit.add("Inventory.NewWindow", boost::bind(&LLFloaterInventory::showAgentInventory));
enable.add("Conversation.IsConversationLoggingAllowed", boost::bind(&LLFloaterIMContainer::isConversationLoggingAllowed));
// Agent

View File

@ -70,23 +70,26 @@
top="0"
left="0"
right="-1"
bottom="-1">
bottom="-3">
<layout_stack
animate="false"
default_tab_group="2"
follows="all"
right="-5"
bottom="-1"
top="0"
left="5"
border_size="0"
layout="topleft"
orientation="vertical"
name="main_stack"
tab_group="1"
top="0"
left="5">
tab_group="1">
<layout_panel
auto_resize="false"
name="toolbar_panel"
height="35">
height="35"
right="-1"
left="1">
<menu_button
menu_filename="menu_im_session_showmodes.xml"
follows="top|left"
@ -164,7 +167,7 @@
image_unselected="Toolbar_Middle_Off"
layout="topleft"
top="5"
right="-70"
right="-67"
name="close_btn"
tool_tip="End this conversation"
width="31" />
@ -196,7 +199,8 @@
</layout_panel>
<layout_panel
name="body_panel"
height="235">
top="1"
bottom="-1">
<layout_stack
default_tab_group="2"
follows="all"
@ -213,12 +217,14 @@
min_dim="0"
width="150"
user_resize="true"
auto_resize="false" />
auto_resize="false"
bottom="-1" />
<layout_panel
default_tab_group="3"
tab_group="2"
name="right_part_holder"
min_width="221">
min_width="221"
bottom="-1">
<layout_stack
animate="true"
default_tab_group="2"
@ -262,21 +268,28 @@
</layout_stack>
</layout_panel>
<layout_panel
height="35"
top_delta="0"
top="0"
height="26"
bottom="-1"
auto_resize="false"
name="chat_layout_panel">
<layout_stack
animate="false"
default_tab_group="2"
follows="all"
right="-1"
orientation="horizontal"
name="input_panels"
top="0"
bottom="-1"
left="0">
bottom="-2"
left="0"
right="-1">
<layout_panel
name="input_editor_layout_panel">
name="input_editor_layout_panel"
auto_resize="true"
user_resize="false"
top="0"
bottom="-1">
<chat_editor
layout="topleft"
expand_lines_count="5"
@ -289,27 +302,32 @@
max_length="1023"
spellcheck="true"
tab_group="3"
bottom="-8"
left="5"
right="-5"
top="1"
bottom="-2"
left="4"
right="-4"
wrap="true" />
</layout_panel>
<layout_panel
auto_resize="false"
user_resize="false"
name="input_button_layout_panel"
width="32">
width="30"
top="0"
bottom="-1">
<button
layout="topleft"
left="1"
top="4"
right="-1"
top="1"
height="22"
follows="left|right|top"
height="25"
image_hover_unselected="Toolbar_Middle_Over"
image_overlay="Conv_expand_one_line"
image_selected="Toolbar_Middle_Selected"
image_unselected="Toolbar_Middle_Off"
name="minz_btn"
tool_tip="Shows/hides message panel"
width="28" />
tool_tip="Shows/hides message panel" />
</layout_panel>
</layout_stack>
</layout_panel>

View File

@ -180,7 +180,8 @@
name="Set Logging Level"
tear_off="true">
<menu_item_check
label="Debug">
name="Debug"
label="Debug">
<menu_item_check.on_check
function="Develop.CheckLoggingLevel"
parameter="0" />
@ -189,7 +190,8 @@
parameter="0" />
</menu_item_check>
<menu_item_check
label="Info">
name="Info"
label="Info">
<menu_item_check.on_check
function="Develop.CheckLoggingLevel"
parameter="1" />
@ -198,7 +200,8 @@
parameter="1" />
</menu_item_check>
<menu_item_check
label="Warning">
name="Warning"
label="Warning">
<menu_item_check.on_check
function="Develop.CheckLoggingLevel"
parameter="2" />
@ -207,7 +210,8 @@
parameter="2" />
</menu_item_check>
<menu_item_check
label="Error">
name="Error"
label="Error">
<menu_item_check.on_check
function="Develop.CheckLoggingLevel"
parameter="3" />
@ -216,7 +220,8 @@
parameter="3" />
</menu_item_check>
<menu_item_check
label="None">
name="None"
label="None">
<menu_item_check.on_check
function="Develop.CheckLoggingLevel"
parameter="4" />

View File

@ -131,6 +131,7 @@
name="Status"
tear_off="true">
<menu_item_check
name="Away"
label="Away">
<menu_item_check.on_check
function="View.Status.CheckAway" />
@ -138,6 +139,7 @@
function="World.SetAway" />
</menu_item_check>
<menu_item_check
name="Do Not Disturb"
label="Do Not Disturb">
<menu_item_check.on_check
function="View.Status.CheckDoNotDisturb" />
@ -257,6 +259,7 @@
parameter="speak" />
</menu_item_check>
<menu_item_check
name="Conversation Log..."
label="Conversation Log...">
<menu_item_check.on_check
function="Floater.Visible"
@ -352,6 +355,7 @@
</menu_item_call>
<menu_item_separator/>
<menu_item_check
name="Do Not Disturb"
label="Do Not Disturb">
<menu_item_check.on_check
function="View.Status.CheckDoNotDisturb" />
@ -3051,13 +3055,6 @@
<menu_item_call.on_click
function="Advanced.PrintAgentInfo" />
</menu_item_call>
<menu_item_call
label="Memory Stats"
name="Memory Stats"
shortcut="control|alt|shift|M">
<menu_item_call.on_click
function="Advanced.PrintTextureMemoryStats" />
</menu_item_call>
<menu_item_check
label="Region Debug Console"
name="Region Debug Console"