summaryrefslogtreecommitdiff
path: root/indra/llui/llclipboard.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/llui/llclipboard.cpp')
-rw-r--r--indra/llui/llclipboard.cpp102
1 files changed, 84 insertions, 18 deletions
diff --git a/indra/llui/llclipboard.cpp b/indra/llui/llclipboard.cpp
index 984c4ec5fb..8917dc2d88 100644
--- a/indra/llui/llclipboard.cpp
+++ b/indra/llui/llclipboard.cpp
@@ -34,44 +34,104 @@
#include "llview.h"
#include "llwindow.h"
-// Global singleton
-LLClipboard gClipboard;
+LLClipboard::LLClipboard()
+: mCutMode(false)
+{
+}
+LLClipboard::~LLClipboard()
+{
+ reset();
+}
-LLClipboard::LLClipboard()
+void LLClipboard::add(const LLUUID& object)
{
+ mObjects.put(object);
}
+void LLClipboard::store(const LLUUID& object)
+{
+ reset();
+ mObjects.put(object);
+}
-LLClipboard::~LLClipboard()
+void LLClipboard::store(const LLDynamicArray<LLUUID>& inv_objects)
{
+ reset();
+ S32 count = inv_objects.count();
+ for(S32 i = 0; i < count; i++)
+ {
+ mObjects.put(inv_objects[i]);
+ }
+}
+
+void LLClipboard::cut(const LLUUID& object)
+{
+ if(!mCutMode && !mObjects.empty())
+ {
+ //looks like there are some stored items, reset clipboard state
+ reset();
+ }
+ mCutMode = true;
+ add(object);
+}
+void LLClipboard::retrieve(LLDynamicArray<LLUUID>& inv_objects) const
+{
+ inv_objects.reset();
+ S32 count = mObjects.count();
+ for(S32 i = 0; i < count; i++)
+ {
+ inv_objects.put(mObjects[i]);
+ }
+}
+
+void LLClipboard::reset()
+{
+ mObjects.reset();
+ mCutMode = false;
+}
+
+// returns true if the clipboard has something pasteable in it.
+BOOL LLClipboard::hasContents() const
+{
+ return (mObjects.count() > 0);
}
void LLClipboard::copyFromSubstring(const LLWString &src, S32 pos, S32 len, const LLUUID& source_id )
{
- mSourceID = source_id;
+ reset();
+ if (source_id.notNull())
+ {
+ store(source_id);
+ }
mString = src.substr(pos, len);
+ llinfos << "Merov debug : copyFromSubstring, string = " << wstring_to_utf8str(mString) << ", uuid = " << (hasContents() ? mObjects[0] : LLUUID::null) << llendl;
LLView::getWindow()->copyTextToClipboard( mString );
}
void LLClipboard::copyFromString(const LLWString &src, const LLUUID& source_id )
{
- mSourceID = source_id;
+ reset();
+ if (source_id.notNull())
+ {
+ store(source_id);
+ }
mString = src;
+ llinfos << "Merov debug : copyFromString, string = " << wstring_to_utf8str(mString) << ", uuid = " << (hasContents() ? mObjects[0] : LLUUID::null) << llendl;
LLView::getWindow()->copyTextToClipboard( mString );
}
const LLWString& LLClipboard::getPasteWString( LLUUID* source_id )
{
- if( mSourceID.notNull() )
+ if (hasContents())
{
LLWString temp_string;
LLView::getWindow()->pasteTextFromClipboard(temp_string);
- if( temp_string != mString )
+ if (temp_string != mString)
{
- mSourceID.setNull();
+ reset();
mString = temp_string;
}
}
@@ -80,11 +140,13 @@ const LLWString& LLClipboard::getPasteWString( LLUUID* source_id )
LLView::getWindow()->pasteTextFromClipboard(mString);
}
- if( source_id )
+ if (source_id)
{
- *source_id = mSourceID;
+ *source_id = (hasContents() ? mObjects[0] : LLUUID::null);
}
+ llinfos << "Merov debug : getPasteWString, string = " << wstring_to_utf8str(mString) << ", uuid = " << (hasContents() ? mObjects[0] : LLUUID::null) << llendl;
+
return mString;
}
@@ -97,7 +159,11 @@ BOOL LLClipboard::canPasteString() const
void LLClipboard::copyFromPrimarySubstring(const LLWString &src, S32 pos, S32 len, const LLUUID& source_id )
{
- mSourceID = source_id;
+ reset();
+ if (source_id.notNull())
+ {
+ store(source_id);
+ }
mString = src.substr(pos, len);
LLView::getWindow()->copyTextToPrimary( mString );
}
@@ -105,14 +171,14 @@ void LLClipboard::copyFromPrimarySubstring(const LLWString &src, S32 pos, S32 le
const LLWString& LLClipboard::getPastePrimaryWString( LLUUID* source_id )
{
- if( mSourceID.notNull() )
+ if (hasContents())
{
LLWString temp_string;
LLView::getWindow()->pasteTextFromPrimary(temp_string);
- if( temp_string != mString )
+ if (temp_string != mString)
{
- mSourceID.setNull();
+ reset();
mString = temp_string;
}
}
@@ -121,11 +187,11 @@ const LLWString& LLClipboard::getPastePrimaryWString( LLUUID* source_id )
LLView::getWindow()->pasteTextFromPrimary(mString);
}
- if( source_id )
+ if (source_id)
{
- *source_id = mSourceID;
+ *source_id = (hasContents() ? mObjects[0] : LLUUID::null);
}
-
+
return mString;
}