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 - - Comment - New object created default of adding content - Persist - 1 - Type - Boolean - Value - 0 - - FSBuildPrefs_Item - - Comment - Item UUID to add to the contents of the new object created - Persist - 1 - Type - String - Value - - FSBuildPrefs_Phantom Comment diff --git a/indra/newview/app_settings/settings_per_account.xml b/indra/newview/app_settings/settings_per_account.xml index 565ac46508..cdf3dd8f67 100755 --- a/indra/newview/app_settings/settings_per_account.xml +++ b/indra/newview/app_settings/settings_per_account.xml @@ -874,6 +874,28 @@ Value + FSBuildPrefs_EmbedItem + + Comment + New object created default of adding content + Persist + 1 + Type + Boolean + Value + 0 + + FSBuildPrefs_Item + + Comment + Item UUID to add to the contents of the new object created + Persist + 1 + Type + String + Value + + 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]