use nsPrimitiveHelpers to get data into and out of nsISupportsPrimitives.

This commit is contained in:
pinkerton%netscape.com 1999-09-22 00:40:14 +00:00
parent 3e2bfa5eb5
commit 064ccf67be
9 changed files with 17 additions and 127 deletions

View File

@ -30,6 +30,7 @@
#include "nsIServiceManager.h"
#include "nsWidgetsCID.h"
#include "nsXPIDLString.h"
#include "nsPrimitiveHelpers.h"
#include "nsVoidArray.h"
@ -559,7 +560,7 @@ nsClipboard::GetNativeClipboardData(nsITransferable * aTransferable)
#endif
nsCOMPtr<nsISupports> genericDataWrapper;
CreatePrimitiveForData ( foundFlavor, mSelectionData.data, mSelectionData.length, getter_AddRefs(genericDataWrapper) );
nsPrimitiveHelpers::CreatePrimitiveForData ( foundFlavor, mSelectionData.data, mSelectionData.length, getter_AddRefs(genericDataWrapper) );
aTransferable->SetTransferData(foundFlavor,
genericDataWrapper,
mSelectionData.length);
@ -784,7 +785,7 @@ void nsClipboard::SelectionGetCB(GtkWidget *widget,
rv = cb->mTransferable->GetTransferData(dataFlavor,
getter_AddRefs(genericDataWrapper),
&dataLength);
CreateDataFromPrimitive ( dataFlavor, genericDataWrapper, &clipboardData, dataLength );
nsPrimitiveHelpers::CreateDataFromPrimitive ( dataFlavor, genericDataWrapper, &clipboardData, dataLength );
if (NS_SUCCEEDED(rv) && clipboardData && dataLength > 0) {
size_t size = 1;
// find the number of bytes in the data for the below thing

View File

@ -438,7 +438,7 @@ NS_IMETHODIMP nsDragService::GetData (nsITransferable * aTransferable, PRUint32
#endif
nsCOMPtr<nsISupports> genericDataWrapper;
CreatePrimitiveForData ( foundFlavor, mSelectionData.data, mSelectionData.length, getter_AddRefs(genericDataWrapper) );
nsPrimitiveHelpers::CreatePrimitiveForData ( foundFlavor, mSelectionData.data, mSelectionData.length, getter_AddRefs(genericDataWrapper) );
aTransferable->SetTransferData(foundFlavor,
genericDataWrapper,
mSelectionData.length);

View File

@ -38,6 +38,7 @@
#include "nsIComponentManager.h"
#include "nsISupportsPrimitives.h"
#include "nsXPIDLString.h"
#include "nsPrimitiveHelpers.h"
#include <Scrap.h>
@ -110,14 +111,14 @@ nsClipboard :: SetNativeClipboardData()
PRUint32 dataSize = 0;
nsCOMPtr<nsISupports> genericDataWrapper;
errCode = mTransferable->GetTransferData ( flavorStr, getter_AddRefs(genericDataWrapper), &dataSize );
CreateDataFromPrimitive ( flavorStr, genericDataWrapper, &data, dataSize );
nsPrimitiveHelpers::CreateDataFromPrimitive ( flavorStr, genericDataWrapper, &data, dataSize );
#ifdef NS_DEBUG
if ( NS_FAILED(errCode) ) printf("nsClipboard:: Error getting data from transferable\n");
#endif
// stash on clipboard
long numBytes = ::PutScrap ( dataSize, macOSFlavor, data );
if ( numBytes != dataSize )
if ( numBytes != noErr )
errCode = NS_ERROR_FAILURE;
nsAllocator::Free ( data );
@ -129,7 +130,7 @@ nsClipboard :: SetNativeClipboardData()
short mappingLen = 0;
const char* mapping = theMapper.ExportMapping(&mappingLen);
long numBytes = ::PutScrap ( mappingLen, nsMimeMapperMac::MappingFlavor(), mapping );
if ( numBytes != mappingLen )
if ( numBytes != noErr )
errCode = NS_ERROR_FAILURE;
nsCRT::free ( NS_CONST_CAST(char*, mapping) );
@ -166,7 +167,6 @@ nsClipboard :: GetNativeClipboardData(nsITransferable * aTransferable)
nsMimeMapperMac theMapper ( mimeMapperData );
nsCRT::free ( mimeMapperData );
//
// Now walk down the list of flavors. When we find one that is actually on the
// clipboard, copy out the data into the transferable in that format. SetTransferData()
// implicitly handles conversions.
@ -189,7 +189,7 @@ nsClipboard :: GetNativeClipboardData(nsITransferable * aTransferable)
if ( NS_SUCCEEDED(loadResult) && clipboardData ) {
// put it into the transferable
nsCOMPtr<nsISupports> genericDataWrapper;
CreatePrimitiveForData ( flavorStr, clipboardData, dataSize, getter_AddRefs(genericDataWrapper) );
nsPrimitiveHelpers::CreatePrimitiveForData ( flavorStr, clipboardData, dataSize, getter_AddRefs(genericDataWrapper) );
errCode = aTransferable->SetTransferData ( flavorStr, genericDataWrapper, dataSize );
#ifdef NS_DEBUG
if ( errCode != NS_OK ) printf("nsClipboard:: Error setting data into transferable\n");
@ -213,7 +213,7 @@ nsClipboard :: GetNativeClipboardData(nsITransferable * aTransferable)
nsresult
nsClipboard :: GetDataOffClipboard ( ResType inMacFlavor, char** outData, long* outDataSize )
{
if ( !outData || !outDataSize || !inMacFlavor )
if ( !outData || !inMacFlavor )
return NS_ERROR_FAILURE;
// check if it is on the clipboard

View File

@ -36,6 +36,7 @@
#include "nsISupportsPrimitives.h"
#include "nsCOMPtr.h"
#include "nsXPIDLString.h"
#include "nsPrimitiveHelpers.h"
DragSendDataUPP nsDragService::sDragSendDataUPP = NewDragSendDataProc(DragSendDataProc);
@ -310,7 +311,7 @@ printf("flavor data size is %ld\n", dataSize);
// put it into the transferable.
nsCOMPtr<nsISupports> genericDataWrapper;
CreatePrimitiveForData ( flavorStr, dataBuff, dataSize, getter_AddRefs(genericDataWrapper) );
nsPrimitiveHelpers::CreatePrimitiveForData ( flavorStr, dataBuff, dataSize, getter_AddRefs(genericDataWrapper) );
errCode = aTransferable->SetTransferData ( flavorStr, genericDataWrapper, dataSize );
#ifdef NS_DEBUG
if ( errCode != NS_OK ) printf("nsDragService:: Error setting data into transferable\n");
@ -484,7 +485,7 @@ nsDragService :: GetDataForFlavor ( nsISupportsArray* inDragItems, DragReference
*outDataSize = 0;
nsCOMPtr<nsISupports> data;
if ( NS_SUCCEEDED(item->GetTransferData(mimeFlavor.GetBuffer(), getter_AddRefs(data), outDataSize)) )
CreateDataFromPrimitive ( mimeFlavor.GetBuffer(), data, outData, *outDataSize );
nsPrimitiveHelpers::CreateDataFromPrimitive ( mimeFlavor.GetBuffer(), data, outData, *outDataSize );
else
retVal = cantGetFlavorErr;
} // if valid item

View File

@ -30,6 +30,7 @@
#include "nsCOMPtr.h"
#include "nsISupportsPrimitives.h"
#include "nsXPIDLString.h"
#include "nsPrimitiveHelpers.h"
#include "nsIWidget.h"
#include "nsIComponentManager.h"
@ -546,7 +547,7 @@ nsresult nsClipboard::GetDataFromDataObject(IDataObject * aDataObject,
res = GetNativeDataOffClipboard(aDataObject, format, &data, &dataLen);
if (NS_OK == res) {
nsCOMPtr<nsISupports> genericDataWrapper;
CreatePrimitiveForData ( flavorStr, data, dataLen, getter_AddRefs(genericDataWrapper) );
nsPrimitiveHelpers::CreatePrimitiveForData ( flavorStr, data, dataLen, getter_AddRefs(genericDataWrapper) );
aTransferable->SetTransferData(flavorStr, genericDataWrapper, dataLen);
break;
}
@ -554,7 +555,7 @@ nsresult nsClipboard::GetDataFromDataObject(IDataObject * aDataObject,
res = GetNativeDataOffClipboard(aWindow, format, &data, &dataLen);
if (NS_OK == res) {
nsCOMPtr<nsISupports> genericDataWrapper;
CreatePrimitiveForData ( flavorStr, data, dataLen, getter_AddRefs(genericDataWrapper) );
nsPrimitiveHelpers::CreatePrimitiveForData ( flavorStr, data, dataLen, getter_AddRefs(genericDataWrapper) );
aTransferable->SetTransferData(flavorStr, genericDataWrapper, dataLen);
break;
}
@ -657,7 +658,7 @@ NS_IMETHODIMP nsClipboard::ForceDataToClipboard()
// this call hands back new memory with the contents copied into it
nsCOMPtr<nsISupports> genericDataWrapper;
mTransferable->GetTransferData(flavorStr, getter_AddRefs(genericDataWrapper), &dataLen);
CreateDataFromPrimitive ( flavorStr, genericDataWrapper, &data, dataLen );
nsPrimitiveHelpers::CreateDataFromPrimitive ( flavorStr, genericDataWrapper, &data, dataLen );
// now place it on the Clipboard
if (nsnull != data) {

View File

@ -137,60 +137,6 @@ NS_IMETHODIMP nsBaseClipboard::ForceDataToClipboard()
}
//¥¥¥ skanky hack until i can correctly re-create primitives from native data. i know this code sucks,
//¥¥¥ please forgive me.
void
nsBaseClipboard :: CreatePrimitiveForData ( const char* aFlavor, void* aDataBuff, PRUint32 aDataLen, nsISupports** aPrimitive )
{
if ( !aPrimitive )
return;
if ( strcmp(aFlavor,kTextMime) == 0 ) {
nsCOMPtr<nsISupportsString> primitive;
nsresult rv = nsComponentManager::CreateInstance(NS_SUPPORTS_STRING_PROGID, nsnull,
NS_GET_IID(nsISupportsString), getter_AddRefs(primitive));
if ( primitive ) {
primitive->SetData ( (char*)aDataBuff );
nsCOMPtr<nsISupports> genericPrimitive ( do_QueryInterface(primitive) );
*aPrimitive = genericPrimitive;
NS_ADDREF(*aPrimitive);
}
}
else {
nsCOMPtr<nsISupportsWString> primitive;
nsresult rv = nsComponentManager::CreateInstance(NS_SUPPORTS_WSTRING_PROGID, nsnull,
NS_GET_IID(nsISupportsWString), getter_AddRefs(primitive));
if ( primitive ) {
primitive->SetData ( (unsigned short*)aDataBuff );
nsCOMPtr<nsISupports> genericPrimitive ( do_QueryInterface(primitive) );
*aPrimitive = genericPrimitive;
NS_ADDREF(*aPrimitive);
}
}
} // CreatePrimitiveForData
void
nsBaseClipboard :: CreateDataFromPrimitive ( const char* aFlavor, nsISupports* aPrimitive, void** aDataBuff, PRUint32 aDataLen )
{
if ( !aDataBuff )
return;
if ( strcmp(aFlavor,kTextMime) == 0 ) {
nsCOMPtr<nsISupportsString> plainText ( do_QueryInterface(aPrimitive) );
if ( plainText )
plainText->GetData ( (char**)aDataBuff );
}
else {
nsCOMPtr<nsISupportsWString> doubleByteText ( do_QueryInterface(aPrimitive) );
if ( doubleByteText )
doubleByteText->GetData ( (unsigned short**)aDataBuff );
}
}
NS_IMETHODIMP
nsBaseClipboard :: HasDataMatchingFlavors ( nsISupportsArray* aFlavorList, PRBool * outResult )
{

View File

@ -49,9 +49,6 @@ protected:
NS_IMETHOD SetNativeClipboardData() = 0;
NS_IMETHOD GetNativeClipboardData(nsITransferable * aTransferable) = 0;
static void CreatePrimitiveForData ( const char* aFlavor, void* aDataBuff, PRUint32 aDataLen, nsISupports** aPrimitive );
static void CreateDataFromPrimitive ( const char* aFlavor, nsISupports* aPrimitive, void** aDataBuff, PRUint32 aDataLen );
PRBool mIgnoreEmptyNotification;
nsIClipboardOwner * mClipboardOwner;
nsITransferable * mTransferable;

View File

@ -174,56 +174,3 @@ NS_IMETHODIMP nsBaseDragService::EndDragSession ()
return NS_OK;
}
//¥¥¥ skanky hack until i can correctly re-create primitives from native data. i know this code sucks,
//¥¥¥ please forgive me.
void
nsBaseDragService :: CreatePrimitiveForData ( const char* aFlavor, void* aDataBuff, PRUint32 aDataLen, nsISupports** aPrimitive )
{
if ( !aPrimitive )
return;
if ( strcmp(aFlavor,kTextMime) == 0 ) {
nsCOMPtr<nsISupportsString> primitive;
nsresult rv = nsComponentManager::CreateInstance(NS_SUPPORTS_STRING_PROGID, nsnull,
NS_GET_IID(nsISupportsString), getter_AddRefs(primitive));
if ( primitive ) {
primitive->SetData ( (char*)aDataBuff );
nsCOMPtr<nsISupports> genericPrimitive ( do_QueryInterface(primitive) );
*aPrimitive = genericPrimitive;
NS_ADDREF(*aPrimitive);
}
}
else {
nsCOMPtr<nsISupportsWString> primitive;
nsresult rv = nsComponentManager::CreateInstance(NS_SUPPORTS_WSTRING_PROGID, nsnull,
NS_GET_IID(nsISupportsWString), getter_AddRefs(primitive));
if ( primitive ) {
primitive->SetData ( (unsigned short*)aDataBuff );
nsCOMPtr<nsISupports> genericPrimitive ( do_QueryInterface(primitive) );
*aPrimitive = genericPrimitive;
NS_ADDREF(*aPrimitive);
}
}
} // CreatePrimitiveForData
void
nsBaseDragService :: CreateDataFromPrimitive ( const char* aFlavor, nsISupports* aPrimitive, void** aDataBuff, PRUint32 aDataLen )
{
if ( !aDataBuff )
return;
if ( strcmp(aFlavor,kTextMime) == 0 ) {
nsCOMPtr<nsISupportsString> plainText ( do_QueryInterface(aPrimitive) );
if ( plainText )
plainText->GetData ( (char**)aDataBuff );
}
else {
nsCOMPtr<nsISupportsWString> doubleByteText ( do_QueryInterface(aPrimitive) );
if ( doubleByteText )
doubleByteText->GetData ( (unsigned short**)aDataBuff );
}
}

View File

@ -45,9 +45,6 @@ public:
protected:
static void CreatePrimitiveForData ( const char* aFlavor, void* aDataBuff, PRUint32 aDataLen, nsISupports** aPrimitive );
static void CreateDataFromPrimitive ( const char* aFlavor, nsISupports* aPrimitive, void** aDataBuff, PRUint32 aDataLen );
nsCOMPtr<nsISupportsArray> mTransArray;
PRBool mCanDrop;
PRBool mDoingDrag;