summaryrefslogtreecommitdiff
path: root/indra/newview/llviewertexteditor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llviewertexteditor.cpp')
-rw-r--r--indra/newview/llviewertexteditor.cpp1944
1 files changed, 972 insertions, 972 deletions
diff --git a/indra/newview/llviewertexteditor.cpp b/indra/newview/llviewertexteditor.cpp
index fa6b6dc156..bb025fbcd2 100644
--- a/indra/newview/llviewertexteditor.cpp
+++ b/indra/newview/llviewertexteditor.cpp
@@ -1,25 +1,25 @@
-/**
+/**
* @file llviewertexteditor.cpp
* @brief Text editor widget to let users enter a multi-line document.
*
* $LicenseInfo:firstyear=2001&license=viewerlgpl$
* Second Life Viewer Source Code
* 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.
- *
+ *
* 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.
- *
+ *
* 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
- *
+ *
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
* $/LicenseInfo$
*/
@@ -73,89 +73,89 @@ class LLEmbeddedLandmarkCopied: public LLInventoryCallback
{
public:
- LLEmbeddedLandmarkCopied(){}
- void fire(const LLUUID& inv_item)
- {
- showInfo(inv_item);
- }
- static void showInfo(const LLUUID& landmark_inv_id)
- {
- LLSD key;
- key["type"] = "landmark";
- key["id"] = landmark_inv_id;
- LLFloaterSidePanelContainer::showPanel("places", key);
- }
- static void processForeignLandmark(LLLandmark* landmark,
- const LLUUID& object_id, const LLUUID& notecard_inventory_id,
- LLPointer<LLInventoryItem> item_ptr)
- {
- LLVector3d global_pos;
- landmark->getGlobalPos(global_pos);
- LLViewerInventoryItem* agent_landmark =
- LLLandmarkActions::findLandmarkForGlobalPos(global_pos);
-
- if (agent_landmark)
- {
- showInfo(agent_landmark->getUUID());
- }
- else
- {
- if (item_ptr.isNull())
- {
- // check to prevent a crash. See EXT-8459.
- LL_WARNS() << "Passed handle contains a dead inventory item. Most likely notecard has been closed and embedded item was destroyed." << LL_ENDL;
- }
- else
- {
- LLInventoryItem* item = item_ptr.get();
- LLPointer<LLEmbeddedLandmarkCopied> cb = new LLEmbeddedLandmarkCopied();
- copy_inventory_from_notecard(get_folder_by_itemtype(item),
- object_id,
- notecard_inventory_id,
- item,
- gInventoryCallbacks.registerCB(cb));
- }
- }
- }
+ LLEmbeddedLandmarkCopied(){}
+ void fire(const LLUUID& inv_item)
+ {
+ showInfo(inv_item);
+ }
+ static void showInfo(const LLUUID& landmark_inv_id)
+ {
+ LLSD key;
+ key["type"] = "landmark";
+ key["id"] = landmark_inv_id;
+ LLFloaterSidePanelContainer::showPanel("places", key);
+ }
+ static void processForeignLandmark(LLLandmark* landmark,
+ const LLUUID& object_id, const LLUUID& notecard_inventory_id,
+ LLPointer<LLInventoryItem> item_ptr)
+ {
+ LLVector3d global_pos;
+ landmark->getGlobalPos(global_pos);
+ LLViewerInventoryItem* agent_landmark =
+ LLLandmarkActions::findLandmarkForGlobalPos(global_pos);
+
+ if (agent_landmark)
+ {
+ showInfo(agent_landmark->getUUID());
+ }
+ else
+ {
+ if (item_ptr.isNull())
+ {
+ // check to prevent a crash. See EXT-8459.
+ LL_WARNS() << "Passed handle contains a dead inventory item. Most likely notecard has been closed and embedded item was destroyed." << LL_ENDL;
+ }
+ else
+ {
+ LLInventoryItem* item = item_ptr.get();
+ LLPointer<LLEmbeddedLandmarkCopied> cb = new LLEmbeddedLandmarkCopied();
+ copy_inventory_from_notecard(get_folder_by_itemtype(item),
+ object_id,
+ notecard_inventory_id,
+ item,
+ gInventoryCallbacks.registerCB(cb));
+ }
+ }
+ }
};
///----------------------------------------------------------------------------
/// Class LLEmbeddedNotecardOpener
///----------------------------------------------------------------------------
class LLEmbeddedNotecardOpener : public LLInventoryCallback
{
- LLViewerTextEditor* mTextEditor;
+ LLViewerTextEditor* mTextEditor;
public:
- LLEmbeddedNotecardOpener()
- : mTextEditor(NULL)
- {
- }
-
- void setEditor(LLViewerTextEditor* e) {mTextEditor = e;}
-
- // override
- void fire(const LLUUID& inv_item)
- {
- if(!mTextEditor)
- {
- // The parent text editor may have vanished by now.
+ LLEmbeddedNotecardOpener()
+ : mTextEditor(NULL)
+ {
+ }
+
+ void setEditor(LLViewerTextEditor* e) {mTextEditor = e;}
+
+ // override
+ void fire(const LLUUID& inv_item)
+ {
+ if(!mTextEditor)
+ {
+ // The parent text editor may have vanished by now.
// In that case just quit.
- return;
- }
-
- LLInventoryItem* item = gInventory.getItem(inv_item);
- if(!item)
- {
- LL_WARNS() << "Item add reported, but not found in inventory!: " << inv_item << LL_ENDL;
- }
- else
- {
- if(!gSavedSettings.getBOOL("ShowNewInventory"))
- {
- LLFloaterReg::showInstance("preview_notecard", LLSD(item->getUUID()), TAKE_FOCUS_YES);
- }
- }
- }
+ return;
+ }
+
+ LLInventoryItem* item = gInventory.getItem(inv_item);
+ if(!item)
+ {
+ LL_WARNS() << "Item add reported, but not found in inventory!: " << inv_item << LL_ENDL;
+ }
+ else
+ {
+ if(!gSavedSettings.getBOOL("ShowNewInventory"))
+ {
+ LLFloaterReg::showInstance("preview_notecard", LLSD(item->getUUID()), TAKE_FOCUS_YES);
+ }
+ }
+ }
};
//
@@ -167,118 +167,118 @@ const S32 EMBEDDED_ITEM_LABEL_PADDING = 2;
class LLEmbeddedItemSegment : public LLTextSegment
{
public:
- LLEmbeddedItemSegment(S32 pos, LLUIImagePtr image, LLPointer<LLInventoryItem> inv_item, LLTextEditor& editor)
- : LLTextSegment(pos, pos + 1),
- mImage(image),
- mLabel(utf8str_to_wstring(inv_item->getName())),
- mItem(inv_item),
- mEditor(editor)
- {
-
- mStyle = new LLStyle(LLStyle::Params().font(LLFontGL::getFontSansSerif()));
- mToolTip = inv_item->getName() + '\n' + inv_item->getDescription();
- }
-
- /*virtual*/ bool getDimensionsF32(S32 first_char, S32 num_chars, F32& width, S32& height) const
- {
- if (num_chars == 0)
- {
- width = 0;
- height = 0;
- }
- else
- {
- width = EMBEDDED_ITEM_LABEL_PADDING + mImage->getWidth() + mStyle->getFont()->getWidthF32(mLabel.c_str());
- height = llmax(mImage->getHeight(), mStyle->getFont()->getLineHeight());
- }
- return false;
- }
-
- /*virtual*/ S32 getNumChars(S32 num_pixels, S32 segment_offset, S32 line_offset, S32 max_chars, S32 line_ind) const
- {
- // always draw at beginning of line
- if (line_offset == 0)
- {
- return 1;
- }
- else
- {
- S32 width, height;
- getDimensions(mStart, 1, width, height);
- if (width > num_pixels)
- {
- return 0;
- }
- else
- {
- return 1;
- }
- }
- }
- /*virtual*/ F32 draw(S32 start, S32 end, S32 selection_start, S32 selection_end, const LLRectf& draw_rect)
- {
- LLRectf image_rect = draw_rect;
- image_rect.mRight = image_rect.mLeft + mImage->getWidth();
- image_rect.mTop = image_rect.mBottom + mImage->getHeight();
- mImage->draw(LLRect(image_rect.mLeft, image_rect.mTop, image_rect.mRight, image_rect.mBottom));
-
- LLColor4 color;
- if (mEditor.getReadOnly())
- {
- color = LLUIColorTable::instance().getColor("TextEmbeddedItemReadOnlyColor");
- }
- else
- {
- color = LLUIColorTable::instance().getColor("TextEmbeddedItemColor");
- }
-
- F32 right_x;
- mStyle->getFont()->render(mLabel, 0, image_rect.mRight + EMBEDDED_ITEM_LABEL_PADDING, draw_rect.mTop, color, LLFontGL::LEFT, LLFontGL::TOP, LLFontGL::UNDERLINE, LLFontGL::NO_SHADOW, mLabel.length(), S32_MAX, &right_x);
- return right_x;
- }
-
- /*virtual*/ bool canEdit() const { return false; }
-
-
- /*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask)
- {
- LLUI::getInstance()->getWindow()->setCursor(UI_CURSOR_HAND);
- return TRUE;
- }
- virtual BOOL handleToolTip(S32 x, S32 y, MASK mask )
- {
- if (mItem->getThumbnailUUID().notNull())
- {
+ LLEmbeddedItemSegment(S32 pos, LLUIImagePtr image, LLPointer<LLInventoryItem> inv_item, LLTextEditor& editor)
+ : LLTextSegment(pos, pos + 1),
+ mImage(image),
+ mLabel(utf8str_to_wstring(inv_item->getName())),
+ mItem(inv_item),
+ mEditor(editor)
+ {
+
+ mStyle = new LLStyle(LLStyle::Params().font(LLFontGL::getFontSansSerif()));
+ mToolTip = inv_item->getName() + '\n' + inv_item->getDescription();
+ }
+
+ /*virtual*/ bool getDimensionsF32(S32 first_char, S32 num_chars, F32& width, S32& height) const
+ {
+ if (num_chars == 0)
+ {
+ width = 0;
+ height = 0;
+ }
+ else
+ {
+ width = EMBEDDED_ITEM_LABEL_PADDING + mImage->getWidth() + mStyle->getFont()->getWidthF32(mLabel.c_str());
+ height = llmax(mImage->getHeight(), mStyle->getFont()->getLineHeight());
+ }
+ return false;
+ }
+
+ /*virtual*/ S32 getNumChars(S32 num_pixels, S32 segment_offset, S32 line_offset, S32 max_chars, S32 line_ind) const
+ {
+ // always draw at beginning of line
+ if (line_offset == 0)
+ {
+ return 1;
+ }
+ else
+ {
+ S32 width, height;
+ getDimensions(mStart, 1, width, height);
+ if (width > num_pixels)
+ {
+ return 0;
+ }
+ else
+ {
+ return 1;
+ }
+ }
+ }
+ /*virtual*/ F32 draw(S32 start, S32 end, S32 selection_start, S32 selection_end, const LLRectf& draw_rect)
+ {
+ LLRectf image_rect = draw_rect;
+ image_rect.mRight = image_rect.mLeft + mImage->getWidth();
+ image_rect.mTop = image_rect.mBottom + mImage->getHeight();
+ mImage->draw(LLRect(image_rect.mLeft, image_rect.mTop, image_rect.mRight, image_rect.mBottom));
+
+ LLColor4 color;
+ if (mEditor.getReadOnly())
+ {
+ color = LLUIColorTable::instance().getColor("TextEmbeddedItemReadOnlyColor");
+ }
+ else
+ {
+ color = LLUIColorTable::instance().getColor("TextEmbeddedItemColor");
+ }
+
+ F32 right_x;
+ mStyle->getFont()->render(mLabel, 0, image_rect.mRight + EMBEDDED_ITEM_LABEL_PADDING, draw_rect.mTop, color, LLFontGL::LEFT, LLFontGL::TOP, LLFontGL::UNDERLINE, LLFontGL::NO_SHADOW, mLabel.length(), S32_MAX, &right_x);
+ return right_x;
+ }
+
+ /*virtual*/ bool canEdit() const { return false; }
+
+
+ /*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask)
+ {
+ LLUI::getInstance()->getWindow()->setCursor(UI_CURSOR_HAND);
+ return TRUE;
+ }
+ virtual BOOL handleToolTip(S32 x, S32 y, MASK mask )
+ {
+ if (mItem->getThumbnailUUID().notNull())
+ {
LLSD params;
params["inv_type"] = mItem->getInventoryType();
params["thumbnail_id"] = mItem->getThumbnailUUID();
params["asset_id"] = mItem->getAssetUUID();
-
- LLToolTipMgr::instance().show(LLToolTip::Params()
- .message(mToolTip)
- .create_callback(boost::bind(&LLInspectTextureUtil::createInventoryToolTip, _1))
- .create_params(params));
- return TRUE;
- }
+ LLToolTipMgr::instance().show(LLToolTip::Params()
+ .message(mToolTip)
+ .create_callback(boost::bind(&LLInspectTextureUtil::createInventoryToolTip, _1))
+ .create_params(params));
- if (!mToolTip.empty())
- {
- LLToolTipMgr::instance().show(mToolTip);
- return TRUE;
- }
- return FALSE;
- }
+ return TRUE;
+ }
- /*virtual*/ LLStyleConstSP getStyle() const { return mStyle; }
+ if (!mToolTip.empty())
+ {
+ LLToolTipMgr::instance().show(mToolTip);
+ return TRUE;
+ }
+ return FALSE;
+ }
+
+ /*virtual*/ LLStyleConstSP getStyle() const { return mStyle; }
private:
- LLUIImagePtr mImage;
- LLWString mLabel;
- LLStyleSP mStyle;
- std::string mToolTip;
- LLPointer<LLInventoryItem> mItem;
- LLTextEditor& mEditor;
+ LLUIImagePtr mImage;
+ LLWString mLabel;
+ LLStyleSP mStyle;
+ std::string mToolTip;
+ LLPointer<LLInventoryItem> mItem;
+ LLTextEditor& mEditor;
};
@@ -298,47 +298,47 @@ private:
class LLEmbeddedItems
{
public:
- LLEmbeddedItems(const LLViewerTextEditor* editor);
- ~LLEmbeddedItems();
- void clear();
+ LLEmbeddedItems(const LLViewerTextEditor* editor);
+ ~LLEmbeddedItems();
+ void clear();
+
+ // return true if there are no embedded items.
+ bool empty();
+
+ BOOL insertEmbeddedItem(LLInventoryItem* item, llwchar* value, bool is_new);
+ BOOL removeEmbeddedItem( llwchar ext_char );
- // return true if there are no embedded items.
- bool empty();
-
- BOOL insertEmbeddedItem(LLInventoryItem* item, llwchar* value, bool is_new);
- BOOL removeEmbeddedItem( llwchar ext_char );
+ BOOL hasEmbeddedItem(llwchar ext_char); // returns TRUE if /this/ editor has an entry for this item
+ LLUIImagePtr getItemImage(llwchar ext_char) const;
- BOOL hasEmbeddedItem(llwchar ext_char); // returns TRUE if /this/ editor has an entry for this item
- LLUIImagePtr getItemImage(llwchar ext_char) const;
+ void getEmbeddedItemList( std::vector<LLPointer<LLInventoryItem> >& items );
+ void addItems(const std::vector<LLPointer<LLInventoryItem> >& items);
- void getEmbeddedItemList( std::vector<LLPointer<LLInventoryItem> >& items );
- void addItems(const std::vector<LLPointer<LLInventoryItem> >& items);
+ llwchar getEmbeddedCharFromIndex(S32 index);
- llwchar getEmbeddedCharFromIndex(S32 index);
+ void removeUnusedChars();
+ void copyUsedCharsToIndexed();
+ S32 getIndexFromEmbeddedChar(llwchar wch);
- void removeUnusedChars();
- void copyUsedCharsToIndexed();
- S32 getIndexFromEmbeddedChar(llwchar wch);
+ void markSaved();
- void markSaved();
-
- static LLPointer<LLInventoryItem> getEmbeddedItemPtr(llwchar ext_char); // returns pointer to item from static list
- static BOOL getEmbeddedItemSaved(llwchar ext_char); // returns whether item from static list is saved
+ static LLPointer<LLInventoryItem> getEmbeddedItemPtr(llwchar ext_char); // returns pointer to item from static list
+ static BOOL getEmbeddedItemSaved(llwchar ext_char); // returns whether item from static list is saved
private:
- struct embedded_info_t
- {
- LLPointer<LLInventoryItem> mItemPtr;
- BOOL mSaved;
- };
- typedef std::map<llwchar, embedded_info_t > item_map_t;
- static item_map_t sEntries;
- static std::stack<llwchar> sFreeEntries;
-
- std::set<llwchar> mEmbeddedUsedChars; // list of used llwchars
- std::vector<llwchar> mEmbeddedIndexedChars; // index -> wchar for 0x80 + index format
- const LLViewerTextEditor* mEditor;
+ struct embedded_info_t
+ {
+ LLPointer<LLInventoryItem> mItemPtr;
+ BOOL mSaved;
+ };
+ typedef std::map<llwchar, embedded_info_t > item_map_t;
+ static item_map_t sEntries;
+ static std::stack<llwchar> sFreeEntries;
+
+ std::set<llwchar> mEmbeddedUsedChars; // list of used llwchars
+ std::vector<llwchar> mEmbeddedIndexedChars; // index -> wchar for 0x80 + index format
+ const LLViewerTextEditor* mEditor;
};
//statics
@@ -346,268 +346,268 @@ LLEmbeddedItems::item_map_t LLEmbeddedItems::sEntries;
std::stack<llwchar> LLEmbeddedItems::sFreeEntries;
LLEmbeddedItems::LLEmbeddedItems(const LLViewerTextEditor* editor)
- : mEditor(editor)
+ : mEditor(editor)
{
}
LLEmbeddedItems::~LLEmbeddedItems()
{
- clear();
+ clear();
}
void LLEmbeddedItems::clear()
{
- // Remove entries for this editor from static list
- for (std::set<llwchar>::iterator iter = mEmbeddedUsedChars.begin();
- iter != mEmbeddedUsedChars.end();)
- {
- std::set<llwchar>::iterator nextiter = iter++;
- removeEmbeddedItem(*nextiter);
- }
- mEmbeddedUsedChars.clear();
- mEmbeddedIndexedChars.clear();
+ // Remove entries for this editor from static list
+ for (std::set<llwchar>::iterator iter = mEmbeddedUsedChars.begin();
+ iter != mEmbeddedUsedChars.end();)
+ {
+ std::set<llwchar>::iterator nextiter = iter++;
+ removeEmbeddedItem(*nextiter);
+ }
+ mEmbeddedUsedChars.clear();
+ mEmbeddedIndexedChars.clear();
}
bool LLEmbeddedItems::empty()
{
- removeUnusedChars();
- return mEmbeddedUsedChars.empty();
+ removeUnusedChars();
+ return mEmbeddedUsedChars.empty();
}
// Inserts a new unique entry
BOOL LLEmbeddedItems::insertEmbeddedItem( LLInventoryItem* item, llwchar* ext_char, bool is_new)
{
- // Now insert a new one
- llwchar wc_emb;
- if (!sFreeEntries.empty())
- {
- wc_emb = sFreeEntries.top();
- sFreeEntries.pop();
- }
- else if (sEntries.empty())
- {
- wc_emb = LLTextEditor::FIRST_EMBEDDED_CHAR;
- }
- else
- {
- item_map_t::iterator last = sEntries.end();
- --last;
- wc_emb = last->first;
- if (wc_emb >= LLTextEditor::LAST_EMBEDDED_CHAR)
- {
- return FALSE;
- }
- ++wc_emb;
- }
-
- sEntries[wc_emb].mItemPtr = item;
- sEntries[wc_emb].mSaved = is_new ? FALSE : TRUE;
- *ext_char = wc_emb;
- mEmbeddedUsedChars.insert(wc_emb);
- return TRUE;
+ // Now insert a new one
+ llwchar wc_emb;
+ if (!sFreeEntries.empty())
+ {
+ wc_emb = sFreeEntries.top();
+ sFreeEntries.pop();
+ }
+ else if (sEntries.empty())
+ {
+ wc_emb = LLTextEditor::FIRST_EMBEDDED_CHAR;
+ }
+ else
+ {
+ item_map_t::iterator last = sEntries.end();
+ --last;
+ wc_emb = last->first;
+ if (wc_emb >= LLTextEditor::LAST_EMBEDDED_CHAR)
+ {
+ return FALSE;
+ }
+ ++wc_emb;
+ }
+
+ sEntries[wc_emb].mItemPtr = item;
+ sEntries[wc_emb].mSaved = is_new ? FALSE : TRUE;
+ *ext_char = wc_emb;
+ mEmbeddedUsedChars.insert(wc_emb);
+ return TRUE;
}
// Removes an entry (all entries are unique)
BOOL LLEmbeddedItems::removeEmbeddedItem( llwchar ext_char )
{
- mEmbeddedUsedChars.erase(ext_char);
- item_map_t::iterator iter = sEntries.find(ext_char);
- if (iter != sEntries.end())
- {
- sEntries.erase(ext_char);
- sFreeEntries.push(ext_char);
- return TRUE;
- }
- return FALSE;
+ mEmbeddedUsedChars.erase(ext_char);
+ item_map_t::iterator iter = sEntries.find(ext_char);
+ if (iter != sEntries.end())
+ {
+ sEntries.erase(ext_char);
+ sFreeEntries.push(ext_char);
+ return TRUE;
+ }
+ return FALSE;
}
-
+
// static
LLPointer<LLInventoryItem> LLEmbeddedItems::getEmbeddedItemPtr(llwchar ext_char)
{
- if( ext_char >= LLTextEditor::FIRST_EMBEDDED_CHAR && ext_char <= LLTextEditor::LAST_EMBEDDED_CHAR )
- {
- item_map_t::iterator iter = sEntries.find(ext_char);
- if (iter != sEntries.end())
- {
- return iter->second.mItemPtr;
- }
- }
- return NULL;
+ if( ext_char >= LLTextEditor::FIRST_EMBEDDED_CHAR && ext_char <= LLTextEditor::LAST_EMBEDDED_CHAR )
+ {
+ item_map_t::iterator iter = sEntries.find(ext_char);
+ if (iter != sEntries.end())
+ {
+ return iter->second.mItemPtr;
+ }
+ }
+ return NULL;
}
// static
BOOL LLEmbeddedItems::getEmbeddedItemSaved(llwchar ext_char)
{
- if( ext_char >= LLTextEditor::FIRST_EMBEDDED_CHAR && ext_char <= LLTextEditor::LAST_EMBEDDED_CHAR )
- {
- item_map_t::iterator iter = sEntries.find(ext_char);
- if (iter != sEntries.end())
- {
- return iter->second.mSaved;
- }
- }
- return FALSE;
+ if( ext_char >= LLTextEditor::FIRST_EMBEDDED_CHAR && ext_char <= LLTextEditor::LAST_EMBEDDED_CHAR )
+ {
+ item_map_t::iterator iter = sEntries.find(ext_char);
+ if (iter != sEntries.end())
+ {
+ return iter->second.mSaved;
+ }
+ }
+ return FALSE;
}
-llwchar LLEmbeddedItems::getEmbeddedCharFromIndex(S32 index)
+llwchar LLEmbeddedItems::getEmbeddedCharFromIndex(S32 index)
{
- if (index >= (S32)mEmbeddedIndexedChars.size())
- {
- LL_WARNS() << "No item for embedded char " << index << " using LL_UNKNOWN_CHAR" << LL_ENDL;
- return LL_UNKNOWN_CHAR;
- }
- return mEmbeddedIndexedChars[index];
+ if (index >= (S32)mEmbeddedIndexedChars.size())
+ {
+ LL_WARNS() << "No item for embedded char " << index << " using LL_UNKNOWN_CHAR" << LL_ENDL;
+ return LL_UNKNOWN_CHAR;
+ }
+ return mEmbeddedIndexedChars[index];
}
void LLEmbeddedItems::removeUnusedChars()
{
- std::set<llwchar> used = mEmbeddedUsedChars;
- const LLWString& wtext = mEditor->getWText();
- for (S32 i=0; i<(S32)wtext.size(); i++)
- {
- llwchar wc = wtext[i];
- if( wc >= LLTextEditor::FIRST_EMBEDDED_CHAR && wc <= LLTextEditor::LAST_EMBEDDED_CHAR )
- {
- used.erase(wc);
- }
- }
- // Remove chars not actually used
- for (std::set<llwchar>::iterator iter = used.begin();
- iter != used.end(); ++iter)
- {
- removeEmbeddedItem(*iter);
- }
+ std::set<llwchar> used = mEmbeddedUsedChars;
+ const LLWString& wtext = mEditor->getWText();
+ for (S32 i=0; i<(S32)wtext.size(); i++)
+ {
+ llwchar wc = wtext[i];
+ if( wc >= LLTextEditor::FIRST_EMBEDDED_CHAR && wc <= LLTextEditor::LAST_EMBEDDED_CHAR )
+ {
+ used.erase(wc);
+ }
+ }
+ // Remove chars not actually used
+ for (std::set<llwchar>::iterator iter = used.begin();
+ iter != used.end(); ++iter)
+ {
+ removeEmbeddedItem(*iter);
+ }
}
void LLEmbeddedItems::copyUsedCharsToIndexed()
{
- // Prune unused items
- removeUnusedChars();
-
- // Copy all used llwchars to mEmbeddedIndexedChars
- mEmbeddedIndexedChars.clear();
- for (std::set<llwchar>::iterator iter = mEmbeddedUsedChars.begin();
- iter != mEmbeddedUsedChars.end(); ++iter)
- {
- mEmbeddedIndexedChars.push_back(*iter);
- }
+ // Prune unused items
+ removeUnusedChars();
+
+ // Copy all used llwchars to mEmbeddedIndexedChars
+ mEmbeddedIndexedChars.clear();
+ for (std::set<llwchar>::iterator iter = mEmbeddedUsedChars.begin();
+ iter != mEmbeddedUsedChars.end(); ++iter)
+ {
+ mEmbeddedIndexedChars.push_back(*iter);
+ }
}
S32 LLEmbeddedItems::getIndexFromEmbeddedChar(llwchar wch)
{
- S32 idx = 0;
- for (std::vector<llwchar>::iterator iter = mEmbeddedIndexedChars.begin();
- iter != mEmbeddedIndexedChars.end(); ++iter)
- {
- if (wch == *iter)
- break;
- ++idx;
- }
- if (idx < (S32)mEmbeddedIndexedChars.size())
- {
- return idx;
- }
- else
- {
- LL_WARNS() << "Embedded char " << wch << " not found, using 0" << LL_ENDL;
- return 0;
- }
+ S32 idx = 0;
+ for (std::vector<llwchar>::iterator iter = mEmbeddedIndexedChars.begin();
+ iter != mEmbeddedIndexedChars.end(); ++iter)
+ {
+ if (wch == *iter)
+ break;
+ ++idx;
+ }
+ if (idx < (S32)mEmbeddedIndexedChars.size())
+ {
+ return idx;
+ }
+ else
+ {
+ LL_WARNS() << "Embedded char " << wch << " not found, using 0" << LL_ENDL;
+ return 0;
+ }
}
BOOL LLEmbeddedItems::hasEmbeddedItem(llwchar ext_char)
{
- std::set<llwchar>::iterator iter = mEmbeddedUsedChars.find(ext_char);
- if (iter != mEmbeddedUsedChars.end())
- {
- return TRUE;
- }
- return FALSE;
+ std::set<llwchar>::iterator iter = mEmbeddedUsedChars.find(ext_char);
+ if (iter != mEmbeddedUsedChars.end())
+ {
+ return TRUE;
+ }
+ return FALSE;
}
LLUIImagePtr LLEmbeddedItems::getItemImage(llwchar ext_char) const
{
- LLInventoryItem* item = getEmbeddedItemPtr(ext_char);
- if (item)
- {
- const char* img_name = "";
- switch( item->getType() )
- {
- case LLAssetType::AT_TEXTURE:
- if(item->getInventoryType() == LLInventoryType::IT_SNAPSHOT)
- {
- img_name = "Inv_Snapshot";
- }
- else
- {
- img_name = "Inv_Texture";
- }
-
- break;
- case LLAssetType::AT_SOUND: img_name = "Inv_Sound"; break;
- case LLAssetType::AT_CLOTHING: img_name = "Inv_Clothing"; break;
- case LLAssetType::AT_OBJECT:
- img_name = LLInventoryItemFlags::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS & item->getFlags() ?
- "Inv_Object_Multi" : "Inv_Object";
- break;
- case LLAssetType::AT_CALLINGCARD: img_name = "Inv_CallingCard"; break;
- case LLAssetType::AT_LANDMARK: img_name = "Inv_Landmark"; break;
- case LLAssetType::AT_NOTECARD: img_name = "Inv_Notecard"; break;
- case LLAssetType::AT_LSL_TEXT: img_name = "Inv_Script"; break;
- case LLAssetType::AT_BODYPART: img_name = "Inv_Skin"; break;
- case LLAssetType::AT_ANIMATION: img_name = "Inv_Animation"; break;
- case LLAssetType::AT_GESTURE: img_name = "Inv_Gesture"; break;
- case LLAssetType::AT_MESH: img_name = "Inv_Mesh"; break;
+ LLInventoryItem* item = getEmbeddedItemPtr(ext_char);
+ if (item)
+ {
+ const char* img_name = "";
+ switch( item->getType() )
+ {
+ case LLAssetType::AT_TEXTURE:
+ if(item->getInventoryType() == LLInventoryType::IT_SNAPSHOT)
+ {
+ img_name = "Inv_Snapshot";
+ }
+ else
+ {
+ img_name = "Inv_Texture";
+ }
+
+ break;
+ case LLAssetType::AT_SOUND: img_name = "Inv_Sound"; break;
+ case LLAssetType::AT_CLOTHING: img_name = "Inv_Clothing"; break;
+ case LLAssetType::AT_OBJECT:
+ img_name = LLInventoryItemFlags::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS & item->getFlags() ?
+ "Inv_Object_Multi" : "Inv_Object";
+ break;
+ case LLAssetType::AT_CALLINGCARD: img_name = "Inv_CallingCard"; break;
+ case LLAssetType::AT_LANDMARK: img_name = "Inv_Landmark"; break;
+ case LLAssetType::AT_NOTECARD: img_name = "Inv_Notecard"; break;
+ case LLAssetType::AT_LSL_TEXT: img_name = "Inv_Script"; break;
+ case LLAssetType::AT_BODYPART: img_name = "Inv_Skin"; break;
+ case LLAssetType::AT_ANIMATION: img_name = "Inv_Animation"; break;
+ case LLAssetType::AT_GESTURE: img_name = "Inv_Gesture"; break;
+ case LLAssetType::AT_MESH: img_name = "Inv_Mesh"; break;
case LLAssetType::AT_SETTINGS: img_name = "Inv_Settings"; break;
case LLAssetType::AT_MATERIAL: img_name = "Inv_Material"; break;
- default: img_name = "Inv_Invalid"; break; // use the Inv_Invalid icon for undefined object types (see MAINT-3981)
+ default: img_name = "Inv_Invalid"; break; // use the Inv_Invalid icon for undefined object types (see MAINT-3981)
- }
+ }
- return LLUI::getUIImage(img_name);
- }
- return LLUIImagePtr();
+ return LLUI::getUIImage(img_name);
+ }
+ return LLUIImagePtr();
}
void LLEmbeddedItems::addItems(const std::vector<LLPointer<LLInventoryItem> >& items)
{
- for (std::vector<LLPointer<LLInventoryItem> >::const_iterator iter = items.begin();
- iter != items.end(); ++iter)
- {
- LLInventoryItem* item = *iter;
- if (item)
- {
- llwchar wc;
- if (!insertEmbeddedItem( item, &wc, false ))
- {
- break;
- }
- mEmbeddedIndexedChars.push_back(wc);
- }
- }
+ for (std::vector<LLPointer<LLInventoryItem> >::const_iterator iter = items.begin();
+ iter != items.end(); ++iter)
+ {
+ LLInventoryItem* item = *iter;
+ if (item)
+ {
+ llwchar wc;
+ if (!insertEmbeddedItem( item, &wc, false ))
+ {
+ break;
+ }
+ mEmbeddedIndexedChars.push_back(wc);
+ }
+ }
}
void LLEmbeddedItems::getEmbeddedItemList( std::vector<LLPointer<LLInventoryItem> >& items )
{
- for (std::set<llwchar>::iterator iter = mEmbeddedUsedChars.begin(); iter != mEmbeddedUsedChars.end(); ++iter)
- {
- llwchar wc = *iter;
- LLPointer<LLInventoryItem> item = getEmbeddedItemPtr(wc);
- if (item)
- {
- items.push_back(item);
- }
- }
+ for (std::set<llwchar>::iterator iter = mEmbeddedUsedChars.begin(); iter != mEmbeddedUsedChars.end(); ++iter)
+ {
+ llwchar wc = *iter;
+ LLPointer<LLInventoryItem> item = getEmbeddedItemPtr(wc);
+ if (item)
+ {
+ items.push_back(item);
+ }
+ }
}
void LLEmbeddedItems::markSaved()
{
- for (std::set<llwchar>::iterator iter = mEmbeddedUsedChars.begin(); iter != mEmbeddedUsedChars.end(); ++iter)
- {
- llwchar wc = *iter;
- sEntries[wc].mSaved = TRUE;
- }
+ for (std::set<llwchar>::iterator iter = mEmbeddedUsedChars.begin(); iter != mEmbeddedUsedChars.end(); ++iter)
+ {
+ llwchar wc = *iter;
+ sEntries[wc].mSaved = TRUE;
+ }
}
///////////////////////////////////////////////////////////////////
@@ -615,63 +615,63 @@ void LLEmbeddedItems::markSaved()
class LLViewerTextEditor::TextCmdInsertEmbeddedItem : public LLTextBase::TextCmd
{
public:
- TextCmdInsertEmbeddedItem( S32 pos, LLInventoryItem* item )
- : TextCmd(pos, FALSE),
- mExtCharValue(0)
- {
- mItem = item;
- }
-
- virtual BOOL execute( LLTextBase* editor, S32* delta )
- {
- LLViewerTextEditor* viewer_editor = (LLViewerTextEditor*)editor;
- // Take this opportunity to remove any unused embedded items from this editor
- viewer_editor->mEmbeddedItemList->removeUnusedChars();
- if(viewer_editor->mEmbeddedItemList->insertEmbeddedItem( mItem, &mExtCharValue, true ) )
- {
- LLWString ws;
- ws.assign(1, mExtCharValue);
- *delta = insert(editor, getPosition(), ws );
- return (*delta != 0);
- }
- return FALSE;
- }
-
- virtual S32 undo( LLTextBase* editor )
- {
- remove(editor, getPosition(), 1);
- return getPosition();
- }
-
- virtual S32 redo( LLTextBase* editor )
- {
- LLWString ws;
- ws += mExtCharValue;
- insert(editor, getPosition(), ws );
- return getPosition() + 1;
- }
- virtual BOOL hasExtCharValue( llwchar value ) const
- {
- return (value == mExtCharValue);
- }
+ TextCmdInsertEmbeddedItem( S32 pos, LLInventoryItem* item )
+ : TextCmd(pos, FALSE),
+ mExtCharValue(0)
+ {
+ mItem = item;
+ }
+
+ virtual BOOL execute( LLTextBase* editor, S32* delta )
+ {
+ LLViewerTextEditor* viewer_editor = (LLViewerTextEditor*)editor;
+ // Take this opportunity to remove any unused embedded items from this editor
+ viewer_editor->mEmbeddedItemList->removeUnusedChars();
+ if(viewer_editor->mEmbeddedItemList->insertEmbeddedItem( mItem, &mExtCharValue, true ) )
+ {
+ LLWString ws;
+ ws.assign(1, mExtCharValue);
+ *delta = insert(editor, getPosition(), ws );
+ return (*delta != 0);
+ }
+ return FALSE;
+ }
+
+ virtual S32 undo( LLTextBase* editor )
+ {
+ remove(editor, getPosition(), 1);
+ return getPosition();
+ }
+
+ virtual S32 redo( LLTextBase* editor )
+ {
+ LLWString ws;
+ ws += mExtCharValue;
+ insert(editor, getPosition(), ws );
+ return getPosition() + 1;
+ }
+ virtual BOOL hasExtCharValue( llwchar value ) const
+ {
+ return (value == mExtCharValue);
+ }
private:
- LLPointer<LLInventoryItem> mItem;
- llwchar mExtCharValue;
+ LLPointer<LLInventoryItem> mItem;
+ llwchar mExtCharValue;
};
struct LLNotecardCopyInfo
{
- LLNotecardCopyInfo(LLViewerTextEditor *ed, LLInventoryItem *item)
- : mTextEd(ed)
- {
- mItem = item;
- }
-
- LLViewerTextEditor* mTextEd;
- // need to make this be a copy (not a * here) because it isn't stable.
- // I wish we had passed LLPointers all the way down, but we didn't
- LLPointer<LLInventoryItem> mItem;
+ LLNotecardCopyInfo(LLViewerTextEditor *ed, LLInventoryItem *item)
+ : mTextEd(ed)
+ {
+ mItem = item;
+ }
+
+ LLViewerTextEditor* mTextEd;
+ // need to make this be a copy (not a * here) because it isn't stable.
+ // I wish we had passed LLPointers all the way down, but we didn't
+ LLPointer<LLInventoryItem> mItem;
};
//----------------------------------------------------------------------------
@@ -680,375 +680,375 @@ struct LLNotecardCopyInfo
// Member functions
//
LLViewerTextEditor::LLViewerTextEditor(const LLViewerTextEditor::Params& p)
-: LLTextEditor(p),
- mDragItemChar(0),
- mDragItemSaved(FALSE),
- mInventoryCallback(new LLEmbeddedNotecardOpener)
+: LLTextEditor(p),
+ mDragItemChar(0),
+ mDragItemSaved(FALSE),
+ mInventoryCallback(new LLEmbeddedNotecardOpener)
{
- mEmbeddedItemList = new LLEmbeddedItems(this);
- mInventoryCallback->setEditor(this);
+ mEmbeddedItemList = new LLEmbeddedItems(this);
+ mInventoryCallback->setEditor(this);
}
LLViewerTextEditor::~LLViewerTextEditor()
{
- delete mEmbeddedItemList;
-
-
- // The inventory callback may still be in use by gInventoryCallbackManager...
- // so set its reference to this to null.
- mInventoryCallback->setEditor(NULL);
+ delete mEmbeddedItemList;
+
+
+ // The inventory callback may still be in use by gInventoryCallbackManager...
+ // so set its reference to this to null.
+ mInventoryCallback->setEditor(NULL);
}
///////////////////////////////////////////////////////////////////
// virtual
void LLViewerTextEditor::makePristine()
{
- mEmbeddedItemList->markSaved();
- LLTextEditor::makePristine();
+ mEmbeddedItemList->markSaved();
+ LLTextEditor::makePristine();
}
void LLViewerTextEditor::onVisibilityChange( BOOL new_visibility )
{
- LLUICtrl::onVisibilityChange(new_visibility);
+ LLUICtrl::onVisibilityChange(new_visibility);
}
BOOL LLViewerTextEditor::handleMouseDown(S32 x, S32 y, MASK mask)
{
- BOOL handled = FALSE;
-
- // Let scrollbar have first dibs
- handled = LLView::childrenHandleMouseDown(x, y, mask) != NULL;
-
- if( !handled)
- {
- if( allowsEmbeddedItems() )
- {
- setCursorAtLocalPos( x, y, FALSE );
- llwchar wc = 0;
- if (mCursorPos < getLength())
- {
- wc = getWText()[mCursorPos];
- }
- LLPointer<LLInventoryItem> item_at_pos = LLEmbeddedItems::getEmbeddedItemPtr(wc);
- if (item_at_pos)
- {
- mDragItem = item_at_pos;
- mDragItemChar = wc;
- mDragItemSaved = LLEmbeddedItems::getEmbeddedItemSaved(wc);
- gFocusMgr.setMouseCapture( this );
- mMouseDownX = x;
- mMouseDownY = y;
- S32 screen_x;
- S32 screen_y;
- localPointToScreen(x, y, &screen_x, &screen_y );
- LLToolDragAndDrop::getInstance()->setDragStart( screen_x, screen_y );
-
- if (hasTabStop())
- {
- setFocus( TRUE );
- }
-
- handled = TRUE;
- }
- else
- {
- mDragItem = NULL;
- }
- }
-
- if (!handled)
- {
- handled = LLTextEditor::handleMouseDown(x, y, mask);
- }
- }
-
- return handled;
+ BOOL handled = FALSE;
+
+ // Let scrollbar have first dibs
+ handled = LLView::childrenHandleMouseDown(x, y, mask) != NULL;
+
+ if( !handled)
+ {
+ if( allowsEmbeddedItems() )
+ {
+ setCursorAtLocalPos( x, y, FALSE );
+ llwchar wc = 0;
+ if (mCursorPos < getLength())
+ {
+ wc = getWText()[mCursorPos];
+ }
+ LLPointer<LLInventoryItem> item_at_pos = LLEmbeddedItems::getEmbeddedItemPtr(wc);
+ if (item_at_pos)
+ {
+ mDragItem = item_at_pos;
+ mDragItemChar = wc;
+ mDragItemSaved = LLEmbeddedItems::getEmbeddedItemSaved(wc);
+ gFocusMgr.setMouseCapture( this );
+ mMouseDownX = x;
+ mMouseDownY = y;
+ S32 screen_x;
+ S32 screen_y;
+ localPointToScreen(x, y, &screen_x, &screen_y );
+ LLToolDragAndDrop::getInstance()->setDragStart( screen_x, screen_y );
+
+ if (hasTabStop())
+ {
+ setFocus( TRUE );
+ }
+
+ handled = TRUE;
+ }
+ else
+ {
+ mDragItem = NULL;
+ }
+ }
+
+ if (!handled)
+ {
+ handled = LLTextEditor::handleMouseDown(x, y, mask);
+ }
+ }
+
+ return handled;
}
BOOL LLViewerTextEditor::handleHover(S32 x, S32 y, MASK mask)
{
- BOOL handled = LLTextEditor::handleHover(x, y, mask);
-
- if(hasMouseCapture() && mDragItem)
- {
- S32 screen_x;
- S32 screen_y;
- localPointToScreen(x, y, &screen_x, &screen_y );
-
- mScroller->autoScroll(x, y);
-
- if( LLToolDragAndDrop::getInstance()->isOverThreshold( screen_x, screen_y ) )
- {
- LLToolDragAndDrop::getInstance()->beginDrag(
- LLViewerAssetType::lookupDragAndDropType( mDragItem->getType() ),
- mDragItem->getUUID(),
- LLToolDragAndDrop::SOURCE_NOTECARD,
- mPreviewID, mObjectID);
- return LLToolDragAndDrop::getInstance()->handleHover( x, y, mask );
- }
- getWindow()->setCursor(UI_CURSOR_HAND);
- handled = TRUE;
- }
-
- return handled;
+ BOOL handled = LLTextEditor::handleHover(x, y, mask);
+
+ if(hasMouseCapture() && mDragItem)
+ {
+ S32 screen_x;
+ S32 screen_y;
+ localPointToScreen(x, y, &screen_x, &screen_y );
+
+ mScroller->autoScroll(x, y);
+
+ if( LLToolDragAndDrop::getInstance()->isOverThreshold( screen_x, screen_y ) )
+ {
+ LLToolDragAndDrop::getInstance()->beginDrag(
+ LLViewerAssetType::lookupDragAndDropType( mDragItem->getType() ),
+ mDragItem->getUUID(),
+ LLToolDragAndDrop::SOURCE_NOTECARD,
+ mPreviewID, mObjectID);
+ return LLToolDragAndDrop::getInstance()->handleHover( x, y, mask );
+ }
+ getWindow()->setCursor(UI_CURSOR_HAND);
+ handled = TRUE;
+ }
+
+ return handled;
}
BOOL LLViewerTextEditor::handleMouseUp(S32 x, S32 y, MASK mask)
{
- BOOL handled = FALSE;
-
- if( hasMouseCapture() )
- {
- if (mDragItem)
- {
- // mouse down was on an item
- S32 dx = x - mMouseDownX;
- S32 dy = y - mMouseDownY;
- if (-2 < dx && dx < 2 && -2 < dy && dy < 2)
- {
- if(mDragItemSaved)
- {
- openEmbeddedItem(mDragItem, mDragItemChar);
- }
- else
- {
- showUnsavedAlertDialog(mDragItem);
- }
- }
- }
- mDragItem = NULL;
- }
-
- handled = LLTextEditor::handleMouseUp(x,y,mask);
-
- return handled;
+ BOOL handled = FALSE;
+
+ if( hasMouseCapture() )
+ {
+ if (mDragItem)
+ {
+ // mouse down was on an item
+ S32 dx = x - mMouseDownX;
+ S32 dy = y - mMouseDownY;
+ if (-2 < dx && dx < 2 && -2 < dy && dy < 2)
+ {
+ if(mDragItemSaved)
+ {
+ openEmbeddedItem(mDragItem, mDragItemChar);
+ }
+ else
+ {
+ showUnsavedAlertDialog(mDragItem);
+ }
+ }
+ }
+ mDragItem = NULL;
+ }
+
+ handled = LLTextEditor::handleMouseUp(x,y,mask);
+
+ return handled;
}
BOOL LLViewerTextEditor::handleDoubleClick(S32 x, S32 y, MASK mask)
{
- BOOL handled = FALSE;
-
- // let scrollbar have first dibs
- handled = LLView::childrenHandleDoubleClick(x, y, mask) != NULL;
-
- if( !handled)
- {
- if( allowsEmbeddedItems() )
- {
- S32 doc_index = getDocIndexFromLocalCoord(x, y, FALSE);
- llwchar doc_char = getWText()[doc_index];
- if (mEmbeddedItemList->hasEmbeddedItem(doc_char))
- {
- if( openEmbeddedItemAtPos( doc_index ))
- {
- deselect();
- setFocus( FALSE );
- return TRUE;
- }
- }
- }
- handled = LLTextEditor::handleDoubleClick(x, y, mask);
- }
- return handled;
+ BOOL handled = FALSE;
+
+ // let scrollbar have first dibs
+ handled = LLView::childrenHandleDoubleClick(x, y, mask) != NULL;
+
+ if( !handled)
+ {
+ if( allowsEmbeddedItems() )
+ {
+ S32 doc_index = getDocIndexFromLocalCoord(x, y, FALSE);
+ llwchar doc_char = getWText()[doc_index];
+ if (mEmbeddedItemList->hasEmbeddedItem(doc_char))
+ {
+ if( openEmbeddedItemAtPos( doc_index ))
+ {
+ deselect();
+ setFocus( FALSE );
+ return TRUE;
+ }
+ }
+ }
+ handled = LLTextEditor::handleDoubleClick(x, y, mask);
+ }
+ return handled;
}
// virtual
BOOL LLViewerTextEditor::handleDragAndDrop(S32 x, S32 y, MASK mask,
- BOOL drop, EDragAndDropType cargo_type, void *cargo_data,
- EAcceptance *accept,
- std::string& tooltip_msg)
+ BOOL drop, EDragAndDropType cargo_type, void *cargo_data,
+ EAcceptance *accept,
+ std::string& tooltip_msg)
{
- BOOL handled = FALSE;
-
- LLToolDragAndDrop::ESource source = LLToolDragAndDrop::getInstance()->getSource();
- if (LLToolDragAndDrop::SOURCE_NOTECARD == source)
- {
- // We currently do not handle dragging items from one notecard to another
- // since items in a notecard must be in Inventory to be verified. See DEV-2891.
- return FALSE;
- }
-
- if (getEnabled() && acceptsTextInput())
- {
- bool supported = false;
- switch( cargo_type )
- {
- case DAD_SETTINGS:
- {
- supported = LLEnvironment::instance().isExtendedEnvironmentEnabled();
- if (!supported && tooltip_msg.empty())
- {
- tooltip_msg.assign(LLTrans::getString("TooltipNotecardNotAllowedTypeDrop"));
- }
- break;
- }
- case DAD_CALLINGCARD:
- case DAD_TEXTURE:
- case DAD_SOUND:
- case DAD_LANDMARK:
- case DAD_SCRIPT:
- case DAD_CLOTHING:
- case DAD_OBJECT:
- case DAD_NOTECARD:
- case DAD_BODYPART:
- case DAD_ANIMATION:
- case DAD_GESTURE:
- case DAD_MESH:
+ BOOL handled = FALSE;
+
+ LLToolDragAndDrop::ESource source = LLToolDragAndDrop::getInstance()->getSource();
+ if (LLToolDragAndDrop::SOURCE_NOTECARD == source)
+ {
+ // We currently do not handle dragging items from one notecard to another
+ // since items in a notecard must be in Inventory to be verified. See DEV-2891.
+ return FALSE;
+ }
+
+ if (getEnabled() && acceptsTextInput())
+ {
+ bool supported = false;
+ switch( cargo_type )
+ {
+ case DAD_SETTINGS:
+ {
+ supported = LLEnvironment::instance().isExtendedEnvironmentEnabled();
+ if (!supported && tooltip_msg.empty())
+ {
+ tooltip_msg.assign(LLTrans::getString("TooltipNotecardNotAllowedTypeDrop"));
+ }
+ break;
+ }
+ case DAD_CALLINGCARD:
+ case DAD_TEXTURE:
+ case DAD_SOUND:
+ case DAD_LANDMARK:
+ case DAD_SCRIPT:
+ case DAD_CLOTHING:
+ case DAD_OBJECT:
+ case DAD_NOTECARD:
+ case DAD_BODYPART:
+ case DAD_ANIMATION:
+ case DAD_GESTURE:
+ case DAD_MESH:
case DAD_MATERIAL:
- {
- supported = true;
- break;
- }
-
- default:
- supported = false;
- break;
- }
-
- LLInventoryItem *item = (LLInventoryItem *)cargo_data;
- if (item && allowsEmbeddedItems() && supported)
- {
- U32 mask_next = item->getPermissions().getMaskNextOwner();
- if((mask_next & PERM_ITEM_UNRESTRICTED) == PERM_ITEM_UNRESTRICTED)
- {
- if( drop )
- {
- deselect();
- S32 old_cursor = mCursorPos;
- setCursorAtLocalPos( x, y, TRUE );
- S32 insert_pos = mCursorPos;
- setCursorPos(old_cursor);
- BOOL inserted = insertEmbeddedItem( insert_pos, item );
- if( inserted && (old_cursor > mCursorPos) )
- {
- setCursorPos(mCursorPos + 1);
- }
-
- needsReflow();
- }
- *accept = ACCEPT_YES_COPY_MULTI;
- }
- else
- {
- *accept = ACCEPT_NO;
- if (tooltip_msg.empty())
- {
- tooltip_msg.assign(LLTrans::getString("TooltipNotecardOwnerRestrictedDrop"));
- }
- }
- }
- else
- {
- *accept = ACCEPT_NO;
- }
- }
- else
- {
- // Not enabled
- *accept = ACCEPT_NO;
- }
-
- handled = TRUE;
- LL_DEBUGS("UserInput") << "dragAndDrop handled by LLViewerTextEditor " << getName() << LL_ENDL;
-
- return handled;
+ {
+ supported = true;
+ break;
+ }
+
+ default:
+ supported = false;
+ break;
+ }
+
+ LLInventoryItem *item = (LLInventoryItem *)cargo_data;
+ if (item && allowsEmbeddedItems() && supported)
+ {
+ U32 mask_next = item->getPermissions().getMaskNextOwner();
+ if((mask_next & PERM_ITEM_UNRESTRICTED) == PERM_ITEM_UNRESTRICTED)
+ {
+ if( drop )
+ {
+ deselect();
+ S32 old_cursor = mCursorPos;
+ setCursorAtLocalPos( x, y, TRUE );
+ S32 insert_pos = mCursorPos;
+ setCursorPos(old_cursor);
+ BOOL inserted = insertEmbeddedItem( insert_pos, item );
+ if( inserted && (old_cursor > mCursorPos) )
+ {
+ setCursorPos(mCursorPos + 1);
+ }
+
+ needsReflow();
+ }
+ *accept = ACCEPT_YES_COPY_MULTI;
+ }
+ else
+ {
+ *accept = ACCEPT_NO;
+ if (tooltip_msg.empty())
+ {
+ tooltip_msg.assign(LLTrans::getString("TooltipNotecardOwnerRestrictedDrop"));
+ }
+ }
+ }
+ else
+ {
+ *accept = ACCEPT_NO;
+ }
+ }
+ else
+ {
+ // Not enabled
+ *accept = ACCEPT_NO;
+ }
+
+ handled = TRUE;
+ LL_DEBUGS("UserInput") << "dragAndDrop handled by LLViewerTextEditor " << getName() << LL_ENDL;
+
+ return handled;
}
void LLViewerTextEditor::setASCIIEmbeddedText(const std::string& instr)
{
- LLWString wtext;
- const U8* buffer = (U8*)(instr.c_str());
- while (*buffer)
- {
- llwchar wch;
- U8 c = *buffer++;
- if (c >= 0x80)
- {
- S32 index = (S32)(c - 0x80);
- wch = mEmbeddedItemList->getEmbeddedCharFromIndex(index);
- }
- else
- {
- wch = (llwchar)c;
- }
- wtext.push_back(wch);
- }
- setWText(wtext);
+ LLWString wtext;
+ const U8* buffer = (U8*)(instr.c_str());
+ while (*buffer)
+ {
+ llwchar wch;
+ U8 c = *buffer++;
+ if (c >= 0x80)
+ {
+ S32 index = (S32)(c - 0x80);
+ wch = mEmbeddedItemList->getEmbeddedCharFromIndex(index);
+ }
+ else
+ {
+ wch = (llwchar)c;
+ }
+ wtext.push_back(wch);
+ }
+ setWText(wtext);
}
void LLViewerTextEditor::setEmbeddedText(const std::string& instr)
{
- LLWString wtext = utf8str_to_wstring(instr);
- for (S32 i=0; i<(S32)wtext.size(); i++)
- {
- llwchar wch = wtext[i];
- if( wch >= FIRST_EMBEDDED_CHAR && wch <= LAST_EMBEDDED_CHAR )
- {
- S32 index = wch - FIRST_EMBEDDED_CHAR;
- wtext[i] = mEmbeddedItemList->getEmbeddedCharFromIndex(index);
- }
- }
- setWText(wtext);
+ LLWString wtext = utf8str_to_wstring(instr);
+ for (S32 i=0; i<(S32)wtext.size(); i++)
+ {
+ llwchar wch = wtext[i];
+ if( wch >= FIRST_EMBEDDED_CHAR && wch <= LAST_EMBEDDED_CHAR )
+ {
+ S32 index = wch - FIRST_EMBEDDED_CHAR;
+ wtext[i] = mEmbeddedItemList->getEmbeddedCharFromIndex(index);
+ }
+ }
+ setWText(wtext);
}
std::string LLViewerTextEditor::getEmbeddedText()
{
#if 1
- // New version (Version 2)
- mEmbeddedItemList->copyUsedCharsToIndexed();
- LLWString outtextw;
- for (S32 i=0; i<(S32)getWText().size(); i++)
- {
- llwchar wch = getWText()[i];
- if( wch >= FIRST_EMBEDDED_CHAR && wch <= LAST_EMBEDDED_CHAR )
- {
- S32 index = mEmbeddedItemList->getIndexFromEmbeddedChar(wch);
- wch = FIRST_EMBEDDED_CHAR + index;
- }
- outtextw.push_back(wch);
- }
- std::string outtext = wstring_to_utf8str(outtextw);
- return outtext;
+ // New version (Version 2)
+ mEmbeddedItemList->copyUsedCharsToIndexed();
+ LLWString outtextw;
+ for (S32 i=0; i<(S32)getWText().size(); i++)
+ {
+ llwchar wch = getWText()[i];
+ if( wch >= FIRST_EMBEDDED_CHAR && wch <= LAST_EMBEDDED_CHAR )
+ {
+ S32 index = mEmbeddedItemList->getIndexFromEmbeddedChar(wch);
+ wch = FIRST_EMBEDDED_CHAR + index;
+ }
+ outtextw.push_back(wch);
+ }
+ std::string outtext = wstring_to_utf8str(outtextw);
+ return outtext;
#else
- // Old version (Version 1)
- mEmbeddedItemList->copyUsedCharsToIndexed();
- std::string outtext;
- for (S32 i=0; i<(S32)mWText.size(); i++)
- {
- llwchar wch = mWText[i];
- if( wch >= FIRST_EMBEDDED_CHAR && wch <= LAST_EMBEDDED_CHAR )
- {
- S32 index = mEmbeddedItemList->getIndexFromEmbeddedChar(wch);
- wch = 0x80 | index % 128;
- }
- else if (wch >= 0x80)
- {
- wch = LL_UNKNOWN_CHAR;
- }
- outtext.push_back((U8)wch);
- }
- return outtext;
+ // Old version (Version 1)
+ mEmbeddedItemList->copyUsedCharsToIndexed();
+ std::string outtext;
+ for (S32 i=0; i<(S32)mWText.size(); i++)
+ {
+ llwchar wch = mWText[i];
+ if( wch >= FIRST_EMBEDDED_CHAR && wch <= LAST_EMBEDDED_CHAR )
+ {
+ S32 index = mEmbeddedItemList->getIndexFromEmbeddedChar(wch);
+ wch = 0x80 | index % 128;
+ }
+ else if (wch >= 0x80)
+ {
+ wch = LL_UNKNOWN_CHAR;
+ }
+ outtext.push_back((U8)wch);
+ }
+ return outtext;
#endif
}
std::string LLViewerTextEditor::appendTime(bool prepend_newline)
{
- time_t utc_time;
- utc_time = time_corrected();
- std::string timeStr ="[["+ LLTrans::getString("TimeHour")+"]:["
- +LLTrans::getString("TimeMin")+"]] ";
+ time_t utc_time;
+ utc_time = time_corrected();
+ std::string timeStr ="[["+ LLTrans::getString("TimeHour")+"]:["
+ +LLTrans::getString("TimeMin")+"]] ";
- LLSD substitution;
+ LLSD substitution;
- substitution["datetime"] = (S32) utc_time;
- LLStringUtil::format (timeStr, substitution);
- appendText(timeStr, prepend_newline, LLStyle::Params().color(LLColor4::grey));
- blockUndo();
+ substitution["datetime"] = (S32) utc_time;
+ LLStringUtil::format (timeStr, substitution);
+ appendText(timeStr, prepend_newline, LLStyle::Params().color(LLColor4::grey));
+ blockUndo();
- return timeStr;
+ return timeStr;
}
//----------------------------------------------------------------------------
@@ -1056,186 +1056,186 @@ std::string LLViewerTextEditor::appendTime(bool prepend_newline)
llwchar LLViewerTextEditor::pasteEmbeddedItem(llwchar ext_char)
{
- if (mEmbeddedItemList->hasEmbeddedItem(ext_char))
- {
- return ext_char; // already exists in my list
- }
- LLInventoryItem* item = LLEmbeddedItems::getEmbeddedItemPtr(ext_char);
- if (item)
- {
- // Add item to my list and return new llwchar associated with it
- llwchar new_wc;
- if (mEmbeddedItemList->insertEmbeddedItem( item, &new_wc, true ))
- {
- return new_wc;
- }
- }
- return LL_UNKNOWN_CHAR; // item not found or list full
+ if (mEmbeddedItemList->hasEmbeddedItem(ext_char))
+ {
+ return ext_char; // already exists in my list
+ }
+ LLInventoryItem* item = LLEmbeddedItems::getEmbeddedItemPtr(ext_char);
+ if (item)
+ {
+ // Add item to my list and return new llwchar associated with it
+ llwchar new_wc;
+ if (mEmbeddedItemList->insertEmbeddedItem( item, &new_wc, true ))
+ {
+ return new_wc;
+ }
+ }
+ return LL_UNKNOWN_CHAR; // item not found or list full
}
void LLViewerTextEditor::onValueChange(S32 start, S32 end)
{
- updateSegments();
- updateLinkSegments();
- findEmbeddedItemSegments(start, end);
+ updateSegments();
+ updateLinkSegments();
+ findEmbeddedItemSegments(start, end);
}
void LLViewerTextEditor::findEmbeddedItemSegments(S32 start, S32 end)
{
- LLWString text = getWText();
-
- // Start with i just after the first embedded item
- for(S32 idx = start; idx < end; idx++ )
- {
- llwchar embedded_char = text[idx];
- if( embedded_char >= FIRST_EMBEDDED_CHAR
- && embedded_char <= LAST_EMBEDDED_CHAR
- && mEmbeddedItemList->hasEmbeddedItem(embedded_char) )
- {
- LLInventoryItem* itemp = mEmbeddedItemList->getEmbeddedItemPtr(embedded_char);
- LLUIImagePtr image = mEmbeddedItemList->getItemImage(embedded_char);
- insertSegment(new LLEmbeddedItemSegment(idx, image, itemp, *this));
- }
- }
+ LLWString text = getWText();
+
+ // Start with i just after the first embedded item
+ for(S32 idx = start; idx < end; idx++ )
+ {
+ llwchar embedded_char = text[idx];
+ if( embedded_char >= FIRST_EMBEDDED_CHAR
+ && embedded_char <= LAST_EMBEDDED_CHAR
+ && mEmbeddedItemList->hasEmbeddedItem(embedded_char) )
+ {
+ LLInventoryItem* itemp = mEmbeddedItemList->getEmbeddedItemPtr(embedded_char);
+ LLUIImagePtr image = mEmbeddedItemList->getItemImage(embedded_char);
+ insertSegment(new LLEmbeddedItemSegment(idx, image, itemp, *this));
+ }
+ }
}
BOOL LLViewerTextEditor::openEmbeddedItemAtPos(S32 pos)
{
- if( pos < getLength())
- {
- llwchar wc = getWText()[pos];
- LLPointer<LLInventoryItem> item = LLEmbeddedItems::getEmbeddedItemPtr( wc );
- if( item )
- {
- BOOL saved = LLEmbeddedItems::getEmbeddedItemSaved( wc );
- if (saved)
- {
- return openEmbeddedItem(item, wc);
- }
- else
- {
- showUnsavedAlertDialog(item);
- }
- }
- }
- return FALSE;
+ if( pos < getLength())
+ {
+ llwchar wc = getWText()[pos];
+ LLPointer<LLInventoryItem> item = LLEmbeddedItems::getEmbeddedItemPtr( wc );
+ if( item )
+ {
+ BOOL saved = LLEmbeddedItems::getEmbeddedItemSaved( wc );
+ if (saved)
+ {
+ return openEmbeddedItem(item, wc);
+ }
+ else
+ {
+ showUnsavedAlertDialog(item);
+ }
+ }
+ }
+ return FALSE;
}
BOOL LLViewerTextEditor::openEmbeddedItem(LLPointer<LLInventoryItem> item, llwchar wc)
{
- switch( item->getType() )
- {
- case LLAssetType::AT_TEXTURE:
- openEmbeddedTexture( item, wc );
- return TRUE;
-
- case LLAssetType::AT_SOUND:
- openEmbeddedSound( item, wc );
- return TRUE;
-
- case LLAssetType::AT_LANDMARK:
- openEmbeddedLandmark( item, wc );
- return TRUE;
-
- case LLAssetType::AT_CALLINGCARD:
- openEmbeddedCallingcard( item, wc );
- return TRUE;
- case LLAssetType::AT_SETTINGS:
- openEmbeddedSetting(item, wc);
- return TRUE;
+ switch( item->getType() )
+ {
+ case LLAssetType::AT_TEXTURE:
+ openEmbeddedTexture( item, wc );
+ return TRUE;
+
+ case LLAssetType::AT_SOUND:
+ openEmbeddedSound( item, wc );
+ return TRUE;
+
+ case LLAssetType::AT_LANDMARK:
+ openEmbeddedLandmark( item, wc );
+ return TRUE;
+
+ case LLAssetType::AT_CALLINGCARD:
+ openEmbeddedCallingcard( item, wc );
+ return TRUE;
+ case LLAssetType::AT_SETTINGS:
+ openEmbeddedSetting(item, wc);
+ return TRUE;
case LLAssetType::AT_MATERIAL:
openEmbeddedGLTFMaterial(item, wc);
return TRUE;
- case LLAssetType::AT_NOTECARD:
- case LLAssetType::AT_LSL_TEXT:
- case LLAssetType::AT_CLOTHING:
- case LLAssetType::AT_OBJECT:
- case LLAssetType::AT_BODYPART:
- case LLAssetType::AT_ANIMATION:
- case LLAssetType::AT_GESTURE:
- showCopyToInvDialog( item, wc );
- return TRUE;
- default:
- return FALSE;
- }
+ case LLAssetType::AT_NOTECARD:
+ case LLAssetType::AT_LSL_TEXT:
+ case LLAssetType::AT_CLOTHING:
+ case LLAssetType::AT_OBJECT:
+ case LLAssetType::AT_BODYPART:
+ case LLAssetType::AT_ANIMATION:
+ case LLAssetType::AT_GESTURE:
+ showCopyToInvDialog( item, wc );
+ return TRUE;
+ default:
+ return FALSE;
+ }
}
void LLViewerTextEditor::openEmbeddedTexture( LLInventoryItem* item, llwchar wc )
{
- // *NOTE: Just for embedded Texture , we should use getAssetUUID(),
- // not getUUID(), because LLPreviewTexture pass in AssetUUID into
- // LLPreview constructor ItemUUID parameter.
- if (!item)
- return;
- LLPreviewTexture* preview = LLFloaterReg::showTypedInstance<LLPreviewTexture>("preview_texture", LLSD(item->getAssetUUID()), TAKE_FOCUS_YES);
- if (preview)
- {
- preview->setAuxItem( item );
- preview->setNotecardInfo(mNotecardInventoryID, mObjectID);
- if (preview->hasString("Title"))
- {
- LLStringUtil::format_map_t args;
- args["[NAME]"] = item->getName();
- LLUIString title = preview->getString("Title", args);
- preview->setTitle(title.getString());
- }
- preview->getChild<LLUICtrl>("desc")->setValue(item->getDescription());
- }
+ // *NOTE: Just for embedded Texture , we should use getAssetUUID(),
+ // not getUUID(), because LLPreviewTexture pass in AssetUUID into
+ // LLPreview constructor ItemUUID parameter.
+ if (!item)
+ return;
+ LLPreviewTexture* preview = LLFloaterReg::showTypedInstance<LLPreviewTexture>("preview_texture", LLSD(item->getAssetUUID()), TAKE_FOCUS_YES);
+ if (preview)
+ {
+ preview->setAuxItem( item );
+ preview->setNotecardInfo(mNotecardInventoryID, mObjectID);
+ if (preview->hasString("Title"))
+ {
+ LLStringUtil::format_map_t args;
+ args["[NAME]"] = item->getName();
+ LLUIString title = preview->getString("Title", args);
+ preview->setTitle(title.getString());
+ }
+ preview->getChild<LLUICtrl>("desc")->setValue(item->getDescription());
+ }
}
void LLViewerTextEditor::openEmbeddedSound( LLInventoryItem* item, llwchar wc )
{
- // Play sound locally
- LLVector3d lpos_global = gAgent.getPositionGlobal();
- const F32 SOUND_GAIN = 1.0f;
- if(gAudiop)
- {
- gAudiop->triggerSound(item->getAssetUUID(), gAgentID, SOUND_GAIN, LLAudioEngine::AUDIO_TYPE_UI, lpos_global);
- }
- showCopyToInvDialog( item, wc );
+ // Play sound locally
+ LLVector3d lpos_global = gAgent.getPositionGlobal();
+ const F32 SOUND_GAIN = 1.0f;
+ if(gAudiop)
+ {
+ gAudiop->triggerSound(item->getAssetUUID(), gAgentID, SOUND_GAIN, LLAudioEngine::AUDIO_TYPE_UI, lpos_global);
+ }
+ showCopyToInvDialog( item, wc );
}
void LLViewerTextEditor::openEmbeddedLandmark( LLPointer<LLInventoryItem> item_ptr, llwchar wc )
{
- if (item_ptr.isNull())
- return;
-
- LLLandmark* landmark = gLandmarkList.getAsset(item_ptr->getAssetUUID(),
- boost::bind(&LLEmbeddedLandmarkCopied::processForeignLandmark, _1, mObjectID, mNotecardInventoryID, item_ptr));
- if (landmark)
- {
- LLEmbeddedLandmarkCopied::processForeignLandmark(landmark, mObjectID,
- mNotecardInventoryID, item_ptr);
- }
+ if (item_ptr.isNull())
+ return;
+
+ LLLandmark* landmark = gLandmarkList.getAsset(item_ptr->getAssetUUID(),
+ boost::bind(&LLEmbeddedLandmarkCopied::processForeignLandmark, _1, mObjectID, mNotecardInventoryID, item_ptr));
+ if (landmark)
+ {
+ LLEmbeddedLandmarkCopied::processForeignLandmark(landmark, mObjectID,
+ mNotecardInventoryID, item_ptr);
+ }
}
void LLViewerTextEditor::openEmbeddedCallingcard( LLInventoryItem* item, llwchar wc )
{
- if (item && !item->getDescription().empty())
- {
- LLAvatarActions::showProfile(LLUUID(item->getDescription()));
- }
- else if (item && !item->getCreatorUUID().isNull())
- {
- LLAvatarActions::showProfile(item->getCreatorUUID());
- }
+ if (item && !item->getDescription().empty())
+ {
+ LLAvatarActions::showProfile(LLUUID(item->getDescription()));
+ }
+ else if (item && !item->getCreatorUUID().isNull())
+ {
+ LLAvatarActions::showProfile(item->getCreatorUUID());
+ }
}
void LLViewerTextEditor::openEmbeddedSetting(LLInventoryItem* item, llwchar wc)
{
- if (LLEnvironment::instance().isInventoryEnabled())
- {
- showCopyToInvDialog(item, wc);
- }
- else
- {
- LLNotificationsUtil::add("NoEnvironmentSettings");
- }
+ if (LLEnvironment::instance().isInventoryEnabled())
+ {
+ showCopyToInvDialog(item, wc);
+ }
+ else
+ {
+ LLNotificationsUtil::add("NoEnvironmentSettings");
+ }
}
void LLViewerTextEditor::openEmbeddedGLTFMaterial(LLInventoryItem* item, llwchar wc)
@@ -1260,50 +1260,50 @@ void LLViewerTextEditor::openEmbeddedGLTFMaterial(LLInventoryItem* item, llwchar
void LLViewerTextEditor::showUnsavedAlertDialog( LLInventoryItem* item )
{
- LLSD payload;
- payload["item_id"] = item->getUUID();
- payload["notecard_id"] = mNotecardInventoryID;
- LLNotificationsUtil::add( "ConfirmNotecardSave", LLSD(), payload, LLViewerTextEditor::onNotecardDialog);
+ LLSD payload;
+ payload["item_id"] = item->getUUID();
+ payload["notecard_id"] = mNotecardInventoryID;
+ LLNotificationsUtil::add( "ConfirmNotecardSave", LLSD(), payload, LLViewerTextEditor::onNotecardDialog);
}
// static
bool LLViewerTextEditor::onNotecardDialog(const LLSD& notification, const LLSD& response )
{
- S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
- if( option == 0 )
- {
- LLPreviewNotecard* preview = LLFloaterReg::findTypedInstance<LLPreviewNotecard>("preview_notecard", notification["payload"]["notecard_id"]);;
- if (preview)
- {
- preview->saveItem();
- }
- }
- return false;
+ S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+ if( option == 0 )
+ {
+ LLPreviewNotecard* preview = LLFloaterReg::findTypedInstance<LLPreviewNotecard>("preview_notecard", notification["payload"]["notecard_id"]);;
+ if (preview)
+ {
+ preview->saveItem();
+ }
+ }
+ return false;
}
void LLViewerTextEditor::showCopyToInvDialog( LLInventoryItem* item, llwchar wc )
{
- LLSD payload;
- LLUUID item_id = item->getUUID();
- payload["item_id"] = item_id;
- payload["item_wc"] = LLSD::Integer(wc);
- LLNotificationsUtil::add( "ConfirmItemCopy", LLSD(), payload,
- boost::bind(&LLViewerTextEditor::onCopyToInvDialog, this, _1, _2));
+ LLSD payload;
+ LLUUID item_id = item->getUUID();
+ payload["item_id"] = item_id;
+ payload["item_wc"] = LLSD::Integer(wc);
+ LLNotificationsUtil::add( "ConfirmItemCopy", LLSD(), payload,
+ boost::bind(&LLViewerTextEditor::onCopyToInvDialog, this, _1, _2));
}
bool LLViewerTextEditor::onCopyToInvDialog(const LLSD& notification, const LLSD& response)
{
- S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
- if( 0 == option )
- {
- llwchar wc = llwchar(notification["payload"]["item_wc"].asInteger());
- LLInventoryItem* itemp = LLEmbeddedItems::getEmbeddedItemPtr(wc);
- if (itemp)
- copyInventory(itemp);
- }
- return false;
+ S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+ if( 0 == option )
+ {
+ llwchar wc = llwchar(notification["payload"]["item_wc"].asInteger());
+ LLInventoryItem* itemp = LLEmbeddedItems::getEmbeddedItemPtr(wc);
+ if (itemp)
+ copyInventory(itemp);
+ }
+ return false;
}
@@ -1311,73 +1311,73 @@ bool LLViewerTextEditor::onCopyToInvDialog(const LLSD& notification, const LLSD&
// Returns change in number of characters in mWText
S32 LLViewerTextEditor::insertEmbeddedItem( S32 pos, LLInventoryItem* item )
{
- return execute( new TextCmdInsertEmbeddedItem( pos, item ) );
+ return execute( new TextCmdInsertEmbeddedItem( pos, item ) );
}
bool LLViewerTextEditor::importStream(std::istream& str)
{
- LLNotecard nc(LLNotecard::MAX_SIZE);
- bool success = nc.importStream(str);
- if (success)
- {
- mEmbeddedItemList->clear();
- const std::vector<LLPointer<LLInventoryItem> >& items = nc.getItems();
- mEmbeddedItemList->addItems(items);
- // Actually set the text
- if (allowsEmbeddedItems())
- {
- if (nc.getVersion() == 1)
- setASCIIEmbeddedText( nc.getText() );
- else
- setEmbeddedText( nc.getText() );
- }
- else
- {
- setText( nc.getText() );
- }
- }
- return success;
+ LLNotecard nc(LLNotecard::MAX_SIZE);
+ bool success = nc.importStream(str);
+ if (success)
+ {
+ mEmbeddedItemList->clear();
+ const std::vector<LLPointer<LLInventoryItem> >& items = nc.getItems();
+ mEmbeddedItemList->addItems(items);
+ // Actually set the text
+ if (allowsEmbeddedItems())
+ {
+ if (nc.getVersion() == 1)
+ setASCIIEmbeddedText( nc.getText() );
+ else
+ setEmbeddedText( nc.getText() );
+ }
+ else
+ {
+ setText( nc.getText() );
+ }
+ }
+ return success;
}
void LLViewerTextEditor::copyInventory(const LLInventoryItem* item, U32 callback_id)
{
- copy_inventory_from_notecard(LLUUID::null, // Don't specify a destination -- let the sim do that
- mObjectID,
- mNotecardInventoryID,
- item,
- callback_id);
+ copy_inventory_from_notecard(LLUUID::null, // Don't specify a destination -- let the sim do that
+ mObjectID,
+ mNotecardInventoryID,
+ item,
+ callback_id);
}
bool LLViewerTextEditor::hasEmbeddedInventory()
{
- return ! mEmbeddedItemList->empty();
+ return ! mEmbeddedItemList->empty();
}
////////////////////////////////////////////////////////////////////////////
BOOL LLViewerTextEditor::importBuffer( const char* buffer, S32 length )
{
- LLMemoryStream str((U8*)buffer, length);
- return importStream(str);
+ LLMemoryStream str((U8*)buffer, length);
+ return importStream(str);
}
BOOL LLViewerTextEditor::exportBuffer( std::string& buffer )
{
- LLNotecard nc(LLNotecard::MAX_SIZE);
-
- // Get the embedded text and update the item list to just be the used items
- nc.setText(getEmbeddedText());
-
- // Now get the used items and copy the list to the notecard
- std::vector<LLPointer<LLInventoryItem> > embedded_items;
- mEmbeddedItemList->getEmbeddedItemList(embedded_items);
- nc.setItems(embedded_items);
-
- std::stringstream out_stream;
- nc.exportStream(out_stream);
-
- buffer = out_stream.str();
-
- return TRUE;
+ LLNotecard nc(LLNotecard::MAX_SIZE);
+
+ // Get the embedded text and update the item list to just be the used items
+ nc.setText(getEmbeddedText());
+
+ // Now get the used items and copy the list to the notecard
+ std::vector<LLPointer<LLInventoryItem> > embedded_items;
+ mEmbeddedItemList->getEmbeddedItemList(embedded_items);
+ nc.setItems(embedded_items);
+
+ std::stringstream out_stream;
+ nc.exportStream(out_stream);
+
+ buffer = out_stream.str();
+
+ return TRUE;
}