summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/llfloatereditextdaycycle.cpp38
-rw-r--r--indra/newview/llfloatereditextdaycycle.h11
-rw-r--r--indra/newview/llfloaterfixedenvironment.cpp17
-rw-r--r--indra/newview/llfloaterfixedenvironment.h2
-rw-r--r--indra/newview/llfloaterregioninfo.cpp1
-rw-r--r--indra/newview/llinventorypanel.cpp408
-rw-r--r--indra/newview/llinventorypanel.h4
-rw-r--r--indra/newview/llpanelenvironment.cpp44
-rw-r--r--indra/newview/llpanelenvironment.h4
-rw-r--r--indra/newview/llsettingspicker.cpp80
-rw-r--r--indra/newview/llsettingspicker.h22
-rw-r--r--indra/newview/llviewermenu.cpp15
-rw-r--r--indra/newview/llviewerparcelmgr.cpp9
-rw-r--r--indra/newview/skins/default/textures/widgets/track_control_moon_back.pngbin859 -> 913 bytes
-rw-r--r--indra/newview/skins/default/textures/widgets/track_control_moon_front.pngbin1100 -> 1156 bytes
-rw-r--r--indra/newview/skins/default/xui/en/floater_my_environments.xml11
-rw-r--r--indra/newview/skins/default/xui/en/floater_settings_picker.xml34
17 files changed, 392 insertions, 308 deletions
diff --git a/indra/newview/llfloatereditextdaycycle.cpp b/indra/newview/llfloatereditextdaycycle.cpp
index 1d209fe230..840b392f5d 100644
--- a/indra/newview/llfloatereditextdaycycle.cpp
+++ b/indra/newview/llfloatereditextdaycycle.cpp
@@ -565,14 +565,14 @@ void LLFloaterEditExtDayCycle::onButtonImport()
void LLFloaterEditExtDayCycle::onButtonLoadFrame()
{
- LLUUID curassetId;
+ LLUUID curitemId = mInventoryId;
- if (mCurrentEdit)
+ if (mCurrentEdit && curitemId.notNull())
{
- curassetId = mCurrentEdit->getAssetId();
+ curitemId = LLFloaterSettingsPicker::findItemID(mCurrentEdit->getAssetId(), false, false);
}
- doOpenInventoryFloater((mCurrentTrack == LLSettingsDay::TRACK_WATER) ? LLSettingsType::ST_WATER : LLSettingsType::ST_SKY, curassetId);
+ doOpenInventoryFloater((mCurrentTrack == LLSettingsDay::TRACK_WATER) ? LLSettingsType::ST_WATER : LLSettingsType::ST_SKY, curitemId);
}
void LLFloaterEditExtDayCycle::onAddTrack()
@@ -999,7 +999,7 @@ void LLFloaterEditExtDayCycle::updateTimeAndLabel()
// Update blender here:
}
-void LLFloaterEditExtDayCycle::addSliderFrame(const F32 frame, LLSettingsBase::ptr_t &setting, bool update_ui)
+void LLFloaterEditExtDayCycle::addSliderFrame(const F32 frame, const LLSettingsBase::ptr_t &setting, bool update_ui)
{
// multi slider distinguishes elements by key/name in string format
// store names to map to be able to recall dependencies
@@ -1485,7 +1485,7 @@ void LLFloaterEditExtDayCycle::clearDirtyFlag()
}
-void LLFloaterEditExtDayCycle::doOpenInventoryFloater(LLSettingsType::type_e type, LLUUID currasset)
+void LLFloaterEditExtDayCycle::doOpenInventoryFloater(LLSettingsType::type_e type, LLUUID curritem)
{
// LLUI::sWindow->setCursor(UI_CURSOR_WAIT);
LLFloaterSettingsPicker *picker = static_cast<LLFloaterSettingsPicker *>(mInventoryFloater.get());
@@ -1502,7 +1502,7 @@ void LLFloaterEditExtDayCycle::doOpenInventoryFloater(LLSettingsType::type_e typ
}
picker->setSettingsFilter(type);
- picker->setSettingsAssetId(currasset);
+ picker->setSettingsItemId(curritem);
picker->openFloater();
picker->setFocus(TRUE);
}
@@ -1517,16 +1517,21 @@ void LLFloaterEditExtDayCycle::doCloseInventoryFloater(bool quitting)
}
}
-void LLFloaterEditExtDayCycle::onPickerCommitSetting(LLUUID asset_id)
+void LLFloaterEditExtDayCycle::onPickerCommitSetting(LLUUID item_id)
{
LLSettingsBase::TrackPosition frame(mTimeSlider->getCurSliderValue());
S32 track = mCurrentTrack;
-
- LLSettingsVOBase::getSettingsAsset(asset_id,
- [this, track, frame](LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status, LLExtStat) { onAssetLoadedForFrame(asset_id, settings, status, track, frame); });
+ LLViewerInventoryItem *itemp = gInventory.getItem(item_id);
+ if (itemp)
+ {
+ mInventoryId = item_id;
+ mInventoryItem = itemp;
+ LLSettingsVOBase::getSettingsAsset(itemp->getAssetUUID(),
+ [this, track, frame, item_id](LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status, LLExtStat) { onAssetLoadedForFrame(item_id, asset_id, settings, status, track, frame); });
+ }
}
-void LLFloaterEditExtDayCycle::onAssetLoadedForFrame(LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status, S32 track, LLSettingsBase::TrackPosition frame)
+void LLFloaterEditExtDayCycle::onAssetLoadedForFrame(LLUUID item_id, LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status, S32 track, LLSettingsBase::TrackPosition frame)
{
std::function<void()> cb = [this, settings, frame, track]()
{
@@ -1541,6 +1546,7 @@ void LLFloaterEditExtDayCycle::onAssetLoadedForFrame(LLUUID asset_id, LLSettings
return;
}
mEditDay->setSettingsAtKeyframe(settings, frame, track);
+ addSliderFrame(frame, settings, false);
reblendSettings();
synchronizeTabs();
};
@@ -1551,13 +1557,7 @@ void LLFloaterEditExtDayCycle::onAssetLoadedForFrame(LLUUID asset_id, LLSettings
return;
}
- LLFloaterSettingsPicker *picker = static_cast<LLFloaterSettingsPicker *>(mInventoryFloater.get());
- LLInventoryItem *inv_item(nullptr);
-
- if (picker)
- {
- inv_item = picker->findItem(asset_id, false, false);
- }
+ LLInventoryItem *inv_item = gInventory.getItem(item_id);
if (inv_item
&& mInventoryItem
diff --git a/indra/newview/llfloatereditextdaycycle.h b/indra/newview/llfloatereditextdaycycle.h
index 0d306961df..fd5fb67837 100644
--- a/indra/newview/llfloatereditextdaycycle.h
+++ b/indra/newview/llfloatereditextdaycycle.h
@@ -89,6 +89,9 @@ public:
void setEditDayCycle(const LLSettingsDay::ptr_t &pday);
void setEditDefaultDayCycle();
+ LLUUID getEditingAssetId() { return mEditDay ? mEditDay->getAssetId() : LLUUID::null; }
+ LLUUID getEditingInventoryId() { return mInventoryId; }
+
BOOL handleKeyUp(KEY key, MASK mask, BOOL called_from_parent) override;
@@ -130,7 +133,7 @@ private:
void updateButtons();
void updateSlider(); //generate sliders from current track
void updateTimeAndLabel();
- void addSliderFrame(const F32 frame, LLSettingsBase::ptr_t &setting, bool update_ui = true);
+ void addSliderFrame(const F32 frame, const LLSettingsBase::ptr_t &setting, bool update_ui = true);
void removeCurrentSliderFrame();
void loadInventoryItem(const LLUUID &inventoryId);
@@ -145,10 +148,10 @@ private:
void onInventoryCreated(LLUUID asset_id, LLUUID inventory_id, LLSD results);
void onInventoryUpdated(LLUUID asset_id, LLUUID inventory_id, LLSD results);
- void doOpenInventoryFloater(LLSettingsType::type_e type, LLUUID currasset);
+ void doOpenInventoryFloater(LLSettingsType::type_e type, LLUUID curritem);
void doCloseInventoryFloater(bool quitting = false);
- void onPickerCommitSetting(LLUUID asset_id);
- void onAssetLoadedForFrame(LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status, S32 track, LLSettingsBase::TrackPosition frame);
+ void onPickerCommitSetting(LLUUID item_id);
+ void onAssetLoadedForFrame(LLUUID item_id, LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status, S32 track, LLSettingsBase::TrackPosition frame);
bool canUseInventory() const;
bool canApplyRegion() const;
diff --git a/indra/newview/llfloaterfixedenvironment.cpp b/indra/newview/llfloaterfixedenvironment.cpp
index 216556cf89..5cd99e6ad2 100644
--- a/indra/newview/llfloaterfixedenvironment.cpp
+++ b/indra/newview/llfloaterfixedenvironment.cpp
@@ -290,21 +290,12 @@ void LLFloaterFixedEnvironment::checkAndConfirmSettingsLoss(LLFloaterFixedEnviro
}
}
-void LLFloaterFixedEnvironment::onPickerCommitSetting(LLUUID asset_id)
+void LLFloaterFixedEnvironment::onPickerCommitSetting(LLUUID item_id)
{
- mInventoryItem = NULL;
- mInventoryId.setNull();
- if (!mInventoryFloater.isDead())
- {
- LLFloaterSettingsPicker *picker = static_cast<LLFloaterSettingsPicker *>(mInventoryFloater.get());
- if (picker)
- {
- mInventoryId = picker->findItemID(asset_id, false);
- mInventoryItem = gInventory.getItem(mInventoryId);
- }
- }
+ mInventoryId = item_id;
+ mInventoryItem = gInventory.getItem(mInventoryId);
- LLSettingsVOBase::getSettingsAsset(asset_id,
+ LLSettingsVOBase::getSettingsAsset(mInventoryItem->getAssetUUID(),
[this](LLUUID asset_id, LLSettingsBase::ptr_t settings, S32 status, LLExtStat) { onAssetLoaded(asset_id, settings, status); });
}
diff --git a/indra/newview/llfloaterfixedenvironment.h b/indra/newview/llfloaterfixedenvironment.h
index d235491fd9..afab75b4ba 100644
--- a/indra/newview/llfloaterfixedenvironment.h
+++ b/indra/newview/llfloaterfixedenvironment.h
@@ -120,7 +120,7 @@ private:
void onButtonApply(LLUICtrl *ctrl, const LLSD &data);
void onButtonLoad();
- void onPickerCommitSetting(LLUUID asset_id);
+ void onPickerCommitSetting(LLUUID item_id);
void onAssetLoaded(LLUUID asset_id, LLSettingsBase::ptr_t settins, S32 status);
bool mIsDirty;
diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp
index c8ed43871d..4fd23252fa 100644
--- a/indra/newview/llfloaterregioninfo.cpp
+++ b/indra/newview/llfloaterregioninfo.cpp
@@ -191,6 +191,7 @@ public:
void refreshFromEstate();
virtual BOOL postBuild() override;
+ virtual void onOpen(const LLSD& key) override {};
virtual S32 getParcelId() override { return INVALID_PARCEL_ID; }
diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
index 002c7a3215..d8c2de649e 100644
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -46,12 +46,18 @@
#include "llnotificationsutil.h"
#include "llpreview.h"
#include "llsidepanelinventory.h"
+#include "llstartup.h"
#include "lltrans.h"
#include "llviewerattachmenu.h"
#include "llviewerfoldertype.h"
#include "llvoavatarself.h"
+class LLInventoryRecentItemsPanel;
+class LLAssetFilteredInventoryPanel;
+
static LLDefaultChildRegistry::Register<LLInventoryPanel> r("inventory_panel");
+static LLDefaultChildRegistry::Register<LLInventoryRecentItemsPanel> t_recent_inventory_panel("recent_inventory_panel");
+static LLDefaultChildRegistry::Register<LLAssetFilteredInventoryPanel> t_asset_filtered_inv_panel("asset_filtered_inv_panel");
const std::string LLInventoryPanel::DEFAULT_SORT_ORDER = std::string("InventorySortOrder");
const std::string LLInventoryPanel::RECENTITEMS_SORT_ORDER = std::string("RecentItemsSortOrder");
@@ -271,9 +277,9 @@ void LLInventoryPanel::initFromParams(const LLInventoryPanel::Params& params)
mCompletionObserver = new LLInvPanelComplObserver(boost::bind(&LLInventoryPanel::onItemsCompletion, this));
mInventory->addObserver(mCompletionObserver);
- // Build view of inventory if we need default full hierarchy and inventory ready,
- // otherwise wait for idle callback.
- if (mInventory->isInventoryUsable() && !mViewsInitialized)
+ // Build view of inventory if we need default full hierarchy and inventory ready, otherwise do in onIdle.
+ // Initializing views takes a while so always do it onIdle if viewer already loaded.
+ if (mInventory->isInventoryUsable() && !mViewsInitialized && LLStartUp::getStartupState() <= STATE_WEARABLES_WAIT)
{
initializeViews();
}
@@ -451,198 +457,204 @@ LLInventoryFilter::EFolderShow LLInventoryPanel::getShowFolderState()
return getFilter().getShowFolderState();
}
-// Called when something changed in the global model (new item, item coming through the wire, rename, move, etc...) (CHUI-849)
-static LLTrace::BlockTimerStatHandle FTM_REFRESH("Inventory Refresh");
-void LLInventoryPanel::modelChanged(U32 mask)
+void LLInventoryPanel::itemChanged(const LLUUID& item_id, U32 mask, const LLInventoryObject* model_item)
{
- LL_RECORD_BLOCK_TIME(FTM_REFRESH);
+ LLFolderViewItem* view_item = getItemByID(item_id);
+ LLFolderViewModelItemInventory* viewmodel_item =
+ static_cast<LLFolderViewModelItemInventory*>(view_item ? view_item->getViewModelItem() : NULL);
- if (!mViewsInitialized) return;
-
- const LLInventoryModel* model = getModel();
- if (!model) return;
+ // LLFolderViewFolder is derived from LLFolderViewItem so dynamic_cast from item
+ // to folder is the fast way to get a folder without searching through folders tree.
+ LLFolderViewFolder* view_folder = NULL;
- const LLInventoryModel::changed_items_t& changed_items = model->getChangedIDs();
- if (changed_items.empty()) return;
+ // Check requires as this item might have already been deleted
+ // as a child of its deleted parent.
+ if (model_item && view_item)
+ {
+ view_folder = dynamic_cast<LLFolderViewFolder*>(view_item);
+ }
- for (LLInventoryModel::changed_items_t::const_iterator items_iter = changed_items.begin();
- items_iter != changed_items.end();
- ++items_iter)
+ //////////////////////////////
+ // LABEL Operation
+ // Empty out the display name for relabel.
+ if (mask & LLInventoryObserver::LABEL)
{
- const LLUUID& item_id = (*items_iter);
- const LLInventoryObject* model_item = model->getObject(item_id);
- LLFolderViewItem* view_item = getItemByID(item_id);
- LLFolderViewModelItemInventory* viewmodel_item =
- static_cast<LLFolderViewModelItemInventory*>(view_item ? view_item->getViewModelItem() : NULL);
+ if (view_item)
+ {
+ // Request refresh on this item (also flags for filtering)
+ LLInvFVBridge* bridge = (LLInvFVBridge*)view_item->getViewModelItem();
+ if(bridge)
+ {
+ // Clear the display name first, so it gets properly re-built during refresh()
+ bridge->clearDisplayName();
- // LLFolderViewFolder is derived from LLFolderViewItem so dynamic_cast from item
- // to folder is the fast way to get a folder without searching through folders tree.
- LLFolderViewFolder* view_folder = NULL;
+ view_item->refresh();
+ }
+ LLFolderViewFolder* parent = view_item->getParentFolder();
+ if(parent)
+ {
+ parent->getViewModelItem()->dirtyDescendantsFilter();
+ }
+ }
+ }
- // Check requires as this item might have already been deleted
- // as a child of its deleted parent.
- if (model_item && view_item)
+ //////////////////////////////
+ // REBUILD Operation
+ // Destroy and regenerate the UI.
+ if (mask & LLInventoryObserver::REBUILD)
+ {
+ if (model_item && view_item && viewmodel_item)
{
- view_folder = dynamic_cast<LLFolderViewFolder*>(view_item);
+ const LLUUID& idp = viewmodel_item->getUUID();
+ view_item->destroyView();
+ removeItemID(idp);
}
+ view_item = buildNewViews(item_id);
+ viewmodel_item =
+ static_cast<LLFolderViewModelItemInventory*>(view_item ? view_item->getViewModelItem() : NULL);
+ view_folder = dynamic_cast<LLFolderViewFolder *>(view_item);
+ }
- //////////////////////////////
- // LABEL Operation
- // Empty out the display name for relabel.
- if (mask & LLInventoryObserver::LABEL)
+ //////////////////////////////
+ // INTERNAL Operation
+ // This could be anything. For now, just refresh the item.
+ if (mask & LLInventoryObserver::INTERNAL)
+ {
+ if (view_item)
{
- if (view_item)
- {
- // Request refresh on this item (also flags for filtering)
- LLInvFVBridge* bridge = (LLInvFVBridge*)view_item->getViewModelItem();
- if(bridge)
- { // Clear the display name first, so it gets properly re-built during refresh()
- bridge->clearDisplayName();
-
- view_item->refresh();
- }
- LLFolderViewFolder* parent = view_item->getParentFolder();
- if(parent)
- {
- parent->getViewModelItem()->dirtyDescendantsFilter();
- }
- }
+ view_item->refresh();
}
+ }
- //////////////////////////////
- // REBUILD Operation
- // Destroy and regenerate the UI.
- if (mask & LLInventoryObserver::REBUILD)
+ //////////////////////////////
+ // SORT Operation
+ // Sort the folder.
+ if (mask & LLInventoryObserver::SORT)
+ {
+ if (view_folder)
{
- if (model_item && view_item && viewmodel_item)
- {
- const LLUUID& idp = viewmodel_item->getUUID();
- view_item->destroyView();
- removeItemID(idp);
- }
- view_item = buildNewViews(item_id);
- viewmodel_item =
- static_cast<LLFolderViewModelItemInventory*>(view_item ? view_item->getViewModelItem() : NULL);
- view_folder = dynamic_cast<LLFolderViewFolder *>(view_item);
+ view_folder->getViewModelItem()->requestSort();
}
+ }
+ // We don't typically care which of these masks the item is actually flagged with, since the masks
+ // may not be accurate (e.g. in the main inventory panel, I move an item from My Inventory into
+ // Landmarks; this is a STRUCTURE change for that panel but is an ADD change for the Landmarks
+ // panel). What's relevant is that the item and UI are probably out of sync and thus need to be
+ // resynchronized.
+ if (mask & (LLInventoryObserver::STRUCTURE |
+ LLInventoryObserver::ADD |
+ LLInventoryObserver::REMOVE))
+ {
//////////////////////////////
- // INTERNAL Operation
- // This could be anything. For now, just refresh the item.
- if (mask & LLInventoryObserver::INTERNAL)
+ // ADD Operation
+ // Item exists in memory but a UI element hasn't been created for it.
+ if (model_item && !view_item)
{
- if (view_item)
+ // Add the UI element for this item.
+ buildNewViews(item_id);
+ // Select any newly created object that has the auto rename at top of folder root set.
+ if(mFolderRoot.get()->getRoot()->needsAutoRename())
{
- view_item->refresh();
+ setSelection(item_id, FALSE);
}
+ updateFolderLabel(model_item->getParentUUID());
}
//////////////////////////////
- // SORT Operation
- // Sort the folder.
- if (mask & LLInventoryObserver::SORT)
+ // STRUCTURE Operation
+ // This item already exists in both memory and UI. It was probably reparented.
+ else if (model_item && view_item)
{
- if (view_folder)
+ LLFolderViewFolder* old_parent = view_item->getParentFolder();
+ // Don't process the item if it is the root
+ if (old_parent)
{
- view_folder->getViewModelItem()->requestSort();
- }
- }
-
- // We don't typically care which of these masks the item is actually flagged with, since the masks
- // may not be accurate (e.g. in the main inventory panel, I move an item from My Inventory into
- // Landmarks; this is a STRUCTURE change for that panel but is an ADD change for the Landmarks
- // panel). What's relevant is that the item and UI are probably out of sync and thus need to be
- // resynchronized.
- if (mask & (LLInventoryObserver::STRUCTURE |
- LLInventoryObserver::ADD |
- LLInventoryObserver::REMOVE))
- {
- //////////////////////////////
- // ADD Operation
- // Item exists in memory but a UI element hasn't been created for it.
- if (model_item && !view_item)
- {
- // Add the UI element for this item.
- buildNewViews(item_id);
- // Select any newly created object that has the auto rename at top of folder root set.
- if(mFolderRoot.get()->getRoot()->needsAutoRename())
+ LLFolderViewModelItemInventory* viewmodel_folder = static_cast<LLFolderViewModelItemInventory*>(old_parent->getViewModelItem());
+ LLFolderViewFolder* new_parent = (LLFolderViewFolder*)getItemByID(model_item->getParentUUID());
+ // Item has been moved.
+ if (old_parent != new_parent)
{
- setSelection(item_id, FALSE);
- }
- updateFolderLabel(model_item->getParentUUID());
- }
-
- //////////////////////////////
- // STRUCTURE Operation
- // This item already exists in both memory and UI. It was probably reparented.
- else if (model_item && view_item)
- {
- LLFolderViewFolder* old_parent = view_item->getParentFolder();
- // Don't process the item if it is the root
- if (old_parent)
- {
- LLFolderViewModelItemInventory* viewmodel_folder = static_cast<LLFolderViewModelItemInventory*>(old_parent->getViewModelItem());
- LLFolderViewFolder* new_parent = (LLFolderViewFolder*)getItemByID(model_item->getParentUUID());
- // Item has been moved.
- if (old_parent != new_parent)
+ if (new_parent != NULL)
{
- if (new_parent != NULL)
+ // Item is to be moved and we found its new parent in the panel's directory, so move the item's UI.
+ view_item->addToFolder(new_parent);
+ addItemID(viewmodel_item->getUUID(), view_item);
+ if (mInventory)
{
- // Item is to be moved and we found its new parent in the panel's directory, so move the item's UI.
- view_item->addToFolder(new_parent);
- addItemID(viewmodel_item->getUUID(), view_item);
- if (mInventory)
+ const LLUUID trash_id = mInventory->findCategoryUUIDForType(LLFolderType::FT_TRASH);
+ if (trash_id != model_item->getParentUUID() && (mask & LLInventoryObserver::INTERNAL) && new_parent->isOpen())
{
- const LLUUID trash_id = mInventory->findCategoryUUIDForType(LLFolderType::FT_TRASH);
- if (trash_id != model_item->getParentUUID() && (mask & LLInventoryObserver::INTERNAL) && new_parent->isOpen())
- {
- setSelection(item_id, FALSE);
- }
+ setSelection(item_id, FALSE);
}
- updateFolderLabel(model_item->getParentUUID());
}
- else
- {
- // Remove the item ID before destroying the view because the view-model-item gets
- // destroyed when the view is destroyed
- removeItemID(viewmodel_item->getUUID());
+ updateFolderLabel(model_item->getParentUUID());
+ }
+ else
+ {
+ // Remove the item ID before destroying the view because the view-model-item gets
+ // destroyed when the view is destroyed
+ removeItemID(viewmodel_item->getUUID());
- // Item is to be moved outside the panel's directory (e.g. moved to trash for a panel that
- // doesn't include trash). Just remove the item's UI.
- view_item->destroyView();
- }
- if(viewmodel_folder)
- {
- updateFolderLabel(viewmodel_folder->getUUID());
- }
- old_parent->getViewModelItem()->dirtyDescendantsFilter();
+ // Item is to be moved outside the panel's directory (e.g. moved to trash for a panel that
+ // doesn't include trash). Just remove the item's UI.
+ view_item->destroyView();
}
- }
- }
-
- //////////////////////////////
- // REMOVE Operation
- // This item has been removed from memory, but its associated UI element still exists.
- else if (!model_item && view_item && viewmodel_item)
- {
- // Remove the item's UI.
- LLFolderViewFolder* parent = view_item->getParentFolder();
- removeItemID(viewmodel_item->getUUID());
- view_item->destroyView();
- if(parent)
- {
- parent->getViewModelItem()->dirtyDescendantsFilter();
- LLFolderViewModelItemInventory* viewmodel_folder = static_cast<LLFolderViewModelItemInventory*>(parent->getViewModelItem());
if(viewmodel_folder)
{
updateFolderLabel(viewmodel_folder->getUUID());
}
+ old_parent->getViewModelItem()->dirtyDescendantsFilter();
+ }
+ }
+ }
+
+ //////////////////////////////
+ // REMOVE Operation
+ // This item has been removed from memory, but its associated UI element still exists.
+ else if (!model_item && view_item && viewmodel_item)
+ {
+ // Remove the item's UI.
+ LLFolderViewFolder* parent = view_item->getParentFolder();
+ removeItemID(viewmodel_item->getUUID());
+ view_item->destroyView();
+ if(parent)
+ {
+ parent->getViewModelItem()->dirtyDescendantsFilter();
+ LLFolderViewModelItemInventory* viewmodel_folder = static_cast<LLFolderViewModelItemInventory*>(parent->getViewModelItem());
+ if(viewmodel_folder)
+ {
+ updateFolderLabel(viewmodel_folder->getUUID());
}
}
}
}
}
+// Called when something changed in the global model (new item, item coming through the wire, rename, move, etc...) (CHUI-849)
+static LLTrace::BlockTimerStatHandle FTM_REFRESH("Inventory Refresh");
+void LLInventoryPanel::modelChanged(U32 mask)
+{
+ LL_RECORD_BLOCK_TIME(FTM_REFRESH);
+
+ if (!mViewsInitialized) return;
+
+ const LLInventoryModel* model = getModel();
+ if (!model) return;
+
+ const LLInventoryModel::changed_items_t& changed_items = model->getChangedIDs();
+ if (changed_items.empty()) return;
+
+ for (LLInventoryModel::changed_items_t::const_iterator items_iter = changed_items.begin();
+ items_iter != changed_items.end();
+ ++items_iter)
+ {
+ const LLUUID& item_id = (*items_iter);
+ const LLInventoryObject* model_item = model->getObject(item_id);
+ itemChanged(item_id, mask, model_item);
+ }
+}
+
LLUUID LLInventoryPanel::getRootFolderID()
{
LLUUID root_id;
@@ -837,14 +849,17 @@ LLFolderViewItem * LLInventoryPanel::createFolderViewItem(LLInvFVBridge * bridge
LLFolderViewItem* LLInventoryPanel::buildNewViews(const LLUUID& id)
{
- LLInventoryObject const* objectp = gInventory.getObject(id);
-
- if (!objectp)
+ LLInventoryObject const* objectp = gInventory.getObject(id);
+ return buildNewViews(id, objectp);
+}
+
+LLFolderViewItem* LLInventoryPanel::buildNewViews(const LLUUID& id, LLInventoryObject const* objectp)
+{
+ if (!objectp)
{
return NULL;
}
-
- LLFolderViewItem* folder_view_item = getItemByID(id);
+ LLFolderViewItem* folder_view_item = getItemByID(id);
const LLUUID &parent_id = objectp->getParentUUID();
LLFolderViewFolder* parent_folder = (LLFolderViewFolder*)getItemByID(parent_id);
@@ -973,6 +988,7 @@ LLFolderViewItem* LLInventoryPanel::buildNewViews(const LLUUID& id)
++item_iter)
{
const LLViewerInventoryItem* item = (*item_iter);
+ if (item->getType() == LLAssetType::AT_SETTINGS)
buildNewViews(item->getUUID());
}
}
@@ -1700,8 +1716,6 @@ bool LLInventoryPanel::isSelectionRemovable()
/************************************************************************/
/* Recent Inventory Panel related class */
/************************************************************************/
-class LLInventoryRecentItemsPanel;
-static LLDefaultChildRegistry::Register<LLInventoryRecentItemsPanel> t_recent_inventory_panel("recent_inventory_panel");
static const LLRecentInventoryBridgeBuilder RECENT_ITEMS_BUILDER;
class LLInventoryRecentItemsPanel : public LLInventoryPanel
@@ -1731,6 +1745,82 @@ LLInventoryRecentItemsPanel::LLInventoryRecentItemsPanel( const Params& params)
mInvFVBridgeBuilder = &RECENT_ITEMS_BUILDER;
}
+/************************************************************************/
+/* Asset Pre-Filtered Inventory Panel related class */
+/* Exchanges filter's flexibility for speed of generation and */
+/* improved performance */
+/************************************************************************/
+class LLAssetFilteredInventoryPanel : public LLInventoryPanel
+{
+public:
+ struct Params
+ : public LLInitParam::Block<Params, LLInventoryPanel::Params>
+ {
+ Mandatory<std::string> filter_asset_type;
+
+ Params() : filter_asset_type("filter_asset_type") {}
+ };
+
+ void initFromParams(const Params& p);
+protected:
+ LLAssetFilteredInventoryPanel(const Params& p) : LLInventoryPanel(p) { mAcceptsDragAndDrop = false; }
+ friend class LLUICtrlFactory;
+public:
+ ~LLAssetFilteredInventoryPanel() {}
+
+protected:
+ /*virtual*/ LLFolderViewItem* buildNewViews(const LLUUID& id);
+ /*virtual*/ void itemChanged(const LLUUID& item_id, U32 mask, const LLInventoryObject* model_item);
+
+private:
+ LLAssetType::EType mAssetType;
+};
+
+
+void LLAssetFilteredInventoryPanel::initFromParams(const Params& p)
+{
+ mAssetType = LLAssetType::lookup(p.filter_asset_type.getValue());
+ LLInventoryPanel::initFromParams(p);
+ U64 filter_cats = getFilter().getFilterCategoryTypes();
+ filter_cats &= ~(1ULL << LLFolderType::FT_TRASH);
+ filter_cats &= ~(1ULL << LLFolderType::FT_MARKETPLACE_LISTINGS);
+ getFilter().setFilterCategoryTypes(filter_cats);
+ // turn off marketplace for recent items
+ getFilter().setFilterNoMarketplaceFolder();
+}
+
+LLFolderViewItem* LLAssetFilteredInventoryPanel::buildNewViews(const LLUUID& id)
+{
+ LLInventoryObject const* objectp = gInventory.getObject(id);
+
+ if (!objectp)
+ {
+ return NULL;
+ }
+
+ if (objectp->getType() != mAssetType && objectp->getType() != LLAssetType::AT_CATEGORY)
+ {
+ return NULL;
+ }
+
+ return LLInventoryPanel::buildNewViews(id, objectp);
+}
+
+void LLAssetFilteredInventoryPanel::itemChanged(const LLUUID& id, U32 mask, const LLInventoryObject* model_item)
+{
+ if (!model_item)
+ {
+ return;
+ }
+
+ if (model_item->getType() != mAssetType && model_item->getType() != LLAssetType::AT_CATEGORY)
+ {
+ return;
+ }
+
+ LLInventoryPanel::itemChanged(id, mask, model_item);
+}
+
namespace LLInitParam
{
void TypeValues<LLFolderType::EType>::declareValues()
diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h
index 90fd659522..b968b19d9a 100644
--- a/indra/newview/llinventorypanel.h
+++ b/indra/newview/llinventorypanel.h
@@ -319,7 +319,9 @@ protected:
static LLUIColor sLibraryColor;
static LLUIColor sLinkColor;
- LLFolderViewItem* buildNewViews(const LLUUID& id);
+ virtual LLFolderViewItem* buildNewViews(const LLUUID& id);
+ LLFolderViewItem* buildNewViews(const LLUUID& id, LLInventoryObject const* objectp);
+ virtual void itemChanged(const LLUUID& item_id, U32 mask, const LLInventoryObject* model_item);
BOOL getIsHiddenFolderType(LLFolderType::EType folder_type) const;
virtual LLFolderView * createFolderRoot(LLUUID root_id );
diff --git a/indra/newview/llpanelenvironment.cpp b/indra/newview/llpanelenvironment.cpp
index 4ab09e7118..5abef949e1 100644
--- a/indra/newview/llpanelenvironment.cpp
+++ b/indra/newview/llpanelenvironment.cpp
@@ -48,6 +48,8 @@
#include "llcallbacklist.h"
#include "llviewerparcelmgr.h"
+#include "llinventorymodel.h"
+
//=========================================================================
namespace
{
@@ -114,6 +116,7 @@ const std::string alt_labels[] = {
LLPanelEnvironmentInfo::LLPanelEnvironmentInfo():
mCurrentEnvironment(),
mDirtyFlag(0),
+ mEditorLastParcelId(INVALID_PARCEL_ID),
mCrossRegion(false),
mNoSelection(false),
mNoEnvironment(false),
@@ -256,15 +259,7 @@ void LLPanelEnvironmentInfo::refresh()
std::string LLPanelEnvironmentInfo::getInventoryNameForAssetId(LLUUID asset_id)
{
- LLFloaterSettingsPicker *picker = getSettingsPicker();
-
- if (!picker)
- {
- LL_WARNS("ENVPANEL") << "Couldn't instantiate picker." << LL_ENDL;
- return std::string();
- }
-
- std::string name(picker->findItemName(asset_id, false, false));
+ std::string name(LLFloaterSettingsPicker::findItemName(asset_id, false, false));
if (name.empty())
return getString(STR_LABEL_UNKNOWNINV);
@@ -331,11 +326,15 @@ void LLPanelEnvironmentInfo::updateEditFloater(const LLEnvironment::EnvironmentI
else
dayeditor->closeFloater();
}
- else
+ else if (dayeditor->getEditingAssetId() != nextenv->mDayCycle->getAssetId()
+ || mEditorLastParcelId != nextenv->mParcelId
+ || mEditorLastRegionId != nextenv->mRegionId)
{
// Ignore dirty
// If parcel selection changed whatever we do except saving to inventory with
// old settings will be invalid.
+ mEditorLastParcelId = nextenv->mParcelId;
+ mEditorLastRegionId = nextenv->mRegionId;
dayeditor->setEditDayCycle(nextenv->mDayCycle);
}
}
@@ -389,6 +388,8 @@ bool LLPanelEnvironmentInfo::setControlsEnabled(bool enabled)
getChild<LLUICtrl>(BTN_EDIT)->setEnabled(enabled);
getChild<LLUICtrl>(SLD_DAYLENGTH)->setEnabled(enabled && (rdo_selection != 0) && !is_legacy);
getChild<LLUICtrl>(SLD_DAYOFFSET)->setEnabled(enabled && (rdo_selection != 0) && !is_legacy);
+ getChild<LLUICtrl>(SLD_ALTITUDES)->setEnabled(enabled && isRegion() && !is_legacy);
+ getChild<LLUICtrl>(ICN_GROUND)->setColor((enabled && isRegion() && !is_legacy) ? LLColor4::white : LLColor4::grey % 0.8f);
getChild<LLUICtrl>(PNL_ENVIRONMENT_ALTITUDES)->setEnabled(enabled && isRegion() && !is_legacy);
getChild<LLUICtrl>(CHK_ALLOWOVERRIDE)->setEnabled(enabled && isRegion() && !is_legacy);
getChild<LLUICtrl>(BTN_APPLY)->setEnabled(enabled && (mDirtyFlag != 0));
@@ -614,8 +615,13 @@ void LLPanelEnvironmentInfo::onBtnSelect()
LLFloaterSettingsPicker *picker = getSettingsPicker();
if (picker)
{
+ LLUUID item_id;
+ if (mCurrentEnvironment && mCurrentEnvironment->mDayCycle)
+ {
+ item_id = LLFloaterSettingsPicker::findItemID(mCurrentEnvironment->mDayCycle->getAssetId(), false, false);
+ }
picker->setSettingsFilter(LLSettingsType::ST_NONE);
- picker->setSettingsAssetId((mCurrentEnvironment && mCurrentEnvironment->mDayCycle) ? mCurrentEnvironment->mDayCycle->getAssetId() : LLUUID::null);
+ picker->setSettingsItemId(item_id);
picker->openFloater();
picker->setFocus(TRUE);
}
@@ -710,13 +716,17 @@ void LLPanelEnvironmentInfo::onIdlePlay(void *data)
((LLPanelEnvironmentInfo *)data)->udpateApparentTimeOfDay();
}
-void LLPanelEnvironmentInfo::onPickerCommitted(LLUUID asset_id)
+void LLPanelEnvironmentInfo::onPickerCommitted(LLUUID item_id)
{
- LLSettingsVOBase::getSettingsAsset(asset_id, [this](LLUUID, LLSettingsBase::ptr_t settings, S32 status, LLExtStat) {
- if (status)
- return;
- onPickerAssetDownloaded(settings);
- });
+ LLInventoryItem *itemp = gInventory.getItem(item_id);
+ if (itemp)
+ {
+ LLSettingsVOBase::getSettingsAsset(itemp->getAssetUUID(), [this](LLUUID, LLSettingsBase::ptr_t settings, S32 status, LLExtStat) {
+ if (status)
+ return;
+ onPickerAssetDownloaded(settings);
+ });
+ }
}
void LLPanelEnvironmentInfo::onEditCommitted(LLSettingsDay::ptr_t newday)
diff --git a/indra/newview/llpanelenvironment.h b/indra/newview/llpanelenvironment.h
index 9bc0b9df9c..3ed631db41 100644
--- a/indra/newview/llpanelenvironment.h
+++ b/indra/newview/llpanelenvironment.h
@@ -120,7 +120,7 @@ protected:
void udpateApparentTimeOfDay();
- void onPickerCommitted(LLUUID asset_id);
+ void onPickerCommitted(LLUUID item_id);
void onEditCommitted(LLSettingsDay::ptr_t newday);
void onPickerAssetDownloaded(LLSettingsBase::ptr_t settings);
void onEnvironmentReceived(S32 parcel_id, LLEnvironment::EnvironmentInfo::ptr_t envifo);
@@ -171,6 +171,8 @@ private:
LLHandle<LLFloater> mSettingsFloater;
LLHandle<LLFloater> mEditFloater;
S32 mDirtyFlag;
+ S32 mEditorLastParcelId;
+ LLUUID mEditorLastRegionId;
bool mCrossRegion;
bool mNoSelection;
bool mNoEnvironment;
diff --git a/indra/newview/llsettingspicker.cpp b/indra/newview/llsettingspicker.cpp
index f72c7c5dcf..b82be3a23e 100644
--- a/indra/newview/llsettingspicker.cpp
+++ b/indra/newview/llsettingspicker.cpp
@@ -31,6 +31,7 @@
#include "llfiltereditor.h"
#include "llfolderviewmodel.h"
#include "llinventory.h"
+#include "llinventorybridge.h"
#include "llinventoryfunctions.h"
#include "llinventorymodelbackgroundfetch.h"
#include "llinventoryobserver.h"
@@ -47,7 +48,6 @@ namespace
const std::string FLT_INVENTORY_SEARCH("flt_inventory_search");
const std::string PNL_INVENTORY("pnl_inventory");
- const std::string CHK_SHOWFOLDERS("chk_showfolders");
const std::string BTN_SELECT("btn_select");
const std::string BTN_CANCEL("btn_cancel");
@@ -57,13 +57,13 @@ namespace
}
//=========================================================================
-LLFloaterSettingsPicker::LLFloaterSettingsPicker(LLView * owner, LLUUID initial_asset_id, const std::string &label, const LLSD &params):
+LLFloaterSettingsPicker::LLFloaterSettingsPicker(LLView * owner, LLUUID initial_item_id, const std::string &label, const LLSD &params):
LLFloater(params),
mOwnerHandle(),
mLabel(label),
mActive(true),
mContextConeOpacity(0.0f),
- mSettingAssetID(initial_asset_id),
+ mSettingItemID(initial_item_id),
mImmediateFilterPermMask(PERM_NONE)
{
mOwnerHandle = owner->getHandle();
@@ -91,9 +91,6 @@ BOOL LLFloaterSettingsPicker::postBuild()
setTitle(pick + mLabel);
}
-// childSetCommitCallback(CHK_SHOWFOLDERS, onShowFolders, this);
- getChildView(CHK_SHOWFOLDERS)->setVisible(FALSE);
-
mFilterEdit = getChild<LLFilterEditor>(FLT_INVENTORY_SEARCH);
mFilterEdit->setCommitCallback([this](LLUICtrl*, const LLSD& param){ onFilterEdit(param.asString()); });
@@ -115,9 +112,10 @@ BOOL LLFloaterSettingsPicker::postBuild()
// don't put keyboard focus on selected item, because the selection callback
// will assume that this was user input
- if (!mSettingAssetID.isNull())
+ if (!mSettingItemID.isNull())
{
- mInventoryPanel->setSelection(findItemID(mSettingAssetID, false), TAKE_FOCUS_NO);
+ //todo: this is bad idea
+ mInventoryPanel->setSelection(mSettingItemID, TAKE_FOCUS_NO);
}
}
@@ -147,12 +145,12 @@ void LLFloaterSettingsPicker::onClose(bool app_quitting)
void LLFloaterSettingsPicker::setValue(const LLSD& value)
{
- mSettingAssetID = value.asUUID();
+ mSettingItemID = value.asUUID();
}
LLSD LLFloaterSettingsPicker::getValue() const
{
- return LLSD(mSettingAssetID);
+ return LLSD(mSettingItemID);
}
void LLFloaterSettingsPicker::setSettingsFilter(LLSettingsType::type_e type)
@@ -267,24 +265,24 @@ void LLFloaterSettingsPicker::onSelectionChange(const LLFloaterSettingsPicker::i
if (items.size())
{
LLFolderViewItem* first_item = items.front();
- LLInventoryItem* itemp = gInventory.getItem(static_cast<LLFolderViewModelItemInventory*>(first_item->getViewModelItem())->getUUID());
+
mNoCopySettingsSelected = false;
- if (itemp)
+ if (first_item)
{
-// if (!mChangeIDSignal.empty())
-// {
-// mChangeIDSignal(itemp);
-// }
- if (!itemp->getPermissions().allowCopyBy(gAgent.getID()))
+ LLItemBridge *bridge_model = dynamic_cast<LLItemBridge *>(first_item->getViewModelItem());
+ if (bridge_model && bridge_model->getItem())
{
- mNoCopySettingsSelected = true;
- }
- setSettingsAssetId(itemp->getAssetUUID(), false);
- mViewModel->setDirty(); // *TODO: shouldn't we be using setValue() here?
+ if (!bridge_model->isItemCopyable())
+ {
+ mNoCopySettingsSelected = true;
+ }
+ setSettingsItemId(bridge_model->getItem()->getUUID(), false);
+ mViewModel->setDirty(); // *TODO: shouldn't we be using setValue() here?
- if (user_action)
- {
- mChangeIDSignal(mSettingAssetID);
+ if (user_action)
+ {
+ mChangeIDSignal(mSettingItemID);
+ }
}
}
}
@@ -298,24 +296,23 @@ void LLFloaterSettingsPicker::onButtonCancel()
void LLFloaterSettingsPicker::onButtonSelect()
{
if (mCommitSignal)
- (*mCommitSignal)(this, LLSD(mSettingAssetID));
+ (*mCommitSignal)(this, LLSD(mSettingItemID));
closeFloater();
}
BOOL LLFloaterSettingsPicker::handleDoubleClick(S32 x, S32 y, MASK mask)
{
- if (mSettingAssetID.notNull()
+ BOOL result = FALSE;
+ if (mSettingItemID.notNull()
&& mInventoryPanel)
{
- LLUUID item_id = findItemID(mSettingAssetID, FALSE);
S32 inventory_x = x - mInventoryPanel->getRect().mLeft;
S32 inventory_y = y - mInventoryPanel->getRect().mBottom;
- if (item_id.notNull()
- && mInventoryPanel->parentPointInView(inventory_x, inventory_y))
+ if (mInventoryPanel->parentPointInView(inventory_x, inventory_y))
{
// make sure item (not folder) is selected
- LLFolderViewItem* item_viewp = mInventoryPanel->getItemByID(item_id);
- if (item_viewp && item_viewp->isSelected())
+ LLFolderViewItem* item_viewp = mInventoryPanel->getItemByID(mSettingItemID);
+ if (item_viewp && item_viewp->getIsCurSelection())
{
LLRect target_rect;
item_viewp->localRectToOtherView(item_viewp->getLocalRect(), &target_rect, this);
@@ -323,14 +320,20 @@ BOOL LLFloaterSettingsPicker::handleDoubleClick(S32 x, S32 y, MASK mask)
{
// Quick-apply
if (mCommitSignal)
- (*mCommitSignal)(this, LLSD(mSettingAssetID));
+ (*mCommitSignal)(this, LLSD(mSettingItemID));
closeFloater();
- return TRUE;
}
}
+ // hit inside panel on free place or (de)unselected item, double click should do nothing
+ result = TRUE;
}
}
- return LLFloater::handleDoubleClick(x, y, mask);
+
+ if (!result)
+ {
+ result = LLFloater::handleDoubleClick(x, y, mask);
+ }
+ return result;
}
//=========================================================================
@@ -339,15 +342,14 @@ void LLFloaterSettingsPicker::setActive(bool active)
mActive = active;
}
-void LLFloaterSettingsPicker::setSettingsAssetId(const LLUUID &settings_id, bool set_selection)
+void LLFloaterSettingsPicker::setSettingsItemId(const LLUUID &settings_id, bool set_selection)
{
- if (mSettingAssetID != settings_id && mActive)
+ if (mSettingItemID != settings_id && mActive)
{
mNoCopySettingsSelected = false;
mViewModel->setDirty(); // *TODO: shouldn't we be using setValue() here?
- mSettingAssetID = settings_id;
- LLUUID item_id = findItemID(mSettingAssetID, FALSE);
- if (item_id.isNull())
+ mSettingItemID = settings_id;
+ if (mSettingItemID.isNull())
{
mInventoryPanel->getRootFolder()->clearSelection();
}
diff --git a/indra/newview/llsettingspicker.h b/indra/newview/llsettingspicker.h
index 7fcc7fd4a7..434eb04c61 100644
--- a/indra/newview/llsettingspicker.h
+++ b/indra/newview/llsettingspicker.h
@@ -46,9 +46,9 @@ class LLFloaterSettingsPicker : public LLFloater
public:
typedef std::function<void (LLUUID id)> commit_callback_t;
typedef std::function<void()> close_callback_t;
- typedef std::function<void(const LLUUID& asset_id)> id_changed_callback_t;
+ typedef std::function<void(const LLUUID& item_id)> id_changed_callback_t;
- LLFloaterSettingsPicker(LLView * owner, LLUUID setting_asset_id, const std::string &label, const LLSD &params = LLSD());
+ LLFloaterSettingsPicker(LLView * owner, LLUUID setting_item_id, const std::string &label, const LLSD &params = LLSD());
virtual ~LLFloaterSettingsPicker() override;
@@ -58,11 +58,8 @@ public:
virtual void onClose(bool app_quitting) override;
virtual void draw() override;
- void setSettingsAssetId(const LLUUID &settings_id, bool set_selection = true);
- LLUUID getSettingsAssetId() const { return mSettingAssetID; }
-
- void setDefaultSettingsAssetID(LLUUID id) { mDefaultSettingsAssetID = id; }
- LLUUID getDefaultSettingsAssetID() const { return mDefaultSettingsAssetID; }
+ void setSettingsItemId(const LLUUID &settings_id, bool set_selection = true);
+ LLUUID getSettingsItemId() const { return mSettingItemID; }
void setSettingsFilter(LLSettingsType::type_e type);
LLSettingsType::type_e getSettingsFilter() const { return mSettingsType; }
@@ -71,7 +68,7 @@ public:
virtual void setValue(const LLSD& value) override;
virtual LLSD getValue() const override;
- LLUUID findItemID(const LLUUID& asset_id, bool copyable_only, bool ignore_library = false)
+ static LLUUID findItemID(const LLUUID& asset_id, bool copyable_only, bool ignore_library = false)
{
LLInventoryItem *pitem = findItem(asset_id, copyable_only, ignore_library);
if (pitem)
@@ -79,7 +76,7 @@ public:
return LLUUID::null;
}
- std::string findItemName(const LLUUID& asset_id, bool copyable_only, bool ignore_library = false)
+ static std::string findItemName(const LLUUID& asset_id, bool copyable_only, bool ignore_library = false)
{
LLInventoryItem *pitem = findItem(asset_id, copyable_only, ignore_library);
if (pitem)
@@ -87,7 +84,7 @@ public:
return std::string();
}
- LLInventoryItem * findItem(const LLUUID& asset_id, bool copyable_only, bool ignore_library);
+ static LLInventoryItem * findItem(const LLUUID& asset_id, bool copyable_only, bool ignore_library);
private:
typedef std::deque<LLFolderViewItem *> itemlist_t;
@@ -101,8 +98,7 @@ private:
LLHandle<LLView> mOwnerHandle;
std::string mLabel;
- LLUUID mSettingAssetID;
- LLUUID mDefaultSettingsAssetID;
+ LLUUID mSettingItemID;
LLFilterEditor * mFilterEdit;
LLInventoryPanel * mInventoryPanel;
@@ -120,7 +116,7 @@ private:
// boost::signals2::signal<void(LLUUID id)> mCommitSignal;
boost::signals2::signal<void()> mCloseSignal;
- boost::signals2::signal<void(const LLUUID& asset_id)> mChangeIDSignal;
+ boost::signals2::signal<void(const LLUUID& item_id)> mChangeIDSignal;
};
#endif // LL_LLTEXTURECTRL_H
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 26f0ec7905..db18d6ed2c 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -8452,20 +8452,7 @@ class LLWorldEnvSettings : public view_listener_t
}
else if (event_name == "my_environs")
{
- LLUUID asset_id;
-
- LLSettingsBase::ptr_t cur(LLEnvironment::instance().getCurrentDay());
- if (!cur)
- {
- cur = LLEnvironment::instance().getCurrentSky();
- }
-
- if (cur)
- {
- asset_id = cur->getAssetId();
- }
-
- LLFloaterReg::showInstance("my_environments", LLSDMap("asset_id", LLSD::UUID(asset_id)));
+ LLFloaterReg::showInstance("my_environments");
}
return true;
diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp
index c83e27ceed..0d077161a6 100644
--- a/indra/newview/llviewerparcelmgr.cpp
+++ b/indra/newview/llviewerparcelmgr.cpp
@@ -1609,7 +1609,8 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
}
}
- bool environment_changed = (parcel->getParcelEnvironmentVersion() != parcel_environment_version);
+ S32 cur_parcel_environment_version = parcel->getParcelEnvironmentVersion();
+ bool environment_changed = (cur_parcel_environment_version != parcel_environment_version);
parcel->init(owner_id,
FALSE, FALSE, FALSE,
@@ -1636,8 +1637,7 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
parcel->setRegionDenyAnonymousOverride(region_deny_anonymous_override);
parcel->setRegionDenyAgeUnverifiedOverride(region_deny_age_unverified_override);
parcel->setRegionAllowAccessOverride(region_allow_access_override);
-
- parcel->setParcelEnvironmentVersion(parcel_environment_version);
+ parcel->setParcelEnvironmentVersion(cur_parcel_environment_version);
parcel->setRegionAllowEnvironmentOverride(region_allow_environment_override);
parcel->unpackMessage(msg);
@@ -1670,13 +1670,14 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
instance->mTeleportFinishedSignal(instance->mTeleportInProgressPosition, false);
}
}
-
+ parcel->setParcelEnvironmentVersion(parcel_environment_version);
LL_WARNS("LAPRAS") << "Parcel environment version is " << parcel->getParcelEnvironmentVersion() << LL_ENDL;
// Notify anything that wants to know when the agent changes parcels
gAgent.changeParcels();
}
else if (agent_parcel_update)
{
+ parcel->setParcelEnvironmentVersion(parcel_environment_version);
// updated agent parcel
parcel_mgr.mAgentParcel->unpackMessage(msg);
if ((LLEnvironment::instance().isExtendedEnvironmentEnabled() && environment_changed))
diff --git a/indra/newview/skins/default/textures/widgets/track_control_moon_back.png b/indra/newview/skins/default/textures/widgets/track_control_moon_back.png
index 73d24e53f6..30f538d35b 100644
--- a/indra/newview/skins/default/textures/widgets/track_control_moon_back.png
+++ b/indra/newview/skins/default/textures/widgets/track_control_moon_back.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/widgets/track_control_moon_front.png b/indra/newview/skins/default/textures/widgets/track_control_moon_front.png
index 64def00772..d3882c5e4c 100644
--- a/indra/newview/skins/default/textures/widgets/track_control_moon_front.png
+++ b/indra/newview/skins/default/textures/widgets/track_control_moon_front.png
Binary files differ
diff --git a/indra/newview/skins/default/xui/en/floater_my_environments.xml b/indra/newview/skins/default/xui/en/floater_my_environments.xml
index dd05dd5a20..4384c01033 100644
--- a/indra/newview/skins/default/xui/en/floater_my_environments.xml
+++ b/indra/newview/skins/default/xui/en/floater_my_environments.xml
@@ -102,7 +102,7 @@
background_visible="true"
bg_alpha_color="DkGray2"
border="true">
- <inventory_panel
+ <asset_filtered_inv_panel
left="0"
top="0"
right="-1"
@@ -110,7 +110,8 @@
allow_multi_select="false"
follows="all"
layout="topleft"
- name="pnl_settings"/>
+ name="pnl_settings"
+ filter_asset_type="settings"/>
</panel>
</layout_panel>
<layout_panel
@@ -125,8 +126,8 @@
label="Show Empty Folders"
layout="topleft"
name="chk_showfolders"
- top="0"
- left_delta="-3"
+ top="2"
+ left_delta="-1"
width="200" />
</layout_panel>
<layout_panel
@@ -139,7 +140,7 @@
<panel
background_visible="true"
bevel_style="none"
- top_pad="0"
+ top_pad="1"
follows="top|left|right"
height="30"
label="bottom_panel"
diff --git a/indra/newview/skins/default/xui/en/floater_settings_picker.xml b/indra/newview/skins/default/xui/en/floater_settings_picker.xml
index 2258a1dc24..7cc2c517ca 100644
--- a/indra/newview/skins/default/xui/en/floater_settings_picker.xml
+++ b/indra/newview/skins/default/xui/en/floater_settings_picker.xml
@@ -29,8 +29,6 @@
left="6"
right="-6"
bottom="-10"
- auto_resize="true"
- user_resize="true"
orientation="vertical">
<layout_panel name="temp"
border="false"
@@ -49,30 +47,30 @@
name="flt_inventory_search"
top="4"
right="-2" />
- <inventory_panel
+ <panel
+ name="pnl_inv_wrap"
+ follows="all"
+ layout="topleft"
+ left="2"
+ top="2"
+ right="-2"
+ bottom="-2"
+ background_visible="true"
+ bg_alpha_color="DkGray2">
+ <asset_filtered_inv_panel
allow_multi_select="false"
suppress_folder_menu="true"
bg_visible="true"
bg_alpha_color="DkGray2"
border="false"
- follows="left|top|right|bottom"
+ follows="all"
left_delta="0"
name="pnl_inventory"
- top="31"
+ top="1"
right="-4"
- bottom="-26"
- />
- <check_box
- follows="left|bottom"
- height="14"
- initial_value="false"
- label="Show folders"
- layout="topleft"
- name="chk_showfolders"
- top="-20"
- top_pad="0"
- left_delta="-3"
- width="200" />
+ bottom="-1"
+ filter_asset_type="settings" />
+ </panel>
</layout_panel>
<layout_panel name="temp"
border="false"