diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 85be40c587..9421f46b1a 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -21483,28 +21483,6 @@ Change of this parameter will affect the layout of buttons in notification toast
Value
90
- FSBuildPrefs_EmbedItem
-
- FSBuildPrefs_Item
-
FSBuildPrefs_Phantom
+ FSBuildPrefs_EmbedItem
+
+ FSBuildPrefs_Item
+
diff --git a/indra/newview/fscommon.cpp b/indra/newview/fscommon.cpp
index 683bb7fc89..8276824216 100644
--- a/indra/newview/fscommon.cpp
+++ b/indra/newview/fscommon.cpp
@@ -193,23 +193,26 @@ void FSCommon::applyDefaultBuildPreferences(LLViewerObject* object)
}
object->sendTEUpdate();
- if(gSavedSettings.getBOOL("FSBuildPrefs_EmbedItem"))
+ if (gSavedPerAccountSettings.getBOOL("FSBuildPrefs_EmbedItem"))
{
- LLViewerInventoryItem* item = (LLViewerInventoryItem*)gInventory.getItem((LLUUID)gSavedSettings.getString("FSBuildPrefs_Item"));
- if(item)
+ LLUUID item_id(gSavedPerAccountSettings.getString("FSBuildPrefs_Item"));
+ if (item_id.notNull())
{
- if (item->getType() == LLAssetType::AT_LSL_TEXT)
+ LLInventoryItem* item = dynamic_cast(gInventory.getObject(item_id));
+ if (item)
{
-
- LLToolDragAndDrop::dropScript(object, item, TRUE,
- LLToolDragAndDrop::SOURCE_AGENT,
- gAgentID);
- }
- else
- {
- LLToolDragAndDrop::dropInventory(object, item,
- LLToolDragAndDrop::SOURCE_AGENT,
- gAgentID);
+ if (item->getType() == LLAssetType::AT_LSL_TEXT)
+ {
+ LLToolDragAndDrop::dropScript(object, item, TRUE,
+ LLToolDragAndDrop::SOURCE_AGENT,
+ gAgentID);
+ }
+ else
+ {
+ LLToolDragAndDrop::dropInventory(object, item,
+ LLToolDragAndDrop::SOURCE_AGENT,
+ gAgentID);
+ }
}
}
}
diff --git a/indra/newview/fsdroptarget.cpp b/indra/newview/fsdroptarget.cpp
index e06b67749b..466cfd8f69 100644
--- a/indra/newview/fsdroptarget.cpp
+++ b/indra/newview/fsdroptarget.cpp
@@ -36,6 +36,7 @@
static LLDefaultChildRegistry::Register r1("fs_copytrans_inventory_drop_target");
static LLDefaultChildRegistry::Register r2("fs_inventory_link_replace_drop_target");
static LLDefaultChildRegistry::Register r3("profile_drop_target");
+static LLDefaultChildRegistry::Register r4("fs_embedded_item_drop_target");
BOOL FSCopyTransInventoryDropTarget::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
@@ -144,3 +145,34 @@ BOOL FSDropTarget::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
return FALSE;
}
+BOOL FSEmbeddedItemDropTarget::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
+ EDragAndDropType cargo_type,
+ void* cargo_data,
+ EAcceptance* accept,
+ std::string& tooltip_msg)
+{
+ LLInventoryItem* item = (LLInventoryItem*)cargo_data;
+
+ if (cargo_type >= DAD_TEXTURE && cargo_type <= DAD_GESTURE &&
+ item && item->getActualType() != LLAssetType::AT_LINK && item->getActualType() != LLAssetType::AT_LINK_FOLDER && item->getType() != LLAssetType::AT_CATEGORY &&
+ item->getPermissions().getMaskOwner() & PERM_COPY && item->getPermissions().getMaskOwner() & PERM_TRANSFER)
+ {
+ if (drop)
+ {
+ if (!mDADSignal.empty())
+ {
+ mDADSignal(item->getUUID());
+ }
+ }
+ else
+ {
+ *accept = ACCEPT_YES_SINGLE;
+ }
+ }
+ else
+ {
+ *accept = ACCEPT_NO;
+ }
+
+ return TRUE;
+}
diff --git a/indra/newview/fsdroptarget.h b/indra/newview/fsdroptarget.h
index b012b9a5ec..fed140d0ee 100644
--- a/indra/newview/fsdroptarget.h
+++ b/indra/newview/fsdroptarget.h
@@ -29,6 +29,7 @@
#define FS_DROPTARGET_H
#include "lllineeditor.h"
+#include "lltextbox.h"
class LLInventoryItem;
@@ -140,4 +141,33 @@ protected:
LLUUID mAgentID;
};
+
+class FSEmbeddedItemDropTarget : public LLTextBox
+{
+public:
+ struct Params : public LLInitParam::Block
+ {
+ Params()
+ {}
+ };
+
+ FSEmbeddedItemDropTarget(const Params& p) : LLTextBox(p) {}
+ ~FSEmbeddedItemDropTarget() {}
+
+ typedef boost::signals2::signal item_dad_callback_t;
+ boost::signals2::connection setDADCallback(const item_dad_callback_t::slot_type& cb)
+ {
+ return mDADSignal.connect(cb);
+ }
+
+ virtual BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
+ EDragAndDropType cargo_type,
+ void* cargo_data,
+ EAcceptance* accept,
+ std::string& tooltip_msg);
+
+protected:
+ item_dad_callback_t mDADSignal;
+};
+
#endif // FS_DROPTARGET_H
diff --git a/indra/newview/fspanelprefs.cpp b/indra/newview/fspanelprefs.cpp
index cb63b0494d..d556f00b1d 100644
--- a/indra/newview/fspanelprefs.cpp
+++ b/indra/newview/fspanelprefs.cpp
@@ -28,6 +28,7 @@
#include "fspanelprefs.h"
+#include "fsdroptarget.h"
#include "lggbeamcolormapfloater.h"
#include "lggbeammapfloater.h"
#include "lggbeammaps.h"
@@ -39,6 +40,7 @@
#include "llfloaterreg.h"
#include "llinventorymodel.h"
#include "llspinctrl.h"
+#include "llstartup.h"
#include "lltexturectrl.h"
#include "llviewercontrol.h"
#include "llvoavatar.h"
@@ -51,6 +53,8 @@ FSPanelPrefs::FSPanelPrefs() : LLPanelPreference()
mCommitCallbackRegistrar.add("Perms.Copy", boost::bind(&FSPanelPrefs::onCommitCopy, this));
mCommitCallbackRegistrar.add("Perms.Trans", boost::bind(&FSPanelPrefs::onCommitTrans, this));
mCommitCallbackRegistrar.add("FS.CheckContactListColumnMode", boost::bind(&FSPanelPrefs::onCheckContactListColumnMode, this));
+
+ mEmbeddedItem = gSavedPerAccountSettings.getString("FSBuildPrefs_Item");
}
BOOL FSPanelPrefs::postBuild()
@@ -74,14 +78,53 @@ BOOL FSPanelPrefs::postBuild()
tex_ctrl->setCommitCallback(boost::bind(&FSPanelPrefs::onCommitTexture, this, _2));
tex_ctrl->setDefaultImageAssetID(LLUUID(gSavedSettings.getString("DefaultObjectTexture")));
+ mInvDropTarget = getChild("embed_item");
+ mInvDropTarget->setDADCallback(boost::bind(&FSPanelPrefs::onDADEmbeddedItem, this, _1));
+
onCheckContactListColumnMode();
return LLPanelPreference::postBuild();
}
+void FSPanelPrefs::onOpen(const LLSD& key)
+{
+ if (LLStartUp::getStartupState() == STATE_STARTED)
+ {
+ getChild("FSBuildPrefs_EmbedItem")->setEnabled(TRUE);
+ mEmbeddedItem = gSavedPerAccountSettings.getString("FSBuildPrefs_Item");
+ LLUUID item_id(mEmbeddedItem);
+ if (item_id.isNull())
+ {
+ getChild("build_item_add_disp_rect_txt")->setTextArg("[ITEM]", getString("EmbeddedItemNotSet"));
+ }
+ else
+ {
+ LLInventoryObject* item = gInventory.getObject(item_id);
+ if (item)
+ {
+ getChild("build_item_add_disp_rect_txt")->setTextArg("[ITEM]", item->getName());
+ }
+ else
+ {
+ getChild("build_item_add_disp_rect_txt")->setTextArg("[ITEM]", getString("EmbeddedItemNotAvailable"));
+ }
+ }
+ }
+ else
+ {
+ getChild("FSBuildPrefs_EmbedItem")->setEnabled(FALSE);
+ getChild("build_item_add_disp_rect_txt")->setTextArg("[ITEM]", getString("EmbeddedItemNotLoggedIn"));
+ }
+}
+
void FSPanelPrefs::apply()
{
LLPanelPreference::apply();
+
+ if (LLStartUp::getStartupState() == STATE_STARTED)
+ {
+ gSavedPerAccountSettings.setString("FSBuildPrefs_Item", mEmbeddedItem);
+ }
}
@@ -259,3 +302,14 @@ void FSPanelPrefs::onCheckContactListColumnMode()
childSetEnabled("FSFriendListColumnShowDisplayName", gSavedSettings.getBOOL("FSFriendListColumnShowUserName") || gSavedSettings.getBOOL("FSFriendListColumnShowFullName"));
childSetEnabled("FSFriendListColumnShowFullName", gSavedSettings.getBOOL("FSFriendListColumnShowUserName") || gSavedSettings.getBOOL("FSFriendListColumnShowDisplayName"));
}
+
+void FSPanelPrefs::onDADEmbeddedItem(const LLUUID& item_id)
+{
+ LLInventoryObject* item = gInventory.getObject(item_id);
+ if (item)
+ {
+ getChild("build_item_add_disp_rect_txt")->setTextArg("[ITEM]", item->getName());
+ mEmbeddedItem = item_id.asString();
+ }
+}
+
diff --git a/indra/newview/fspanelprefs.h b/indra/newview/fspanelprefs.h
index 8c5543a938..7021708bc8 100644
--- a/indra/newview/fspanelprefs.h
+++ b/indra/newview/fspanelprefs.h
@@ -29,6 +29,8 @@
#include "llfloaterpreference.h"
+class FSEmbeddedItemDropTarget;
+
class FSPanelPrefs : public LLPanelPreference
{
public:
@@ -36,6 +38,7 @@ public:
virtual ~FSPanelPrefs() {}
/*virtual*/ BOOL postBuild();
+ /*virtual*/ void onOpen(const LLSD& key);
/*virtual*/ void apply();
/*virtual*/ void cancel();
@@ -54,6 +57,11 @@ private:
void onCommitTrans();
void onCheckContactListColumnMode();
+
+ void onDADEmbeddedItem(const LLUUID& item_id);
+
+ FSEmbeddedItemDropTarget* mInvDropTarget;
+ std::string mEmbeddedItem;
};
#endif // FS_PANELPREFS_H
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_firestorm.xml b/indra/newview/skins/default/xui/de/panel_preferences_firestorm.xml
index ecdb415c6b..42d59c9fdd 100644
--- a/indra/newview/skins/default/xui/de/panel_preferences_firestorm.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_firestorm.xml
@@ -4,6 +4,15 @@
=== AUS ===
+
+ Nicht gesetzt
+
+
+ Nicht verfügbar
+
+
+ Nicht eingeloggt
+
@@ -286,9 +295,9 @@
-
+
Gegenstand aus Inventar hier ablegen
-
+
Aktuell gesetzt: [ITEM]
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_firestorm.xml b/indra/newview/skins/default/xui/en/panel_preferences_firestorm.xml
index ea4ca0067d..11b2524231 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_firestorm.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_firestorm.xml
@@ -13,6 +13,15 @@
=== OFF ===
+
+ Not set
+
+
+ Not available
+
+
+ Not logged in
+
-
-
Drop an inventory item here.
-
+
Currently set to: [ITEM]
-
-
+
Arrastra aquí un ítem del inventario.
-
+
Actualmente establecido a: [ITEM]
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_firestorm.xml b/indra/newview/skins/default/xui/fr/panel_preferences_firestorm.xml
index 2085383044..875f1acc43 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_firestorm.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_firestorm.xml
@@ -416,10 +416,10 @@
-
Déposer un item ici
-
+
Item actuel : [ITEM]
diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_firestorm.xml b/indra/newview/skins/default/xui/pl/panel_preferences_firestorm.xml
index 1423b18865..cef1cfd91d 100644
--- a/indra/newview/skins/default/xui/pl/panel_preferences_firestorm.xml
+++ b/indra/newview/skins/default/xui/pl/panel_preferences_firestorm.xml
@@ -259,9 +259,9 @@
-
+
Upuść przedmiot w tym miejscu.
-
+
Obecnie ustawiono na: [ITEM]