PE merge.
commit
044e020bcb
|
|
@ -44,17 +44,28 @@ LLSearchEditor::LLSearchEditor(const LLSearchEditor::Params& p)
|
|||
S32 srch_btn_top = p.search_button.top_pad + p.search_button.rect.height;
|
||||
S32 srch_btn_right = p.search_button.rect.width + p.search_button.left_pad;
|
||||
LLRect srch_btn_rect(p.search_button.left_pad, srch_btn_top, srch_btn_right, p.search_button.top_pad);
|
||||
|
||||
S32 clr_btn_top = p.clear_button.rect.bottom + p.clear_button.rect.height;
|
||||
S32 clr_btn_right = getRect().getWidth() - p.clear_button.pad_right;
|
||||
S32 clr_btn_left = clr_btn_right - p.clear_button.rect.width;
|
||||
LLRect clear_btn_rect(clr_btn_left, clr_btn_top, clr_btn_right, p.clear_button.rect.bottom);
|
||||
|
||||
S32 text_pad_left = p.text_pad_left;
|
||||
S32 text_pad_right = p.text_pad_right;
|
||||
|
||||
if (p.search_button_visible)
|
||||
text_pad_left += srch_btn_rect.getWidth();
|
||||
|
||||
if (p.clear_button_visible)
|
||||
text_pad_right = getRect().getWidth() - clr_btn_left + p.clear_button.pad_left;
|
||||
|
||||
// Set up line editor.
|
||||
LLLineEditor::Params line_editor_params(p);
|
||||
line_editor_params.name("filter edit box");
|
||||
line_editor_params.rect(getLocalRect());
|
||||
line_editor_params.follows.flags(FOLLOWS_ALL);
|
||||
line_editor_params.text_pad_left(text_pad_left);
|
||||
line_editor_params.text_pad_right(text_pad_right);
|
||||
line_editor_params.revert_on_esc(false);
|
||||
line_editor_params.commit_callback.function(boost::bind(&LLUICtrl::onCommit, this));
|
||||
line_editor_params.keystroke_callback(boost::bind(&LLSearchEditor::handleKeystroke, this));
|
||||
|
|
@ -82,10 +93,6 @@ LLSearchEditor::LLSearchEditor(const LLSearchEditor::Params& p)
|
|||
// Set up clear button.
|
||||
LLButton::Params clr_btn_params(p.clear_button);
|
||||
clr_btn_params.name(std::string("clear button"));
|
||||
S32 clr_btn_top = clr_btn_params.rect.bottom + clr_btn_params.rect.height;
|
||||
S32 clr_btn_right = getRect().getWidth() - clr_btn_params.pad_right;
|
||||
S32 clr_btn_left = clr_btn_right - clr_btn_params.rect.width;
|
||||
LLRect clear_btn_rect(clr_btn_left, clr_btn_top, clr_btn_right, p.clear_button.rect.bottom);
|
||||
clr_btn_params.rect(clear_btn_rect) ;
|
||||
clr_btn_params.follows.flags(FOLLOWS_RIGHT|FOLLOWS_TOP);
|
||||
clr_btn_params.tab_stop(false);
|
||||
|
|
|
|||
|
|
@ -115,6 +115,9 @@ LLCallFloater::LLCallFloater(const LLSD& key)
|
|||
mFactoryMap["non_avatar_caller"] = LLCallbackMap(create_non_avatar_caller, NULL);
|
||||
LLVoiceClient::getInstance()->addObserver(this);
|
||||
LLTransientFloaterMgr::getInstance()->addControlView(this);
|
||||
|
||||
// force docked state since this floater doesn't save it between recreations
|
||||
setDocked(true);
|
||||
}
|
||||
|
||||
LLCallFloater::~LLCallFloater()
|
||||
|
|
|
|||
|
|
@ -144,6 +144,7 @@ void LLNearbyChatToastPanel::init(LLSD& notification)
|
|||
std::string messageText = notification["message"].asString(); // UTF-8 line of text
|
||||
std::string fromName = notification["from"].asString(); // agent or object name
|
||||
mFromID = notification["from_id"].asUUID(); // agent id or object id
|
||||
mFromName = fromName;
|
||||
|
||||
int sType = notification["source"].asInteger();
|
||||
mSourceType = (EChatSourceType)sType;
|
||||
|
|
|
|||
|
|
@ -60,6 +60,7 @@ public:
|
|||
static LLNearbyChatToastPanel* createInstance();
|
||||
|
||||
const LLUUID& getFromID() const { return mFromID;}
|
||||
const std::string& getFromName() const { return mFromName; }
|
||||
|
||||
//void addText (const std::string& message , const LLStyle::Params& input_params = LLStyle::Params());
|
||||
//void setMessage (const LLChat& msg);
|
||||
|
|
@ -84,9 +85,11 @@ public:
|
|||
|
||||
virtual void draw();
|
||||
|
||||
//*TODO REMOVE, why a dup of getFromID?
|
||||
const LLUUID& messageID() const { return mFromID;}
|
||||
private:
|
||||
LLUUID mFromID; // agent id or object id
|
||||
std::string mFromName;
|
||||
EChatSourceType mSourceType;
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -241,6 +241,7 @@ LLFloaterCamera::LLFloaterCamera(const LLSD& val)
|
|||
BOOL LLFloaterCamera::postBuild()
|
||||
{
|
||||
setIsChrome(TRUE);
|
||||
setTitleVisible(TRUE); // restore title visibility after chrome applying
|
||||
|
||||
mRotate = getChild<LLJoystickCameraRotate>(ORBIT);
|
||||
mZoom = getChild<LLPanelCameraZoom>(ZOOM);
|
||||
|
|
@ -295,6 +296,31 @@ void LLFloaterCamera::setMode(ECameraControlMode mode)
|
|||
updateState();
|
||||
}
|
||||
|
||||
void LLFloaterCamera::setModeTitle(const ECameraControlMode mode)
|
||||
{
|
||||
std::string title;
|
||||
switch(mode)
|
||||
{
|
||||
case CAMERA_CTRL_MODE_ORBIT:
|
||||
title = getString("orbit_mode_title");
|
||||
break;
|
||||
case CAMERA_CTRL_MODE_PAN:
|
||||
title = getString("pan_mode_title");
|
||||
break;
|
||||
case CAMERA_CTRL_MODE_AVATAR_VIEW:
|
||||
title = getString("avatar_view_mode_title");
|
||||
break;
|
||||
case CAMERA_CTRL_MODE_FREE_CAMERA:
|
||||
title = getString("free_mode_title");
|
||||
break;
|
||||
default:
|
||||
// title should be provided for all modes
|
||||
llassert(false);
|
||||
break;
|
||||
}
|
||||
setTitle(title);
|
||||
}
|
||||
|
||||
void LLFloaterCamera::switchMode(ECameraControlMode mode)
|
||||
{
|
||||
setMode(mode);
|
||||
|
|
@ -355,6 +381,8 @@ void LLFloaterCamera::updateState()
|
|||
childSetVisible(PRESETS, CAMERA_CTRL_MODE_AVATAR_VIEW == mCurrMode);
|
||||
|
||||
updateCameraPresetButtons();
|
||||
setModeTitle(mCurrMode);
|
||||
|
||||
|
||||
//hiding or showing the panel with controls by reshaping the floater
|
||||
bool showControls = CAMERA_CTRL_MODE_FREE_CAMERA != mCurrMode;
|
||||
|
|
|
|||
|
|
@ -100,6 +100,9 @@ private:
|
|||
/* sets a new mode preserving previous one and updates ui*/
|
||||
void setMode(ECameraControlMode mode);
|
||||
|
||||
/** set title appropriate to passed mode */
|
||||
void setModeTitle(const ECameraControlMode mode);
|
||||
|
||||
/* updates the state (UI) according to the current mode */
|
||||
void updateState();
|
||||
|
||||
|
|
|
|||
|
|
@ -2163,6 +2163,15 @@ void LLFolderView::doIdle()
|
|||
LLSelectFirstFilteredItem filter;
|
||||
applyFunctorRecursively(filter);
|
||||
}
|
||||
|
||||
// Open filtered folders for folder views with mAutoSelectOverride=TRUE.
|
||||
// Used by LLPlacesFolderView.
|
||||
if (mAutoSelectOverride && mFilter->getFilterSubString() != "")
|
||||
{
|
||||
LLOpenFilteredFolders filter;
|
||||
applyFunctorRecursively(filter);
|
||||
}
|
||||
|
||||
scrollToShowSelection();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -96,29 +96,8 @@ void LLIMFloaterContainer::addFloater(LLFloater* floaterp,
|
|||
|
||||
LLUUID session_id = floaterp->getKey();
|
||||
|
||||
LLIconCtrl* icon = 0;
|
||||
|
||||
if(gAgent.isInGroup(session_id, TRUE))
|
||||
{
|
||||
LLGroupIconCtrl::Params icon_params = LLUICtrlFactory::instance().getDefaultParams<LLGroupIconCtrl>();
|
||||
icon_params.group_id = session_id;
|
||||
icon = LLUICtrlFactory::instance().createWidget<LLGroupIconCtrl>(icon_params);
|
||||
|
||||
mSessions[session_id] = floaterp;
|
||||
floaterp->mCloseSignal.connect(boost::bind(&LLIMFloaterContainer::onCloseFloater, this, session_id));
|
||||
}
|
||||
else
|
||||
{
|
||||
LLUUID avatar_id = LLIMModel::getInstance()->getOtherParticipantID(session_id);
|
||||
|
||||
LLAvatarIconCtrl::Params icon_params = LLUICtrlFactory::instance().getDefaultParams<LLAvatarIconCtrl>();
|
||||
icon_params.avatar_id = avatar_id;
|
||||
icon = LLUICtrlFactory::instance().createWidget<LLAvatarIconCtrl>(icon_params);
|
||||
|
||||
mSessions[session_id] = floaterp;
|
||||
floaterp->mCloseSignal.connect(boost::bind(&LLIMFloaterContainer::onCloseFloater, this, session_id));
|
||||
}
|
||||
mTabContainer->setTabImage(floaterp, icon);
|
||||
floaterp->mCloseSignal.connect(boost::bind(&LLIMFloaterContainer::onCloseFloater, this, session_id));
|
||||
mSessions[session_id] = floaterp;
|
||||
}
|
||||
|
||||
void LLIMFloaterContainer::onCloseFloater(LLUUID& id)
|
||||
|
|
|
|||
|
|
@ -1473,6 +1473,8 @@ LLCallDialog::LLCallDialog(const LLSD& payload)
|
|||
mLifetime(DEFAULT_LIFETIME)
|
||||
{
|
||||
setAutoFocus(FALSE);
|
||||
// force docked state since this floater doesn't save it between recreations
|
||||
setDocked(true);
|
||||
}
|
||||
|
||||
void LLCallDialog::getAllowedRect(LLRect& rect)
|
||||
|
|
|
|||
|
|
@ -63,6 +63,7 @@ void LLLocationHistory::addItem(const LLLocationHistoryItem& item) {
|
|||
mItems.erase(mItems.begin(), mItems.end()-max_items);
|
||||
}
|
||||
llassert((S32)mItems.size() <= max_items);
|
||||
mChangedSignal(ADD);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -87,9 +88,10 @@ bool LLLocationHistory::touchItem(const LLLocationHistoryItem& item) {
|
|||
void LLLocationHistory::removeItems()
|
||||
{
|
||||
mItems.clear();
|
||||
mChangedSignal(CLEAR);
|
||||
}
|
||||
|
||||
bool LLLocationHistory::getMatchingItems(std::string substring, location_list_t& result) const
|
||||
bool LLLocationHistory::getMatchingItems(const std::string& substring, location_list_t& result) const
|
||||
{
|
||||
// *TODO: an STL algorithm would look nicer
|
||||
result.clear();
|
||||
|
|
@ -160,7 +162,7 @@ void LLLocationHistory::load()
|
|||
return;
|
||||
}
|
||||
|
||||
removeItems();
|
||||
mItems.clear();// need to use a direct call of clear() method to avoid signal invocation
|
||||
|
||||
// add each line in the file to the list
|
||||
std::string line;
|
||||
|
|
@ -179,5 +181,5 @@ void LLLocationHistory::load()
|
|||
|
||||
file.close();
|
||||
|
||||
mLoadedSignal();
|
||||
mChangedSignal(LOAD);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -111,9 +111,16 @@ class LLLocationHistory: public LLSingleton<LLLocationHistory>
|
|||
LOG_CLASS(LLLocationHistory);
|
||||
|
||||
public:
|
||||
enum EChangeType
|
||||
{
|
||||
ADD
|
||||
,CLEAR
|
||||
,LOAD
|
||||
};
|
||||
|
||||
typedef std::vector<LLLocationHistoryItem> location_list_t;
|
||||
typedef boost::function<void()> loaded_callback_t;
|
||||
typedef boost::signals2::signal<void()> loaded_signal_t;
|
||||
typedef boost::function<void(EChangeType event)> history_changed_callback_t;
|
||||
typedef boost::signals2::signal<void(EChangeType event)> history_changed_signal_t;
|
||||
|
||||
LLLocationHistory();
|
||||
|
||||
|
|
@ -122,8 +129,8 @@ public:
|
|||
void removeItems();
|
||||
size_t getItemCount() const { return mItems.size(); }
|
||||
const location_list_t& getItems() const { return mItems; }
|
||||
bool getMatchingItems(std::string substring, location_list_t& result) const;
|
||||
boost::signals2::connection setLoadedCallback(loaded_callback_t cb) { return mLoadedSignal.connect(cb); }
|
||||
bool getMatchingItems(const std::string& substring, location_list_t& result) const;
|
||||
boost::signals2::connection setChangedCallback(history_changed_callback_t cb) { return mChangedSignal.connect(cb); }
|
||||
|
||||
void save() const;
|
||||
void load();
|
||||
|
|
@ -133,7 +140,7 @@ private:
|
|||
|
||||
location_list_t mItems;
|
||||
std::string mFilename; /// File to store the history to.
|
||||
loaded_signal_t mLoadedSignal;
|
||||
history_changed_signal_t mChangedSignal;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -52,7 +52,6 @@
|
|||
#include "llinventoryobserver.h"
|
||||
#include "lllandmarkactions.h"
|
||||
#include "lllandmarklist.h"
|
||||
#include "lllocationhistory.h"
|
||||
#include "llteleporthistory.h"
|
||||
#include "llsidetray.h"
|
||||
#include "llslurl.h"
|
||||
|
|
@ -377,9 +376,10 @@ LLLocationInputCtrl::LLLocationInputCtrl(const LLLocationInputCtrl::Params& p)
|
|||
// - Update the location string on parcel change.
|
||||
mParcelMgrConnection = LLViewerParcelMgr::getInstance()->addAgentParcelChangedCallback(
|
||||
boost::bind(&LLLocationInputCtrl::onAgentParcelChange, this));
|
||||
|
||||
mLocationHistoryConnection = LLLocationHistory::getInstance()->setLoadedCallback(
|
||||
boost::bind(&LLLocationInputCtrl::onLocationHistoryLoaded, this));
|
||||
// LLLocationHistory instance is being created before the location input control, so we have to update initial state of button manually.
|
||||
mButton->setEnabled(LLLocationHistory::instance().getItemCount() > 0);
|
||||
mLocationHistoryConnection = LLLocationHistory::getInstance()->setChangedCallback(
|
||||
boost::bind(&LLLocationInputCtrl::onLocationHistoryChanged, this,_1));
|
||||
|
||||
mRemoveLandmarkObserver = new LLRemoveLandmarkObserver(this);
|
||||
mAddLandmarkObserver = new LLAddLandmarkObserver(this);
|
||||
|
|
@ -620,9 +620,13 @@ void LLLocationInputCtrl::onLandmarkLoaded(LLLandmark* lm)
|
|||
updateAddLandmarkButton();
|
||||
}
|
||||
|
||||
void LLLocationInputCtrl::onLocationHistoryLoaded()
|
||||
void LLLocationInputCtrl::onLocationHistoryChanged(LLLocationHistory::EChangeType event)
|
||||
{
|
||||
rebuildLocationHistory();
|
||||
if(event == LLLocationHistory::LOAD)
|
||||
{
|
||||
rebuildLocationHistory();
|
||||
}
|
||||
mButton->setEnabled(LLLocationHistory::instance().getItemCount() > 0);
|
||||
}
|
||||
|
||||
void LLLocationInputCtrl::onLocationPrearrange(const LLSD& data)
|
||||
|
|
@ -893,7 +897,7 @@ void LLLocationInputCtrl::positionMaturityIcon()
|
|||
mMaturityIcon->setVisible(rect.mRight < mTextEntry->getRect().getWidth() - right_pad);
|
||||
}
|
||||
|
||||
void LLLocationInputCtrl::rebuildLocationHistory(std::string filter)
|
||||
void LLLocationInputCtrl::rebuildLocationHistory(const std::string& filter)
|
||||
{
|
||||
LLLocationHistory::location_list_t filtered_items;
|
||||
const LLLocationHistory::location_list_t* itemsp = NULL;
|
||||
|
|
|
|||
|
|
@ -36,6 +36,7 @@
|
|||
#include "llcombobox.h"
|
||||
#include "lliconctrl.h" // Params
|
||||
#include "lltextbox.h" // Params
|
||||
#include "lllocationhistory.h"
|
||||
|
||||
class LLLandmark;
|
||||
|
||||
|
|
@ -137,7 +138,7 @@ private:
|
|||
void refreshHealth();
|
||||
void positionMaturityIcon();
|
||||
|
||||
void rebuildLocationHistory(std::string filter = "");
|
||||
void rebuildLocationHistory(const std::string& filter = LLStringUtil::null);
|
||||
bool findTeleportItemsByTitle(const LLTeleportHistoryItem& item, const std::string& filter);
|
||||
void setText(const LLStringExplicit& text);
|
||||
void updateAddLandmarkButton();
|
||||
|
|
@ -147,7 +148,7 @@ private:
|
|||
void changeLocationPresentation();
|
||||
|
||||
void onInfoButtonClicked();
|
||||
void onLocationHistoryLoaded();
|
||||
void onLocationHistoryChanged(LLLocationHistory::EChangeType event);
|
||||
void onLocationPrearrange(const LLSD& data);
|
||||
void onTextEditorRightClicked(S32 x, S32 y, MASK mask);
|
||||
void onLandmarkLoaded(LLLandmark* lm);
|
||||
|
|
|
|||
|
|
@ -77,7 +77,6 @@ LLFloaterMove::LLFloaterMove(const LLSD& key)
|
|||
mTurnRightButton(NULL),
|
||||
mMoveUpButton(NULL),
|
||||
mMoveDownButton(NULL),
|
||||
mStopFlyingButton(NULL),
|
||||
mModeActionsPanel(NULL),
|
||||
mCurrentMode(MM_WALK)
|
||||
{
|
||||
|
|
@ -87,6 +86,7 @@ LLFloaterMove::LLFloaterMove(const LLSD& key)
|
|||
BOOL LLFloaterMove::postBuild()
|
||||
{
|
||||
setIsChrome(TRUE);
|
||||
setTitleVisible(TRUE); // restore title visibility after chrome applying
|
||||
|
||||
LLDockableFloater::postBuild();
|
||||
|
||||
|
|
@ -112,8 +112,6 @@ BOOL LLFloaterMove::postBuild()
|
|||
mMoveDownButton->setHeldDownCallback(boost::bind(&LLFloaterMove::moveDown, this));
|
||||
|
||||
|
||||
mStopFlyingButton = getChild<LLButton>("stop_fly_btn");
|
||||
|
||||
mModeActionsPanel = getChild<LLPanel>("panel_modes");
|
||||
|
||||
LLButton* btn;
|
||||
|
|
@ -126,11 +124,6 @@ BOOL LLFloaterMove::postBuild()
|
|||
btn = getChild<LLButton>("mode_fly_btn");
|
||||
btn->setCommitCallback(boost::bind(&LLFloaterMove::onFlyButtonClick, this));
|
||||
|
||||
btn = getChild<LLButton>("stop_fly_btn");
|
||||
btn->setCommitCallback(boost::bind(&LLFloaterMove::onStopFlyingButtonClick, this));
|
||||
|
||||
|
||||
|
||||
showFlyControls(false);
|
||||
|
||||
initModeTooltips();
|
||||
|
|
@ -304,10 +297,6 @@ void LLFloaterMove::onFlyButtonClick()
|
|||
{
|
||||
setMovementMode(MM_FLY);
|
||||
}
|
||||
void LLFloaterMove::onStopFlyingButtonClick()
|
||||
{
|
||||
setMovementMode(gAgent.getAlwaysRun() ? MM_RUN : MM_WALK);
|
||||
}
|
||||
|
||||
void LLFloaterMove::setMovementMode(const EMovementMode mode)
|
||||
{
|
||||
|
|
@ -353,16 +342,13 @@ void LLFloaterMove::updateButtonsWithMovementMode(const EMovementMode newMode)
|
|||
showFlyControls(MM_FLY == newMode);
|
||||
setModeTooltip(newMode);
|
||||
setModeButtonToggleState(newMode);
|
||||
setModeTitle(newMode);
|
||||
}
|
||||
|
||||
void LLFloaterMove::showFlyControls(bool bShow)
|
||||
{
|
||||
mMoveUpButton->setVisible(bShow);
|
||||
mMoveDownButton->setVisible(bShow);
|
||||
|
||||
// *TODO: mantipov: mStopFlyingButton from the FloaterMove is not used now.
|
||||
// It was not completly removed until functionality is reviewed by LL
|
||||
mStopFlyingButton->setVisible(FALSE);
|
||||
}
|
||||
|
||||
void LLFloaterMove::initModeTooltips()
|
||||
|
|
@ -420,11 +406,30 @@ void LLFloaterMove::setModeTooltip(const EMovementMode mode)
|
|||
}
|
||||
}
|
||||
|
||||
void LLFloaterMove::setModeTitle(const EMovementMode mode)
|
||||
{
|
||||
std::string title;
|
||||
switch(mode)
|
||||
{
|
||||
case MM_WALK:
|
||||
title = getString("walk_title");
|
||||
break;
|
||||
case MM_RUN:
|
||||
title = getString("run_title");
|
||||
break;
|
||||
case MM_FLY:
|
||||
title = getString("fly_title");
|
||||
break;
|
||||
default:
|
||||
// title should be provided for all modes
|
||||
llassert(false);
|
||||
break;
|
||||
}
|
||||
setTitle(title);
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates position of the floater to be center aligned with Move button.
|
||||
*
|
||||
* Because Tip floater created as dependent floater this method
|
||||
* must be called before "showQuickTips()" to get Tip floater be positioned at the right side of the floater
|
||||
*/
|
||||
void LLFloaterMove::updatePosition()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -86,13 +86,12 @@ private:
|
|||
void onWalkButtonClick();
|
||||
void onRunButtonClick();
|
||||
void onFlyButtonClick();
|
||||
void onStopFlyingButtonClick();
|
||||
void initMovementMode();
|
||||
void setMovementMode(const EMovementMode mode);
|
||||
void showFlyControls(bool bShow);
|
||||
void initModeTooltips();
|
||||
void setModeTooltip(const EMovementMode mode);
|
||||
void showQuickTips(const EMovementMode mode);
|
||||
void setModeTitle(const EMovementMode mode);
|
||||
void initModeButtonMap();
|
||||
void setModeButtonToggleState(const EMovementMode mode);
|
||||
void updateButtonsWithMovementMode(const EMovementMode newMode);
|
||||
|
|
@ -108,7 +107,6 @@ public:
|
|||
LLButton* mMoveUpButton;
|
||||
LLButton* mMoveDownButton;
|
||||
private:
|
||||
LLButton* mStopFlyingButton;
|
||||
LLPanel* mModeActionsPanel;
|
||||
|
||||
typedef std::map<LLView*, std::string> control_tooltip_map_t;
|
||||
|
|
|
|||
|
|
@ -451,6 +451,12 @@ void LLNavigationBar::onLocationSelection()
|
|||
return;
|
||||
//get selected item from combobox item
|
||||
LLSD value = mCmbLocation->getSelectedValue();
|
||||
if(value.isUndefined() && !mCmbLocation->getTextEntry()->isDirty())
|
||||
{
|
||||
// At this point we know that: there is no selected item in list and text field has NOT been changed
|
||||
// So there is no sense to try to change the location
|
||||
return;
|
||||
}
|
||||
/* since navbar list support autocompletion it contains several types of item: landmark, teleport hystory item,
|
||||
* typed by user slurl or region name. Let's find out which type of item the user has selected
|
||||
* to make decision about adding this location into typed history. see mSaveToLocationHistory
|
||||
|
|
|
|||
|
|
@ -176,10 +176,11 @@ void LLNearbyChatScreenChannel::addNotification(LLSD& notification)
|
|||
if(m_active_toasts.size())
|
||||
{
|
||||
LLUUID fromID = notification["from_id"].asUUID(); // agent id or object id
|
||||
std::string from = notification["from"].asString();
|
||||
LLToast* toast = m_active_toasts[0];
|
||||
LLNearbyChatToastPanel* panel = dynamic_cast<LLNearbyChatToastPanel*>(toast->getPanel());
|
||||
|
||||
if(panel && panel->messageID() == fromID && panel->canAddText())
|
||||
if(panel && panel->messageID() == fromID && panel->getFromName() == from && panel->canAddText())
|
||||
{
|
||||
panel->addMessage(notification);
|
||||
toast->reshapeToPanel();
|
||||
|
|
|
|||
|
|
@ -420,10 +420,8 @@ void LLPanelMainInventory::onFilterEdit(const std::string& search_string )
|
|||
|
||||
gInventory.startBackgroundFetch();
|
||||
|
||||
std::string uppercase_search_string = search_string;
|
||||
LLStringUtil::toUpper(uppercase_search_string);
|
||||
mFilterSubString = uppercase_search_string;
|
||||
if (mActivePanel->getFilterSubString().empty() && uppercase_search_string.empty())
|
||||
mFilterSubString = search_string;
|
||||
if (mActivePanel->getFilterSubString().empty() && mFilterSubString.empty())
|
||||
{
|
||||
// current filter and new filter empty, do nothing
|
||||
return;
|
||||
|
|
@ -437,7 +435,7 @@ void LLPanelMainInventory::onFilterEdit(const std::string& search_string )
|
|||
}
|
||||
|
||||
// set new filter string
|
||||
mActivePanel->setFilterSubString(mFilterSubString);
|
||||
setFilterSubString(mFilterSubString);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -256,7 +256,7 @@ void LLPanelPlaceInfo::reshape(S32 width, S32 height, BOOL called_from_parent)
|
|||
static LLUICachedControl<S32> scrollbar_size ("UIScrollbarSize", 0);
|
||||
|
||||
S32 scroll_height = mScrollContainer->getRect().getHeight();
|
||||
if (mScrollingPanelMinHeight >= scroll_height)
|
||||
if (mScrollingPanelMinHeight > scroll_height)
|
||||
{
|
||||
mScrollingPanel->reshape(mScrollingPanelWidth, mScrollingPanelMinHeight);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@
|
|||
#include "llagent.h" // gAgent
|
||||
#include "lluicolortable.h"
|
||||
#include "llviewercontrol.h" // gSavedSettings
|
||||
#include "llinstantmessage.h" //SYSTEM_FROM
|
||||
|
||||
// LLViewerChat
|
||||
|
||||
|
|
@ -55,7 +56,7 @@ void LLViewerChat::getChatColor(const LLChat& chat, LLColor4& r_color)
|
|||
r_color = LLUIColorTable::instance().getColor("SystemChatColor");
|
||||
break;
|
||||
case CHAT_SOURCE_AGENT:
|
||||
if (chat.mFromID.isNull())
|
||||
if (chat.mFromID.isNull() || SYSTEM_FROM == chat.mFromName)
|
||||
{
|
||||
r_color = LLUIColorTable::instance().getColor("SystemChatColor");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -102,6 +102,13 @@ const F32 UPDATE_THROTTLE_SECONDS = 0.1f;
|
|||
const F32 LOGIN_RETRY_SECONDS = 10.0f;
|
||||
const int MAX_LOGIN_RETRIES = 12;
|
||||
|
||||
// Defines the maximum number of times(in a row) "stateJoiningSession" case for spatial channel is reached in stateMachine()
|
||||
// which is treated as normal. If this number is exceeded we suspect there is a problem with connection
|
||||
// to voice server (EXT-4313). When voice works correctly, there is from 1 to 15 times. 50 was chosen
|
||||
// to make sure we don't make mistake when slight connection problems happen- situation when connection to server is
|
||||
// blocked is VERY rare and it's better to sacrifice response time in this situation for the sake of stability.
|
||||
const int MAX_NORMAL_JOINING_SPATIAL_NUM = 50;
|
||||
|
||||
static void setUUIDFromStringHash(LLUUID &uuid, const std::string &str)
|
||||
{
|
||||
LLMD5 md5_uuid;
|
||||
|
|
@ -1221,6 +1228,7 @@ LLVoiceClient::LLVoiceClient() :
|
|||
mRelogRequested(false),
|
||||
mConnected(false),
|
||||
mPump(NULL),
|
||||
mSpatialJoiningNum(0),
|
||||
|
||||
mTuningMode(false),
|
||||
mTuningEnergy(0.0f),
|
||||
|
|
@ -2223,6 +2231,8 @@ void LLVoiceClient::stateMachine()
|
|||
|
||||
//MARK: stateNoChannel
|
||||
case stateNoChannel:
|
||||
|
||||
mSpatialJoiningNum = 0;
|
||||
// Do this here as well as inside sendPositionalUpdate().
|
||||
// Otherwise, if you log in but don't join a proximal channel (such as when your login location has voice disabled), your friends list won't sync.
|
||||
sendFriendsListUpdates();
|
||||
|
|
@ -2279,6 +2289,23 @@ void LLVoiceClient::stateMachine()
|
|||
|
||||
//MARK: stateJoiningSession
|
||||
case stateJoiningSession: // waiting for session handle
|
||||
|
||||
// If this is true we have problem with connection to voice server (EXT-4313).
|
||||
// See descriptions of mSpatialJoiningNum and MAX_NORMAL_JOINING_SPATIAL_NUM.
|
||||
if(mSpatialJoiningNum == MAX_NORMAL_JOINING_SPATIAL_NUM)
|
||||
{
|
||||
// Notify observers to let them know there is problem with voice
|
||||
notifyStatusObservers(LLVoiceClientStatusObserver::STATUS_VOICE_DISABLED);
|
||||
llwarns << "There seems to be problem with connection to voice server. Disabling voice chat abilities." << llendl;
|
||||
}
|
||||
|
||||
// Increase mSpatialJoiningNum only for spatial sessions- it's normal to reach this case for
|
||||
// example for p2p many times while waiting for response, so it can't be used to detect errors
|
||||
if(mAudioSession && mAudioSession->mIsSpatial)
|
||||
{
|
||||
mSpatialJoiningNum++;
|
||||
}
|
||||
|
||||
// joinedAudioSession() will transition from here to stateSessionJoined.
|
||||
if(!mVoiceEnabled)
|
||||
{
|
||||
|
|
@ -2302,6 +2329,8 @@ void LLVoiceClient::stateMachine()
|
|||
|
||||
//MARK: stateSessionJoined
|
||||
case stateSessionJoined: // session handle received
|
||||
|
||||
mSpatialJoiningNum = 0;
|
||||
// It appears that I need to wait for BOTH the SessionGroup.AddSession response and the SessionStateChangeEvent with state 4
|
||||
// before continuing from this state. They can happen in either order, and if I don't wait for both, things can get stuck.
|
||||
// For now, the SessionGroup.AddSession response handler sets mSessionHandle and the SessionStateChangeEvent handler transitions to stateSessionJoined.
|
||||
|
|
@ -5992,7 +6021,9 @@ bool LLVoiceClient::voiceEnabled()
|
|||
bool LLVoiceClient::voiceWorking()
|
||||
{
|
||||
//Added stateSessionTerminated state to avoid problems with call in parcels with disabled voice (EXT-4758)
|
||||
return (stateLoggedIn <= mState) && (mState <= stateSessionTerminated);
|
||||
// Condition with joining spatial num was added to take into account possible problems with connection to voice
|
||||
// server(EXT-4313). See bug descriptions and comments for MAX_NORMAL_JOINING_SPATIAL_NUM for more info.
|
||||
return (mSpatialJoiningNum < MAX_NORMAL_JOINING_SPATIAL_NUM) && (stateLoggedIn <= mState) && (mState <= stateSessionTerminated);
|
||||
}
|
||||
|
||||
void LLVoiceClient::setLipSyncEnabled(BOOL enabled)
|
||||
|
|
|
|||
|
|
@ -586,6 +586,10 @@ static void updatePosition(void);
|
|||
state mState;
|
||||
bool mSessionTerminateRequested;
|
||||
bool mRelogRequested;
|
||||
// Number of times (in a row) "stateJoiningSession" case for spatial channel is reached in stateMachine().
|
||||
// The larger it is the greater is possibility there is a problem with connection to voice server.
|
||||
// Introduced while fixing EXT-4313.
|
||||
int mSpatialJoiningNum;
|
||||
|
||||
void setState(state inState);
|
||||
state getState(void) { return mState; };
|
||||
|
|
|
|||
|
|
@ -27,6 +27,22 @@
|
|||
name="move_tooltip">
|
||||
Move Camera Up and Down, Left and Right
|
||||
</floater.string>
|
||||
<floater.string
|
||||
name="orbit_mode_title">
|
||||
Orbit
|
||||
</floater.string>
|
||||
<floater.string
|
||||
name="pan_mode_title">
|
||||
Pan
|
||||
</floater.string>
|
||||
<floater.string
|
||||
name="avatar_view_mode_title">
|
||||
Presets
|
||||
</floater.string>
|
||||
<floater.string
|
||||
name="free_mode_title">
|
||||
View Object
|
||||
</floater.string>
|
||||
<panel
|
||||
border="false"
|
||||
height="110"
|
||||
|
|
@ -232,7 +248,7 @@
|
|||
image_selected="PushButton_Selected_Press"
|
||||
name="avatarview_btn"
|
||||
tab_stop="false"
|
||||
tool_tip="See as avatar"
|
||||
tool_tip="Presets"
|
||||
width="25">
|
||||
</button>
|
||||
<button
|
||||
|
|
|
|||
|
|
@ -22,9 +22,7 @@
|
|||
tab_width="64"
|
||||
tab_max_width = "134"
|
||||
tab_height="16"
|
||||
use_custom_icon_ctrl="true"
|
||||
tab_icon_ctrl_pad="2"
|
||||
halign="left"
|
||||
halign="center"
|
||||
use_ellipses="true"
|
||||
top="0"
|
||||
width="390" />
|
||||
|
|
|
|||
|
|
@ -38,6 +38,18 @@
|
|||
name="fly_back_tooltip">
|
||||
Fly Backwards (press Down Arrow or S)
|
||||
</string>
|
||||
<string
|
||||
name="walk_title">
|
||||
Walk
|
||||
</string>
|
||||
<string
|
||||
name="run_title">
|
||||
Run
|
||||
</string>
|
||||
<string
|
||||
name="fly_title">
|
||||
Fly
|
||||
</string>
|
||||
<panel
|
||||
border="false"
|
||||
height="83"
|
||||
|
|
@ -179,16 +191,5 @@
|
|||
tool_tip="Flying mode"
|
||||
top="2"
|
||||
width="31" />
|
||||
<button
|
||||
visible="false"
|
||||
follows="left|bottom"
|
||||
height="20"
|
||||
label="Stop Flying"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="stop_fly_btn"
|
||||
tool_tip="Stop flying"
|
||||
top="2"
|
||||
width="115" />
|
||||
</panel>
|
||||
</floater>
|
||||
|
|
|
|||
|
|
@ -89,13 +89,13 @@
|
|||
<panel
|
||||
bg_alpha_color="DkGray2"
|
||||
follows="left|top|right"
|
||||
height="700"
|
||||
height="630"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
min_height="300"
|
||||
name="scrolling_panel"
|
||||
top="0"
|
||||
width="285">
|
||||
width="310">
|
||||
<texture_picker
|
||||
enabled="false"
|
||||
follows="left|top|right"
|
||||
|
|
|
|||
|
|
@ -222,7 +222,7 @@
|
|||
top="10"
|
||||
width="293"
|
||||
wrap="true">
|
||||
To add friends try [secondlife:///app/search/people global search] or click on a user to add them as a friend.
|
||||
To add friends try [secondlife:///app/search/people global search] or use right click on a user to add them as a friend.
|
||||
If you're looking for people to hang out with, [secondlife:///app/worldmap try the Map].
|
||||
</text>
|
||||
</panel>
|
||||
|
|
|
|||
|
|
@ -174,13 +174,13 @@
|
|||
<panel
|
||||
bg_alpha_color="DkGray2"
|
||||
follows="left|top|right"
|
||||
height="700"
|
||||
height="532"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
min_height="300"
|
||||
name="scrolling_panel"
|
||||
top="0"
|
||||
width="285">
|
||||
width="310">
|
||||
<texture_picker
|
||||
enabled="false"
|
||||
follows="left|top|right"
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
clear_button_visible="false"
|
||||
search_button_visible="true"
|
||||
text_pad_left="6"
|
||||
text_pad_right="6"
|
||||
select_on_focus="true"
|
||||
text_tentative_color="TextFgTentativeColor"
|
||||
background_image="TextField_Search_Off"
|
||||
|
|
@ -21,5 +22,6 @@
|
|||
image_unselected="Icon_Close_Foreground"
|
||||
image_selected="Icon_Close_Press"
|
||||
pad_right="4"
|
||||
pad_left="4"
|
||||
width="16" />
|
||||
</search_editor>
|
||||
|
|
|
|||
Loading…
Reference in New Issue