Implement drop target for embedded items in newly rezzed objects and activate feature

Ansariel 2014-08-27 22:07:37 +02:00
parent 1d20c86667
commit d87681f7f8
12 changed files with 193 additions and 62 deletions

View File

@ -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>

View File

@ -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>

View File

@ -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);
}
}
}
}

View File

@ -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;
}

View File

@ -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

View File

@ -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();
}
}

View File

@ -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

View File

@ -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>

View File

@ -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"

View File

@ -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>

View File

@ -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]

View File

@ -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>