summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indra/llcommon/llchat.h2
-rw-r--r--indra/llui/lldockablefloater.cpp10
-rw-r--r--indra/llui/lldockablefloater.h1
-rw-r--r--indra/llui/llresizehandle.cpp6
-rw-r--r--indra/newview/llchannelmanager.cpp1
-rw-r--r--indra/newview/llchathistory.cpp19
-rw-r--r--indra/newview/llchiclet.cpp26
-rw-r--r--indra/newview/llchiclet.h11
-rw-r--r--indra/newview/llgesturemgr.cpp64
-rw-r--r--indra/newview/llimfloater.cpp1
-rw-r--r--indra/newview/llimview.cpp3
-rw-r--r--indra/newview/llinventorybridge.cpp7
-rw-r--r--indra/newview/llmoveview.cpp40
-rw-r--r--indra/newview/llmoveview.h3
-rw-r--r--indra/newview/llnavigationbar.cpp1
-rw-r--r--indra/newview/llpanelimcontrolpanel.cpp6
-rw-r--r--indra/newview/llpanelimcontrolpanel.h1
-rw-r--r--indra/newview/llpanelplaceinfo.cpp33
-rw-r--r--indra/newview/llpanelplaceinfo.h6
-rw-r--r--indra/newview/llsearchhistory.h11
-rw-r--r--indra/newview/llsidepanelinventory.cpp11
-rw-r--r--indra/newview/llsidepanelinventory.h1
-rw-r--r--indra/newview/llsyswellwindow.h3
-rw-r--r--indra/newview/lltoastnotifypanel.cpp22
-rw-r--r--indra/newview/lltoastnotifypanel.h1
-rw-r--r--indra/newview/llviewermessage.cpp5
-rw-r--r--indra/newview/skins/default/xui/en/panel_bottomtray.xml17
-rw-r--r--indra/newview/skins/default/xui/en/panel_landmark_info.xml6
-rw-r--r--indra/newview/skins/default/xui/en/panel_notification.xml11
-rw-r--r--indra/newview/skins/default/xui/en/panel_place_profile.xml6
-rw-r--r--indra/newview/skins/default/xui/en/panel_teleport_history_item.xml4
-rw-r--r--indra/newview/skins/default/xui/en/strings.xml3
32 files changed, 199 insertions, 143 deletions
diff --git a/indra/llcommon/llchat.h b/indra/llcommon/llchat.h
index acd0da61a4..5af7991006 100644
--- a/indra/llcommon/llchat.h
+++ b/indra/llcommon/llchat.h
@@ -84,6 +84,7 @@ public:
mAudible(CHAT_AUDIBLE_FULLY),
mMuted(FALSE),
mTime(0.0),
+ mTimeStr(),
mPosAgent(),
mURL(),
mChatStyle(CHAT_STYLE_NORMAL)
@@ -97,6 +98,7 @@ public:
EChatAudible mAudible;
BOOL mMuted; // pass muted chat to maintain list of chatters
F64 mTime; // viewer only, seconds from viewer start
+ std::string mTimeStr;
LLVector3 mPosAgent;
std::string mURL;
EChatStyle mChatStyle;
diff --git a/indra/llui/lldockablefloater.cpp b/indra/llui/lldockablefloater.cpp
index 9a2f2ab4d3..9c69e4f2b6 100644
--- a/indra/llui/lldockablefloater.cpp
+++ b/indra/llui/lldockablefloater.cpp
@@ -206,16 +206,6 @@ void LLDockableFloater::draw()
LLFloater::draw();
}
-void LLDockableFloater::reshape(S32 width, S32 height, BOOL called_from_parent)
-{
- if (isDocked())
- {
- setDocked(false);
- }
-
- LLFloater::reshape(width, height, called_from_parent);
-}
-
void LLDockableFloater::setDockControl(LLDockControl* dockControl)
{
mDockControl.reset(dockControl);
diff --git a/indra/llui/lldockablefloater.h b/indra/llui/lldockablefloater.h
index e5f94dca91..46491d8a29 100644
--- a/indra/llui/lldockablefloater.h
+++ b/indra/llui/lldockablefloater.h
@@ -65,7 +65,6 @@ public:
/* virtula */BOOL postBuild();
/* virtual */void setDocked(bool docked, bool pop_on_undock = true);
/* virtual */void draw();
- /* virtual */void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
/**
* If descendant class overrides setVisible() then it must still invoke its
diff --git a/indra/llui/llresizehandle.cpp b/indra/llui/llresizehandle.cpp
index 7449c339a0..6239a8f721 100644
--- a/indra/llui/llresizehandle.cpp
+++ b/indra/llui/llresizehandle.cpp
@@ -135,6 +135,12 @@ BOOL LLResizeHandle::handleHover(S32 x, S32 y, MASK mask)
LLView* resizing_view = getParent();
if( resizing_view )
{
+ // undock floater when user resize it
+ if (((LLFloater*)getParent())->isDocked())
+ {
+ ((LLFloater*)getParent())->setDocked(false, false);
+ }
+
// Resize the parent
LLRect orig_rect = resizing_view->getRect();
LLRect scaled_rect = orig_rect;
diff --git a/indra/newview/llchannelmanager.cpp b/indra/newview/llchannelmanager.cpp
index 3443d8b593..aa584b3ae8 100644
--- a/indra/newview/llchannelmanager.cpp
+++ b/indra/newview/llchannelmanager.cpp
@@ -37,7 +37,6 @@
#include "llappviewer.h"
#include "llviewercontrol.h"
#include "llimview.h"
-#include "llbottomtray.h"
#include "llviewerwindow.h"
#include "llrootview.h"
#include "llsyswellwindow.h"
diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index cd5c5edac0..4ce3b50ed5 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -50,21 +50,6 @@
static LLDefaultChildRegistry::Register<LLChatHistory> r("chat_history");
-std::string formatCurrentTime()
-{
- time_t utc_time;
- utc_time = time_corrected();
- std::string timeStr ="["+ LLTrans::getString("TimeHour")+"]:["
- +LLTrans::getString("TimeMin")+"]";
-
- LLSD substitution;
-
- substitution["datetime"] = (S32) utc_time;
- LLStringUtil::format (timeStr, substitution);
-
- return timeStr;
-}
-
class LLChatHistoryHeader: public LLPanel
{
public:
@@ -219,7 +204,7 @@ public:
LLTextBox* timeBox = getChild<LLTextBox>("time_box");
- timeBox->setValue(formatCurrentTime());
+ timeBox->setValue(chat.mTimeStr);
LLAvatarIconCtrl* icon = getChild<LLAvatarIconCtrl>("avatar_icon");
@@ -352,7 +337,7 @@ LLView* LLChatHistory::getHeader(const LLChat& chat,const LLStyle::Params& style
void LLChatHistory::appendWidgetMessage(const LLChat& chat, const LLStyle::Params& input_append_params)
{
LLView* view = NULL;
- std::string view_text = "\n[" + formatCurrentTime() + "] ";
+ std::string view_text = "\n[" + chat.mTimeStr + "] ";
if (utf8str_trim(chat.mFromName).size() != 0 && chat.mFromName != SYSTEM_FROM)
view_text += chat.mFromName + ": ";
diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp
index 5375c3ea49..ad9fd4badc 100644
--- a/indra/newview/llchiclet.cpp
+++ b/indra/newview/llchiclet.cpp
@@ -81,27 +81,17 @@ LLNotificationChiclet::Params::Params()
button.tab_stop(FALSE);
button.label(LLStringUtil::null);
- unread_notifications.name("unread");
- unread_notifications.font(LLFontGL::getFontSansSerif());
- unread_notifications.text_color=(LLColor4::white);
- unread_notifications.font_halign(LLFontGL::HCENTER);
- unread_notifications.mouse_opaque(FALSE);
}
LLNotificationChiclet::LLNotificationChiclet(const Params& p)
: LLChiclet(p)
, mButton(NULL)
-, mCounterCtrl(NULL)
+, mCounter(0)
{
LLButton::Params button_params = p.button;
- button_params.rect(p.rect());
mButton = LLUICtrlFactory::create<LLButton>(button_params);
addChild(mButton);
- LLChicletNotificationCounterCtrl::Params unread_params = p.unread_notifications;
- mCounterCtrl = LLUICtrlFactory::create<LLChicletNotificationCounterCtrl>(unread_params);
- addChild(mCounterCtrl);
-
// connect counter handlers to the signals
connectCounterUpdatersToSignal("notify");
connectCounterUpdatersToSignal("groupnotify");
@@ -126,13 +116,15 @@ void LLNotificationChiclet::connectCounterUpdatersToSignal(std::string notificat
void LLNotificationChiclet::setCounter(S32 counter)
{
- mCounterCtrl->setCounter(counter);
-}
+ std::string s_count;
+ if(counter != 0)
+ {
+ s_count = llformat("%d", counter);
+ }
-void LLNotificationChiclet::setShowCounter(bool show)
-{
- LLChiclet::setShowCounter(show);
- mCounterCtrl->setVisible(getShowCounter());
+ mButton->setLabel(s_count);
+
+ mCounter = counter;
}
boost::signals2::connection LLNotificationChiclet::setClickCallback(
diff --git a/indra/newview/llchiclet.h b/indra/newview/llchiclet.h
index eab4a282f5..bb5dc1e550 100644
--- a/indra/newview/llchiclet.h
+++ b/indra/newview/llchiclet.h
@@ -638,13 +638,14 @@ public:
/*virtual*/ void setCounter(S32 counter);
- /*virtual*/S32 getCounter() { return mCounterCtrl->getCounter(); }
-
- /*virtual*/ void setShowCounter(bool show);
+ // *TODO: mantipov: seems getCounter is not necessary for LLNotificationChiclet
+ // but inherited interface requires it to implement.
+ // Probably it can be safe removed.
+ /*virtual*/S32 getCounter() { return mCounter; }
boost::signals2::connection setClickCallback(const commit_callback_t& cb);
- /*virtual*/ ~ LLNotificationChiclet();
+ /*virtual*/ ~LLNotificationChiclet();
// methods for updating a number of unread System notifications
void incUreadSystemNotifications() { setCounter(++mUreadSystemNotifications); }
@@ -662,7 +663,7 @@ protected:
protected:
LLButton* mButton;
- LLChicletNotificationCounterCtrl* mCounterCtrl;
+ S32 mCounter;
};
/*
diff --git a/indra/newview/llgesturemgr.cpp b/indra/newview/llgesturemgr.cpp
index 8e774dc199..d85ac477e1 100644
--- a/indra/newview/llgesturemgr.cpp
+++ b/indra/newview/llgesturemgr.cpp
@@ -60,6 +60,9 @@
// Longest time, in seconds, to wait for all animations to stop playing
const F32 MAX_WAIT_ANIM_SECS = 30.f;
+// If this gesture is a link, get the base gesture that this link points to,
+// otherwise just return this id.
+static const LLUUID& get_linked_uuid(const LLUUID& item_id);
// Lightweight constructor.
// init() does the heavy lifting.
@@ -213,6 +216,8 @@ void LLGestureManager::activateGestureWithAsset(const LLUUID& item_id,
BOOL inform_server,
BOOL deactivate_similar)
{
+ const LLUUID& base_item_id = get_linked_uuid(item_id);
+
if( !gAssetStorage )
{
llwarns << "LLGestureManager::activateGestureWithAsset without valid gAssetStorage" << llendl;
@@ -233,13 +238,13 @@ void LLGestureManager::activateGestureWithAsset(const LLUUID& item_id,
// For now, put NULL into the item map. We'll build a gesture
// class object when the asset data arrives.
- mActive[item_id] = NULL;
+ mActive[base_item_id] = NULL;
// Copy the UUID
if (asset_id.notNull())
{
LLLoadInfo* info = new LLLoadInfo;
- info->mItemID = item_id;
+ info->mItemID = base_item_id;
info->mInformServer = inform_server;
info->mDeactivateSimilar = deactivate_similar;
@@ -259,7 +264,8 @@ void LLGestureManager::activateGestureWithAsset(const LLUUID& item_id,
void LLGestureManager::deactivateGesture(const LLUUID& item_id)
{
- item_map_t::iterator it = mActive.find(item_id);
+ const LLUUID& base_item_id = get_linked_uuid(item_id);
+ item_map_t::iterator it = mActive.find(base_item_id);
if (it == mActive.end())
{
llwarns << "deactivateGesture for inactive gesture " << item_id << llendl;
@@ -279,7 +285,7 @@ void LLGestureManager::deactivateGesture(const LLUUID& item_id)
}
mActive.erase(it);
- gInventory.addChangedMask(LLInventoryObserver::LABEL, item_id);
+ gInventory.addChangedMask(LLInventoryObserver::LABEL, base_item_id);
// Inform the database of this change
LLMessageSystem* msg = gMessageSystem;
@@ -301,6 +307,7 @@ void LLGestureManager::deactivateGesture(const LLUUID& item_id)
void LLGestureManager::deactivateSimilarGestures(LLMultiGesture* in, const LLUUID& in_item_id)
{
+ const LLUUID& base_in_item_id = get_linked_uuid(in_item_id);
std::vector<LLUUID> gest_item_ids;
// Deactivate all gestures that match
@@ -312,7 +319,7 @@ void LLGestureManager::deactivateSimilarGestures(LLMultiGesture* in, const LLUUI
// Don't deactivate the gesture we are looking for duplicates of
// (for replaceGesture)
- if (!gest || item_id == in_item_id)
+ if (!gest || item_id == base_in_item_id)
{
// legal, can have null pointers in list
++it;
@@ -387,14 +394,17 @@ void LLGestureManager::deactivateSimilarGestures(LLMultiGesture* in, const LLUUI
BOOL LLGestureManager::isGestureActive(const LLUUID& item_id)
{
- item_map_t::iterator it = mActive.find(item_id);
+ const LLUUID& base_item_id = get_linked_uuid(item_id);
+ item_map_t::iterator it = mActive.find(base_item_id);
return (it != mActive.end());
}
BOOL LLGestureManager::isGesturePlaying(const LLUUID& item_id)
{
- item_map_t::iterator it = mActive.find(item_id);
+ const LLUUID& base_item_id = get_linked_uuid(item_id);
+
+ item_map_t::iterator it = mActive.find(base_item_id);
if (it == mActive.end()) return FALSE;
LLMultiGesture* gesture = (*it).second;
@@ -405,19 +415,21 @@ BOOL LLGestureManager::isGesturePlaying(const LLUUID& item_id)
void LLGestureManager::replaceGesture(const LLUUID& item_id, LLMultiGesture* new_gesture, const LLUUID& asset_id)
{
- item_map_t::iterator it = mActive.find(item_id);
+ const LLUUID& base_item_id = get_linked_uuid(item_id);
+
+ item_map_t::iterator it = mActive.find(base_item_id);
if (it == mActive.end())
{
- llwarns << "replaceGesture for inactive gesture " << item_id << llendl;
+ llwarns << "replaceGesture for inactive gesture " << base_item_id << llendl;
return;
}
LLMultiGesture* old_gesture = (*it).second;
stopGesture(old_gesture);
- mActive.erase(item_id);
+ mActive.erase(base_item_id);
- mActive[item_id] = new_gesture;
+ mActive[base_item_id] = new_gesture;
delete old_gesture;
old_gesture = NULL;
@@ -428,7 +440,7 @@ void LLGestureManager::replaceGesture(const LLUUID& item_id, LLMultiGesture* new
mDeactivateSimilarNames.clear();
LLLoadInfo* info = new LLLoadInfo;
- info->mItemID = item_id;
+ info->mItemID = base_item_id;
info->mInformServer = TRUE;
info->mDeactivateSimilar = FALSE;
@@ -445,16 +457,18 @@ void LLGestureManager::replaceGesture(const LLUUID& item_id, LLMultiGesture* new
void LLGestureManager::replaceGesture(const LLUUID& item_id, const LLUUID& new_asset_id)
{
- item_map_t::iterator it = LLGestureManager::instance().mActive.find(item_id);
+ const LLUUID& base_item_id = get_linked_uuid(item_id);
+
+ item_map_t::iterator it = LLGestureManager::instance().mActive.find(base_item_id);
if (it == mActive.end())
{
- llwarns << "replaceGesture for inactive gesture " << item_id << llendl;
+ llwarns << "replaceGesture for inactive gesture " << base_item_id << llendl;
return;
}
// mActive owns this gesture pointer, so clean up memory.
LLMultiGesture* gesture = (*it).second;
- LLGestureManager::instance().replaceGesture(item_id, gesture, new_asset_id);
+ LLGestureManager::instance().replaceGesture(base_item_id, gesture, new_asset_id);
}
void LLGestureManager::playGesture(LLMultiGesture* gesture)
@@ -478,7 +492,9 @@ void LLGestureManager::playGesture(LLMultiGesture* gesture)
// Convenience function that looks up the item_id for you.
void LLGestureManager::playGesture(const LLUUID& item_id)
{
- item_map_t::iterator it = mActive.find(item_id);
+ const LLUUID& base_item_id = get_linked_uuid(item_id);
+
+ item_map_t::iterator it = mActive.find(base_item_id);
if (it == mActive.end()) return;
LLMultiGesture* gesture = (*it).second;
@@ -1074,7 +1090,9 @@ void LLGestureManager::stopGesture(LLMultiGesture* gesture)
void LLGestureManager::stopGesture(const LLUUID& item_id)
{
- item_map_t::iterator it = mActive.find(item_id);
+ const LLUUID& base_item_id = get_linked_uuid(item_id);
+
+ item_map_t::iterator it = mActive.find(base_item_id);
if (it == mActive.end()) return;
LLMultiGesture* gesture = (*it).second;
@@ -1171,3 +1189,15 @@ void LLGestureManager::done()
}
notifyObservers();
}
+
+// static
+const LLUUID& get_linked_uuid(const LLUUID &item_id)
+{
+ LLViewerInventoryItem* item = gInventory.getItem(item_id);
+ if (item && item->getIsLinkType())
+ {
+ return item->getLinkedUUID();
+ }
+ return item_id;
+}
+
diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp
index c2c83191e0..bfac35d866 100644
--- a/indra/newview/llimfloater.cpp
+++ b/indra/newview/llimfloater.cpp
@@ -474,6 +474,7 @@ void LLIMFloater::updateMessages()
chat.mFromID = from_id;
chat.mFromName = from;
chat.mText = message;
+ chat.mTimeStr = time;
//Handle IRC styled /me messages.
std::string prefix = message.substr(0, 4);
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index dc32291714..dd78bb631f 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -49,6 +49,7 @@
#include "llbottomtray.h"
#include "llcallingcard.h"
#include "llchat.h"
+#include "llchiclet.h"
#include "llresmgr.h"
#include "llfloaterchat.h"
#include "llfloaterchatterbox.h"
@@ -1194,7 +1195,7 @@ BOOL LLIncomingCallDialog::postBuild()
// check to see if this is an Avaline call
LLUUID session_id = mPayload["session_id"].asUUID();
- bool is_avatar = LLVoiceClient::getInstance()->isParticipantAvatar(session_id);
+ bool is_avatar = LLVoiceClient::getInstance()->isParticipantAvatar(session_id);
childSetVisible("Start IM", is_avatar); // no IM for avaline
LLUICtrl* caller_name_widget = getChild<LLUICtrl>("caller name");
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index 384d2ae671..173f2634aa 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -3658,6 +3658,11 @@ void LLGestureBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
}
else
{
+ LLInventoryItem* item = getItem();
+ if (item && item->getIsLinkType())
+ {
+ items.push_back(std::string("Find Original"));
+ }
items.push_back(std::string("Open"));
items.push_back(std::string("Properties"));
@@ -3883,6 +3888,7 @@ std::string LLObjectBridge::getLabelSuffix() const
{
std::string attachment_point_name = avatar->getAttachedPointName(mUUID);
+ // e.g. "(worn on ...)" / "(attached to ...)"
LLStringUtil::format_map_t args;
args["[ATTACHMENT_POINT]"] = attachment_point_name.c_str();
return LLItemBridge::getLabelSuffix() + LLTrans::getString("WornOnAttachmentPoint", args);
@@ -4297,6 +4303,7 @@ std::string LLWearableBridge::getLabelSuffix() const
{
if( gAgentWearables.isWearingItem( mUUID ) )
{
+ // e.g. "(worn)"
return LLItemBridge::getLabelSuffix() + LLTrans::getString("worn");
}
else
diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp
index 0ee883e221..93db337053 100644
--- a/indra/newview/llmoveview.cpp
+++ b/indra/newview/llmoveview.cpp
@@ -83,11 +83,6 @@ LLFloaterMove::LLFloaterMove(const LLSD& key)
{
}
-LLFloaterMove::~LLFloaterMove()
-{
- LLPanelStandStopFlying::getInstance()->reparent(NULL);
-}
-
// virtual
BOOL LLFloaterMove::postBuild()
{
@@ -161,6 +156,31 @@ void LLFloaterMove::setEnabled(BOOL enabled)
showModeButtons(enabled);
}
+// *NOTE: we assume that setVisible() is called on floater close.
+// virtual
+void LLFloaterMove::setVisible(BOOL visible)
+{
+ // Ignore excessive calls of this method (from LLTransientFloaterMgr?).
+ if (getVisible() == visible)
+ return;
+
+ if (visible)
+ {
+ // Attach the Stand/Stop Flying panel.
+ LLPanelStandStopFlying* ssf_panel = LLPanelStandStopFlying::getInstance();
+ ssf_panel->reparent(this);
+ const LLRect& mode_actions_rect = mModeActionsPanel->getRect();
+ ssf_panel->setOrigin(mode_actions_rect.mLeft, mode_actions_rect.mBottom);
+ }
+ else
+ {
+ // Detach the Stand/Stop Flying panel.
+ LLPanelStandStopFlying::getInstance()->reparent(NULL);
+ }
+
+ LLTransientDockableFloater::setVisible(visible);
+}
+
// static
F32 LLFloaterMove::getYawRate( F32 time )
{
@@ -429,16 +449,6 @@ void LLFloaterMove::showModeButtons(BOOL bShow)
if (NULL == mModeActionsPanel || mModeActionsPanel->getVisible() == bShow)
return;
mModeActionsPanel->setVisible(bShow);
-
- if (bShow)
- LLPanelStandStopFlying::getInstance()->reparent(NULL);
- else
- {
- LLPanelStandStopFlying* ssf_panel = LLPanelStandStopFlying::getInstance();
- ssf_panel->reparent(this);
- const LLRect& mode_actions_rect = mModeActionsPanel->getRect();
- ssf_panel->setOrigin(mode_actions_rect.mLeft, mode_actions_rect.mBottom);
- }
}
//static
diff --git a/indra/newview/llmoveview.h b/indra/newview/llmoveview.h
index 2664fe6e40..06463f02af 100644
--- a/indra/newview/llmoveview.h
+++ b/indra/newview/llmoveview.h
@@ -51,11 +51,12 @@ class LLFloaterMove
private:
LLFloaterMove(const LLSD& key);
- ~LLFloaterMove();
+ ~LLFloaterMove() {}
public:
/*virtual*/ BOOL postBuild();
/*virtual*/ void setEnabled(BOOL enabled);
+ /*virtual*/ void setVisible(BOOL visible);
static F32 getYawRate(F32 time);
static void setFlyingMode(BOOL fly);
void setFlyingModeImpl(BOOL fly);
diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp
index 0c2782fd8a..114d26af8a 100644
--- a/indra/newview/llnavigationbar.cpp
+++ b/indra/newview/llnavigationbar.cpp
@@ -186,7 +186,6 @@ LLNavigationBar::LLNavigationBar()
LLNavigationBar::~LLNavigationBar()
{
mTeleportFinishConnection.disconnect();
- LLSearchHistory::getInstance()->save();
}
BOOL LLNavigationBar::postBuild()
diff --git a/indra/newview/llpanelimcontrolpanel.cpp b/indra/newview/llpanelimcontrolpanel.cpp
index 00502341fc..5e23662a0b 100644
--- a/indra/newview/llpanelimcontrolpanel.cpp
+++ b/indra/newview/llpanelimcontrolpanel.cpp
@@ -44,6 +44,7 @@
#include "llimview.h"
#include "llvoicechannel.h"
#include "llsidetray.h"
+#include "lltrans.h"
void LLPanelChatControlPanel::onCallButtonClicked()
{
@@ -161,6 +162,11 @@ void LLPanelIMControlPanel::onShareButtonClicked()
{
LLSD key;
LLSideTray::getInstance()->showPanel("sidepanel_inventory", key);
+
+ if (gIMMgr->hasSession(getSessionId()))
+ {
+ LLIMModel::getInstance()->addMessage(getSessionId(), SYSTEM_FROM, LLUUID::null, LLTrans::getString("share_alert"), false);
+ }
}
void LLPanelIMControlPanel::setSessionId(const LLUUID& session_id)
diff --git a/indra/newview/llpanelimcontrolpanel.h b/indra/newview/llpanelimcontrolpanel.h
index 923c5acbd2..7bfc432ef2 100644
--- a/indra/newview/llpanelimcontrolpanel.h
+++ b/indra/newview/llpanelimcontrolpanel.h
@@ -58,6 +58,7 @@ public:
virtual void onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state);
virtual void setSessionId(const LLUUID& session_id);
+ const LLUUID& getSessionId() { return mSessionId; }
private:
LLUUID mSessionId;
diff --git a/indra/newview/llpanelplaceinfo.cpp b/indra/newview/llpanelplaceinfo.cpp
index 963d39de8a..6ba3790fe2 100644
--- a/indra/newview/llpanelplaceinfo.cpp
+++ b/indra/newview/llpanelplaceinfo.cpp
@@ -57,7 +57,11 @@ LLPanelPlaceInfo::LLPanelPlaceInfo()
: LLPanel(),
mParcelID(),
mRequestedID(),
- mPosRegion()
+ mPosRegion(),
+ mScrollingPanelMinHeight(0),
+ mScrollingPanelWidth(0),
+ mScrollingPanel(NULL),
+ mScrollContainer(NULL)
{}
//virtual
@@ -83,6 +87,12 @@ BOOL LLPanelPlaceInfo::postBuild()
mMaturityRatingIcon = getChild<LLIconCtrl>("maturity_icon");
mMaturityRatingText = getChild<LLTextBox>("maturity_value");
+ mScrollingPanel = getChild<LLPanel>("scrolling_panel");
+ mScrollContainer = getChild<LLScrollContainer>("place_scroll");
+
+ mScrollingPanelMinHeight = mScrollContainer->getScrolledViewRect().getHeight();
+ mScrollingPanelWidth = mScrollingPanel->getRect().getWidth();
+
return TRUE;
}
@@ -231,6 +241,27 @@ void LLPanelPlaceInfo::processParcelInfo(const LLParcelData& parcel_data)
}
// virtual
+void LLPanelPlaceInfo::reshape(S32 width, S32 height, BOOL called_from_parent)
+{
+ LLPanel::reshape(width, height, called_from_parent);
+
+ if (!mScrollContainer || !mScrollingPanel)
+ return;
+
+ static LLUICachedControl<S32> scrollbar_size ("UIScrollbarSize", 0);
+
+ S32 scroll_height = mScrollContainer->getRect().getHeight();
+ if (mScrollingPanelMinHeight >= scroll_height)
+ {
+ mScrollingPanel->reshape(mScrollingPanelWidth, mScrollingPanelMinHeight);
+ }
+ else
+ {
+ mScrollingPanel->reshape(mScrollingPanelWidth + scrollbar_size, scroll_height);
+ }
+}
+
+// virtual
void LLPanelPlaceInfo::handleVisibilityChange(BOOL new_visibility)
{
LLPanel::handleVisibilityChange(new_visibility);
diff --git a/indra/newview/llpanelplaceinfo.h b/indra/newview/llpanelplaceinfo.h
index 133933a880..b9bf92b534 100644
--- a/indra/newview/llpanelplaceinfo.h
+++ b/indra/newview/llpanelplaceinfo.h
@@ -45,6 +45,7 @@ class LLIconCtrl;
class LLInventoryItem;
class LLPanelPickEdit;
class LLParcel;
+class LLScrollContainer;
class LLTextBox;
class LLTextureCtrl;
class LLViewerRegion;
@@ -92,6 +93,7 @@ public:
/*virtual*/ void processParcelInfo(const LLParcelData& parcel_data);
+ /*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
/*virtual*/ void handleVisibilityChange (BOOL new_visibility);
// Create a pick for the location specified
@@ -110,8 +112,12 @@ protected:
LLUUID mRequestedID;
LLVector3 mPosRegion;
std::string mCurrentTitle;
+ S32 mScrollingPanelMinHeight;
+ S32 mScrollingPanelWidth;
INFO_TYPE mInfoType;
+ LLScrollContainer* mScrollContainer;
+ LLPanel* mScrollingPanel;
LLTextBox* mTitle;
LLTextureCtrl* mSnapshotCtrl;
LLTextBox* mRegionName;
diff --git a/indra/newview/llsearchhistory.h b/indra/newview/llsearchhistory.h
index 253ef21e9e..eb6efdb86f 100644
--- a/indra/newview/llsearchhistory.h
+++ b/indra/newview/llsearchhistory.h
@@ -34,12 +34,15 @@
#define LL_LLSEARCHHISTORY_H
#include "llsingleton.h"
+#include "llui.h"
+
/**
* Search history container able to save and load history from file.
* History is stored in chronological order, most recent at the beginning.
*/
-class LLSearchHistory : public LLSingleton<LLSearchHistory>
+class LLSearchHistory : public LLSingleton<LLSearchHistory>, private LLDestroyClass<LLSearchHistory>
{
+ friend class LLDestroyClass<LLSearchHistory>;
public:
// Forward declaration
@@ -130,6 +133,12 @@ protected:
private:
+ // Implementation of LLDestroyClass<LLSearchHistory>
+ static void destroyClass()
+ {
+ LLSearchHistory::getInstance()->save();
+ }
+
search_history_list_t mSearchHistory;
};
diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp
index 6aa5c53194..58962b67d6 100644
--- a/indra/newview/llsidepanelinventory.cpp
+++ b/indra/newview/llsidepanelinventory.cpp
@@ -46,7 +46,8 @@ static LLRegisterPanelClassWrapper<LLSidepanelInventory> t_inventory("sidepanel_
LLSidepanelInventory::LLSidepanelInventory()
: LLPanel(),
- mItemPanel(NULL)
+ mItemPanel(NULL),
+ mPanelMainInventory(NULL)
{
//LLUICtrlFactory::getInstance()->buildPanel(this, "panel_inventory.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder()
@@ -80,8 +81,8 @@ BOOL LLSidepanelInventory::postBuild()
mOverflowBtn = mInventoryPanel->getChild<LLButton>("overflow_btn");
mOverflowBtn->setClickedCallback(boost::bind(&LLSidepanelInventory::onOverflowButtonClicked, this));
- LLPanelMainInventory *panel_main_inventory = mInventoryPanel->getChild<LLPanelMainInventory>("panel_main_inventory");
- panel_main_inventory->setSelectCallback(boost::bind(&LLSidepanelInventory::onSelectionChange, this, _1, _2));
+ mPanelMainInventory = mInventoryPanel->getChild<LLPanelMainInventory>("panel_main_inventory");
+ mPanelMainInventory->setSelectCallback(boost::bind(&LLSidepanelInventory::onSelectionChange, this, _1, _2));
}
// UI elements from item panel
@@ -127,6 +128,10 @@ void LLSidepanelInventory::onOpen(const LLSD& key)
mTaskPanel->setObjectSelection(LLSelectMgr::getInstance()->getSelection());
showTaskInfoPanel();
}
+ if (key.has("select"))
+ {
+ mPanelMainInventory->getPanel()->setSelection(key["select"].asUUID(), TAKE_FOCUS_NO);
+ }
}
void LLSidepanelInventory::onInfoButtonClicked()
diff --git a/indra/newview/llsidepanelinventory.h b/indra/newview/llsidepanelinventory.h
index 681af7fafa..9eba77b5c3 100644
--- a/indra/newview/llsidepanelinventory.h
+++ b/indra/newview/llsidepanelinventory.h
@@ -68,6 +68,7 @@ private:
LLPanel* mInventoryPanel; // Main inventory view
LLSidepanelItemInfo* mItemPanel; // Individual item view
LLSidepanelTaskInfo* mTaskPanel; // Individual in-world object view
+ LLPanelMainInventory* mPanelMainInventory;
protected:
void onInfoButtonClicked();
diff --git a/indra/newview/llsyswellwindow.h b/indra/newview/llsyswellwindow.h
index cbc5f7358f..3e4cdbdcbe 100644
--- a/indra/newview/llsyswellwindow.h
+++ b/indra/newview/llsyswellwindow.h
@@ -39,12 +39,13 @@
#include "llbutton.h"
#include "llscreenchannel.h"
#include "llscrollcontainer.h"
-#include "llchiclet.h"
#include "llimview.h"
#include "boost/shared_ptr.hpp"
class LLFlatListView;
+class LLChiclet;
+class LLIMChiclet;
class LLSysWellWindow : public LLDockableFloater, LLIMSessionObserver
{
diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp
index 48b68e4292..699424ef36 100644
--- a/indra/newview/lltoastnotifypanel.cpp
+++ b/indra/newview/lltoastnotifypanel.cpp
@@ -48,7 +48,6 @@ const LLFontGL* LLToastNotifyPanel::sFontSmall = NULL;
LLToastNotifyPanel::LLToastNotifyPanel(LLNotificationPtr& notification) :
LLToastPanel(notification),
mTextBox(NULL),
-mIcon(NULL),
mInfoPanel(NULL),
mControlPanel(NULL),
mNumOptions(0),
@@ -58,7 +57,6 @@ mAddedDefaultBtn(false)
LLUICtrlFactory::getInstance()->buildPanel(this, "panel_notification.xml");
mInfoPanel = getChild<LLPanel>("info_panel");
mControlPanel = getChild<LLPanel>("control_panel");
- mIcon = getChild<LLIconCtrl>("info_icon");
// customize panel's attributes
// is it intended for displaying a tip
@@ -94,26 +92,6 @@ mAddedDefaultBtn(false)
// preliminary adjust panel's layout
mIsTip ? adjustPanelForTipNotice() : adjustPanelForScriptNotice(form);
- // choose a right icon
- if (mIsTip)
- {
- // use the tip notification icon
- mIcon->setValue("notify_tip_icon.tga");
- LLRect icon_rect = mIcon->getRect();
- icon_rect.setLeftTopAndSize(icon_rect.mLeft, getRect().getHeight() - VPAD, icon_rect.getWidth(), icon_rect.getHeight());
- mIcon->setRect(icon_rect);
- }
- else if (mIsCaution)
- {
- // use the caution notification icon
- mIcon->setValue("notify_caution_icon.tga");
- }
- else
- {
- // use the default notification icon
- mIcon->setValue("notify_box_icon.tga");
- }
-
// adjust text options according to the notification type
// add a caution textbox at the top of a caution notification
if (mIsCaution && !mIsTip)
diff --git a/indra/newview/lltoastnotifypanel.h b/indra/newview/lltoastnotifypanel.h
index 66534edcdf..eea70705ec 100644
--- a/indra/newview/lltoastnotifypanel.h
+++ b/indra/newview/lltoastnotifypanel.h
@@ -73,7 +73,6 @@ private:
// panel elements
LLTextBase* mTextBox;
- LLIconCtrl* mIcon;
LLPanel* mInfoPanel; // a panel, that contains an information
LLPanel* mControlPanel; // a panel, that contains buttons (if present)
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index ef6a621323..11b2f07f1b 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -939,6 +939,11 @@ void open_offer(const std::vector<LLUUID>& items, const std::string& from_name)
!from_name.empty())
{
view = LLFloaterInventory::showAgentInventory();
+ //TODO:this should be moved to the end of method after all the checks,
+ //but first decide what to do with active inventory if any (EK)
+ LLSD key;
+ key["select"] = item->getUUID();
+ LLSideTray::getInstance()->showPanel("sidepanel_inventory", key);
}
else
{
diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
index d2933c0c0e..00711a29e0 100644
--- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
@@ -299,8 +299,8 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly.
min_height="28"
top="0"
name="sys_well_panel"
- width="34"
- min_width="34"
+ width="54"
+ min_width="54"
user_resize="false">
<chiclet_notification
follows="right"
@@ -309,22 +309,21 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly.
left="0"
name="sys_well"
top="4"
- width="34">
+ width="54">
<button
auto_resize="true"
halign="right"
height="23"
follows="right"
flash_color="EmphasisColor"
+ left="0"
name="Unread"
image_overlay="Notices_Unread"
- width="20"
+ image_overlay_alignment="right"
+ pad_right="6"
+ pad_left="6"
+ width="54"
/>
- <unread_notifications
- width="34"
- height="20"
- left="0"
- top="19" />
</chiclet_notification>
</layout_panel>
<icon
diff --git a/indra/newview/skins/default/xui/en/panel_landmark_info.xml b/indra/newview/skins/default/xui/en/panel_landmark_info.xml
index b01ddbf75a..a219e30b8b 100644
--- a/indra/newview/skins/default/xui/en/panel_landmark_info.xml
+++ b/indra/newview/skins/default/xui/en/panel_landmark_info.xml
@@ -87,8 +87,8 @@
width="313">
<panel
bg_alpha_color="DkGray2"
- follows="all"
- height="533"
+ follows="left|top|right"
+ height="610"
layout="topleft"
left="0"
min_height="300"
@@ -145,7 +145,7 @@
top_pad="10"
width="18" />
<text
- follows="right|top"
+ follows="left|top|right"
height="16"
layout="topleft"
left_pad="8"
diff --git a/indra/newview/skins/default/xui/en/panel_notification.xml b/indra/newview/skins/default/xui/en/panel_notification.xml
index 462188ee24..df37f9973c 100644
--- a/indra/newview/skins/default/xui/en/panel_notification.xml
+++ b/indra/newview/skins/default/xui/en/panel_notification.xml
@@ -90,15 +90,4 @@
name="control_panel"
top_pad="0">
</panel>
- <!--
- <icon
- follows="left|top"
- height="32"
- image_name="notify_tip_icon.tga"
- layout="topleft"
- left="8"
- mouse_opaque="false"
- name="info_icon"
- top="20"
- width="32" /> -->
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_place_profile.xml b/indra/newview/skins/default/xui/en/panel_place_profile.xml
index e6084202d7..9ab5c6b4f7 100644
--- a/indra/newview/skins/default/xui/en/panel_place_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_place_profile.xml
@@ -172,7 +172,7 @@
width="313">
<panel
bg_alpha_color="DkGray2"
- follows="all"
+ follows="left|top|right"
height="533"
layout="topleft"
left="0"
@@ -192,7 +192,7 @@
<layout_stack
border_size="0"
clip="false"
- follows="all"
+ follows="left|top|right"
height="50"
layout="topleft"
mouse_opaque="false"
@@ -305,7 +305,7 @@
top_delta="0"
width="18" />
<text
- follows="right|top"
+ follows="left|top|right"
height="16"
layout="topleft"
left_pad="8"
diff --git a/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml
index 4ab6175805..3384852f27 100644
--- a/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml
+++ b/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml
@@ -18,7 +18,7 @@
visible="false"
width="380" />
<icon
- height="24"
+ height="20"
follows="top|right|left"
image_name="ListItem_Select"
layout="topleft"
@@ -55,7 +55,7 @@
left_pad="5"
right="-3"
name="profile_btn"
- top_delta="-2"
+ top="1"
visible="false"
width="20" />
</panel>
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index a5272d1883..e76763d7eb 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -2868,6 +2868,9 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
<string name="inventory_item_offered-im">
Inventory item offered
</string>
+ <string name="share_alert">
+ Drag items from inventory here
+ </string>
<string name="only_user_message">
You are the only user in this session.