summaryrefslogtreecommitdiff
path: root/indra/newview/llviewermenu.cpp
diff options
context:
space:
mode:
authorNat Goodspeed <nat@lindenlab.com>2016-12-08 14:27:40 -0500
committerNat Goodspeed <nat@lindenlab.com>2016-12-08 14:27:40 -0500
commitb6dc755786fb06ab109eb36f402a25edaf24ce14 (patch)
tree04f465dd42a555f15bf2729ad4a2fcea181db1c9 /indra/newview/llviewermenu.cpp
parent5bb456d80cfbcdfe87526510f3b8297d315afdd8 (diff)
parenta65b586b184d9837e0586b4df0d2e758ccce63f6 (diff)
Automated merge with ssh://bitbucket.org/lindenlab/viewer-skip-llcorehttp-test
Diffstat (limited to 'indra/newview/llviewermenu.cpp')
-rw-r--r--indra/newview/llviewermenu.cpp148
1 files changed, 115 insertions, 33 deletions
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 72579d4d7a..99b7a98abc 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -62,7 +62,6 @@
#include "llfloaterbuycontents.h"
#include "llbuycurrencyhtml.h"
#include "llfloatergodtools.h"
-#include "llfloaterinventory.h"
#include "llfloaterimcontainer.h"
#include "llfloaterland.h"
#include "llfloaterimnearbychat.h"
@@ -80,6 +79,7 @@
#include "lllandmarkactions.h"
#include "llgroupmgr.h"
#include "lltooltip.h"
+#include "lltoolface.h"
#include "llhints.h"
#include "llhudeffecttrail.h"
#include "llhudmanager.h"
@@ -89,6 +89,7 @@
#include "llinventoryfunctions.h"
#include "llpanellogin.h"
#include "llpanelblockedlist.h"
+#include "llpanelmaininventory.h"
#include "llmarketplacefunctions.h"
#include "llmenuoptionpathfindingrebakenavmesh.h"
#include "llmoveview.h"
@@ -133,6 +134,7 @@
#include "llpathfindingmanager.h"
#include "llstartup.h"
#include "boost/unordered_map.hpp"
+#include "llcleanup.h"
using namespace LLAvatarAppearanceDefines;
@@ -1211,14 +1213,15 @@ class LLAdvancedToggleWireframe : public view_listener_t
bool handleEvent(const LLSD& userdata)
{
gUseWireframe = !(gUseWireframe);
+ gWindowResized = TRUE;
+
+ LLPipeline::updateRenderDeferred();
if (gUseWireframe)
{
gInitialDeferredModeForWireframe = LLPipeline::sRenderDeferred;
}
- gWindowResized = TRUE;
- LLPipeline::updateRenderDeferred();
gPipeline.resetVertexBuffers();
if (!gUseWireframe && !gInitialDeferredModeForWireframe && LLPipeline::sRenderDeferred != gInitialDeferredModeForWireframe && gPipeline.isInit())
@@ -5183,30 +5186,91 @@ class LLToolsEnableSelectNextPart : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
{
- bool new_value = (gSavedSettings.getBOOL("EditLinkedParts") &&
- !LLSelectMgr::getInstance()->getSelection()->isEmpty());
+ bool new_value = (!LLSelectMgr::getInstance()->getSelection()->isEmpty()
+ && (gSavedSettings.getBOOL("EditLinkedParts")
+ || LLToolFace::getInstance() == LLToolMgr::getInstance()->getCurrentTool()));
return new_value;
}
};
-// Cycle selection through linked children in selected object.
+// Cycle selection through linked children or/and faces in selected object.
// FIXME: Order of children list is not always the same as sim's idea of link order. This may confuse
// resis. Need link position added to sim messages to address this.
-class LLToolsSelectNextPart : public view_listener_t
+class LLToolsSelectNextPartFace : public view_listener_t
{
- bool handleEvent(const LLSD& userdata)
- {
+ bool handleEvent(const LLSD& userdata)
+ {
+ bool cycle_faces = LLToolFace::getInstance() == LLToolMgr::getInstance()->getCurrentTool();
+ bool cycle_linked = gSavedSettings.getBOOL("EditLinkedParts");
+
+ if (!cycle_faces && !cycle_linked)
+ {
+ // Nothing to do
+ return true;
+ }
+
+ bool fwd = (userdata.asString() == "next");
+ bool prev = (userdata.asString() == "previous");
+ bool ifwd = (userdata.asString() == "includenext");
+ bool iprev = (userdata.asString() == "includeprevious");
+
+ LLViewerObject* to_select = NULL;
+ bool restart_face_on_part = !cycle_faces;
+ S32 new_te = 0;
+
+ if (cycle_faces)
+ {
+ // Cycle through faces of current selection, if end is reached, swithc to next part (if present)
+ LLSelectNode* nodep = LLSelectMgr::getInstance()->getSelection()->getFirstNode();
+ if (!nodep) return false;
+ to_select = nodep->getObject();
+ if (!to_select) return false;
+
+ S32 te_count = to_select->getNumTEs();
+ S32 selected_te = nodep->getLastOperatedTE();
+
+ if (fwd || ifwd)
+ {
+ if (selected_te < 0)
+ {
+ new_te = 0;
+ }
+ else if (selected_te + 1 < te_count)
+ {
+ // select next face
+ new_te = selected_te + 1;
+ }
+ else
+ {
+ // restart from first face on next part
+ restart_face_on_part = true;
+ }
+ }
+ else if (prev || iprev)
+ {
+ if (selected_te > te_count)
+ {
+ new_te = te_count - 1;
+ }
+ else if (selected_te - 1 >= 0)
+ {
+ // select previous face
+ new_te = selected_te - 1;
+ }
+ else
+ {
+ // restart from last face on next part
+ restart_face_on_part = true;
+ }
+ }
+ }
+
S32 object_count = LLSelectMgr::getInstance()->getSelection()->getObjectCount();
- if (gSavedSettings.getBOOL("EditLinkedParts") && object_count)
+ if (cycle_linked && object_count && restart_face_on_part)
{
LLViewerObject* selected = LLSelectMgr::getInstance()->getSelection()->getFirstObject();
if (selected && selected->getRootEdit())
{
- bool fwd = (userdata.asString() == "next");
- bool prev = (userdata.asString() == "previous");
- bool ifwd = (userdata.asString() == "includenext");
- bool iprev = (userdata.asString() == "includeprevious");
- LLViewerObject* to_select = NULL;
LLViewerObject::child_list_t children = selected->getRootEdit()->getChildren();
children.push_front(selected->getRootEdit()); // need root in the list too
@@ -5248,22 +5312,40 @@ class LLToolsSelectNextPart : public view_listener_t
}
}
}
-
- if (to_select)
- {
- if (gFocusMgr.childHasKeyboardFocus(gFloaterTools))
- {
- gFocusMgr.setKeyboardFocus(NULL); // force edit toolbox to commit any changes
- }
- if (fwd || prev)
- {
- LLSelectMgr::getInstance()->deselectAll();
- }
- LLSelectMgr::getInstance()->selectObjectOnly(to_select);
- return true;
- }
}
}
+
+ if (to_select)
+ {
+ if (gFocusMgr.childHasKeyboardFocus(gFloaterTools))
+ {
+ gFocusMgr.setKeyboardFocus(NULL); // force edit toolbox to commit any changes
+ }
+ if (fwd || prev)
+ {
+ LLSelectMgr::getInstance()->deselectAll();
+ }
+ if (cycle_faces)
+ {
+ if (restart_face_on_part)
+ {
+ if (fwd || ifwd)
+ {
+ new_te = 0;
+ }
+ else
+ {
+ new_te = to_select->getNumTEs() - 1;
+ }
+ }
+ LLSelectMgr::getInstance()->addAsIndividual(to_select, new_te, FALSE);
+ }
+ else
+ {
+ LLSelectMgr::getInstance()->selectObjectOnly(to_select);
+ }
+ return true;
+ }
return true;
}
};
@@ -8509,7 +8591,7 @@ class LLWorldPostProcess : public view_listener_t
void handle_flush_name_caches()
{
- LLAvatarNameCache::cleanupClass();
+ SUBSYSTEM_CLEANUP(LLAvatarNameCache);
if (gCacheName) gCacheName->clear();
}
@@ -8553,7 +8635,7 @@ class LLToggleUIHints : public view_listener_t
void LLUploadCostCalculator::calculateCost()
{
- S32 upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload();
+ S32 upload_cost = LLGlobalEconomy::getInstance()->getPriceUpload();
// getPriceUpload() returns -1 if no data available yet.
if(upload_cost >= 0)
@@ -8770,7 +8852,7 @@ void initialize_menus()
view_listener_t::addMenu(new LLToolsEditLinkedParts(), "Tools.EditLinkedParts");
view_listener_t::addMenu(new LLToolsSnapObjectXY(), "Tools.SnapObjectXY");
view_listener_t::addMenu(new LLToolsUseSelectionForGrid(), "Tools.UseSelectionForGrid");
- view_listener_t::addMenu(new LLToolsSelectNextPart(), "Tools.SelectNextPart");
+ view_listener_t::addMenu(new LLToolsSelectNextPartFace(), "Tools.SelectNextPart");
commit.add("Tools.Link", boost::bind(&LLSelectMgr::linkObjects, LLSelectMgr::getInstance()));
commit.add("Tools.Unlink", boost::bind(&LLSelectMgr::unlinkObjects, LLSelectMgr::getInstance()));
view_listener_t::addMenu(new LLToolsStopAllAnimations(), "Tools.StopAllAnimations");
@@ -9097,7 +9179,7 @@ void initialize_menus()
view_listener_t::addMenu(new LLGoToObject(), "GoToObject");
commit.add("PayObject", boost::bind(&handle_give_money_dialog));
- commit.add("Inventory.NewWindow", boost::bind(&LLFloaterInventory::showAgentInventory));
+ commit.add("Inventory.NewWindow", boost::bind(&LLPanelMainInventory::newWindow));
enable.add("EnablePayObject", boost::bind(&enable_pay_object));
enable.add("EnablePayAvatar", boost::bind(&enable_pay_avatar));