summaryrefslogtreecommitdiff
path: root/indra/newview/lltooldraganddrop.h
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/lltooldraganddrop.h')
-rw-r--r--indra/newview/lltooldraganddrop.h101
1 files changed, 48 insertions, 53 deletions
diff --git a/indra/newview/lltooldraganddrop.h b/indra/newview/lltooldraganddrop.h
index f9e5bec143..a13b775699 100644
--- a/indra/newview/lltooldraganddrop.h
+++ b/indra/newview/lltooldraganddrop.h
@@ -2,37 +2,32 @@
* @file lltooldraganddrop.h
* @brief LLToolDragAndDrop class header file
*
- * $LicenseInfo:firstyear=2001&license=viewergpl$
- *
- * Copyright (c) 2001-2009, Linden Research, Inc.
- *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
* Second Life Viewer Source Code
- * The source code in this file ("Source Code") is provided by Linden Lab
- * to you under the terms of the GNU General Public License, version 2.0
- * ("GPL"), unless you have obtained a separate licensing agreement
- * ("Other License"), formally executed by you and Linden Lab. Terms of
- * the GPL can be found in doc/GPL-license.txt in this distribution, or
- * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
*
- * There are special exceptions to the terms and conditions of the GPL as
- * it is applied to this Source Code. View the full text of the exception
- * in the file doc/FLOSS-exception.txt in this software distribution, or
- * online at
- * http://secondlifegrid.net/programs/open_source/licensing/flossexception
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * By copying, modifying or distributing this software, you acknowledge
- * that you have read and understood your obligations described above,
- * and agree to abide by those obligations.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
- * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
- * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
- * COMPLETENESS OR PERFORMANCE.
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
#ifndef LL_TOOLDRAGANDDROP_H
#define LL_TOOLDRAGANDDROP_H
+#include "lldictionary.h"
#include "lltool.h"
#include "llview.h"
#include "lluuid.h"
@@ -51,13 +46,15 @@ class LLPickInfo;
class LLToolDragAndDrop : public LLTool, public LLSingleton<LLToolDragAndDrop>
{
public:
+ typedef boost::signals2::signal<void ()> enddrag_signal_t;
+
LLToolDragAndDrop();
// overridden from LLTool
virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
virtual BOOL handleHover(S32 x, S32 y, MASK mask);
virtual BOOL handleKey(KEY key, MASK mask);
- virtual BOOL handleToolTip(S32 x, S32 y, std::string& msg, LLRect *sticky_rect_screen);
+ virtual BOOL handleToolTip(S32 x, S32 y, MASK mask);
virtual void onMouseCaptureLost();
virtual void handleDeselect();
@@ -78,7 +75,7 @@ public:
const LLUUID& source_id = LLUUID::null,
const LLUUID& object_id = LLUUID::null);
void beginMultiDrag(const std::vector<EDragAndDropType> types,
- const std::vector<LLUUID>& cargo_ids,
+ const uuid_vec_t& cargo_ids,
ESource source,
const LLUUID& source_id = LLUUID::null);
void endDrag();
@@ -87,6 +84,8 @@ public:
const LLUUID& getObjectID() const { return mObjectID; }
EAcceptance getLastAccept() { return mLastAccept; }
+ boost::signals2::connection setEndDragCallback( const enddrag_signal_t::slot_type& cb ) { return mEndDragSignal.connect(cb); }
+
protected:
enum EDropTarget
{
@@ -98,6 +97,7 @@ protected:
DT_COUNT = 5
};
+protected:
// dragOrDrop3dImpl points to a member of LLToolDragAndDrop that
// takes parameters (LLViewerObject* obj, S32 face, MASK, BOOL
// drop) and returns a BOOL if drop is ok
@@ -108,7 +108,9 @@ protected:
EAcceptance* acceptance);
void dragOrDrop3D(S32 x, S32 y, MASK mask, BOOL drop,
EAcceptance* acceptance);
+
static void pickCallback(const LLPickInfo& pick_info);
+ void pick(const LLPickInfo& pick_info);
protected:
@@ -117,7 +119,7 @@ protected:
std::vector<EDragAndDropType> mCargoTypes;
//void* mCargoData;
- std::vector<LLUUID> mCargoIDs;
+ uuid_vec_t mCargoIDs;
ESource mSource;
LLUUID mSourceID;
LLUUID mObjectID;
@@ -131,9 +133,7 @@ protected:
S32 mCurItemIndex;
std::string mToolTipMsg;
- // array of pointers to functions that implement the logic to
- // dragging and dropping into the simulator.
- static dragOrDrop3dImpl sDragAndDrop3d[DAD_COUNT][DT_COUNT];
+ enddrag_signal_t mEndDragSignal;
protected:
// 3d drop functions. these call down into the static functions
@@ -208,28 +208,10 @@ protected:
LLToolDragAndDrop::ESource source,
const LLUUID& src_id);
-
- // give inventory item functionality
- static bool handleCopyProtectedItem(const LLSD& notification, const LLSD& response);
- static void commitGiveInventoryItem(const LLUUID& to_agent,
- LLInventoryItem* item,
- const LLUUID &im_session_id = LLUUID::null);
-
- // give inventory category functionality
- static bool handleCopyProtectedCategory(const LLSD& notification, const LLSD& response);
- static void commitGiveInventoryCategory(const LLUUID& to_agent,
- LLInventoryCategory* cat,
- const LLUUID &im_session_id = LLUUID::null);
-
public:
// helper functions
static BOOL isInventoryDropAcceptable(LLViewerObject* obj, LLInventoryItem* item) { return (ACCEPT_YES_COPY_SINGLE <= willObjectAcceptInventory(obj, item)); }
- // This simple helper function assumes you are attempting to
- // transfer item. returns true if you can give, otherwise false.
- static BOOL isInventoryGiveAcceptable(LLInventoryItem* item);
- static BOOL isInventoryGroupGiveAcceptable(LLInventoryItem* item);
-
BOOL dadUpdateInventory(LLViewerObject* obj, BOOL drop);
BOOL dadUpdateInventoryCategory(LLViewerObject* obj, BOOL drop);
@@ -255,17 +237,30 @@ public:
ESource source,
const LLUUID& src_id);
- static void giveInventory(const LLUUID& to_agent,
- LLInventoryItem* item,
- const LLUUID &session_id = LLUUID::null);
- static void giveInventoryCategory(const LLUUID& to_agent,
- LLInventoryCategory* item,
- const LLUUID &session_id = LLUUID::null);
-
static bool handleGiveDragAndDrop(LLUUID agent, LLUUID session, BOOL drop,
EDragAndDropType cargo_type,
void* cargo_data,
- EAcceptance* accept);
+ EAcceptance* accept,
+ const LLSD& dest = LLSD());
+
+ // Classes used for determining 3d drag and drop types.
+private:
+ struct DragAndDropEntry : public LLDictionaryEntry
+ {
+ DragAndDropEntry(dragOrDrop3dImpl f_none,
+ dragOrDrop3dImpl f_self,
+ dragOrDrop3dImpl f_avatar,
+ dragOrDrop3dImpl f_object,
+ dragOrDrop3dImpl f_land);
+ dragOrDrop3dImpl mFunctions[DT_COUNT];
+ };
+ class LLDragAndDropDictionary : public LLSingleton<LLDragAndDropDictionary>,
+ public LLDictionary<EDragAndDropType, DragAndDropEntry>
+ {
+ public:
+ LLDragAndDropDictionary();
+ dragOrDrop3dImpl get(EDragAndDropType dad_type, EDropTarget drop_target);
+ };
};
// utility functions