Implement drop target for embedded items in newly rezzed objects and activate feature
parent
1d20c86667
commit
d87681f7f8
|
|
@ -21483,28 +21483,6 @@ Change of this parameter will affect the layout of buttons in notification toast
|
|||
<key>Value</key>
|
||||
<integer>90</integer>
|
||||
</map>
|
||||
<key>FSBuildPrefs_EmbedItem</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>New object created default of adding content</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>FSBuildPrefs_Item</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Item UUID to add to the contents of the new object created</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>String</string>
|
||||
<key>Value</key>
|
||||
<string></string>
|
||||
</map>
|
||||
<key>FSBuildPrefs_Phantom</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
|
|||
|
|
@ -874,6 +874,28 @@
|
|||
<key>Value</key>
|
||||
<string/>
|
||||
</map>
|
||||
<key>FSBuildPrefs_EmbedItem</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>New object created default of adding content</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>FSBuildPrefs_Item</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Item UUID to add to the contents of the new object created</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>String</string>
|
||||
<key>Value</key>
|
||||
<string/>
|
||||
</map>
|
||||
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
|
|||
|
|
@ -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<LLInventoryItem*>(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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -36,6 +36,7 @@
|
|||
static LLDefaultChildRegistry::Register<FSCopyTransInventoryDropTarget> r1("fs_copytrans_inventory_drop_target");
|
||||
static LLDefaultChildRegistry::Register<FSInventoryLinkReplaceDropTarget> r2("fs_inventory_link_replace_drop_target");
|
||||
static LLDefaultChildRegistry::Register<FSDropTarget> r3("profile_drop_target");
|
||||
static LLDefaultChildRegistry::Register<FSEmbeddedItemDropTarget> 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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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, LLTextBox::Params>
|
||||
{
|
||||
Params()
|
||||
{}
|
||||
};
|
||||
|
||||
FSEmbeddedItemDropTarget(const Params& p) : LLTextBox(p) {}
|
||||
~FSEmbeddedItemDropTarget() {}
|
||||
|
||||
typedef boost::signals2::signal<void(const LLUUID& id)> 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
|
||||
|
|
|
|||
|
|
@ -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<FSEmbeddedItemDropTarget>("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<LLCheckBoxCtrl>("FSBuildPrefs_EmbedItem")->setEnabled(TRUE);
|
||||
mEmbeddedItem = gSavedPerAccountSettings.getString("FSBuildPrefs_Item");
|
||||
LLUUID item_id(mEmbeddedItem);
|
||||
if (item_id.isNull())
|
||||
{
|
||||
getChild<LLTextBox>("build_item_add_disp_rect_txt")->setTextArg("[ITEM]", getString("EmbeddedItemNotSet"));
|
||||
}
|
||||
else
|
||||
{
|
||||
LLInventoryObject* item = gInventory.getObject(item_id);
|
||||
if (item)
|
||||
{
|
||||
getChild<LLTextBox>("build_item_add_disp_rect_txt")->setTextArg("[ITEM]", item->getName());
|
||||
}
|
||||
else
|
||||
{
|
||||
getChild<LLTextBox>("build_item_add_disp_rect_txt")->setTextArg("[ITEM]", getString("EmbeddedItemNotAvailable"));
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
getChild<LLCheckBoxCtrl>("FSBuildPrefs_EmbedItem")->setEnabled(FALSE);
|
||||
getChild<LLTextBox>("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<LLTextBox>("build_item_add_disp_rect_txt")->setTextArg("[ITEM]", item->getName());
|
||||
mEmbeddedItem = item_id.asString();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -4,6 +4,15 @@
|
|||
<panel.string name="BeamsOffLabel">
|
||||
=== AUS ===
|
||||
</panel.string>
|
||||
<string name="EmbeddedItemNotSet">
|
||||
Nicht gesetzt
|
||||
</string>
|
||||
<string name="EmbeddedItemNotAvailable">
|
||||
Nicht verfügbar
|
||||
</string>
|
||||
<string name="EmbeddedItemNotLoggedIn">
|
||||
Nicht eingeloggt
|
||||
</string>
|
||||
|
||||
<tab_container label="Firestorm Prefs" name="tabs">
|
||||
|
||||
|
|
@ -286,9 +295,9 @@
|
|||
<combo_item name="High" label="Hoch"/>
|
||||
</combo_box>
|
||||
<check_box name="FSBuildPrefs_EmbedItem" label="Objekt zu neuem Prim hinzufügen"/>
|
||||
<text name="Give inventory" tool_tip="Gegenstand aus Inventar hier ablegen">
|
||||
<fs_embedded_item_drop_target name="embed_item" tool_tip="Gegenstand aus Inventar hier ablegen">
|
||||
Gegenstand aus Inventar hier ablegen
|
||||
</text>
|
||||
</fs_embedded_item_drop_target>
|
||||
<text name="build_item_add_disp_rect_txt">
|
||||
Aktuell gesetzt: [ITEM]
|
||||
</text>
|
||||
|
|
|
|||
|
|
@ -13,6 +13,15 @@
|
|||
<panel.string name="BeamsOffLabel">
|
||||
=== OFF ===
|
||||
</panel.string>
|
||||
<string name="EmbeddedItemNotSet">
|
||||
Not set
|
||||
</string>
|
||||
<string name="EmbeddedItemNotAvailable">
|
||||
Not available
|
||||
</string>
|
||||
<string name="EmbeddedItemNotLoggedIn">
|
||||
Not logged in
|
||||
</string>
|
||||
|
||||
<tab_container
|
||||
label="Firestorm Prefs"
|
||||
|
|
@ -1888,12 +1897,7 @@
|
|||
<combo_item name="Medium" value="Medium" label="Medium"/>
|
||||
<combo_item name="High" value="High" label="High"/>
|
||||
</combo_box>
|
||||
<!--
|
||||
TODO: add the code to enable drag and drop support for items
|
||||
For now, just make the UI elements invisiable but still have the debug settings to play with.
|
||||
-->
|
||||
<check_box
|
||||
visible="false"
|
||||
name="FSBuildPrefs_EmbedItem"
|
||||
top="120"
|
||||
enabled="false"
|
||||
|
|
@ -1908,19 +1912,15 @@ For now, just make the UI elements invisiable but still have the debug settings
|
|||
radio_style="false"
|
||||
width="270"/>
|
||||
<view_border
|
||||
visible="false"
|
||||
enabled="false"
|
||||
bevel_style="in"
|
||||
top_delta="20"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
left_delta="0"
|
||||
mouse_opaque="false"
|
||||
name="im_give_drop_target_rect"
|
||||
name="embed_item_drop_target_rect"
|
||||
width="220"/>
|
||||
<text
|
||||
visible="false"
|
||||
enabled="false"
|
||||
<fs_embedded_item_drop_target
|
||||
bg_visible="false"
|
||||
border_visible="false"
|
||||
top_delta="0"
|
||||
|
|
@ -1931,15 +1931,13 @@ For now, just make the UI elements invisiable but still have the debug settings
|
|||
height="16"
|
||||
left_delta="0"
|
||||
mouse_opaque="true"
|
||||
name="Give inventory"
|
||||
name="embed_item"
|
||||
tool_tip="Drop an inventory item here."
|
||||
v_pad="2"
|
||||
width="220">
|
||||
Drop an inventory item here.
|
||||
</text>
|
||||
</fs_embedded_item_drop_target>
|
||||
<view_border
|
||||
visible="false"
|
||||
enabled="false"
|
||||
bevel_style="in"
|
||||
top_delta="18"
|
||||
follows="left|top"
|
||||
|
|
@ -1949,8 +1947,6 @@ For now, just make the UI elements invisiable but still have the debug settings
|
|||
name="build_item_add_disp_rect"
|
||||
width="220"/>
|
||||
<text
|
||||
visible="false"
|
||||
enabled="false"
|
||||
bg_visible="false"
|
||||
border_visible="false"
|
||||
top_delta="0"
|
||||
|
|
@ -1967,7 +1963,6 @@ For now, just make the UI elements invisiable but still have the debug settings
|
|||
width="220">
|
||||
Currently set to: [ITEM]
|
||||
</text>
|
||||
<!-- end drag and drop UI -->
|
||||
<text
|
||||
top_pad="-60"
|
||||
left_pad="20"
|
||||
|
|
|
|||
|
|
@ -227,9 +227,9 @@
|
|||
<combo_item name="High" label="Alto"/>
|
||||
</combo_box>
|
||||
<check_box name="FSBuildPrefs_EmbedItem" label="Incrustar un objeto en los nuevos prims"/>
|
||||
<text name="Give inventory" tool_tip="Arrastra aquí un ítem del inventario.">
|
||||
<fs_embedded_item_drop_target name="embed_item" tool_tip="Arrastra aquí un ítem del inventario.">
|
||||
Arrastra aquí un ítem del inventario.
|
||||
</text>
|
||||
</fs_embedded_item_drop_target>
|
||||
<text name="build_item_add_disp_rect_txt">
|
||||
Actualmente establecido a: [ITEM]
|
||||
</text>
|
||||
|
|
|
|||
|
|
@ -416,10 +416,10 @@
|
|||
<!--for future drop zone-->
|
||||
<check_box name="FSBuildPrefs_EmbedItem"
|
||||
label="Intégrer un item aux prim."/>
|
||||
<text name="Give inventory"
|
||||
<fs_embedded_item_drop_target name="embed_item"
|
||||
tool_tip="Depuis l'inventaire, glisser / déposer un item dans cette zone.">
|
||||
Déposer un item ici
|
||||
</text>
|
||||
</fs_embedded_item_drop_target>
|
||||
<text name="build_item_add_disp_rect_txt"
|
||||
tool_tip="Item actuellement intégré.">
|
||||
Item actuel : [ITEM]
|
||||
|
|
|
|||
|
|
@ -259,9 +259,9 @@
|
|||
<combo_item name="High" label="Wysoki"/>
|
||||
</combo_box>
|
||||
<check_box name="FSBuildPrefs_EmbedItem" label="Umieszczaj obiekt w nowych primach"/>
|
||||
<text name="Give inventory" tool_tip="Upuść przedmiot w tym miejscu.">
|
||||
<fs_embedded_item_drop_target name="embed_item" tool_tip="Upuść przedmiot w tym miejscu.">
|
||||
Upuść przedmiot w tym miejscu.
|
||||
</text>
|
||||
</fs_embedded_item_drop_target>
|
||||
<text name="build_item_add_disp_rect_txt">
|
||||
Obecnie ustawiono na: [ITEM]
|
||||
</text>
|
||||
|
|
|
|||
Loading…
Reference in New Issue