summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
Diffstat (limited to 'indra')
-rw-r--r--indra/llui/lluictrlfactory.cpp26
-rw-r--r--indra/newview/lloutfitgallery.cpp2
-rw-r--r--indra/newview/lltexturectrl.cpp12
-rw-r--r--indra/newview/lltexturectrl.h2
-rw-r--r--indra/newview/llviewermenu.cpp131
-rw-r--r--indra/newview/llvowlsky.cpp12
-rw-r--r--indra/newview/skins/default/xui/en/menu_viewer.xml20
-rw-r--r--indra/newview/skins/default/xui/en/notifications.xml1
8 files changed, 149 insertions, 57 deletions
diff --git a/indra/llui/lluictrlfactory.cpp b/indra/llui/lluictrlfactory.cpp
index 4cc7da1267..fdefae01b1 100644
--- a/indra/llui/lluictrlfactory.cpp
+++ b/indra/llui/lluictrlfactory.cpp
@@ -92,15 +92,27 @@ void LLUICtrlFactory::loadWidgetTemplate(const std::string& widget_tag, LLInitPa
{
std::string filename = gDirUtilp->add("widgets", widget_tag + ".xml");
LLXMLNodePtr root_node;
+ std::vector<std::string> search_paths =
+ gDirUtilp->findSkinnedFilenames(LLDir::XUI, filename);
- // Here we're looking for the "en" version, the default-language version
- // of the file, rather than the localized version.
- std::string full_filename = gDirUtilp->findSkinnedFilenameBaseLang(LLDir::XUI, filename);
- if (!full_filename.empty())
+ if (search_paths.empty())
{
- LLUICtrlFactory::instance().pushFileName(full_filename);
- LLSimpleXUIParser parser;
- parser.readXUI(full_filename, block);
+ return;
+ }
+
+ // "en" version, the default-language version of the file.
+ std::string base_filename = search_paths.front();
+ if (!base_filename.empty())
+ {
+ LLUICtrlFactory::instance().pushFileName(base_filename);
+
+ if (!LLXMLNode::getLayeredXMLNode(root_node, search_paths))
+ {
+ LL_WARNS() << "Couldn't parse widget from: " << base_filename << LL_ENDL;
+ return;
+ }
+ LLXUIParser parser;
+ parser.readXUI(root_node, block, base_filename);
LLUICtrlFactory::instance().popFileName();
}
}
diff --git a/indra/newview/lloutfitgallery.cpp b/indra/newview/lloutfitgallery.cpp
index 8887a61857..eeeb7e5c25 100644
--- a/indra/newview/lloutfitgallery.cpp
+++ b/indra/newview/lloutfitgallery.cpp
@@ -1194,7 +1194,7 @@ void LLOutfitGallery::onTexturePickerCommit(LLTextureCtrl::ETexturePickOp op, LL
}
else
{
- image_item_id = floaterp->findItemID(floaterp->getAssetID(), FALSE);
+ image_item_id = floaterp->findItemID(floaterp->getAssetID(), FALSE, TRUE);
if (image_item_id.isNull())
{
LL_WARNS() << "id or image_item_id is NULL!" << LL_ENDL;
diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp
index c159830c22..c7adaa908f 100644
--- a/indra/newview/lltexturectrl.cpp
+++ b/indra/newview/lltexturectrl.cpp
@@ -564,7 +564,7 @@ void LLFloaterTexturePicker::draw()
}
}
-const LLUUID& LLFloaterTexturePicker::findItemID(const LLUUID& asset_id, BOOL copyable_only)
+const LLUUID& LLFloaterTexturePicker::findItemID(const LLUUID& asset_id, BOOL copyable_only, BOOL ignore_library)
{
LLViewerInventoryCategory::cat_array_t cats;
LLViewerInventoryItem::item_array_t items;
@@ -584,7 +584,10 @@ const LLUUID& LLFloaterTexturePicker::findItemID(const LLUUID& asset_id, BOOL co
LLPermissions item_permissions = itemp->getPermissions();
if (item_permissions.allowCopyBy(gAgent.getID(), gAgent.getGroupID()))
{
- return itemp->getUUID();
+ if(!ignore_library || !gInventory.isObjectDescendentOf(itemp->getUUID(),gInventory.getLibraryRootFolderID()))
+ {
+ return itemp->getUUID();
+ }
}
}
// otherwise just return first instance, unless copyable requested
@@ -594,7 +597,10 @@ const LLUUID& LLFloaterTexturePicker::findItemID(const LLUUID& asset_id, BOOL co
}
else
{
- return items[0]->getUUID();
+ if(!ignore_library || !gInventory.isObjectDescendentOf(items[0]->getUUID(),gInventory.getLibraryRootFolderID()))
+ {
+ return items[0]->getUUID();
+ }
}
}
diff --git a/indra/newview/lltexturectrl.h b/indra/newview/lltexturectrl.h
index 61f99de5c0..840feddfaf 100644
--- a/indra/newview/lltexturectrl.h
+++ b/indra/newview/lltexturectrl.h
@@ -278,7 +278,7 @@ public:
void setImageID(const LLUUID& image_asset_id, bool set_selection = true);
void updateImageStats();
const LLUUID& getAssetID() { return mImageAssetID; }
- const LLUUID& findItemID(const LLUUID& asset_id, BOOL copyable_only);
+ const LLUUID& findItemID(const LLUUID& asset_id, BOOL copyable_only, BOOL ignore_library = FALSE);
void setCanApplyImmediately(BOOL b);
void setActive(BOOL active);
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 74e1b865d8..24df985e3a 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -79,6 +79,7 @@
#include "lllandmarkactions.h"
#include "llgroupmgr.h"
#include "lltooltip.h"
+#include "lltoolface.h"
#include "llhints.h"
#include "llhudeffecttrail.h"
#include "llhudmanager.h"
@@ -1212,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())
@@ -5184,30 +5186,83 @@ 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->getLastSelectedTE();
+
+ if ((fwd || ifwd) && selected_te >= 0)
+ {
+ 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) && selected_te < te_count)
+ {
+ 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
@@ -5249,22 +5304,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;
}
};
@@ -8746,7 +8819,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");
diff --git a/indra/newview/llvowlsky.cpp b/indra/newview/llvowlsky.cpp
index 90bc6509a6..16130b5ca7 100644
--- a/indra/newview/llvowlsky.cpp
+++ b/indra/newview/llvowlsky.cpp
@@ -810,18 +810,18 @@ BOOL LLVOWLSky::updateStarGeometry(LLDrawable *drawable)
up *= sc;
*(verticesp++) = mStarVertices[vtx];
- *(verticesp++) = mStarVertices[vtx]+left;
+ *(verticesp++) = mStarVertices[vtx]+up;
*(verticesp++) = mStarVertices[vtx]+left+up;
- *(verticesp++) = mStarVertices[vtx]+left;
+ *(verticesp++) = mStarVertices[vtx];
*(verticesp++) = mStarVertices[vtx]+left+up;
- *(verticesp++) = mStarVertices[vtx]+up;
+ *(verticesp++) = mStarVertices[vtx]+left;
- *(texcoordsp++) = LLVector2(0,0);
- *(texcoordsp++) = LLVector2(0,1);
+ *(texcoordsp++) = LLVector2(1,0);
*(texcoordsp++) = LLVector2(1,1);
*(texcoordsp++) = LLVector2(0,1);
- *(texcoordsp++) = LLVector2(1,1);
*(texcoordsp++) = LLVector2(1,0);
+ *(texcoordsp++) = LLVector2(0,1);
+ *(texcoordsp++) = LLVector2(0,0);
*(colorsp++) = LLColor4U(mStarColors[vtx]);
*(colorsp++) = LLColor4U(mStarColors[vtx]);
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 8a649a57d1..dce06630f8 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -885,12 +885,12 @@
</menu_item_check>
<menu
create_jump_keys="true"
- label="Select Linked Parts"
- name="Select Linked Parts"
+ label="Select Elements"
+ name="Select Elements"
tear_off="true">
<menu_item_call
- label="Select Next Part"
- name="Select Next Part"
+ label="Select Next Part or Face"
+ name="Select Next Part or Face"
shortcut="control|.">
<menu_item_call.on_click
function="Tools.SelectNextPart"
@@ -899,8 +899,8 @@
function="Tools.EnableSelectNextPart" />
</menu_item_call>
<menu_item_call
- label="Select Previous Part"
- name="Select Previous Part"
+ label="Select Previous Part or Face"
+ name="Select Previous Part or Face"
shortcut="control|,">
<menu_item_call.on_click
function="Tools.SelectNextPart"
@@ -909,8 +909,8 @@
function="Tools.EnableSelectNextPart" />
</menu_item_call>
<menu_item_call
- label="Include Next Part"
- name="Include Next Part"
+ label="Include Next Part or Face"
+ name="Include Next Part or Face"
shortcut="control|shift|.">
<menu_item_call.on_click
function="Tools.SelectNextPart"
@@ -919,8 +919,8 @@
function="Tools.EnableSelectNextPart" />
</menu_item_call>
<menu_item_call
- label="Include Previous Part"
- name="Include Previous Part"
+ label="Include Previous Part or Face"
+ name="Include Previous Part or Face"
shortcut="control|shift|,">
<menu_item_call.on_click
function="Tools.SelectNextPart"
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index db90e6a163..6f959cc484 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -6164,6 +6164,7 @@ Link to this from a web page to give others easy access to this location, or try
icon="alertmodal.tga"
name="WLSavePresetAlert"
type="alertmodal">
+ <unique/>
Do you wish to overwrite the saved preset?
<tag>confirm</tag>
<usetemplate