gecko-dev/widget/src/xpwidgets/nsPrimitiveHelpers.cpp

96 строки
3.3 KiB
C++
Исходник Обычный вид История

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) );
}
}