mirror of
https://github.com/FirestormViewer/phoenix-firestorm.git
synced 2026-08-14 00:48:30 +00:00
Merge branch 'develop' of https://github.com/secondlife/viewer
# Conflicts: # indra/newview/lloutfitslist.cpp # indra/newview/llpaneldirbrowser.cpp # indra/newview/llpanelprofile.cpp # indra/newview/llstatusbar.cpp # indra/newview/llviewermenu.cpp # indra/newview/llviewerwindow.cpp # indra/newview/llvoavatar.cpp # indra/newview/skins/default/xui/da/panel_status_bar.xml # indra/newview/skins/default/xui/de/panel_status_bar.xml # indra/newview/skins/default/xui/en/menu_viewer.xml # indra/newview/skins/default/xui/en/panel_status_bar.xml # indra/newview/skins/default/xui/es/panel_status_bar.xml # indra/newview/skins/default/xui/fr/panel_status_bar.xml # indra/newview/skins/default/xui/it/panel_status_bar.xml # indra/newview/skins/default/xui/ja/panel_status_bar.xml # indra/newview/skins/default/xui/pl/panel_status_bar.xml # indra/newview/skins/default/xui/pt/panel_status_bar.xml # indra/newview/skins/default/xui/ru/panel_status_bar.xml # indra/newview/skins/default/xui/zh/panel_status_bar.xml
This commit is contained in:
@@ -47,6 +47,8 @@ static constexpr F32 AUTO_SCROLL_RATE_ACCEL = 120.f;
|
||||
|
||||
static LLDefaultChildRegistry::Register<LLAccordionCtrl> t2("accordion");
|
||||
|
||||
std::set<LLAccordionCtrl*> LLAccordionCtrl::sPendingArrange;
|
||||
|
||||
LLAccordionCtrl::LLAccordionCtrl(const Params& params):LLPanel(params)
|
||||
, mFitParent(params.fit_parent)
|
||||
, mNoVisibleTabsOrigString(params.no_visible_tabs_text.initial_value().asString())
|
||||
@@ -163,7 +165,11 @@ bool LLAccordionCtrl::postBuild()
|
||||
//---------------------------------------------------------------------------------
|
||||
LLAccordionCtrl::~LLAccordionCtrl()
|
||||
{
|
||||
mAccordionTabs.clear();
|
||||
if (mArrangePending)
|
||||
{
|
||||
sPendingArrange.erase(this);
|
||||
}
|
||||
mAccordionTabs.clear();
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
@@ -184,7 +190,7 @@ void LLAccordionCtrl::reshape(S32 width, S32 height, bool called_from_parent)
|
||||
// necessary text paddings can be set via h_pad and v_pad
|
||||
mNoVisibleTabsHelpText->setRect(getLocalRect());
|
||||
|
||||
arrange();
|
||||
scheduleArrange();
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
@@ -328,7 +334,7 @@ void LLAccordionCtrl::addCollapsibleCtrl(LLAccordionCtrlTab* accordion_tab)
|
||||
mAccordionTabs.push_back(accordion_tab);
|
||||
|
||||
accordion_tab->setDropDownStateChangedCallback( boost::bind(&LLAccordionCtrl::onCollapseCtrlCloseOpen, this, (S16)(mAccordionTabs.size() - 1)) );
|
||||
arrange();
|
||||
scheduleArrange();
|
||||
}
|
||||
|
||||
void LLAccordionCtrl::removeCollapsibleCtrl(LLAccordionCtrlTab* accordion_tab)
|
||||
@@ -685,8 +691,9 @@ S32 LLAccordionCtrl::notifyParent(const LLSD& info)
|
||||
std::string str_action = info["action"];
|
||||
if (str_action == "size_changes")
|
||||
{
|
||||
//
|
||||
arrange();
|
||||
// Multiple children can request an arrange,
|
||||
// but only need to do it once so schedule it for later.
|
||||
scheduleArrange();
|
||||
return 1;
|
||||
}
|
||||
if (str_action == "select_next")
|
||||
@@ -928,3 +935,25 @@ void LLAccordionCtrl::collapseAllTabs()
|
||||
arrange();
|
||||
}
|
||||
}
|
||||
|
||||
void LLAccordionCtrl::scheduleArrange()
|
||||
{
|
||||
if (!mArrangePending)
|
||||
{
|
||||
mArrangePending = true;
|
||||
sPendingArrange.insert(this);
|
||||
}
|
||||
}
|
||||
|
||||
void LLAccordionCtrl::updateClass()
|
||||
{
|
||||
for (LLAccordionCtrl* inst : sPendingArrange)
|
||||
{
|
||||
if (inst)
|
||||
{
|
||||
inst->mArrangePending = false;
|
||||
inst->arrange();
|
||||
}
|
||||
}
|
||||
sPendingArrange.clear();
|
||||
}
|
||||
|
||||
@@ -142,6 +142,9 @@ public:
|
||||
|
||||
void setSkipScrollToChild(bool skip) { mSkipScrollToChild = skip; }
|
||||
|
||||
void scheduleArrange();
|
||||
static void updateClass();
|
||||
|
||||
private:
|
||||
void initNoTabsWidget(const LLTextBox::Params& tb_params);
|
||||
void updateNoTabsHelpTextVisibility();
|
||||
@@ -188,12 +191,15 @@ private:
|
||||
LLTextBox* mNoVisibleTabsHelpText = nullptr;
|
||||
|
||||
bool mSkipScrollToChild = false;
|
||||
bool mArrangePending = false;
|
||||
|
||||
std::string mNoMatchedTabsOrigString;
|
||||
std::string mNoVisibleTabsOrigString;
|
||||
|
||||
LLAccordionCtrlTab* mSelectedTab = nullptr;
|
||||
const LLTabComparator* mTabComparator = nullptr;
|
||||
|
||||
static std::set<LLAccordionCtrl*> sPendingArrange;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -553,6 +553,7 @@ bool LLFlatListView::postBuild()
|
||||
|
||||
void LLFlatListView::rearrangeItems()
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED;
|
||||
static LLUICachedControl<S32> scrollbar_size ("UIScrollbarSize", 0);
|
||||
|
||||
setNoItemsCommentVisible(0==size());
|
||||
@@ -1154,6 +1155,7 @@ bool LLFlatListView::removeItemPair(item_pair_t* item_pair, bool rearrange)
|
||||
|
||||
void LLFlatListView::notifyParentItemsRectChanged()
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED;
|
||||
S32 comment_height = 0;
|
||||
|
||||
// take into account comment text height if exists
|
||||
@@ -1425,7 +1427,7 @@ bool LLFlatListViewEx::updateItemVisibility(LLPanel* item, const LLSD &action)
|
||||
return false;
|
||||
}
|
||||
|
||||
void LLFlatListViewEx::filterItems(bool re_sort, bool notify_parent)
|
||||
bool LLFlatListViewEx::filterItems(bool re_sort, bool notify_parent)
|
||||
{
|
||||
std::string cur_filter = mFilterSubString;
|
||||
LLStringUtil::toUpper(cur_filter);
|
||||
@@ -1450,7 +1452,9 @@ void LLFlatListViewEx::filterItems(bool re_sort, bool notify_parent)
|
||||
{
|
||||
rearrangeItems();
|
||||
notifyParentItemsRectChanged();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool LLFlatListViewEx::hasMatchedItems()
|
||||
|
||||
@@ -513,8 +513,9 @@ public:
|
||||
/**
|
||||
* Filters the list, rearranges and notifies parent about shape changes.
|
||||
* Derived classes may want to overload rearrangeItems() to exclude repeated separators after filtration.
|
||||
* Returns true in case of changes
|
||||
*/
|
||||
void filterItems(bool re_sort, bool notify_parent);
|
||||
bool filterItems(bool re_sort, bool notify_parent);
|
||||
|
||||
/**
|
||||
* Returns true if last call of filterItems() found at least one matching item
|
||||
|
||||
@@ -1268,9 +1268,6 @@ bool LLWindowMacOSX::setCursorPosition(const LLCoordWindow position)
|
||||
// trigger mouse move callback
|
||||
LLCoordGL gl_pos;
|
||||
convertCoords(position, &gl_pos);
|
||||
float scale = getSystemUISize();
|
||||
gl_pos.mX *= scale;
|
||||
gl_pos.mY *= scale;
|
||||
mCallbacks->handleMouseMove(this, gl_pos, (MASK)0);
|
||||
|
||||
return result;
|
||||
|
||||
@@ -2219,6 +2219,20 @@
|
||||
<key>Value</key>
|
||||
<string>http://lecs-viewer-web-components.s3.amazonaws.com/v3.0/[GRID_LOWERCASE]/vawp/index.html</string>
|
||||
</map>
|
||||
<!--AvatarBakedTextureUploadTimeout is in use by QA-->
|
||||
<key>AvatarBakedTextureUploadTimeout</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Specifies the maximum time in seconds to wait before sending your baked textures for avatar appearance. Set to 0 to disable and wait until all baked textures are at highest resolution.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>U32</string>
|
||||
<key>Value</key>
|
||||
<integer>70</integer>
|
||||
<key>Backup</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>AvatarRotateThresholdSlow</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
@@ -2241,20 +2255,6 @@
|
||||
<key>Value</key>
|
||||
<integer>2</integer>
|
||||
</map>
|
||||
<!--AvatarBakedTextureUploadTimeout is in use by QA-->
|
||||
<key>AvatarBakedTextureUploadTimeout</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Specifies the maximum time in seconds to wait before sending your baked textures for avatar appearance. Set to 0 to disable and wait until all baked textures are at highest resolution.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>U32</string>
|
||||
<key>Value</key>
|
||||
<integer>70</integer>
|
||||
<key>Backup</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>AvatarPhysics</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
@@ -12585,6 +12585,17 @@ Change of this parameter will affect the layout of buttons in notification toast
|
||||
<key>Value</key>
|
||||
<integer>16</integer>
|
||||
</map>
|
||||
<key>RenderReflectionProbeShowTransparent</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Show reflection probes in the transparency debug view</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>RenderReflectionProbeVolumes</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
||||
@@ -226,8 +226,10 @@
|
||||
|
||||
- (void) setBugsplatValue:(nullable NSString *)value forAttribute:(NSString *)attribute
|
||||
{
|
||||
#if defined(LL_BUGSPLAT)
|
||||
//[[BugSplat shared] setValue:@"Value of not so plain <value> Attribute" forAttribute:@"NotSoPlainAttribute"];
|
||||
[[BugSplat shared] setValue:value forAttribute:attribute];
|
||||
#endif // LL_BUGSPLAT
|
||||
}
|
||||
|
||||
#if defined(LL_BUGSPLAT)
|
||||
|
||||
@@ -42,6 +42,9 @@
|
||||
std::unique_ptr<std::vector<std::string>> doLoadDialog(const std::vector<std::string>* allowed_types,
|
||||
unsigned int flags);
|
||||
|
||||
// doLoadDialogModeless if window does not exists creates a modeless
|
||||
// window, if it does exist, creates a 'sheet' that does not block
|
||||
// thead but blocks window interractions
|
||||
void doLoadDialogModeless(const std::vector<std::string>* allowed_types,
|
||||
unsigned int flags,
|
||||
void (*callback)(bool, std::vector<std::string>&, void*),
|
||||
|
||||
@@ -114,38 +114,73 @@ void doLoadDialogModeless(const std::vector<std::string>* allowed_types,
|
||||
|
||||
@autoreleasepool
|
||||
{
|
||||
// Note: might need to return and save this panel
|
||||
// so that it does not close immediately
|
||||
NSOpenPanel *panel = init_panel(allowed_types,flags);
|
||||
NSWindow *mainWindow = [NSApp mainWindow];
|
||||
|
||||
[panel beginWithCompletionHandler:^(NSModalResponse result)
|
||||
if (mainWindow)
|
||||
{
|
||||
std::vector<std::string> outfiles;
|
||||
if (result == NSModalResponseOK)
|
||||
[panel beginSheetModalForWindow:mainWindow
|
||||
completionHandler:^(NSModalResponse result)
|
||||
{
|
||||
NSArray *filesToOpen = [panel URLs];
|
||||
int i, count = [filesToOpen count];
|
||||
|
||||
if (count > 0)
|
||||
std::vector<std::string> outfiles;
|
||||
if (result == NSModalResponseOK)
|
||||
{
|
||||
NSArray *filesToOpen = [panel URLs];
|
||||
int i, count = [filesToOpen count];
|
||||
|
||||
for (i=0; i<count; i++) {
|
||||
NSString *aFile = [[filesToOpen objectAtIndex:i] path];
|
||||
std::string *afilestr = new std::string([aFile UTF8String]);
|
||||
outfiles.push_back(*afilestr);
|
||||
if (count > 0)
|
||||
{
|
||||
|
||||
for (i=0; i<count; i++) {
|
||||
NSString *aFile = [[filesToOpen objectAtIndex:i] path];
|
||||
std::string *afilestr = new std::string([aFile UTF8String]);
|
||||
outfiles.push_back(*afilestr);
|
||||
}
|
||||
callback(true, outfiles, userdata);
|
||||
}
|
||||
else // no valid result
|
||||
{
|
||||
callback(false, outfiles, userdata);
|
||||
}
|
||||
callback(true, outfiles, userdata);
|
||||
}
|
||||
else // no valid result
|
||||
else // cancel
|
||||
{
|
||||
callback(false, outfiles, userdata);
|
||||
}
|
||||
}
|
||||
else // cancel
|
||||
}];
|
||||
}
|
||||
else
|
||||
{
|
||||
//present as modeless window
|
||||
[panel beginWithCompletionHandler:^(NSModalResponse result)
|
||||
{
|
||||
callback(false, outfiles, userdata);
|
||||
}
|
||||
}];
|
||||
std::vector<std::string> outfiles;
|
||||
if (result == NSModalResponseOK)
|
||||
{
|
||||
NSArray *filesToOpen = [panel URLs];
|
||||
int i, count = [filesToOpen count];
|
||||
|
||||
if (count > 0)
|
||||
{
|
||||
|
||||
for (i=0; i<count; i++) {
|
||||
NSString *aFile = [[filesToOpen objectAtIndex:i] path];
|
||||
std::string *afilestr = new std::string([aFile UTF8String]);
|
||||
outfiles.push_back(*afilestr);
|
||||
}
|
||||
callback(true, outfiles, userdata);
|
||||
}
|
||||
else // no valid result
|
||||
{
|
||||
callback(false, outfiles, userdata);
|
||||
}
|
||||
}
|
||||
else // cancel
|
||||
{
|
||||
callback(false, outfiles, userdata);
|
||||
}
|
||||
}];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -970,7 +970,7 @@ class LLChatCommandHandler : public LLCommandHandler
|
||||
{
|
||||
public:
|
||||
// not allowed from outside the app
|
||||
LLChatCommandHandler() : LLCommandHandler("chat", UNTRUSTED_BLOCK) { }
|
||||
LLChatCommandHandler() : LLCommandHandler("chat", UNTRUSTED_CLICK_ONLY) { }
|
||||
|
||||
// Your code here
|
||||
bool handle(const LLSD& tokens,
|
||||
|
||||
@@ -51,6 +51,7 @@ LLInventoryItemsList::LLInventoryItemsList(const LLInventoryItemsList::Params& p
|
||||
: LLFlatListViewEx(p)
|
||||
, mRefreshState(REFRESH_COMPLETE)
|
||||
, mForceRefresh(false)
|
||||
, mNeedsArrange(true)
|
||||
{
|
||||
// TODO: mCommitOnSelectionChange is set to "false" in LLFlatListView
|
||||
// but reset to true in all derived classes. This settings might need to
|
||||
@@ -144,6 +145,7 @@ void LLInventoryItemsList::updateSelection()
|
||||
bool LLInventoryItemsList::doIdle()
|
||||
{
|
||||
if (mRefreshState == REFRESH_COMPLETE) return true; // done
|
||||
LL_PROFILE_ZONE_SCOPED;
|
||||
|
||||
if (isInVisibleChain() || mForceRefresh || !getFilterSubString().empty())
|
||||
{
|
||||
@@ -165,7 +167,7 @@ void LLInventoryItemsList::idle(void* user_data)
|
||||
|
||||
using namespace std::chrono;
|
||||
auto start = steady_clock::now();
|
||||
const milliseconds time_limit = milliseconds(3);
|
||||
const milliseconds time_limit = milliseconds(2);
|
||||
const auto end_time = start + time_limit;
|
||||
S32 max_update_count = 50;
|
||||
|
||||
@@ -218,8 +220,6 @@ void LLInventoryItemsList::refresh()
|
||||
mRefreshState = REFRESH_LIST_SORT;
|
||||
}
|
||||
|
||||
rearrangeItems();
|
||||
notifyParentItemsRectChanged();
|
||||
break;
|
||||
}
|
||||
case REFRESH_LIST_ERASE:
|
||||
@@ -229,10 +229,21 @@ void LLInventoryItemsList::refresh()
|
||||
for (; mRemovedItems.end() != it; ++it)
|
||||
{
|
||||
// don't filter items right away
|
||||
removeItemByUUID(*it, false);
|
||||
removeItemByUUID(*it, false /*don't rearrange*/);
|
||||
}
|
||||
mRemovedItems.clear();
|
||||
mRefreshState = REFRESH_LIST_SORT; // fix visibility and arrange
|
||||
mRefreshState = REFRESH_LIST_SORT; // fix visibility
|
||||
|
||||
// Assume that visible items were removed.
|
||||
if (getVisible())
|
||||
{
|
||||
rearrangeItems();
|
||||
notifyParentItemsRectChanged();
|
||||
}
|
||||
else
|
||||
{
|
||||
mNeedsArrange = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case REFRESH_LIST_APPEND:
|
||||
@@ -275,18 +286,25 @@ void LLInventoryItemsList::refresh()
|
||||
LLSD action;
|
||||
action.with("match_filter", cur_filter);
|
||||
|
||||
bool new_visible_items = false;
|
||||
pairs_const_iterator_t pair_it = panel_list.begin();
|
||||
for (; pair_it != panel_list.end(); ++pair_it)
|
||||
{
|
||||
item_pair_t* item_pair = *pair_it;
|
||||
if (item_pair->first->getParent() != NULL)
|
||||
{
|
||||
updateItemVisibility(item_pair->first, action);
|
||||
new_visible_items |= updateItemVisibility(item_pair->first, action);
|
||||
}
|
||||
}
|
||||
|
||||
rearrangeItems();
|
||||
notifyParentItemsRectChanged();
|
||||
mNeedsArrange |= new_visible_items;
|
||||
if (mNeedsArrange && getVisible())
|
||||
{
|
||||
// show changes now
|
||||
rearrangeItems();
|
||||
notifyParentItemsRectChanged();
|
||||
mNeedsArrange = false;
|
||||
}
|
||||
|
||||
if (mAddedItems.size() > 0)
|
||||
{
|
||||
@@ -304,16 +322,33 @@ void LLInventoryItemsList::refresh()
|
||||
{
|
||||
LL_PROFILE_ZONE_NAMED("items_refresh_sort");
|
||||
// Filter, sort, rearrange and notify parent about shape changes
|
||||
filterItems(true, true);
|
||||
if (filterItems(true, true))
|
||||
{
|
||||
mNeedsArrange = false; // just rearranged
|
||||
}
|
||||
|
||||
if (mAddedItems.size() == 0)
|
||||
{
|
||||
if (mNeedsArrange)
|
||||
{
|
||||
// Done, last chance to rearrange
|
||||
rearrangeItems();
|
||||
notifyParentItemsRectChanged();
|
||||
mNeedsArrange = false;
|
||||
}
|
||||
// After list building completed, select items that had been requested to select before list was build
|
||||
updateSelection();
|
||||
mRefreshState = REFRESH_COMPLETE;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (mNeedsArrange && getVisible())
|
||||
{
|
||||
// show changes now
|
||||
rearrangeItems();
|
||||
notifyParentItemsRectChanged();
|
||||
mNeedsArrange = false;
|
||||
}
|
||||
mRefreshState = REFRESH_LIST_APPEND;
|
||||
}
|
||||
break;
|
||||
@@ -347,6 +382,7 @@ void LLInventoryItemsList::computeDifference(
|
||||
|
||||
LLPanel* LLInventoryItemsList::createNewItem(LLViewerInventoryItem* item)
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED;
|
||||
if (!item)
|
||||
{
|
||||
LL_WARNS() << "No inventory item. Couldn't create flat list item." << LL_ENDL;
|
||||
|
||||
@@ -117,6 +117,7 @@ protected:
|
||||
};
|
||||
|
||||
ERefreshStates mRefreshState;
|
||||
bool mNeedsArrange = true;
|
||||
|
||||
private:
|
||||
uuid_vec_t mIDs; // IDs of items that were added in refreshList().
|
||||
|
||||
@@ -74,6 +74,7 @@ LLPanelInventoryListItemBase::Params::Params()
|
||||
|
||||
LLPanelInventoryListItemBase* LLPanelInventoryListItemBase::create(LLViewerInventoryItem* item)
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_UI;
|
||||
LLPanelInventoryListItemBase* list_item = NULL;
|
||||
if (item)
|
||||
{
|
||||
@@ -194,6 +195,7 @@ void LLPanelInventoryListItemBase::setShowWidget(LLUICtrl* ctrl, bool show)
|
||||
|
||||
bool LLPanelInventoryListItemBase::postBuild()
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_UI;
|
||||
LLViewerInventoryItem* inv_item = getItem();
|
||||
if (inv_item)
|
||||
{
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
#include "rlvactions.h"
|
||||
#include "rlvlocks.h"
|
||||
|
||||
static bool is_tab_header_clicked(LLAccordionCtrlTab* tab, S32 y);
|
||||
static bool is_tab_header_clicked(LLOutfitAccordionCtrlTab* tab, S32 y);
|
||||
|
||||
static const LLOutfitTabNameComparator OUTFIT_TAB_NAME_COMPARATOR;
|
||||
static const LLOutfitTabFavComparator OUTFIT_TAB_FAV_COMPARATOR;
|
||||
@@ -255,7 +255,10 @@ void LLOutfitsList::updateAddedCategory(LLUUID cat_id)
|
||||
list->setCommitCallback(boost::bind(&LLOutfitsList::onListSelectionChange, this, _1));
|
||||
|
||||
// Setting list refresh callback to apply filter on list change.
|
||||
list->setRefreshCompleteCallback(boost::bind(&LLOutfitsList::onRefreshComplete, this, _1));
|
||||
list->setRefreshCompleteCallback([this, tab](LLUICtrl* ctrl, const LLSD& sd)
|
||||
{
|
||||
onRefreshComplete(ctrl, tab);
|
||||
});
|
||||
|
||||
list->setRightMouseDownCallback(boost::bind(&LLOutfitsList::onWearableItemsListRightClick, this, _1, _2, _3));
|
||||
|
||||
@@ -303,7 +306,7 @@ void LLOutfitsList::updateRemovedCategory(LLUUID cat_id)
|
||||
if (outfits_iter != mOutfitsMap.end())
|
||||
{
|
||||
const LLUUID& outfit_id = outfits_iter->first;
|
||||
LLAccordionCtrlTab* tab = outfits_iter->second;
|
||||
LLOutfitAccordionCtrlTab* tab = outfits_iter->second;
|
||||
|
||||
// An outfit is removed from the list. Do the following:
|
||||
// 1. Remove outfit category from observer to stop monitoring its changes.
|
||||
@@ -384,11 +387,11 @@ void LLOutfitsList::onHighlightBaseOutfit(LLUUID base_id, LLUUID prev_id)
|
||||
{
|
||||
if (mOutfitsMap[prev_id])
|
||||
{
|
||||
((LLOutfitAccordionCtrlTab*)mOutfitsMap[prev_id])->setOutfitSelected(false);
|
||||
mOutfitsMap[prev_id]->setOutfitSelected(false);
|
||||
}
|
||||
if (mOutfitsMap[base_id])
|
||||
{
|
||||
((LLOutfitAccordionCtrlTab*)mOutfitsMap[base_id])->setOutfitSelected(true);
|
||||
mOutfitsMap[base_id]->setOutfitSelected(true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -436,7 +439,7 @@ void LLOutfitsList::onSetSelectedOutfitByUUID(const LLUUID& outfit_uuid)
|
||||
{
|
||||
if (outfit_uuid == iter->first)
|
||||
{
|
||||
LLAccordionCtrlTab* tab = iter->second;
|
||||
LLOutfitAccordionCtrlTab* tab = iter->second;
|
||||
if (!tab) continue;
|
||||
|
||||
LLWearableItemsList* list = dynamic_cast<LLWearableItemsList*>(tab->getAccordionView());
|
||||
@@ -530,7 +533,7 @@ void LLOutfitsList::onCollapseAllFolders()
|
||||
iter != mOutfitsMap.end();
|
||||
++iter)
|
||||
{
|
||||
LLAccordionCtrlTab* tab = iter->second;
|
||||
LLOutfitAccordionCtrlTab* tab = iter->second;
|
||||
if(tab && tab->isExpanded())
|
||||
{
|
||||
tab->changeOpenClose(true);
|
||||
@@ -544,7 +547,7 @@ void LLOutfitsList::onExpandAllFolders()
|
||||
iter != mOutfitsMap.end();
|
||||
++iter)
|
||||
{
|
||||
LLAccordionCtrlTab* tab = iter->second;
|
||||
LLOutfitAccordionCtrlTab* tab = iter->second;
|
||||
if(tab && !tab->isExpanded())
|
||||
{
|
||||
tab->changeOpenClose(false);
|
||||
@@ -567,7 +570,7 @@ void LLOutfitsList::updateChangedCategoryName(LLViewerInventoryCategory *cat, st
|
||||
if (outfits_iter != mOutfitsMap.end())
|
||||
{
|
||||
// Update tab name with the new category name.
|
||||
LLOutfitAccordionCtrlTab* tab = (LLOutfitAccordionCtrlTab*) outfits_iter->second;
|
||||
LLOutfitAccordionCtrlTab* tab = outfits_iter->second;
|
||||
if (tab)
|
||||
{
|
||||
tab->setName(name);
|
||||
@@ -620,7 +623,7 @@ void LLOutfitsList::deselectOutfit(const LLUUID& category_id)
|
||||
LLOutfitListBase::deselectOutfit(category_id);
|
||||
}
|
||||
|
||||
void LLOutfitsList::restoreOutfitSelection(LLAccordionCtrlTab* tab, const LLUUID& category_id)
|
||||
void LLOutfitsList::restoreOutfitSelection(LLOutfitAccordionCtrlTab* tab, const LLUUID& category_id)
|
||||
{
|
||||
// Try restoring outfit selection after filtering.
|
||||
if (mAccordion->getSelectedTab() == tab)
|
||||
@@ -629,23 +632,21 @@ void LLOutfitsList::restoreOutfitSelection(LLAccordionCtrlTab* tab, const LLUUID
|
||||
}
|
||||
}
|
||||
|
||||
void LLOutfitsList::onRefreshComplete(LLUICtrl* ctrl)
|
||||
void LLOutfitsList::onRefreshComplete(LLUICtrl* ctrl, LLOutfitAccordionCtrlTab* tab)
|
||||
{
|
||||
if (!ctrl || getFilterSubString().empty())
|
||||
return;
|
||||
|
||||
for (outfits_map_t::iterator
|
||||
iter = mOutfitsMap.begin(),
|
||||
iter_end = mOutfitsMap.end();
|
||||
iter != iter_end; ++iter)
|
||||
LLWearableItemsList* list = dynamic_cast<LLWearableItemsList*>(tab->getAccordionView());
|
||||
if (list != ctrl)
|
||||
{
|
||||
LLAccordionCtrlTab* tab = iter->second;
|
||||
if (!tab) continue;
|
||||
|
||||
LLWearableItemsList* list = dynamic_cast<LLWearableItemsList*>(tab->getAccordionView());
|
||||
if (list != ctrl) continue;
|
||||
|
||||
applyFilterToTab(iter->first, tab, getFilterSubString());
|
||||
llassert(false);
|
||||
LL_WARNS() << "LLOutfitsList::onRefreshComplete: ctrl does not match tab's list!" << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
if (tab->getFilterGeneration() != getFilterGeneration())
|
||||
{
|
||||
applyFilterToTab(tab->getFolderID(), tab, getFilterSubString());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -658,7 +659,7 @@ void LLOutfitsList::onFilterSubStringChanged(const std::string& new_string, cons
|
||||
while (iter != iter_end)
|
||||
{
|
||||
const LLUUID& category_id = iter->first;
|
||||
LLAccordionCtrlTab* tab = iter++->second;
|
||||
LLOutfitAccordionCtrlTab* tab = iter++->second;
|
||||
if (!tab) continue;
|
||||
|
||||
LLWearableItemsList* list = dynamic_cast<LLWearableItemsList*>(tab->getAccordionView());
|
||||
@@ -697,9 +698,10 @@ void LLOutfitsList::onFilterSubStringChanged(const std::string& new_string, cons
|
||||
|
||||
void LLOutfitsList::applyFilterToTab(
|
||||
const LLUUID& category_id,
|
||||
LLAccordionCtrlTab* tab,
|
||||
LLOutfitAccordionCtrlTab* tab,
|
||||
const std::string& filter_substring)
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED;
|
||||
if (!tab) return;
|
||||
LLWearableItemsList* list = dynamic_cast<LLWearableItemsList*>(tab->getAccordionView());
|
||||
if (!list) return;
|
||||
@@ -711,6 +713,7 @@ void LLOutfitsList::applyFilterToTab(
|
||||
LLStringUtil::toUpper(cur_filter);
|
||||
|
||||
tab->setTitle(tab->getTitle(), cur_filter);
|
||||
tab->setFilterGeneration(getFilterGeneration());
|
||||
|
||||
if (std::string::npos == title.find(cur_filter))
|
||||
{
|
||||
@@ -834,7 +837,7 @@ void LLOutfitsList::onCOFChanged()
|
||||
outfits_map_t::iterator map_iter = mOutfitsMap.begin(), map_end = mOutfitsMap.end();
|
||||
while (map_iter != map_end)
|
||||
{
|
||||
LLAccordionCtrlTab* tab = (map_iter++)->second;
|
||||
LLOutfitAccordionCtrlTab* tab = (map_iter++)->second;
|
||||
if (!tab) continue;
|
||||
|
||||
LLWearableItemsList* list = dynamic_cast<LLWearableItemsList*>(tab->getAccordionView());
|
||||
@@ -865,7 +868,7 @@ void LLOutfitsList::sortOutfits()
|
||||
|
||||
void LLOutfitsList::onOutfitRightClick(LLUICtrl* ctrl, S32 x, S32 y, const LLUUID& cat_id)
|
||||
{
|
||||
LLAccordionCtrlTab* tab = dynamic_cast<LLAccordionCtrlTab*>(ctrl);
|
||||
LLOutfitAccordionCtrlTab* tab = dynamic_cast<LLOutfitAccordionCtrlTab*>(ctrl);
|
||||
if (mOutfitMenu && is_tab_header_clicked(tab, y) && cat_id.notNull())
|
||||
{
|
||||
// Focus tab header to trigger tab selection change.
|
||||
@@ -888,7 +891,7 @@ void LLOutfitsList::handleInvFavColorChange()
|
||||
++iter)
|
||||
{
|
||||
if (!iter->second) continue;
|
||||
LLOutfitAccordionCtrlTab* tab = (LLOutfitAccordionCtrlTab*)iter->second;
|
||||
LLOutfitAccordionCtrlTab* tab = iter->second;
|
||||
|
||||
// refresh font color
|
||||
tab->setFavorite(tab->getFavorite());
|
||||
@@ -915,7 +918,7 @@ void LLOutfitsList::onChangeSortOrder(const LLSD& userdata)
|
||||
{
|
||||
for (outfits_map_t::value_type& outfit : mOutfitsMap)
|
||||
{
|
||||
LLAccordionCtrlTab* tab = outfit.second;
|
||||
LLOutfitAccordionCtrlTab* tab = outfit.second;
|
||||
const LLUUID& category_id = outfit.first;
|
||||
if (!tab) continue;
|
||||
|
||||
@@ -956,7 +959,7 @@ LLOutfitListGearMenuBase* LLOutfitsList::createGearMenu()
|
||||
}
|
||||
|
||||
|
||||
bool is_tab_header_clicked(LLAccordionCtrlTab* tab, S32 y)
|
||||
bool is_tab_header_clicked(LLOutfitAccordionCtrlTab* tab, S32 y)
|
||||
{
|
||||
if(!tab || !tab->getHeaderVisible()) return false;
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
#include "lltoggleablemenu.h"
|
||||
#include "llviewermenu.h"
|
||||
|
||||
class LLAccordionCtrlTab;
|
||||
class LLOutfitAccordionCtrlTab;
|
||||
class LLInventoryCategoriesObserver;
|
||||
class LLOutfitListGearMenuBase;
|
||||
class LLOutfitListSortMenuBase;
|
||||
@@ -46,7 +46,6 @@ class LLWearableItemsList;
|
||||
class LLListContextMenu;
|
||||
class LLTextBox;
|
||||
|
||||
|
||||
/**
|
||||
* @class LLOutfitTabNameComparator
|
||||
*
|
||||
@@ -273,7 +272,10 @@ public:
|
||||
|
||||
void setFavorite(bool is_favorite);
|
||||
bool getFavorite() const { return mIsFavorite; }
|
||||
LLUUID getFolderID() const { return mFolderID; }
|
||||
void setOutfitSelected(bool val);
|
||||
U32 getFilterGeneration() const { return mFilterGeneration; }
|
||||
void setFilterGeneration(U32 generation) { mFilterGeneration = generation; }
|
||||
|
||||
static LLUIImage* sFavoriteIcon;
|
||||
static LLUIColor sFgColor;
|
||||
@@ -291,6 +293,7 @@ public:
|
||||
LLUUID mFolderID;
|
||||
bool mIsFavorite = false;
|
||||
bool mIsSelected = false;
|
||||
U32 mFilterGeneration = 0;
|
||||
};
|
||||
/**
|
||||
* @class LLOutfitsList
|
||||
@@ -394,20 +397,20 @@ private:
|
||||
*
|
||||
* A tab may be hidden if it doesn't match current filter.
|
||||
*/
|
||||
void restoreOutfitSelection(LLAccordionCtrlTab* tab, const LLUUID& category_id);
|
||||
void restoreOutfitSelection(LLOutfitAccordionCtrlTab* tab, const LLUUID& category_id);
|
||||
|
||||
/**
|
||||
* Called upon list refresh event to update tab visibility depending on
|
||||
* the results of applying filter to the title and list items of the tab.
|
||||
*/
|
||||
void onRefreshComplete(LLUICtrl* ctrl);
|
||||
void onRefreshComplete(LLUICtrl* ctrl, LLOutfitAccordionCtrlTab* tab);
|
||||
|
||||
/**
|
||||
* Applies filter to the given tab
|
||||
*
|
||||
* @see applyFilter()
|
||||
*/
|
||||
void applyFilterToTab(const LLUUID& category_id, LLAccordionCtrlTab* tab, const std::string& filter_substring);
|
||||
void applyFilterToTab(const LLUUID& category_id, LLOutfitAccordionCtrlTab* tab, const std::string& filter_substring);
|
||||
|
||||
/**
|
||||
* Returns true if all selected items can be worn.
|
||||
@@ -437,7 +440,7 @@ private:
|
||||
typedef wearables_lists_map_t::value_type wearables_lists_map_value_t;
|
||||
wearables_lists_map_t mSelectedListsMap;
|
||||
|
||||
typedef std::map<LLUUID, LLAccordionCtrlTab*> outfits_map_t;
|
||||
typedef std::map<LLUUID, LLOutfitAccordionCtrlTab*> outfits_map_t;
|
||||
typedef outfits_map_t::value_type outfits_map_value_t;
|
||||
outfits_map_t mOutfitsMap;
|
||||
|
||||
|
||||
@@ -44,6 +44,7 @@ void LLPanelAppearanceTab::setFilterSubString(const std::string& new_string)
|
||||
{
|
||||
std::string old_string = mFilterSubString;
|
||||
mFilterSubString = new_string;
|
||||
mFilterGeneration++;
|
||||
onFilterSubStringChanged(mFilterSubString, old_string);
|
||||
}
|
||||
|
||||
@@ -56,6 +57,7 @@ void LLPanelAppearanceTab::checkFilterSubString()
|
||||
{
|
||||
std::string old_string = mFilterSubString;
|
||||
mFilterSubString = sRecentFilterSubString;
|
||||
mFilterGeneration++;
|
||||
onFilterSubStringChanged(mFilterSubString, old_string);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,6 +48,7 @@ public:
|
||||
virtual void getSelectedItemsUUIDs(uuid_vec_t& selected_uuids) const {}
|
||||
|
||||
const std::string& getFilterSubString() { return mFilterSubString; }
|
||||
U32 getFilterGeneration() { return mFilterGeneration; }
|
||||
|
||||
virtual void updateMenuItemsVisibility() = 0;
|
||||
virtual LLToggleableMenu* getGearMenu() = 0;
|
||||
@@ -63,6 +64,7 @@ protected:
|
||||
|
||||
private:
|
||||
std::string mFilterSubString;
|
||||
U32 mFilterGeneration = 0;
|
||||
|
||||
static std::string sRecentFilterSubString;
|
||||
};
|
||||
|
||||
@@ -426,7 +426,7 @@ void LLPanelDirBrowser::processDirPeopleReply(LLMessageSystem *msg, void**)
|
||||
for (S32 i = 0; i < rows; i++)
|
||||
{
|
||||
msg->getStringFast(_PREHASH_QueryReplies,_PREHASH_FirstName, first_name, i);
|
||||
msg->getStringFast(_PREHASH_QueryReplies,_PREHASH_LastName, last_name, i);
|
||||
msg->getStringFast(_PREHASH_QueryReplies,_PREHASH_LastName, last_name, i);
|
||||
msg->getUUIDFast( _PREHASH_QueryReplies,_PREHASH_AgentID, agent_id, i);
|
||||
// msg->getU8Fast( _PREHASH_QueryReplies,_PREHASH_Online, online, i);
|
||||
// unused
|
||||
@@ -475,10 +475,10 @@ void LLPanelDirBrowser::processDirPlacesReply(LLMessageSystem* msg, void**)
|
||||
{
|
||||
FSPanelSearchPlaces::processSearchReply(msg, nullptr); // <FS:Ansariel> FS legacy search
|
||||
|
||||
LLUUID agent_id;
|
||||
LLUUID query_id;
|
||||
LLUUID parcel_id;
|
||||
std::string name;
|
||||
LLUUID agent_id;
|
||||
LLUUID query_id;
|
||||
LLUUID parcel_id;
|
||||
std::string name;
|
||||
bool is_for_sale = false;
|
||||
bool is_auction = false;
|
||||
F32 dwell;
|
||||
@@ -565,8 +565,8 @@ void LLPanelDirBrowser::processDirEventsReply(LLMessageSystem* msg, void**)
|
||||
LLUUID agent_id;
|
||||
LLUUID query_id;
|
||||
LLUUID owner_id;
|
||||
std::string name;
|
||||
std::string date;
|
||||
std::string name;
|
||||
std::string date;
|
||||
bool show_pg = gSavedSettings.getBOOL("ShowPGEvents");
|
||||
bool show_mature = gSavedSettings.getBOOL("ShowMatureEvents");
|
||||
bool show_adult = gSavedSettings.getBOOL("ShowAdultEvents");
|
||||
@@ -713,7 +713,7 @@ void LLPanelDirBrowser::processDirGroupsReply(LLMessageSystem* msg, void**)
|
||||
|
||||
LLUUID query_id;
|
||||
LLUUID group_id;
|
||||
std::string group_name;
|
||||
std::string group_name;
|
||||
S32 members;
|
||||
F32 search_order;
|
||||
|
||||
@@ -743,10 +743,10 @@ void LLPanelDirBrowser::processDirGroupsReply(LLMessageSystem* msg, void**)
|
||||
|
||||
for (i = 0; i < rows; i++)
|
||||
{
|
||||
msg->getUUIDFast(_PREHASH_QueryReplies, _PREHASH_GroupID, group_id, i );
|
||||
msg->getStringFast(_PREHASH_QueryReplies, _PREHASH_GroupName, group_name, i);
|
||||
msg->getS32Fast(_PREHASH_QueryReplies, _PREHASH_Members, members, i );
|
||||
msg->getF32Fast(_PREHASH_QueryReplies, _PREHASH_SearchOrder, search_order, i );
|
||||
msg->getUUIDFast(_PREHASH_QueryReplies, _PREHASH_GroupID, group_id, i );
|
||||
msg->getStringFast(_PREHASH_QueryReplies, _PREHASH_GroupName, group_name, i);
|
||||
msg->getS32Fast(_PREHASH_QueryReplies, _PREHASH_Members, members, i );
|
||||
msg->getF32Fast(_PREHASH_QueryReplies, _PREHASH_SearchOrder, search_order, i );
|
||||
|
||||
if (group_id.isNull())
|
||||
{
|
||||
@@ -843,8 +843,8 @@ void LLPanelDirBrowser::processDirClassifiedReply(LLMessageSystem* msg, void**)
|
||||
{
|
||||
LLUUID classified_id;
|
||||
std::string name;
|
||||
U32 creation_date = 0; // unix timestamp
|
||||
U32 expiration_date = 0; // future use
|
||||
U32 creation_date = 0; // unix timestamp
|
||||
U32 expiration_date = 0; // future use
|
||||
S32 price_for_listing = 0;
|
||||
msg->getUUID("QueryReplies", "ClassifiedID", classified_id, i);
|
||||
msg->getString("QueryReplies", "Name", name, i);
|
||||
@@ -877,7 +877,7 @@ void LLPanelDirBrowser::processDirLandReply(LLMessageSystem *msg, void**)
|
||||
LLUUID agent_id;
|
||||
LLUUID query_id;
|
||||
LLUUID parcel_id;
|
||||
std::string name;
|
||||
std::string name;
|
||||
std::string land_sku;
|
||||
std::string land_type;
|
||||
bool auction = false;
|
||||
|
||||
@@ -157,7 +157,7 @@ const S32 AUCTION_CODE = 7; // for auction place
|
||||
const S32 POPULAR_CODE = 8; // popular by dwell
|
||||
|
||||
// mask values for search flags
|
||||
const S32 SEARCH_NONE = 0; // should try not to send this to the search engine
|
||||
const S32 SEARCH_NONE = 0; // should try not to send this to the search engine
|
||||
const S32 SEARCH_PG = 1;
|
||||
const S32 SEARCH_MATURE = 2;
|
||||
const S32 SEARCH_ADULT = 4;
|
||||
|
||||
@@ -100,8 +100,8 @@ void LLPanelDirEvents::setDay(S32 day)
|
||||
internal_time = utc_to_pacific_time(utc_time, is_daylight_savings());
|
||||
|
||||
std::string buffer = llformat("%d/%d",
|
||||
1 + internal_time->tm_mon, // Jan = 0
|
||||
internal_time->tm_mday); // 2001 = 101
|
||||
1 + internal_time->tm_mon, // Jan = 0
|
||||
internal_time->tm_mday); // 2001 = 101
|
||||
childSetValue("date_text", buffer);
|
||||
}
|
||||
|
||||
@@ -132,8 +132,8 @@ void LLPanelDirEvents::performQueryOrDelete(U32 event_id)
|
||||
internal_time = utc_to_pacific_time(utc_time, is_daylight_savings());
|
||||
|
||||
std::string buffer = llformat("%d/%d",
|
||||
1 + internal_time->tm_mon, // Jan = 0
|
||||
internal_time->tm_mday); // 2001 = 101
|
||||
1 + internal_time->tm_mon, // Jan = 0
|
||||
internal_time->tm_mday); // 2001 = 101
|
||||
childSetValue("date_text", buffer);
|
||||
|
||||
// Record the relative day so back and forward buttons
|
||||
|
||||
@@ -1361,7 +1361,7 @@ void LLPanelProfileSecondLife::fillCommonData(const LLAvatarData* avatar_data)
|
||||
{
|
||||
mAllowPublish = avatar_data->flags & AVATAR_ALLOW_PUBLISH;
|
||||
// <FS:Ansariel> Fix LL UI/UX design accident
|
||||
//mShowInSearchCombo->setValue(mAllowPublish);
|
||||
//mShowInSearchCombo->setValue(mAllowPublish ? LLSD::Integer(1) : LLSD::Integer(0));
|
||||
mShowInSearchCheckbox->setValue(mAllowPublish);
|
||||
// </FS:Ansariel>
|
||||
}
|
||||
|
||||
@@ -672,6 +672,9 @@ void LLStatusBar::refresh()
|
||||
// time_t utc_time;
|
||||
// utc_time = time_corrected();
|
||||
|
||||
// static bool use_24h = gSavedSettings.getBOOL("Use24HourClock");
|
||||
// std::string timeStr = use_24h ? getString("time") : getString("time_ampm");
|
||||
|
||||
// std::string timeStr = getString("time");
|
||||
// LLSD substitution;
|
||||
// substitution["datetime"] = (S32) utc_time;
|
||||
|
||||
@@ -11508,6 +11508,17 @@ class LLViewHighlightTransparent : public view_listener_t
|
||||
}
|
||||
};
|
||||
|
||||
class LLViewHighlightTransparentProbe : public view_listener_t
|
||||
{
|
||||
bool handleEvent(const LLSD& userdata)
|
||||
{
|
||||
gSavedSettings.setBOOL("RenderReflectionProbeShowTransparent", !gSavedSettings.getBOOL("RenderReflectionProbeShowTransparent"));
|
||||
// invisible objects skip building their render batches unless sShowDebugAlpha is true, so rebuild batches whenever toggling this flag
|
||||
gPipeline.rebuildDrawInfo();
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
class LLViewCheckHighlightTransparent : public view_listener_t
|
||||
{
|
||||
bool handleEvent(const LLSD& userdata)
|
||||
@@ -12664,6 +12675,7 @@ void initialize_menus()
|
||||
view_listener_t::addMenu(new LLViewLookAtLastChatter(), "View.LookAtLastChatter");
|
||||
view_listener_t::addMenu(new LLViewShowHoverTips(), "View.ShowHoverTips");
|
||||
view_listener_t::addMenu(new LLViewHighlightTransparent(), "View.HighlightTransparent");
|
||||
view_listener_t::addMenu(new LLViewHighlightTransparentProbe(), "View.HighlightTransparentProbe");
|
||||
view_listener_t::addMenu(new LLViewHighlightTransparentRigged(), "View.HighlightTransparentRigged"); // <FS:Beq/> FIRE-32132 et al. Allow rigged mesh transparency highlights to be toggled
|
||||
view_listener_t::addMenu(new LLViewToggleRenderType(), "View.ToggleRenderType");
|
||||
view_listener_t::addMenu(new LLViewShowHUDAttachments(), "View.ShowHUDAttachments");
|
||||
|
||||
@@ -1736,6 +1736,7 @@ void LLOfferInfo::sendReceiveResponse(bool accept, const LLUUID &destination_fol
|
||||
if (mTransactionID.isNull())
|
||||
{
|
||||
// Not provided, message won't work
|
||||
LL_WARNS("Messaging") << "Missing transaction id, response for " << mIM << " won't work" << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1778,6 +1779,8 @@ void LLOfferInfo::sendReceiveResponse(bool accept, const LLUUID &destination_fol
|
||||
msg->addU8Fast(_PREHASH_Dialog, (U8)(im + 1));
|
||||
msg->addBinaryDataFast(_PREHASH_BinaryBucket, &(destination_folder_id.mData),
|
||||
sizeof(destination_folder_id.mData));
|
||||
|
||||
LL_DEBUGS("Messaging") << "Processing" << (U8)(im + 1) << " with transaction id " << mTransactionID << LL_ENDL;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -92,6 +92,7 @@
|
||||
|
||||
// newview includes
|
||||
#include "fscommon.h"
|
||||
#include "llaccordionctrl.h"
|
||||
#include "llbox.h"
|
||||
#include "llchicletbar.h"
|
||||
#include "llconsole.h"
|
||||
@@ -3905,6 +3906,8 @@ void LLViewerWindow::updateUI()
|
||||
|
||||
LLConsole::updateClass();
|
||||
|
||||
// execute postponed arrange calls
|
||||
LLAccordionCtrl::updateClass();
|
||||
// animate layout stacks so we have up to date rect for world view
|
||||
LLLayoutStack::updateClass();
|
||||
|
||||
|
||||
@@ -5303,14 +5303,10 @@ void LLVOAvatar::updateOrientation(LLAgent& agent, F32 speed, F32 delta_time)
|
||||
|
||||
LLVector3 pelvisDir( mRoot->getWorldMatrix().getFwdRow4().mV );
|
||||
|
||||
// <FS:Beq> FIRE-34196 Restore the pelvis rotation threshold config removed by LL as "unused"
|
||||
// const F32 AVATAR_PELVIS_ROTATE_THRESHOLD_SLOW = 60.0f;
|
||||
// const F32 AVATAR_PELVIS_ROTATE_THRESHOLD_FAST = 2.0f;
|
||||
static LLCachedControl<F32> AVATAR_PELVIS_ROTATE_THRESHOLD_SLOW(gSavedSettings, "AvatarRotateThresholdSlow", 60.0);
|
||||
static LLCachedControl<F32> AVATAR_PELVIS_ROTATE_THRESHOLD_FAST(gSavedSettings, "AvatarRotateThresholdFast", 2.0);
|
||||
// </FS:Beq>
|
||||
static LLCachedControl<F32> s_pelvis_rot_threshold_slow(gSavedSettings, "AvatarRotateThresholdSlow", 60.0);
|
||||
static LLCachedControl<F32> s_pelvis_rot_threshold_fast(gSavedSettings, "AvatarRotateThresholdFast", 2.0);
|
||||
|
||||
F32 pelvis_rot_threshold = clamp_rescale(speed, 0.1f, 1.0f, AVATAR_PELVIS_ROTATE_THRESHOLD_SLOW, AVATAR_PELVIS_ROTATE_THRESHOLD_FAST);
|
||||
F32 pelvis_rot_threshold = clamp_rescale(speed, 0.1f, 1.0f, s_pelvis_rot_threshold_slow, s_pelvis_rot_threshold_fast);
|
||||
|
||||
if (self_in_mouselook)
|
||||
{
|
||||
|
||||
@@ -6224,6 +6224,7 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
|
||||
}
|
||||
else
|
||||
{
|
||||
static LLCachedControl<bool> render_reflection_object(gSavedSettings, "RenderReflectionProbeShowTransparent", false);
|
||||
F32 alpha;
|
||||
if (is_pbr)
|
||||
{
|
||||
@@ -6242,7 +6243,7 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
|
||||
drawablep->setState(LLDrawable::HAS_ALPHA);
|
||||
add_face(sAlphaFaces, alpha_count, facep);
|
||||
}
|
||||
else if (LLDrawPoolAlpha::sShowDebugAlpha ||
|
||||
else if ((LLDrawPoolAlpha::sShowDebugAlpha && (render_reflection_object || !vobj->isReflectionProbe())) ||
|
||||
(gPipeline.sRenderHighlight && !drawablep->getParent() &&
|
||||
//only root objects are highlighted with red color in this case
|
||||
drawablep->getVObj() && drawablep->getVObj()->flagScripted() &&
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<panel.string name="bandwidth_tooltip">
|
||||
Båndbredde
|
||||
</panel.string>
|
||||
<panel.string name="time">
|
||||
<panel.string name="time_ampm">
|
||||
[hour12, datetime, slt]:[min, datetime, slt]:[second, datetime, slt] [ampm, datetime, slt] [timezone,datetime, slt]
|
||||
</panel.string>
|
||||
<panel.string name="timeTooltip">
|
||||
|
||||
@@ -247,6 +247,7 @@
|
||||
<menu_item_check label="Auswahlstrahl anzeigen" name="Show Selection Beam"/>
|
||||
<menu_item_check label="Durchsichtig hervorheben" name="Highlight Transparent"/>
|
||||
<menu_item_check label="- Durchsichtige geriggte Netze einschließen" name="Include Transparent Rigged"/>
|
||||
<menu_item_check label="Durchsichtig Reflexionstests hervorheben" name="Highlight Transparent Probes"/>
|
||||
<menu_item_check label="Keine Nachverabeitung" name="No Post"/>
|
||||
<menu label="Detaillevel auswählen" name="Selection level of detail">
|
||||
<menu_item_check label="Standard" name="Default lod setting"/>
|
||||
|
||||
@@ -575,7 +575,7 @@
|
||||
parameter="snapshot" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="360° Snapshot"
|
||||
label="360° Snapshot"
|
||||
name="Capture 360">
|
||||
<menu_item_call.on_click
|
||||
function="Floater.Show"
|
||||
@@ -2214,6 +2214,18 @@
|
||||
<menu_item_check.on_click
|
||||
function="View.HighlightTransparentRigged" />
|
||||
</menu_item_check>
|
||||
<menu_item_check
|
||||
label="Highlight Transparent Probes"
|
||||
name="Highlight Transparent Probes"
|
||||
shortcut="alt|shift|T">
|
||||
<menu_item_check.on_check
|
||||
function="CheckControl"
|
||||
parameter="RenderReflectionProbeShowTransparent" />
|
||||
<menu_item_check.on_click
|
||||
function="View.HighlightTransparentProbe" />
|
||||
<menu_item_check.on_enable
|
||||
function="View.CheckHighlightTransparent"/>
|
||||
</menu_item_check>
|
||||
<menu_item_separator/>
|
||||
|
||||
<menu_item_check
|
||||
|
||||
@@ -193,9 +193,13 @@
|
||||
Bandwidth
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="time">
|
||||
name="time_ampm">
|
||||
[hour12, datetime, slt]:[min, datetime, slt]:[second, datetime, slt] [ampm, datetime, slt] [timezone,datetime, slt]
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="time">
|
||||
[hour, datetime, slt]:[min, datetime, slt] [timezone,datetime, slt]
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="timeTooltip">
|
||||
[weekday, datetime, slt], [day, datetime, slt] [month, datetime, slt] [year, datetime, slt]
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<panel.string name="bandwidth_tooltip">
|
||||
帯域幅
|
||||
</panel.string>
|
||||
<panel.string name="time">
|
||||
<panel.string name="time_ampm">
|
||||
[ampm, datetime, slt] [hour12, datetime, slt]:[min, datetime, slt]:[second, datetime, slt] [timezone,datetime, slt]
|
||||
</panel.string>
|
||||
<panel.string name="timeTooltip">
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<panel.string name="bandwidth_tooltip">
|
||||
Banda
|
||||
</panel.string>
|
||||
<panel.string name="time">
|
||||
<panel.string name="time_ampm">
|
||||
[hour12, datetime, slt]:[min, datetime, slt]:[second, datetime, slt] [ampm, datetime, slt] [timezone,datetime, slt]
|
||||
</panel.string>
|
||||
<panel.string name="timeTooltip">
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<panel.string name="bandwidth_tooltip">
|
||||
Bant geniÅŸliÄŸi
|
||||
</panel.string>
|
||||
<panel.string name="time">
|
||||
<panel.string name="time_ampm">
|
||||
[hour12, datetime, slt]:[min, datetime, slt] [ampm, datetime, slt] [timezone,datetime, slt]
|
||||
</panel.string>
|
||||
<panel.string name="timeTooltip">
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<panel.string name="bandwidth_tooltip">
|
||||
頻寬
|
||||
</panel.string>
|
||||
<panel.string name="time">
|
||||
<panel.string name="time_ampm">
|
||||
[hour, datetime, slt]:[min, datetime, slt]:[second, datetime, slt] [timezone, datetime, slt]
|
||||
</panel.string>
|
||||
<panel.string name="timeTooltip">
|
||||
|
||||
Reference in New Issue
Block a user