diff --git a/indra/newview/llfloaterlandholdings.cpp b/indra/newview/llfloaterlandholdings.cpp index f34760a6bf..749a3d2686 100644 --- a/indra/newview/llfloaterlandholdings.cpp +++ b/indra/newview/llfloaterlandholdings.cpp @@ -51,6 +51,9 @@ #include "llgroupactions.h" +const std::string LINDEN_HOMES_SKU = "131"; +bool LLFloaterLandHoldings::sHasLindenHome = false; + // protected LLFloaterLandHoldings::LLFloaterLandHoldings(const LLSD& key) : LLFloater(key), @@ -148,10 +151,24 @@ void LLFloaterLandHoldings::refresh() void LLFloaterLandHoldings::processPlacesReply(LLMessageSystem* msg, void**) { LLFloaterLandHoldings* self = LLFloaterReg::findTypedInstance("land_holdings"); - - // Is this packet from an old, closed window? + S32 count = msg->getNumberOfBlocks("QueryData"); + std::string land_sku; + sHasLindenHome = false; if (!self) { + for (S32 i = 0; i < count; i++) + { + if ( msg->getSizeFast(_PREHASH_QueryData, i, _PREHASH_ProductSKU) > 0 ) + { + msg->getStringFast( _PREHASH_QueryData, _PREHASH_ProductSKU, land_sku, i); + + if (LINDEN_HOMES_SKU == land_sku) + { + sHasLindenHome = true; + return; + } + } + } return; } @@ -174,12 +191,9 @@ void LLFloaterLandHoldings::processPlacesReply(LLMessageSystem* msg, void**) F32 global_x; F32 global_y; std::string sim_name; - std::string land_sku; std::string land_type; - S32 i; - S32 count = msg->getNumberOfBlocks("QueryData"); - for (i = 0; i < count; i++) + for (S32 i = 0; i < count; i++) { msg->getUUID("QueryData", "OwnerID", owner_id, i); msg->getString("QueryData", "Name", name, i); @@ -196,6 +210,10 @@ void LLFloaterLandHoldings::processPlacesReply(LLMessageSystem* msg, void**) msg->getStringFast( _PREHASH_QueryData, _PREHASH_ProductSKU, land_sku, i); LL_INFOS() << "Land sku: " << land_sku << LL_ENDL; land_type = LLProductInfoRequestManager::instance().getDescriptionForSku(land_sku); + if (LINDEN_HOMES_SKU == land_sku) + { + sHasLindenHome = true; + } } else { diff --git a/indra/newview/llfloaterlandholdings.h b/indra/newview/llfloaterlandholdings.h index d1d510bb40..90e75b1062 100644 --- a/indra/newview/llfloaterlandholdings.h +++ b/indra/newview/llfloaterlandholdings.h @@ -57,6 +57,8 @@ public: static void onGrantList(void* data); + static bool sHasLindenHome; + protected: void refreshAggregates(); diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index b36c814509..ea5030b477 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -2091,6 +2091,8 @@ void LLItemBridge::gotoItem() if (active_panel) { active_panel->setSelection(obj->getLinkedUUID(), TAKE_FOCUS_NO); + // Undo SL-13826 Open a new inventory floater for "Find original" and "Show original" result + //active_panel->setFocus(TRUE); } } @@ -8017,24 +8019,30 @@ void LLLinkFolderBridge::performAction(LLInventoryModel* model, std::string acti } LLItemBridge::performAction(model,action); } + void LLLinkFolderBridge::gotoItem() { - const LLUUID &cat_uuid = getFolderID(); - if (!cat_uuid.isNull()) - { - LLFolderViewItem *base_folder = mInventoryPanel.get()->getItemByID(cat_uuid); - if (base_folder) - { - if (LLInventoryModel* model = getInventoryModel()) - { - model->fetchDescendentsOf(cat_uuid); - } - base_folder->setOpen(TRUE); - mRoot->setSelection(base_folder,TRUE); - mRoot->scrollToShowSelection(); - } - } + // Undo SL-13826 Open a new inventory floater for "Find original" and "Show original" result + //LLItemBridge::gotoItem(); + //LLInventoryPanel::getActiveInventoryPanel()->openFolderByID(getFolderID()); + const LLUUID &cat_uuid = getFolderID(); + if (!cat_uuid.isNull()) + { + LLFolderViewItem *base_folder = mInventoryPanel.get()->getItemByID(cat_uuid); + if (base_folder) + { + if (LLInventoryModel* model = getInventoryModel()) + { + model->fetchDescendentsOf(cat_uuid); + } + base_folder->setOpen(TRUE); + mRoot->setSelection(base_folder,TRUE); + mRoot->scrollToShowSelection(); + } + } + // } + const LLUUID &LLLinkFolderBridge::getFolderID() const { if (LLViewerInventoryItem *link_item = getItem()) diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp index 7dc8d71176..7360c97833 100644 --- a/indra/newview/llinventoryfunctions.cpp +++ b/indra/newview/llinventoryfunctions.cpp @@ -881,7 +881,8 @@ void show_item_profile(const LLUUID& item_uuid) void show_item_original(const LLUUID& item_uuid) { - // FIRE-19493: "Show Original" should open main inventory panel + // FIRE-19493: "Show Original" should open main inventory panel; + // Undo SL-13826 Open a new inventory floater for "Find original" and "Show original" result //LLFloater* floater_inventory = LLFloaterReg::getInstance("inventory"); //if (!floater_inventory) //{ @@ -890,9 +891,7 @@ void show_item_original(const LLUUID& item_uuid) //} ////sidetray inventory panel - //LLSidepanelInventory *sidepanel_inventory = LLFloaterSidePanelContainer::getPanel("inventory"); - - //bool do_reset_inventory_filter = !floater_inventory->isInVisibleChain(); + //LLSidepanelInventory *sidepanel_inventory = LLPanelMainInventory::newWindow()->LLFloaterSidePanelContainer::getPanel("inventory"); //LLInventoryPanel* active_panel = LLInventoryPanel::getActiveInventoryPanel(); //if (!active_panel) @@ -911,11 +910,7 @@ void show_item_original(const LLUUID& item_uuid) // return; //} //active_panel->setSelection(gInventory.getLinkedItemID(item_uuid), TAKE_FOCUS_YES); - // - //if(do_reset_inventory_filter) - //{ - // reset_inventory_filter(); - //} + //active_panel->setFocus(TRUE); LLFloaterReg::showInstance("inventory"); LLSidepanelInventory* sidepanel_inventory = LLFloaterSidePanelContainer::getPanel("inventory"); @@ -2755,6 +2750,17 @@ void LLInventoryAction::doToSelected(LLInventoryModel* model, LLFolderView* root // else { + // Undo SL-13826 Open a new inventory floater for "Find original" and "Show original" result + //if (action == "goto") + //{ + // LLSidepanelInventory *sidepanel_inventory = LLPanelMainInventory::newWindow()->LLFloaterSidePanelContainer::getPanel("inventory"); + // if (sidepanel_inventory && sidepanel_inventory->getMainInventoryPanel()) + // { + // model = sidepanel_inventory->getMainInventoryPanel()->getActivePanel()->getModel(); + // } + //} + // + std::set::iterator set_iter; for (set_iter = selected_items.begin(); set_iter != selected_items.end(); ++set_iter) { diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index de26ff3895..b4dab6265d 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -379,6 +379,8 @@ void LLInventoryPanel::draw() { // Select the desired item (in case it wasn't loaded when the selection was requested) updateSelection(); + // Undo SL-13826 Open a new inventory floater for "Find original" and "Show original" result + //updateFolderState(); LLPanel::draw(); } @@ -1314,6 +1316,8 @@ void LLInventoryPanel::setSelectCallback(const boost::function Undo SL-13826 Open a new inventory floater for "Find original" and "Show original" result + //mOpenFolderID.setNull(); } LLInventoryPanel::selected_items_t LLInventoryPanel::getSelectedItems() const @@ -1919,6 +1923,32 @@ void LLInventoryPanel::updateSelection() } } +// Undo SL-13826 Open a new inventory floater for "Find original" and "Show original" result +//void LLInventoryPanel::openFolderByID( const LLUUID& folder_id) +//{ +// LLFolderViewItem* itemp = getItemByID(folder_id); +// if(itemp && itemp->getViewModelItem()) +// { +// itemp->setOpen(TRUE); +// mOpenFolderID.setNull(); +// return; +// } +// else +// { +// // save the desired folder to be open later (if/when ready) +// mOpenFolderID = folder_id; +// } +//} +// +//void LLInventoryPanel::updateFolderState() +//{ +// if (mOpenFolderID.notNull()) +// { +// openFolderByID(mOpenFolderID); +// } +//} +// + void LLInventoryPanel::doToSelected(const LLSD& userdata) { if (("purge" == userdata.asString())) diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h index b610d23f5d..2db0c972ec 100644 --- a/indra/newview/llinventorypanel.h +++ b/indra/newview/llinventorypanel.h @@ -253,7 +253,11 @@ public: LLFolderViewItem* getItemByID(const LLUUID& id); LLFolderViewFolder* getFolderByID(const LLUUID& id); void setSelectionByID(const LLUUID& obj_id, BOOL take_keyboard_focus); + // Undo SL-13826 Open a new inventory floater for "Find original" and "Show original" result + //void openFolderByID(const LLUUID& folder_id); void updateSelection(); + // Undo SL-13826 Open a new inventory floater for "Find original" and "Show original" result + //void updateFolderState(); void setSuppressOpenItemAction(bool supress_open_item) { mSuppressOpenItemAction = supress_open_item; } @@ -269,7 +273,9 @@ protected: void openStartFolderOrMyInventory(); // open the first level of inventory void onItemsCompletion(); // called when selected items are complete - LLUUID mSelectThisID; + LLUUID mSelectThisID; + // Undo SL-13826 Open a new inventory floater for "Find original" and "Show original" result + //LLUUID mOpenFolderID; LLInventoryModel* mInventory; LLInventoryObserver* mInventoryObserver; LLInvPanelComplObserver* mCompletionObserver; @@ -364,27 +370,6 @@ private: bool mViewsInitialized; // Views have been generated }; - -class LLInventoryFavoriteItemsPanel : public LLInventoryPanel -{ -public: - struct Params : public LLInitParam::Block - {}; - - void initFromParams(const Params& p); - bool isSelectionRemovable() { return false; } - void setSelectCallback(const boost::function& items, BOOL user_action)>& cb); - -protected: - LLInventoryFavoriteItemsPanel(const Params& params); - ~LLInventoryFavoriteItemsPanel() { mFolderChangedSignal.disconnect(); } - void updateFavoritesRootFolder(); - - boost::signals2::connection mFolderChangedSignal; - boost::function& items, BOOL user_action)> mSelectionCallback; - friend class LLUICtrlFactory; -}; - /************************************************************************/ /* Asset Pre-Filtered Inventory Panel related class */ /* Exchanges filter's flexibility for speed of generation and */ diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index d97739f859..c4cac31361 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -495,15 +495,16 @@ void LLPanelMainInventory::closeAllFolders() getPanel()->getRootFolder()->closeAllFolders(); } -void LLPanelMainInventory::newWindow() +LLFloaterSidePanelContainer* LLPanelMainInventory::newWindow() { static S32 instance_num = 0; instance_num = (instance_num + 1) % S32_MAX; if (!gAgentCamera.cameraMouselook()) { - LLFloaterReg::showTypedInstance("inventory", LLSD(instance_num)); + return LLFloaterReg::showTypedInstance("inventory", LLSD(instance_num)); } + return NULL; } void LLPanelMainInventory::doCreate(const LLSD& userdata) @@ -1756,7 +1757,18 @@ void LLPanelMainInventory::onCustomAction(const LLSD& userdata) { return; } - static_cast(current_item->getViewModelItem())->performAction(getActivePanel()->getModel(), "goto"); + // Undo SL-13826 Open a new inventory floater for "Find original" and "Show original" result + //LLSidepanelInventory *sidepanel_inventory = newWindow()->LLFloaterSidePanelContainer::getPanel("inventory"); + //if (sidepanel_inventory) + //{ + // LLPanelMainInventory* new_inventory = sidepanel_inventory->getMainInventoryPanel(); + // if (new_inventory) + // { + // static_cast(current_item->getViewModelItem())->performAction(new_inventory->getActivePanel()->getModel(), "goto"); + // } + //} + static_cast(current_item->getViewModelItem())->performAction(getActivePanel()->getModel(), "goto"); + // } if (command_name == "find_links") diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h index 0c0215858c..f07486d4a4 100644 --- a/indra/newview/llpanelmaininventory.h +++ b/indra/newview/llpanelmaininventory.h @@ -47,6 +47,7 @@ class LLMenuButton; class LLMenuGL; class LLToggleableMenu; class LLFloater; +class LLFloaterSidePanelContainer; class LLComboBox; // Filter dropdown //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -98,7 +99,7 @@ public: void setFocusFilterEditor(); - static void newWindow(); + static LLFloaterSidePanelContainer* newWindow(); void toggleFindOptions(); diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 7a839d7b1b..4bc521d279 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -132,10 +132,12 @@ #include "llpanelpick.h" #include "llpanelgrouplandmoney.h" #include "llpanelgroupnotices.h" +#include "llparcel.h" #include "llpreview.h" #include "llpreviewscript.h" #include "llproxy.h" #include "llproductinforequest.h" +#include "llqueryflags.h" #include "llselectmgr.h" #include "llsky.h" #include "llstatview.h" @@ -3132,6 +3134,14 @@ bool idle_startup() gAgentAvatarp->sendHoverHeight(); + // look for parcels we own + send_places_query(LLUUID::null, + LLUUID::null, + "", + DFQ_AGENT_OWNED, + LLParcel::C_ANY, + ""); + // FIRE-6643 Display MOTD when login screens are disabled if (gSavedSettings.getBOOL("FSDisableLoginScreens")) { diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 1a42d91b32..316d6a1e9d 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -68,6 +68,7 @@ #include "llfloaterimcontainer.h" #include "llfloaterland.h" #include "llfloaterimnearbychat.h" +#include "llfloaterlandholdings.h" #include "llfloaterpathfindingcharacters.h" #include "llfloaterpathfindinglinksets.h" #include "llfloaterpay.h" @@ -7163,6 +7164,16 @@ class LLWorldSetHomeLocation : public view_listener_t } }; +class LLWorldLindenHome : public view_listener_t +{ + bool handleEvent(const LLSD& userdata) + { + std::string url = LLFloaterLandHoldings::sHasLindenHome ? LLTrans::getString("lindenhomes_my_home_url") : LLTrans::getString("lindenhomes_get_home_url"); + LLWeb::loadURL(url); + return true; + } +}; + class LLWorldTeleportHome : public view_listener_t { bool handleEvent(const LLSD& userdata) @@ -11072,6 +11083,17 @@ public: } }; +class LLUpdateMembershipLabel : public view_listener_t +{ + bool handleEvent(const LLSD& userdata) + { + const std::string label_str = LLAgentBenefitsMgr::isCurrent("Base") ? LLTrans::getString("MembershipUpgradeText") : LLTrans::getString("MembershipPremiumText"); + gMenuHolder->childSetLabelArg("Membership", "[Membership]", label_str); + + return true; + } +}; + void handle_voice_morphing_subscribe() { LLWeb::loadURL(LLTrans::getString("voice_morphing_url")); @@ -11398,6 +11420,8 @@ void initialize_menus() view_listener_t::addEnable(new LLUploadCostCalculator(), "Upload.CalculateCosts"); + view_listener_t::addEnable(new LLUpdateMembershipLabel(), "Membership.UpdateLabel"); + // [FS communication UI] //enable.add("Conversation.IsConversationLoggingAllowed", boost::bind(&LLFloaterIMContainer::isConversationLoggingAllowed)); @@ -11488,6 +11512,8 @@ void initialize_menus() view_listener_t::addMenu(new LLWorldTeleportHome(), "World.TeleportHome"); view_listener_t::addMenu(new LLWorldSetAway(), "World.SetAway"); view_listener_t::addMenu(new LLWorldSetDoNotDisturb(), "World.SetDoNotDisturb"); + view_listener_t::addMenu(new LLWorldLindenHome(), "World.LindenHome"); + view_listener_t::addMenu(new LLWorldGetAway(), "World.GetAway"); //[SJ FIRE-2177] view_listener_t::addMenu(new LLWorldGetBusy(), "World.GetBusy"); //[SJ FIRE-2177] view_listener_t::addMenu(new LLWorldSetAutorespond(), "World.SetAutorespond"); diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 890741744d..6739eeee71 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -36,6 +36,16 @@ function="BuyCurrency" /> + + + + + + + + + https://secondlife.com/destination/voice-island https://secondlife.com/destination/voice-morphing-premium + https://secondlife.com/land/lindenhomes/member.php + https://land.secondlife.com/en-Us/lindenhomes/my-home.php + https://secondlife.com/my/account/membership.php + [NAME] paid you L$[AMOUNT] [REASON]. [NAME] paid you L$[AMOUNT]: [REASON] @@ -2473,6 +2477,9 @@ If you continue to experience problems, please check your network and firewall s Premium Plus Internal + Upgrade to Premium + My Premium membership + Delete selected items? Delete selected item?