1999-09-21 04:08:25 +04:00
|
|
|
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
|
|
*
|
|
|
|
* The contents of this file are subject to the Mozilla Public
|
|
|
|
* License Version 1.1 (the "License"); you may not use this file
|
|
|
|
* except in compliance with the License. You may obtain a copy of
|
|
|
|
* the License at http://www.mozilla.org/MPL/
|
|
|
|
*
|
|
|
|
* Software distributed under the License is distributed on an "AS
|
|
|
|
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
|
|
|
* implied. See the License for the specific language governing
|
|
|
|
* rights and limitations under the License.
|
|
|
|
*
|
|
|
|
* The Original Code is Mozilla Communicator.
|
|
|
|
*
|
|
|
|
* The Initial Developer of the Original Code is Netscape Communications
|
|
|
|
* Corp. Portions created by Netscape are Copyright (C) 1999 Netscape
|
|
|
|
* Communications Corp. All Rights Reserved.
|
|
|
|
*
|
|
|
|
* Contributor(s):
|
|
|
|
* Mike Pinkerton
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "nsPrimitiveHelpers.h"
|
|
|
|
#include "nsCOMPtr.h"
|
|
|
|
#include "nsISupportsPrimitives.h"
|
|
|
|
#include "nsITransferable.h"
|
|
|
|
#include "nsIComponentManager.h"
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
// CreatePrimitiveForData
|
|
|
|
//
|
|
|
|
// Given some data and the flavor it corresponds to, creates the appropriate
|
|
|
|
// nsISupports* wrapper for passing across IDL boundaries. Right now, everything
|
|
|
|
// creates a two-byte |nsISupportsWString| unless the flavor is "text/plain", in which
|
|
|
|
// case it creates a one-byte |nsISupportsString|.
|
|
|
|
//
|
|
|
|
void
|
|
|
|
nsPrimitiveHelpers :: CreatePrimitiveForData ( const char* aFlavor, void* aDataBuff,
|
|
|
|
PRUint32 aDataLen, nsISupports** aPrimitive )
|
|
|
|
{
|
|
|
|
if ( !aPrimitive )
|
|
|
|
return;
|
|
|
|
|
|
|
|
if ( strcmp(aFlavor,kTextMime) == 0 ) {
|
|
|
|
nsCOMPtr<nsISupportsString> primitive;
|
1999-10-20 22:59:00 +04:00
|
|
|
nsComponentManager::CreateInstance(NS_SUPPORTS_STRING_PROGID, nsnull,
|
|
|
|
NS_GET_IID(nsISupportsString), getter_AddRefs(primitive));
|
1999-09-21 04:08:25 +04:00
|
|
|
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
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
// CreateDataFromPrimitive
|
|
|
|
//
|
|
|
|
// Given a nsISupports* primitive and the flavor it represents, creates a new data
|
|
|
|
// buffer with the data in it.
|
|
|
|
//
|
|
|
|
void
|
|
|
|
nsPrimitiveHelpers :: 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 ( NS_REINTERPRET_CAST(char**, aDataBuff) );
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
nsCOMPtr<nsISupportsWString> doubleByteText ( do_QueryInterface(aPrimitive) );
|
|
|
|
if ( doubleByteText )
|
|
|
|
doubleByteText->GetData ( NS_REINTERPRET_CAST(unsigned short**, aDataBuff) );
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|