removed reference to nsIDataFlavor and merged nsITransferable and nsIGenericTransferable

git-svn-id: svn://10.0.0.236/trunk@31462 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
rods%netscape.com 1999-05-13 21:53:57 +00:00
parent 0992ccb525
commit 089a8e7024
30 changed files with 358 additions and 599 deletions

View File

@ -81,14 +81,12 @@
#include "nsWidgetsCID.h"
#include "nsIClipboard.h"
#include "nsITransferable.h"
#include "nsIGenericTransferable.h"
#include "nsIDataFlavor.h"
#include "nsITransferable.h"
#include "nsIFormatConverter.h"
// Drag & Drop, Clipboard Support
static NS_DEFINE_CID(kCClipboardCID, NS_CLIPBOARD_CID);
static NS_DEFINE_CID(kCGenericTransferableCID, NS_GENERICTRANSFERABLE_CID);
static NS_DEFINE_IID(kCDataFlavorCID, NS_DATAFLAVOR_CID);
static NS_DEFINE_CID(kCTransferableCID, NS_TRANSFERABLE_CID);
static NS_DEFINE_IID(kCXIFFormatConverterCID, NS_XIFFORMATCONVERTER_CID);
static NS_DEFINE_IID(kIContentIID, NS_ICONTENT_IID);
@ -849,6 +847,7 @@ NS_IMETHODIMP nsEditor::Copy()
NS_IMETHODIMP nsEditor::Paste()
{
//printf("nsEditor::Paste\n");
nsString stuffToPaste;
@ -859,49 +858,32 @@ NS_IMETHODIMP nsEditor::Paste()
(nsISupports **)&clipboard);
// Create generic Transferable for getting the data
nsCOMPtr<nsIGenericTransferable> genericTrans;
rv = nsComponentManager::CreateInstance(kCGenericTransferableCID, nsnull,
nsIGenericTransferable::GetIID(),
(void**) getter_AddRefs(genericTrans));
nsCOMPtr<nsITransferable> trans;
rv = nsComponentManager::CreateInstance(kCTransferableCID, nsnull,
nsITransferable::GetIID(),
(void**) getter_AddRefs(trans));
if (NS_OK == rv) {
// Get the nsITransferable interface for getting the data from the clipboard
nsCOMPtr<nsITransferable> trans(do_QueryInterface(genericTrans));
if (trans) {
nsCOMPtr<nsIDataFlavor> flavor;
// Create the desired DataFlavor for the type of data we want to get out of the transferable
rv = nsComponentManager::CreateInstance(kCDataFlavorCID, nsnull, nsIDataFlavor::GetIID(), (void**) getter_AddRefs(flavor));
if (NS_OK == rv) {
// Initialize the DataFlavor and set it into the GenericTransferable
flavor->Init(kTextMime, kTextMime);
nsAutoString flavor(kTextMime);
//#define TEST_IS_DATA_FLAVOR_SUPPORTED 1
#ifdef TEST_IS_DATA_FLAVOR_SUPPORTED
// For testing IsDataFlavorSupported:
rv = trans->IsDataFlavorSupported(flavor);
if (!NS_SUCCEEDED(rv)) {
printf("\07>>>>>>>>>>>>> transferable doesn't support text data flavor\n");
//return rv;
}
#endif /* TEST_IS_DATA_FLAVOR_SUPPORTED */
trans->AddDataFlavor(&flavor);
genericTrans->AddDataFlavor(flavor);
// Get the Data from the clipboard
clipboard->GetData(trans);
// Get the Data from the clipboard
clipboard->GetData(trans);
// Now we ask the transferable for the data
// it still owns the data, we just have a pointer to it.
// If it can't support a "text" output of the data the call will fail
char *str = 0;
PRUint32 len;
if (NS_OK == trans->GetTransferData(&flavor, (void **)&str, &len)) {
// Now we ask the transferable for the data
// it still owns the data, we just have a pointer to it.
// If it can't support a "text" output of the data the call will fail
char *str = 0;
PRUint32 len;
if (NS_OK == trans->GetTransferData(flavor, (void **)&str, &len)) {
// Make adjustments for null terminated strings
if (str && len > 0) {
// stuffToPaste is ready for insertion into the content
stuffToPaste.SetString(str, len);
}
// Make adjustments for null terminated strings
if (str && len > 0) {
// stuffToPaste is ready for insertion into the content
stuffToPaste.SetString(str, len);
}
}
}

View File

@ -48,13 +48,11 @@ static NS_DEFINE_IID(kIDOMCharacterDataIID, NS_IDOMCHARACTERDATA_IID);
#include "nsIDragService.h"
#include "nsIDragSession.h"
#include "nsITransferable.h"
#include "nsIGenericTransferable.h"
#include "nsIDataFlavor.h"
#include "nsIFormatConverter.h"
// Drag & Drop, Clipboard Support
static NS_DEFINE_CID(kCDragServiceCID, NS_DRAGSERVICE_CID);
static NS_DEFINE_CID(kCGenericTransferableCID, NS_GENERICTRANSFERABLE_CID);
static NS_DEFINE_CID(kCTransferableCID, NS_TRANSFERABLE_CID);
static NS_DEFINE_IID(kCDataFlavorCID, NS_DATAFLAVOR_CID);
static NS_DEFINE_IID(kCXIFFormatConverterCID, NS_XIFFORMATCONVERTER_CID);
@ -924,19 +922,6 @@ NS_IMPL_RELEASE(nsTextEditorDragListener)
nsTextEditorDragListener::nsTextEditorDragListener()
{
NS_INIT_REFCNT();
nsresult rv = nsComponentManager::CreateInstance(kCDataFlavorCID, nsnull,
nsIDataFlavor::GetIID(),
(void**) getter_AddRefs(mTextDataFlavor));
if (NS_OK == rv) {
mTextDataFlavor->Init(kTextMime, "");
}
/*rv = nsComponentManager::CreateInstance(kCDataFlavorCID, nsnull,
nsIDataFlavor::GetIID(), (void**) getter_AddRefs(mImageDataFlavor));
if (NS_OK == rv) {
mImageDataFlavor->Init(kJPEGImageMime, "");
}*/
}
nsTextEditorDragListener::~nsTextEditorDragListener()
@ -991,7 +976,8 @@ nsTextEditorDragListener::DragEnter(nsIDOMEvent* aDragEvent)
if (NS_OK == rv) {
nsCOMPtr<nsIDragSession> dragSession(do_QueryInterface(dragService));
if (dragSession && (NS_OK == dragSession->IsDataFlavorSupported(mTextDataFlavor))) {
nsAutoString textFlavor(kTextMime);
if (dragSession && NS_OK == dragSession->IsDataFlavorSupported(&textFlavor)) {
dragSession->SetCanDrop(PR_TRUE);
}
@ -1012,8 +998,8 @@ nsTextEditorDragListener::DragOver(nsIDOMEvent* aDragEvent)
(nsISupports **)&dragService);
if (NS_OK == rv) {
nsCOMPtr<nsIDragSession> dragSession(do_QueryInterface(dragService));
if (dragSession && NS_OK == dragSession->IsDataFlavorSupported(mTextDataFlavor)) {
nsAutoString textFlavor(kTextMime);
if (dragSession && NS_OK == dragSession->IsDataFlavorSupported(&textFlavor)) {
dragSession->SetCanDrop(PR_TRUE);
}
@ -1051,18 +1037,19 @@ nsTextEditorDragListener::DragDrop(nsIDOMEvent* aMouseEvent)
if (dragSession) {
// Create transferable for getting the drag data
nsCOMPtr<nsIGenericTransferable> genericTrans;
rv = nsComponentManager::CreateInstance(kCGenericTransferableCID, nsnull,
nsIGenericTransferable::GetIID(),
(void**) getter_AddRefs(genericTrans));
nsCOMPtr<nsITransferable> trans;
rv = nsComponentManager::CreateInstance(kCTransferableCID, nsnull,
nsITransferable::GetIID(),
(void**) getter_AddRefs(trans));
if (NS_OK == rv) {
// Add the text Flavor to the transferable,
// because that is the only type of data we are looking for at the moment
genericTrans->AddDataFlavor(mTextDataFlavor);
nsAutoString textMime(kTextMime);
trans->AddDataFlavor(&textMime);
//genericTrans->AddDataFlavor(mImageDataFlavor);
// Query to get the standard interface that the drag service knows about
nsCOMPtr<nsITransferable> trans (do_QueryInterface(genericTrans));
nsCOMPtr<nsITransferable> trans (do_QueryInterface(trans));
if (trans) {
// Fill the transferable with our requested data flavor
@ -1072,7 +1059,7 @@ nsTextEditorDragListener::DragDrop(nsIDOMEvent* aMouseEvent)
// Note: the transferable owns the pointer to the data
char *str = 0;
PRUint32 len;
trans->GetTransferData(mTextDataFlavor, (void **)&str, &len);
trans->GetTransferData(&textMime, (void **)&str, &len);
// If the string was not empty then paste it in
if (str) {

View File

@ -26,7 +26,6 @@
#include "nsIDOMDragListener.h"
#include "nsIDOMCompositionListener.h"
#include "nsITextEditor.h"
#include "nsIDataFlavor.h"
#include "nsCOMPtr.h"
/** The nsTextEditorKeyListener public nsIDOMKeyListener
@ -199,9 +198,6 @@ public:
protected:
nsCOMPtr<nsITextEditor> mEditor;
nsCOMPtr<nsIDataFlavor> mTextDataFlavor;
nsCOMPtr<nsIDataFlavor> mImageDataFlavor;
};

View File

@ -81,14 +81,12 @@
#include "nsWidgetsCID.h"
#include "nsIClipboard.h"
#include "nsITransferable.h"
#include "nsIGenericTransferable.h"
#include "nsIDataFlavor.h"
#include "nsITransferable.h"
#include "nsIFormatConverter.h"
// Drag & Drop, Clipboard Support
static NS_DEFINE_CID(kCClipboardCID, NS_CLIPBOARD_CID);
static NS_DEFINE_CID(kCGenericTransferableCID, NS_GENERICTRANSFERABLE_CID);
static NS_DEFINE_IID(kCDataFlavorCID, NS_DATAFLAVOR_CID);
static NS_DEFINE_CID(kCTransferableCID, NS_TRANSFERABLE_CID);
static NS_DEFINE_IID(kCXIFFormatConverterCID, NS_XIFFORMATCONVERTER_CID);
static NS_DEFINE_IID(kIContentIID, NS_ICONTENT_IID);
@ -849,6 +847,7 @@ NS_IMETHODIMP nsEditor::Copy()
NS_IMETHODIMP nsEditor::Paste()
{
//printf("nsEditor::Paste\n");
nsString stuffToPaste;
@ -859,49 +858,32 @@ NS_IMETHODIMP nsEditor::Paste()
(nsISupports **)&clipboard);
// Create generic Transferable for getting the data
nsCOMPtr<nsIGenericTransferable> genericTrans;
rv = nsComponentManager::CreateInstance(kCGenericTransferableCID, nsnull,
nsIGenericTransferable::GetIID(),
(void**) getter_AddRefs(genericTrans));
nsCOMPtr<nsITransferable> trans;
rv = nsComponentManager::CreateInstance(kCTransferableCID, nsnull,
nsITransferable::GetIID(),
(void**) getter_AddRefs(trans));
if (NS_OK == rv) {
// Get the nsITransferable interface for getting the data from the clipboard
nsCOMPtr<nsITransferable> trans(do_QueryInterface(genericTrans));
if (trans) {
nsCOMPtr<nsIDataFlavor> flavor;
// Create the desired DataFlavor for the type of data we want to get out of the transferable
rv = nsComponentManager::CreateInstance(kCDataFlavorCID, nsnull, nsIDataFlavor::GetIID(), (void**) getter_AddRefs(flavor));
if (NS_OK == rv) {
// Initialize the DataFlavor and set it into the GenericTransferable
flavor->Init(kTextMime, kTextMime);
nsAutoString flavor(kTextMime);
//#define TEST_IS_DATA_FLAVOR_SUPPORTED 1
#ifdef TEST_IS_DATA_FLAVOR_SUPPORTED
// For testing IsDataFlavorSupported:
rv = trans->IsDataFlavorSupported(flavor);
if (!NS_SUCCEEDED(rv)) {
printf("\07>>>>>>>>>>>>> transferable doesn't support text data flavor\n");
//return rv;
}
#endif /* TEST_IS_DATA_FLAVOR_SUPPORTED */
trans->AddDataFlavor(&flavor);
genericTrans->AddDataFlavor(flavor);
// Get the Data from the clipboard
clipboard->GetData(trans);
// Get the Data from the clipboard
clipboard->GetData(trans);
// Now we ask the transferable for the data
// it still owns the data, we just have a pointer to it.
// If it can't support a "text" output of the data the call will fail
char *str = 0;
PRUint32 len;
if (NS_OK == trans->GetTransferData(&flavor, (void **)&str, &len)) {
// Now we ask the transferable for the data
// it still owns the data, we just have a pointer to it.
// If it can't support a "text" output of the data the call will fail
char *str = 0;
PRUint32 len;
if (NS_OK == trans->GetTransferData(flavor, (void **)&str, &len)) {
// Make adjustments for null terminated strings
if (str && len > 0) {
// stuffToPaste is ready for insertion into the content
stuffToPaste.SetString(str, len);
}
// Make adjustments for null terminated strings
if (str && len > 0) {
// stuffToPaste is ready for insertion into the content
stuffToPaste.SetString(str, len);
}
}
}

View File

@ -48,13 +48,11 @@ static NS_DEFINE_IID(kIDOMCharacterDataIID, NS_IDOMCHARACTERDATA_IID);
#include "nsIDragService.h"
#include "nsIDragSession.h"
#include "nsITransferable.h"
#include "nsIGenericTransferable.h"
#include "nsIDataFlavor.h"
#include "nsIFormatConverter.h"
// Drag & Drop, Clipboard Support
static NS_DEFINE_CID(kCDragServiceCID, NS_DRAGSERVICE_CID);
static NS_DEFINE_CID(kCGenericTransferableCID, NS_GENERICTRANSFERABLE_CID);
static NS_DEFINE_CID(kCTransferableCID, NS_TRANSFERABLE_CID);
static NS_DEFINE_IID(kCDataFlavorCID, NS_DATAFLAVOR_CID);
static NS_DEFINE_IID(kCXIFFormatConverterCID, NS_XIFFORMATCONVERTER_CID);
@ -924,19 +922,6 @@ NS_IMPL_RELEASE(nsTextEditorDragListener)
nsTextEditorDragListener::nsTextEditorDragListener()
{
NS_INIT_REFCNT();
nsresult rv = nsComponentManager::CreateInstance(kCDataFlavorCID, nsnull,
nsIDataFlavor::GetIID(),
(void**) getter_AddRefs(mTextDataFlavor));
if (NS_OK == rv) {
mTextDataFlavor->Init(kTextMime, "");
}
/*rv = nsComponentManager::CreateInstance(kCDataFlavorCID, nsnull,
nsIDataFlavor::GetIID(), (void**) getter_AddRefs(mImageDataFlavor));
if (NS_OK == rv) {
mImageDataFlavor->Init(kJPEGImageMime, "");
}*/
}
nsTextEditorDragListener::~nsTextEditorDragListener()
@ -991,7 +976,8 @@ nsTextEditorDragListener::DragEnter(nsIDOMEvent* aDragEvent)
if (NS_OK == rv) {
nsCOMPtr<nsIDragSession> dragSession(do_QueryInterface(dragService));
if (dragSession && (NS_OK == dragSession->IsDataFlavorSupported(mTextDataFlavor))) {
nsAutoString textFlavor(kTextMime);
if (dragSession && NS_OK == dragSession->IsDataFlavorSupported(&textFlavor)) {
dragSession->SetCanDrop(PR_TRUE);
}
@ -1012,8 +998,8 @@ nsTextEditorDragListener::DragOver(nsIDOMEvent* aDragEvent)
(nsISupports **)&dragService);
if (NS_OK == rv) {
nsCOMPtr<nsIDragSession> dragSession(do_QueryInterface(dragService));
if (dragSession && NS_OK == dragSession->IsDataFlavorSupported(mTextDataFlavor)) {
nsAutoString textFlavor(kTextMime);
if (dragSession && NS_OK == dragSession->IsDataFlavorSupported(&textFlavor)) {
dragSession->SetCanDrop(PR_TRUE);
}
@ -1051,18 +1037,19 @@ nsTextEditorDragListener::DragDrop(nsIDOMEvent* aMouseEvent)
if (dragSession) {
// Create transferable for getting the drag data
nsCOMPtr<nsIGenericTransferable> genericTrans;
rv = nsComponentManager::CreateInstance(kCGenericTransferableCID, nsnull,
nsIGenericTransferable::GetIID(),
(void**) getter_AddRefs(genericTrans));
nsCOMPtr<nsITransferable> trans;
rv = nsComponentManager::CreateInstance(kCTransferableCID, nsnull,
nsITransferable::GetIID(),
(void**) getter_AddRefs(trans));
if (NS_OK == rv) {
// Add the text Flavor to the transferable,
// because that is the only type of data we are looking for at the moment
genericTrans->AddDataFlavor(mTextDataFlavor);
nsAutoString textMime(kTextMime);
trans->AddDataFlavor(&textMime);
//genericTrans->AddDataFlavor(mImageDataFlavor);
// Query to get the standard interface that the drag service knows about
nsCOMPtr<nsITransferable> trans (do_QueryInterface(genericTrans));
nsCOMPtr<nsITransferable> trans (do_QueryInterface(trans));
if (trans) {
// Fill the transferable with our requested data flavor
@ -1072,7 +1059,7 @@ nsTextEditorDragListener::DragDrop(nsIDOMEvent* aMouseEvent)
// Note: the transferable owns the pointer to the data
char *str = 0;
PRUint32 len;
trans->GetTransferData(mTextDataFlavor, (void **)&str, &len);
trans->GetTransferData(&textMime, (void **)&str, &len);
// If the string was not empty then paste it in
if (str) {

View File

@ -26,7 +26,6 @@
#include "nsIDOMDragListener.h"
#include "nsIDOMCompositionListener.h"
#include "nsITextEditor.h"
#include "nsIDataFlavor.h"
#include "nsCOMPtr.h"
/** The nsTextEditorKeyListener public nsIDOMKeyListener
@ -199,9 +198,6 @@ public:
protected:
nsCOMPtr<nsITextEditor> mEditor;
nsCOMPtr<nsIDataFlavor> mTextDataFlavor;
nsCOMPtr<nsIDataFlavor> mImageDataFlavor;
};

View File

@ -67,22 +67,17 @@
#include "nsLayoutAtoms.h"
#include "nsPlaceholderFrame.h"
#include "nsIDataFlavor.h"
// Drag & Drop, Clipboard
#include "nsWidgetsCID.h"
#include "nsIClipboard.h"
#include "nsITransferable.h"
#include "nsIGenericTransferable.h"
#include "nsIDataFlavor.h"
#include "nsIFormatConverter.h"
#include "nsIWebShell.h"
// Drag & Drop, Clipboard Support
static NS_DEFINE_CID(kCClipboardCID, NS_CLIPBOARD_CID);
static NS_DEFINE_CID(kCGenericTransferableCID, NS_GENERICTRANSFERABLE_CID);
static NS_DEFINE_IID(kCDataFlavorCID, NS_DATAFLAVOR_CID);
static NS_DEFINE_CID(kCTransferableCID, NS_TRANSFERABLE_CID);
static NS_DEFINE_IID(kCXIFConverterCID, NS_XIFFORMATCONVERTER_CID);
static PRBool gsNoisyRefs = PR_FALSE;
@ -1545,43 +1540,33 @@ PresShell::DoCopy()
// Create a data flavor to tell the transferable
// that it is about to receive XIF
nsCOMPtr<nsIDataFlavor> flavor;
rv = nsComponentManager::CreateInstance(kCDataFlavorCID,
nsnull,
nsIDataFlavor::GetIID(), (void**) getter_AddRefs(flavor));
nsAutoString flavor(kXIFMime);
// Create a transferable for putting data on the Clipboard
nsCOMPtr<nsITransferable> trans;
rv = nsComponentManager::CreateInstance(kCTransferableCID, nsnull,
nsITransferable::GetIID(),
(void**) getter_AddRefs(trans));
if (NS_OK == rv) {
// Initialize data flavor to XIF
flavor->Init(kXIFMime, "XIF");
// Create a transferable for putting data on the Clipboard
nsCOMPtr<nsIGenericTransferable> genericTrans;
rv = nsComponentManager::CreateInstance(kCGenericTransferableCID, nsnull,
nsIGenericTransferable::GetIID(),
(void**) getter_AddRefs(genericTrans));
// The data on the clipboard will be in "XIF" format
// so give the clipboard transferable a "XIFConverter" for
// converting from XIF to other formats
nsCOMPtr<nsIFormatConverter> xifConverter;
rv = nsComponentManager::CreateInstance(kCXIFConverterCID, nsnull,
nsIFormatConverter::GetIID(), (void**) getter_AddRefs(xifConverter));
if (NS_OK == rv) {
// The data on the clipboard will be in "XIF" format
// so give the clipboard transferable a "XIFConverter" for
// converting from XIF to other formats
nsCOMPtr<nsIFormatConverter> xifConverter;
rv = nsComponentManager::CreateInstance(kCXIFConverterCID, nsnull,
nsIFormatConverter::GetIID(), (void**) getter_AddRefs(xifConverter));
if (NS_OK == rv) {
// Add the XIF DataFlavor to the transferable
// this tells the transferable that it can handle receiving the XIF format
genericTrans->AddDataFlavor(flavor);
// Add the XIF DataFlavor to the transferable
// this tells the transferable that it can handle receiving the XIF format
trans->AddDataFlavor(&flavor);
// Add the converter for going from XIF to other formats
genericTrans->SetConverter(xifConverter);
// Add the converter for going from XIF to other formats
trans->SetConverter(xifConverter);
// Now add the XIF data to the transferable
genericTrans->SetTransferData(flavor, buffer.ToNewCString(), buffer.Length());
// Now add the XIF data to the transferable
trans->SetTransferData(&flavor, buffer.ToNewCString(), buffer.Length());
// put the transferable on the clipboard
nsCOMPtr<nsITransferable> trans = do_QueryInterface(genericTrans);
if (trans) {
clipboard->SetData(trans, nsnull);
}
}
// put the transferable on the clipboard
clipboard->SetData(trans, nsnull);
}
}
nsServiceManager::ReleaseService(kCClipboardCID, clipboard);

View File

@ -67,22 +67,17 @@
#include "nsLayoutAtoms.h"
#include "nsPlaceholderFrame.h"
#include "nsIDataFlavor.h"
// Drag & Drop, Clipboard
#include "nsWidgetsCID.h"
#include "nsIClipboard.h"
#include "nsITransferable.h"
#include "nsIGenericTransferable.h"
#include "nsIDataFlavor.h"
#include "nsIFormatConverter.h"
#include "nsIWebShell.h"
// Drag & Drop, Clipboard Support
static NS_DEFINE_CID(kCClipboardCID, NS_CLIPBOARD_CID);
static NS_DEFINE_CID(kCGenericTransferableCID, NS_GENERICTRANSFERABLE_CID);
static NS_DEFINE_IID(kCDataFlavorCID, NS_DATAFLAVOR_CID);
static NS_DEFINE_CID(kCTransferableCID, NS_TRANSFERABLE_CID);
static NS_DEFINE_IID(kCXIFConverterCID, NS_XIFFORMATCONVERTER_CID);
static PRBool gsNoisyRefs = PR_FALSE;
@ -1545,43 +1540,33 @@ PresShell::DoCopy()
// Create a data flavor to tell the transferable
// that it is about to receive XIF
nsCOMPtr<nsIDataFlavor> flavor;
rv = nsComponentManager::CreateInstance(kCDataFlavorCID,
nsnull,
nsIDataFlavor::GetIID(), (void**) getter_AddRefs(flavor));
nsAutoString flavor(kXIFMime);
// Create a transferable for putting data on the Clipboard
nsCOMPtr<nsITransferable> trans;
rv = nsComponentManager::CreateInstance(kCTransferableCID, nsnull,
nsITransferable::GetIID(),
(void**) getter_AddRefs(trans));
if (NS_OK == rv) {
// Initialize data flavor to XIF
flavor->Init(kXIFMime, "XIF");
// Create a transferable for putting data on the Clipboard
nsCOMPtr<nsIGenericTransferable> genericTrans;
rv = nsComponentManager::CreateInstance(kCGenericTransferableCID, nsnull,
nsIGenericTransferable::GetIID(),
(void**) getter_AddRefs(genericTrans));
// The data on the clipboard will be in "XIF" format
// so give the clipboard transferable a "XIFConverter" for
// converting from XIF to other formats
nsCOMPtr<nsIFormatConverter> xifConverter;
rv = nsComponentManager::CreateInstance(kCXIFConverterCID, nsnull,
nsIFormatConverter::GetIID(), (void**) getter_AddRefs(xifConverter));
if (NS_OK == rv) {
// The data on the clipboard will be in "XIF" format
// so give the clipboard transferable a "XIFConverter" for
// converting from XIF to other formats
nsCOMPtr<nsIFormatConverter> xifConverter;
rv = nsComponentManager::CreateInstance(kCXIFConverterCID, nsnull,
nsIFormatConverter::GetIID(), (void**) getter_AddRefs(xifConverter));
if (NS_OK == rv) {
// Add the XIF DataFlavor to the transferable
// this tells the transferable that it can handle receiving the XIF format
genericTrans->AddDataFlavor(flavor);
// Add the XIF DataFlavor to the transferable
// this tells the transferable that it can handle receiving the XIF format
trans->AddDataFlavor(&flavor);
// Add the converter for going from XIF to other formats
genericTrans->SetConverter(xifConverter);
// Add the converter for going from XIF to other formats
trans->SetConverter(xifConverter);
// Now add the XIF data to the transferable
genericTrans->SetTransferData(flavor, buffer.ToNewCString(), buffer.Length());
// Now add the XIF data to the transferable
trans->SetTransferData(&flavor, buffer.ToNewCString(), buffer.Length());
// put the transferable on the clipboard
nsCOMPtr<nsITransferable> trans = do_QueryInterface(genericTrans);
if (trans) {
clipboard->SetData(trans, nsnull);
}
}
// put the transferable on the clipboard
clipboard->SetData(trans, nsnull);
}
}
nsServiceManager::ReleaseService(kCClipboardCID, clipboard);

View File

@ -20,10 +20,10 @@
#define nsIClipboard_h__
#include "nsISupports.h"
#include "nsString.h"
class nsITransferable;
class nsIClipboardOwner;
class nsIDataFlavor;
// {8B5314BA-DB01-11d2-96CE-0060B0FB9956}
#define NS_ICLIPBOARD_IID \
@ -54,14 +54,6 @@ class nsIClipboard : public nsISupports {
NS_IMETHOD GetData(nsITransferable * aTransferable) = 0;
/**
* Check to set if ant of the native data on the clipboard matches this data flavor
*
* @result NS_OK if if the data flavor is supported and, NS_ERROR_FAILURE is it is not
*/
NS_IMETHOD IsDataFlavorSupported(nsIDataFlavor * aDataFlavor) = 0;
/**
* This empties the clipboard and notifies the clipboard owner
* This empties the "logical" clipboard it does not clear the native clipboard

View File

@ -20,8 +20,8 @@
#define nsIDragSession_h__
#include "nsISupports.h"
#include "nsString.h"
class nsIDataFlavor;
class nsITransferable;
struct nsSize;
@ -100,7 +100,7 @@ class nsIDragSession : public nsISupports {
* @result NS_OK if if the data flavor is supported and, NS_ERROR_FAILURE is it is not
*/
NS_IMETHOD IsDataFlavorSupported(nsIDataFlavor * aDataFlavor) = 0;
NS_IMETHOD IsDataFlavorSupported(nsString * aDataFlavor) = 0;
};
#endif

View File

@ -22,8 +22,6 @@
#include "nsISupports.h"
#include "nsString.h"
class nsIDataFlavor;
class nsISupportsArray;
class nsVoidArray;
#define FileListMime "filelist"

View File

@ -20,9 +20,9 @@
#define nsIFormatConverter_h__
#include "nsISupports.h"
#include "nsString.h"
class nsIDataFlavor;
class nsISupportsArray;
class nsVoidArray;
// {948A0023-E3A7-11d2-96CF-0060B0FB9956}
#define NS_IFORMATCONVERTER_IID \
@ -40,7 +40,7 @@ class nsIFormatConverter : public nsISupports {
*
* @param aDataFlavorList fills list with supported flavors
*/
NS_IMETHOD GetInputDataFlavors(nsISupportsArray ** aDataFlavorList) = 0;
NS_IMETHOD GetInputDataFlavors(nsVoidArray ** aDataFlavorList) = 0;
/**
* Get the list of the "output" data flavors, in otherwords, the flavors
@ -48,7 +48,7 @@ class nsIFormatConverter : public nsISupports {
*
* @param aDataFlavorList fills list with supported flavors
*/
NS_IMETHOD GetOutputDataFlavors(nsISupportsArray ** aDataFlavorList) = 0;
NS_IMETHOD GetOutputDataFlavors(nsVoidArray ** aDataFlavorList) = 0;
/**
* Determines whether a converion from one flavor to another is supported
@ -57,7 +57,7 @@ class nsIFormatConverter : public nsISupports {
* @param aFromFormatConverter flavor to convert to
* @returns returns NS_OK if it can be converted
*/
NS_IMETHOD CanConvert(nsIDataFlavor * aFromDataFlavor, nsIDataFlavor * aToDataFlavor) = 0;
NS_IMETHOD CanConvert(nsString * aFromDataFlavor, nsString * aToDataFlavor) = 0;
/**
@ -67,8 +67,8 @@ class nsIFormatConverter : public nsISupports {
* @param aFromFormatConverter flavor to convert to (destination own the memory)
* @returns returns NS_OK if it was converted
*/
NS_IMETHOD Convert(nsIDataFlavor * aFromDataFlavor, void * aFromData, PRUint32 aDataLen,
nsIDataFlavor * aToDataFlavor, void ** aToData, PRUint32 * aDataToLen) = 0;
NS_IMETHOD Convert(nsString * aFromDataFlavor, void * aFromData, PRUint32 aDataLen,
nsString * aToDataFlavor, void ** aToData, PRUint32 * aDataToLen) = 0;

View File

@ -22,10 +22,21 @@
#include "nsISupports.h"
#include "nsString.h"
class nsIDataFlavor;
class nsISupportsArray;
class nsString;
class nsVoidArray;
class nsIFormatConverter;
#define kTextMime "text/plain"
#define kXIFMime "text/xif"
#define kUnicodeMime "text/unicode"
#define kHTMLMime "text/html"
#define kAOLMailMime "AOLMAIL"
#define kPNGImageMime "image/png"
#define kJPEGImageMime "image/jpg"
#define kGIFImageMime "image/gif"
#define kDropFilesMime "text/dropfiles"
// {8B5314BC-DB01-11d2-96CE-0060B0FB9956}
#define NS_ITRANSFERABLE_IID \
{ 0x8b5314bc, 0xdb01, 0x11d2, { 0x96, 0xce, 0x0, 0x60, 0xb0, 0xfb, 0x99, 0x56 } }
@ -43,7 +54,7 @@ class nsITransferable : public nsISupports {
* @param aDataFlavorList fills list with supported flavors. This is a copy of
* the internal list, so it may be edited w/out affecting the transferable.
*/
NS_IMETHOD FlavorsTransferableCanExport ( nsISupportsArray** outFlavorList ) = 0;
NS_IMETHOD FlavorsTransferableCanExport ( nsVoidArray** outFlavorList ) = 0;
/**
* Get the list of data flavors that this transferable supports (w/out conversion).
@ -53,15 +64,7 @@ class nsITransferable : public nsISupports {
* @param aDataFlavorList fills list with supported flavors. This is a copy of
* the internal list, so it may be edited w/out affecting the transferable.
*/
NS_IMETHOD GetTransferDataFlavors(nsISupportsArray ** aDataFlavorList) = 0;
/**
* See if the given flavor is supported
*
* @param aFlavor the flavor to check
* @result Returns NS_OK if supported, return NS_ERROR_FAILURE if not
*/
NS_IMETHOD IsDataFlavorSupported(nsIDataFlavor * aFlavor) = 0;
NS_IMETHOD GetTransferDataFlavors(nsVoidArray ** aDataFlavorList) = 0;
/**
* Given a flavor retrieve the data.
@ -70,7 +73,7 @@ class nsITransferable : public nsISupports {
* @param aData the data. This is NOT a copy, so the caller MUST NOT DELETE it.
* @param aDataLen the length of the data
*/
NS_IMETHOD GetTransferData(nsIDataFlavor * aFlavor, void ** aData, PRUint32 * aDataLen) = 0;
NS_IMETHOD GetTransferData(nsString * aFlavor, void ** aData, PRUint32 * aDataLen) = 0;
/**
* Returns PR_TRUE if the data is large.
@ -78,6 +81,57 @@ class nsITransferable : public nsISupports {
*/
NS_IMETHOD_(PRBool) IsLargeDataSet() = 0;
///////////////////////////////
// Setter part of interface
///////////////////////////////
/**
* Computes a list of flavors that the transferable can accept into it, either through
* intrinsic knowledge or input data converters.
*
* @param outFlavorList fills list with supported flavors. This is a copy of
* the internal list, so it may be edited w/out affecting the transferable.
*/
NS_IMETHOD FlavorsTransferableCanImport ( nsVoidArray** outFlavorList ) = 0;
/**
* Gets the data from the transferable as a specified DataFlavor. The transferable still
* owns the data, so the caller must NOT delete it.
*
* @param aFlavor the flavor of data that is being set
* @param aData the data
* @param aDataLen the length of the data
*/
NS_IMETHOD SetTransferData(nsString * aFlavor, void * aData, PRUint32 aDataLen) = 0;
/**
* Add the data flavor, indicating that this transferable
* can receive this type of flavor
*
* @param aDataFlavor a new data flavor to handle
*/
NS_IMETHOD AddDataFlavor(nsString * aDataFlavor) = 0;
/**
* Removes the data flavor by MIME name (NOT by pointer addr)
*
* @param aDataFlavor a data flavor to remove
*/
NS_IMETHOD RemoveDataFlavor(nsString * aDataFlavor) = 0;
/**
* Sets the converter for this transferable
*
*/
NS_IMETHOD SetConverter(nsIFormatConverter * aConverter) = 0;
/**
* Gets the converter for this transferable
*
*/
NS_IMETHOD GetConverter(nsIFormatConverter ** aConverter) = 0;
};
#endif

View File

@ -184,6 +184,10 @@
#define NS_TREEVIEW_CID \
{ 0xfaf80a1, 0x815c, 0x11d2, { 0x96, 0xed, 0x0, 0x10, 0x4b, 0x7b, 0x7d, 0xeb } }
// {285EF9B2-094A-11d3-9A87-0050046CDA96}
#define NS_FONTRETRIEVERSERVICE_CID \
{ 0x285ef9b2, 0x94a, 0x11d3, { 0x9a, 0x87, 0x0, 0x50, 0x4, 0x6c, 0xda, 0x96 } };
//-----------------------------------------------------------
//Drag & Drop & Clipboard
//-----------------------------------------------------------
@ -191,9 +195,9 @@
#define NS_DRAGSERVICE_CID \
{ 0x8b5314bb, 0xdb01, 0x11d2, { 0x96, 0xce, 0x0, 0x60, 0xb0, 0xfb, 0x99, 0x56 } }
// {867AF703-F360-11D2-96D2-0060B0FB9956}
#define NS_GENERICTRANSFERABLE_CID \
{ 0x867af703, 0xf360, 0x11d2, { 0x96, 0xd2, 0x0, 0x60, 0xb0, 0xfb, 0x99, 0x56 } }
// {8B5314BC-DB01-11d2-96CE-0060B0FB9956}
#define NS_TRANSFERABLE_CID \
{ 0x8b5314bc, 0xdb01, 0x11d2, { 0x96, 0xce, 0x0, 0x60, 0xb0, 0xfb, 0x99, 0x56 } }
// {8B5314BA-DB01-11d2-96CE-0060B0FB9956}
#define NS_CLIPBOARD_CID \

View File

@ -23,11 +23,9 @@
#include "nsCOMPtr.h"
#include "nsDataObj.h"
#include "nsISupportsArray.h"
#include "nsIClipboardOwner.h"
#include "nsIDataFlavor.h"
#include "nsString.h"
#include "nsIFormatConverter.h"
#include "nsIGenericTransferable.h"
#include "nsITransferable.h"
#include "nsIWidget.h"
@ -39,14 +37,6 @@
#include "nsVoidArray.h"
#include "nsFileSpec.h"
// interface definitions
static NS_DEFINE_IID(kIDataFlavorIID, NS_IDATAFLAVOR_IID);
//static NS_DEFINE_IID(kIWidgetIID, NS_IWIDGET_IID);
//static NS_DEFINE_IID(kWindowCID, NS_WINDOW_CID);
NS_IMPL_ADDREF_INHERITED(nsClipboard, nsBaseClipboard)
NS_IMPL_RELEASE_INHERITED(nsClipboard, nsBaseClipboard)
//-------------------------------------------------------------------------
//
@ -80,30 +70,6 @@ nsClipboard::~nsClipboard()
}
//-------------------------------------------------------------------------
// * @param aIID The name of the class implementing the method
// * @param _classiiddef The name of the #define symbol that defines the IID
// * for the class (e.g. NS_ISUPPORTS_IID)
//-------------------------------------------------------------------------
nsresult nsClipboard::QueryInterface(const nsIID& aIID, void** aInstancePtr)
{
if (NULL == aInstancePtr) {
return NS_ERROR_NULL_POINTER;
}
nsresult rv = NS_NOINTERFACE;
static NS_DEFINE_IID(kIClipboard, NS_ICLIPBOARD_IID);
if (aIID.Equals(kIClipboard)) {
*aInstancePtr = (void*) ((nsIClipboard*)this);
NS_ADDREF_THIS();
return NS_OK;
}
return rv;
}
//-------------------------------------------------------------------------
UINT nsClipboard::GetFormat(const nsString & aMimeStr)
{
@ -163,22 +129,17 @@ nsresult nsClipboard::SetupNativeDataObject(nsITransferable * aTransferable, IDa
dObj->SetTransferable(aTransferable);
// Get the transferable list of data flavors
nsISupportsArray * dfList;
nsVoidArray * dfList;
aTransferable->FlavorsTransferableCanExport(&dfList);
// Walk through flavors that contain data and register them
// into the DataObj as supported flavors
PRUint32 i;
PRUint32 cnt = 0;
nsresult rv = dfList->Count(&cnt);
NS_ASSERTION(NS_SUCCEEDED(rv), "Count failed");
PRUint32 cnt = dfList->Count();
for (i=0;i<cnt;i++) {
nsIDataFlavor * df;
nsISupports * supports = dfList->ElementAt(i);
if (NS_OK == supports->QueryInterface(kIDataFlavorIID, (void **)&df)) {
nsString mime;
df->GetMimeType(mime);
UINT format = GetFormat(mime);
nsString * df = (nsString *)dfList->ElementAt(i);
if (nsnull != df) {
UINT format = GetFormat(*df);
// check here to see if we can the data back from global member
// XXX need IStream support, or file support
@ -188,12 +149,10 @@ nsresult nsClipboard::SetupNativeDataObject(nsITransferable * aTransferable, IDa
// Now tell the native IDataObject about both the DataFlavor and
// the native data format
dObj->AddDataFlavor(df, &fe);
NS_RELEASE(df);
}
NS_RELEASE(supports);
}
// Delete the data flavors list
NS_RELEASE(dfList);
delete dfList;
return NS_OK;
}
@ -443,27 +402,18 @@ nsresult nsClipboard::GetDataFromDataObject(IDataObject * aDataObject,
if (nsnull == aTransferable) {
return res;
}
nsCOMPtr<nsIGenericTransferable> genericTrans(do_QueryInterface(aTransferable));
if (!genericTrans) {
return res;
}
// Get the transferable list of data flavors
nsISupportsArray * dfList;
nsVoidArray * dfList;
aTransferable->GetTransferDataFlavors(&dfList);
// Walk through flavors and see which flavor is on the clipboard them on the native clipboard,
PRUint32 i;
PRUint32 cnt = 0;
nsresult rv = dfList->Count(&cnt);
NS_ASSERTION(NS_SUCCEEDED(rv), "Count failed");
PRUint32 cnt = dfList->Count();
for (i=0;i<cnt;i++) {
nsIDataFlavor * df;
nsISupports * supports = dfList->ElementAt(i);
if (NS_OK == supports->QueryInterface(kIDataFlavorIID, (void **)&df)) {
nsString mime;
df->GetMimeType(mime);
UINT format = GetFormat(mime);
nsString * df = (nsString *)dfList->ElementAt(i);
if (nsnull != df) {
UINT format = GetFormat(*df);
void * data;
PRUint32 dataLen;
@ -471,19 +421,17 @@ nsresult nsClipboard::GetDataFromDataObject(IDataObject * aDataObject,
if (nsnull != aDataObject) {
res = GetNativeDataOffClipboard(aDataObject, format, &data, &dataLen);
if (NS_OK == res) {
genericTrans->SetTransferData(df, data, dataLen);
aTransferable->SetTransferData(df, data, dataLen);
}
} else if (nsnull != aWindow) {
res = GetNativeDataOffClipboard(aWindow, format, &data, &dataLen);
if (NS_OK == res) {
genericTrans->SetTransferData(df, data, dataLen);
aTransferable->SetTransferData(df, data, dataLen);
}
}
NS_IF_RELEASE(df);
}
NS_RELEASE(supports);
}
delete dfList;
return res;
}
@ -554,23 +502,16 @@ NS_IMETHODIMP nsClipboard::ForceDataToClipboard()
::EmptyClipboard();
// Get the transferable list of data flavors
nsISupportsArray * dfList;
nsVoidArray * dfList;
mTransferable->GetTransferDataFlavors(&dfList);
// Walk through flavors and see which flavor is on the native clipboard,
PRUint32 i;
PRUint32 cnt = 0;
nsresult rv = dfList->Count(&cnt);
NS_ASSERTION(NS_SUCCEEDED(rv), "Count failed");
PRUint32 cnt = dfList->Count();
for (i=0;i<cnt;i++) {
nsIDataFlavor * df;
nsISupports * supports = dfList->ElementAt(i);
if (NS_OK == supports->QueryInterface(kIDataFlavorIID, (void **)&df)) {
nsString mime;
df->GetMimeType(mime);
// convert mime to native format identifier
UINT format = GetFormat(mime);
nsString * df = (nsString *)dfList->ElementAt(i);
if (nsnull != df) {
UINT format = GetFormat(*df);
void * data;
PRUint32 dataLen;
@ -582,11 +523,9 @@ NS_IMETHODIMP nsClipboard::ForceDataToClipboard()
if (nsnull != data) {
PlaceDataOnClipboard(format, (char *)data, dataLen);
}
NS_RELEASE(df);
}
NS_RELEASE(supports);
}
delete dfList;
::CloseClipboard();
return NS_OK;

View File

@ -38,10 +38,6 @@ public:
nsClipboard();
virtual ~nsClipboard();
//nsISupports
NS_DECL_ISUPPORTS_INHERITED
// nsIClipboard
NS_IMETHOD ForceDataToClipboard();

View File

@ -20,14 +20,10 @@
//#include "DragDrop.h"
#include "nsDataObj.h"
#include "nsString.h"
#include "nsISupportsArray.h"
#include "nsIDataFlavor.h"
#include "nsVoidArray.h"
#include "nsITransferable.h"
#include "IENUMFE.h"
// interface definitions
static NS_DEFINE_IID(kIDataFlavorIID, NS_IDATAFLAVOR_IID);
//#include "OLEIDL.h"
#include "OLE2.h"
#include "URLMON.h"
@ -59,8 +55,7 @@ nsDataObj::nsDataObj()
{
m_cRef = 0;
mTransferable = nsnull;
nsresult result = NS_NewISupportsArray(&mDataFlavors);
NS_ADDREF(mDataFlavors);
mDataFlavors = new nsVoidArray();
m_enumFE = new CEnumFormatEtc(32);
m_enumFE->AddRef();
@ -73,7 +68,11 @@ nsDataObj::nsDataObj()
nsDataObj::~nsDataObj()
{
NS_IF_RELEASE(mTransferable);
NS_IF_RELEASE(mDataFlavors);
PRInt32 i;
for (i=0;i<mDataFlavors->Count();i++) {
nsString * df = (nsString *)mDataFlavors->ElementAt(i);
delete df;
}
m_cRef = 0;
m_enumFE->Release();
@ -151,9 +150,8 @@ STDMETHODIMP nsDataObj::GetData(LPFORMATETC pFE, LPSTGMEDIUM pSTM)
FORMATETC fe;
m_enumFE->Reset();
while (NOERROR == m_enumFE->Next(1, &fe, &count)) {
nsIDataFlavor * df;
nsISupports * supports = mDataFlavors->ElementAt(dfInx);
if (NS_OK == supports->QueryInterface(kIDataFlavorIID, (void **)&df)) {
nsString * df = (nsString *)mDataFlavors->ElementAt(dfInx);
if (nsnull != df) {
if (FormatsMatch(fe, *pFE)) {
pSTM->pUnkForRelease = NULL;
CLIPFORMAT format = pFE->cfFormat;
@ -172,9 +170,7 @@ STDMETHODIMP nsDataObj::GetData(LPFORMATETC pFE, LPSTGMEDIUM pSTM)
break;
} //switch
} // if
NS_RELEASE(df);
}
NS_RELEASE(supports);
dfInx++;
} // while
@ -329,7 +325,7 @@ HRESULT nsDataObj::GetDib(FORMATETC&, STGMEDIUM&)
}
//-----------------------------------------------------
HRESULT nsDataObj::GetText(nsIDataFlavor * aDF, FORMATETC& aFE, STGMEDIUM& aSTG)
HRESULT nsDataObj::GetText(nsString * aDF, FORMATETC& aFE, STGMEDIUM& aSTG)
{
char * data;
PRUint32 len;
@ -451,13 +447,13 @@ CLSID nsDataObj::GetClassID() const
//-----------------------------------------------------
// Registers a the DataFlavor/FE pair
//-----------------------------------------------------
void nsDataObj::AddDataFlavor(nsIDataFlavor * aDataFlavor, LPFORMATETC aFE)
void nsDataObj::AddDataFlavor(nsString * aDataFlavor, LPFORMATETC aFE)
{
// These two lists are the mapping to and from data flavors and FEs
// Later, OLE will tell us it's needs a certain type of FORMATETC (text, unicode, etc)
// so we will look up data flavor that corresponds to the FE
// and then ask the transferable for that type of data
mDataFlavors->AppendElement(aDataFlavor);
mDataFlavors->AppendElement(new nsString(*aDataFlavor));
m_enumFE->AddFE(aFE);
}

View File

@ -26,8 +26,7 @@
#define MAX_FORMATS 32
class nsIDataFlavor;
class nsISupportsArray;
class nsVoidArray;
class CEnumFormatEtc;
class nsITransferable;
@ -61,10 +60,10 @@ class nsDataObj : public IDataObject
virtual HRESULT SetMetafilePict(FORMATETC& FE, STGMEDIUM& STM);
// support for clipboard
void AddDataFlavor(nsIDataFlavor * aDataFlavor, LPFORMATETC aFE);
void AddDataFlavor(nsString * aDataFlavor, LPFORMATETC aFE);
void SetTransferable(nsITransferable * aTransferable);
virtual HRESULT GetText(nsIDataFlavor * aDF, FORMATETC& FE, STGMEDIUM& STM);
virtual HRESULT GetText(nsString * aDF, FORMATETC& FE, STGMEDIUM& STM);
// Return the registered OLE class ID of this object's CfDataObj.
CLSID GetClassID() const;
@ -139,7 +138,7 @@ class nsDataObj : public IDataObject
static ULONG g_cRef; // the cum reference count of all instances
ULONG m_cRef; // the reference count
nsISupportsArray * mDataFlavors; // we own and ref count the array
nsVoidArray * mDataFlavors; // we own and its contents
nsITransferable * mTransferable; // nsDataObj owns and ref counts nsITransferable,
// the nsITransferable does know anything about the nsDataObj

View File

@ -24,7 +24,6 @@
#include "nsNativeDragTarget.h"
#include "nsNativeDragSource.h"
#include "nsClipboard.h"
#include "nsIDataFlavor.h"
#include "nsISupportsArray.h"
#include <OLE2.h>
@ -206,7 +205,7 @@ NS_IMETHODIMP nsDragService::SetIDataObject (IDataObject * aDataObj)
}
//-------------------------------------------------------------------------
NS_IMETHODIMP nsDragService::IsDataFlavorSupported(nsIDataFlavor * aDataFlavor)
NS_IMETHODIMP nsDragService::IsDataFlavorSupported(nsString * aDataFlavor)
{
if (nsnull == aDataFlavor || nsnull == mDataObject) {
return NS_ERROR_FAILURE;
@ -215,10 +214,7 @@ NS_IMETHODIMP nsDragService::IsDataFlavorSupported(nsIDataFlavor * aDataFlavor)
//DWORD types[] = {TYMED_HGLOBAL, TYMED_FILE, TYMED_ISTREAM, TYMED_GDI};
//PRInt32 numTypes = 4;
nsString mime;
aDataFlavor->GetMimeType(mime);
UINT format = nsClipboard::GetFormat(mime);
UINT format = nsClipboard::GetFormat(*aDataFlavor);
// XXX at the moment we only support global memory transfers
// It is here where we will add support for native images

View File

@ -47,7 +47,7 @@ public:
// nsIDragSession
NS_IMETHOD GetData (nsITransferable * aTransferable);
NS_IMETHOD IsDataFlavorSupported(nsIDataFlavor * aDataFlavor);
NS_IMETHOD IsDataFlavorSupported(nsString * aDataFlavor);
// native impl.
NS_IMETHOD SetIDataObject (IDataObject * aDataObj);

View File

@ -18,17 +18,14 @@
#include "nsBaseClipboard.h"
#include "nsISupportsArray.h"
#include "nsIClipboardOwner.h"
#include "nsIDataFlavor.h"
#include "nsString.h"
#include "nsIWidget.h"
#include "nsIComponentManager.h"
#include "nsWidgetsCID.h"
// interface definitions
static NS_DEFINE_IID(kIDataFlavorIID, NS_IDATAFLAVOR_IID);
static NS_DEFINE_IID(kIWidgetIID, NS_IWIDGET_IID);
static NS_DEFINE_IID(kWindowCID, NS_WINDOW_CID);
@ -74,12 +71,12 @@ nsresult nsBaseClipboard::QueryInterface(const nsIID& aIID, void** aInstancePtr)
nsresult rv = NS_NOINTERFACE;
/*static NS_DEFINE_IID(kIClipboard, NS_ICLIPBOARD_IID);
static NS_DEFINE_IID(kIClipboard, NS_ICLIPBOARD_IID);
if (aIID.Equals(kIClipboard)) {
*aInstancePtr = (void*) ((nsIClipboard*)this);
NS_ADDREF_THIS();
return NS_OK;
}*/
}
return rv;
}
@ -132,22 +129,6 @@ NS_IMETHODIMP nsBaseClipboard::GetData(nsITransferable * aTransferable)
}
/**
* This checks to see if the transferable in the clipboard object supports
* a particular data flavor
*
*/
NS_IMETHODIMP nsBaseClipboard::IsDataFlavorSupported(nsIDataFlavor * aDataFlavor)
{
// make sure we have a good transferable
if (nsnull == mTransferable) {
return NS_ERROR_FAILURE;
}
return mTransferable->IsDataFlavorSupported(aDataFlavor);
}
/**
*
*

View File

@ -45,7 +45,6 @@ public:
NS_IMETHOD SetData(nsITransferable * aTransferable, nsIClipboardOwner * anOwner);
NS_IMETHOD GetData(nsITransferable * aTransferable);
NS_IMETHOD IsDataFlavorSupported(nsIDataFlavor * aDataFlavor);
NS_IMETHOD EmptyClipboard();
NS_IMETHOD ForceDataToClipboard();

View File

@ -133,7 +133,7 @@ NS_IMETHODIMP nsBaseDragService::GetData (nsITransferable * aTransferable)
}
//-------------------------------------------------------------------------
NS_IMETHODIMP nsBaseDragService::IsDataFlavorSupported(nsIDataFlavor * aDataFlavor)
NS_IMETHODIMP nsBaseDragService::IsDataFlavorSupported(nsString * aDataFlavor)
{
return NS_ERROR_FAILURE;
}

View File

@ -58,7 +58,7 @@ public:
NS_IMETHOD GetTargetSize (nsSize * aDragTargetSize);
NS_IMETHOD GetData (nsITransferable * aTransferable);
NS_IMETHOD IsDataFlavorSupported(nsIDataFlavor * aDataFlavor);
NS_IMETHOD IsDataFlavorSupported(nsString * aDataFlavor);
protected:

View File

@ -18,9 +18,8 @@
#include "nsFileSpec.h"
#include "nsFileListTransferable.h"
#include "nsIDataFlavor.h"
#include "nsString.h"
#include "nsWidgetsCID.h"
#include "nsISupportsArray.h"
#include "nsVoidArray.h"
#include "nsIComponentManager.h"
#include "nsCOMPtr.h"
@ -39,12 +38,7 @@ nsFileListTransferable::nsFileListTransferable()
NS_INIT_REFCNT();
mFileList = new nsVoidArray();
nsresult rv = nsComponentManager::CreateInstance(kCDataFlavorCID, nsnull,
nsIDataFlavor::GetIID(),
(void**) getter_AddRefs(mFileListDataFlavor));
if (NS_OK == rv) {
mFileListDataFlavor->Init(kDropFilesMime, "File List");
}
mFileListDataFlavor = kDropFilesMime;
}
@ -78,12 +72,6 @@ nsresult nsFileListTransferable::QueryInterface(const nsIID& aIID, void** aInsta
return NS_OK;
}
if (aIID.Equals(nsIGenericTransferable::GetIID())) {
*aInstancePtr = (void*) ((nsIGenericTransferable*)this);
NS_ADDREF_THIS();
return NS_OK;
}
if (aIID.Equals(nsIFileListTransferable::GetIID())) {
*aInstancePtr = (void*) ((nsIFileListTransferable*)this);
NS_ADDREF_THIS();
@ -94,29 +82,30 @@ nsresult nsFileListTransferable::QueryInterface(const nsIID& aIID, void** aInsta
}
//-------------------------------------------------------------------------
NS_IMETHODIMP nsFileListTransferable::GetTransferDataFlavors(nsISupportsArray ** aDataFlavorList)
NS_IMETHODIMP nsFileListTransferable::GetTransferDataFlavors(nsVoidArray ** aDataFlavorList)
{
nsISupportsArray * array;
nsresult rv = NS_NewISupportsArray(&array);
if (NS_OK == rv) {
array->AppendElement(mFileListDataFlavor); // this addref's for us
nsVoidArray * array = new nsVoidArray();
if (nsnull != array) {
array->AppendElement(new nsString(mFileListDataFlavor)); // this addref's for us
*aDataFlavorList = array;
} else {
aDataFlavorList = nsnull;
}
return NS_OK;
}
//-------------------------------------------------------------------------
NS_IMETHODIMP nsFileListTransferable::IsDataFlavorSupported(nsIDataFlavor * aDataFlavor)
NS_IMETHODIMP nsFileListTransferable::IsDataFlavorSupported(nsString * aDataFlavor)
{
return (mFileListDataFlavor->Equals(aDataFlavor)?NS_OK:NS_ERROR_FAILURE);
return (mFileListDataFlavor.Equals(*aDataFlavor)?NS_OK:NS_ERROR_FAILURE);
}
//-------------------------------------------------------------------------
// The transferable owns the data (memory) and only gives the aData a copy of the pointer address to it.
//-------------------------------------------------------------------------
NS_IMETHODIMP nsFileListTransferable::GetTransferData(nsIDataFlavor * aDataFlavor, void ** aData, PRUint32 * aDataLen)
NS_IMETHODIMP nsFileListTransferable::GetTransferData(nsString * aDataFlavor, void ** aData, PRUint32 * aDataLen)
{
if (nsnull != mFileList && mFileListDataFlavor->Equals(aDataFlavor)) {
if (nsnull != mFileList && mFileListDataFlavor.Equals(*aDataFlavor)) {
*aData = mFileList;
*aDataLen = mFileList->Count();
} else {
@ -146,9 +135,9 @@ void nsFileListTransferable::ClearFileList()
//---------------------------------------------------
// The transferable now owns the data (the memory pointing to it)
//---------------------------------------------------
NS_IMETHODIMP nsFileListTransferable::SetTransferData(nsIDataFlavor * aDataFlavor, void * aData, PRUint32 aDataLen)
NS_IMETHODIMP nsFileListTransferable::SetTransferData(nsString * aDataFlavor, void * aData, PRUint32 aDataLen)
{
if (aData == nsnull && mFileListDataFlavor->Equals(aDataFlavor)) {
if (aData == nsnull && mFileListDataFlavor.Equals(*aDataFlavor)) {
return NS_ERROR_FAILURE;
}
@ -213,8 +202,7 @@ NS_IMETHODIMP nsFileListTransferable::GetFileList(nsVoidArray * aFileList)
// Computes a list of flavors that the transferable can accept into it, either through
// intrinsic knowledge or input data converters.
//---------------------------------------------------
NS_IMETHODIMP
nsFileListTransferable::FlavorsTransferableCanImport( nsISupportsArray** aOutFlavorList )
NS_IMETHODIMP nsFileListTransferable::FlavorsTransferableCanImport( nsVoidArray ** aOutFlavorList )
{
if ( !aOutFlavorList )
return NS_ERROR_INVALID_ARG;
@ -231,7 +219,7 @@ nsFileListTransferable::FlavorsTransferableCanImport( nsISupportsArray** aOutFla
// intrinsic knowledge or output data converters.
//---------------------------------------------------
NS_IMETHODIMP
nsFileListTransferable::FlavorsTransferableCanExport( nsISupportsArray** aOutFlavorList )
nsFileListTransferable::FlavorsTransferableCanExport( nsVoidArray** aOutFlavorList )
{
if ( !aOutFlavorList )
return NS_ERROR_INVALID_ARG;
@ -241,13 +229,13 @@ nsFileListTransferable::FlavorsTransferableCanExport( nsISupportsArray** aOutFla
} // FlavorsTransferableCanImport
//---------------------------------------------------
NS_IMETHODIMP nsFileListTransferable::AddDataFlavor(nsIDataFlavor * aDataFlavor)
NS_IMETHODIMP nsFileListTransferable::AddDataFlavor(nsString * aDataFlavor)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
//---------------------------------------------------
NS_IMETHODIMP nsFileListTransferable::RemoveDataFlavor(nsIDataFlavor * aDataFlavor)
NS_IMETHODIMP nsFileListTransferable::RemoveDataFlavor(nsString * aDataFlavor)
{
return NS_ERROR_NOT_IMPLEMENTED;
}

View File

@ -20,9 +20,8 @@
#define nsFileListTransferable_h__
#include "nsITransferable.h"
#include "nsIGenericTransferable.h"
#include "nsIFileListTransferable.h"
#include "nsIDataFlavor.h"
#include "nsString.h"
#include "nsCOMPtr.h"
@ -35,7 +34,7 @@ class nsVoidArray;
* XP FileListTransferable wrapper
*/
class nsFileListTransferable : public nsIFileListTransferable, public nsITransferable, public nsIGenericTransferable
class nsFileListTransferable : public nsIFileListTransferable, public nsITransferable
{
public:
@ -51,10 +50,9 @@ public:
//////////////////////////
NS_IMETHOD FlavorsTransferableCanExport ( nsISupportsArray** outFlavorList ) ;
NS_IMETHOD GetTransferDataFlavors(nsISupportsArray ** aDataFlavorList);
NS_IMETHOD IsDataFlavorSupported(nsIDataFlavor * aFlavor);
// Transferable still owns |aData|. Do not delete it.
NS_IMETHOD GetTransferData(nsIDataFlavor * aFlavor, void ** aData, PRUint32 * aDataLen);
NS_IMETHOD GetTransferData(nsString * aFlavor, void ** aData, PRUint32 * aDataLen);
NS_IMETHOD_(PRBool) IsLargeDataSet();
//////////////////////////
@ -64,14 +62,14 @@ public:
NS_IMETHOD GetFileList(nsVoidArray * aFileList);
//////////////////////////
//nsIGenericTransferable
// Getter interface
//////////////////////////
NS_IMETHOD FlavorsTransferableCanImport ( nsISupportsArray** outFlavorList ) ;
NS_IMETHOD FlavorsTransferableCanImport ( nsVoidArray** outFlavorList ) ;
NS_IMETHOD SetTransferData(nsIDataFlavor * aFlavor, void * aData, PRUint32 aDataLen); // Transferable consumes |aData|. Do not delete it.
NS_IMETHOD SetTransferData(nsString * aFlavor, void * aData, PRUint32 aDataLen); // Transferable consumes |aData|. Do not delete it.
NS_IMETHOD AddDataFlavor(nsIDataFlavor * aDataFlavor);
NS_IMETHOD RemoveDataFlavor(nsIDataFlavor * aDataFlavor);
NS_IMETHOD AddDataFlavor(nsString * aDataFlavor);
NS_IMETHOD RemoveDataFlavor(nsString * aDataFlavor);
NS_IMETHOD SetConverter(nsIFormatConverter * aConverter);
NS_IMETHOD GetConverter(nsIFormatConverter ** aConverter);
@ -82,8 +80,8 @@ protected:
NS_IMETHODIMP nsFileListTransferable::CopyFileList(nsVoidArray * aFromFileList,
nsVoidArray * aToFileList);
nsVoidArray * mFileList;
nsCOMPtr<nsIDataFlavor> mFileListDataFlavor;
nsVoidArray * mFileList;
nsString mFileListDataFlavor;
};

View File

@ -17,10 +17,10 @@
*/
#include "nsTransferable.h"
#include "nsIDataFlavor.h"
#include "nsString.h"
#include "nsDataFlavor.h"
#include "nsWidgetsCID.h"
#include "nsISupportsArray.h"
#include "nsVoidArray.h"
#include "nsIFormatConverter.h"
#include "nsVoidArray.h"
#include "nsIComponentManager.h"
@ -28,18 +28,15 @@
static NS_DEFINE_IID(kITransferableIID, NS_ITRANSFERABLE_IID);
static NS_DEFINE_IID(kIGenericTransferableIID, NS_IGENERICTRANSFERABLE_IID);
static NS_DEFINE_IID(kIDataFlavorIID, NS_IDATAFLAVOR_IID);
static NS_DEFINE_IID(kCDataFlavorCID, NS_DATAFLAVOR_CID);
NS_IMPL_ADDREF(nsTransferable)
NS_IMPL_RELEASE(nsTransferable)
typedef struct {
nsIDataFlavor * mFlavor;
char * mData;
PRUint32 mDataLen;
nsString * mFlavor;
char * mData;
PRUint32 mDataLen;
} DataStruct;
//-------------------------------------------------------------------------
@ -64,7 +61,7 @@ nsTransferable::~nsTransferable()
for (i=0;i<mDataArray->Count();i++) {
DataStruct * data = (DataStruct *)mDataArray->ElementAt(i);
if (data) {
NS_RELEASE(data->mFlavor);
delete data->mFlavor;
if (data->mData) {
delete[] data->mData;
}
@ -95,12 +92,6 @@ nsresult nsTransferable::QueryInterface(const nsIID& aIID, void** aInstancePtr)
return NS_OK;
}
if (aIID.Equals(kIGenericTransferableIID)) {
*aInstancePtr = (void*) ((nsIGenericTransferable*)this);
NS_ADDREF_THIS();
return NS_OK;
}
return rv;
}
@ -109,62 +100,38 @@ nsresult nsTransferable::QueryInterface(const nsIID& aIID, void** aInstancePtr)
*
*
*/
NS_IMETHODIMP nsTransferable::GetTransferDataFlavors(nsISupportsArray ** aDataFlavorList)
NS_IMETHODIMP nsTransferable::GetTransferDataFlavors(nsVoidArray ** aDataFlavorList)
{
nsISupportsArray * array;
nsresult rv = NS_NewISupportsArray(&array);
if (NS_OK == rv) {
nsVoidArray * array = new nsVoidArray();
if (nsnull != array) {
PRInt32 i;
for (i=0;i<mDataArray->Count();i++) {
DataStruct * data = (DataStruct *)mDataArray->ElementAt(i);
array->AppendElement(data->mFlavor); // this addref's for us
array->AppendElement(data->mFlavor);
}
*aDataFlavorList = array;
} else {
aDataFlavorList = nsnull;
}
return NS_OK;
}
/**
*
*
*/
NS_IMETHODIMP nsTransferable::IsDataFlavorSupported(nsIDataFlavor * aDataFlavor)
{
nsAutoString mimeInQuestion;
aDataFlavor->GetMimeType(mimeInQuestion);
PRInt32 i;
for (i=0;i<mDataArray->Count();i++) {
DataStruct * data = (DataStruct *)mDataArray->ElementAt(i);
nsAutoString mime;
data->mFlavor->GetMimeType(mime);
if (mimeInQuestion.Equals(mime)) {
return NS_OK;
}
}
return NS_ERROR_FAILURE;
}
/**
* The transferable owns the data (memory) and only gives the aData a copy of the pointer address to it.
*
*/
NS_IMETHODIMP nsTransferable::GetTransferData(nsIDataFlavor * aDataFlavor, void ** aData, PRUint32 * aDataLen)
NS_IMETHODIMP nsTransferable::GetTransferData(nsString * aDataFlavor, void ** aData, PRUint32 * aDataLen)
{
nsAutoString mimeInQuestion;
aDataFlavor->GetMimeType(mimeInQuestion);
PRInt32 i;
for (i=0;i<mDataArray->Count();i++) {
DataStruct * data = (DataStruct *)mDataArray->ElementAt(i);
nsAutoString mime;
data->mFlavor->GetMimeType(mime);
if (mimeInQuestion.Equals(mime)) {
*aData = data->mData;
*aDataLen = data->mDataLen;
if (nsnull != data->mData && data->mDataLen > 0) {
return NS_OK;
}
if (aDataFlavor->Equals(*data->mFlavor)) {
*aData = data->mData;
*aDataLen = data->mDataLen;
if (nsnull != data->mData && data->mDataLen > 0) {
return NS_OK;
}
}
}
@ -184,21 +151,16 @@ NS_IMETHODIMP nsTransferable::GetTransferData(nsIDataFlavor * aDataFlavor, void
* The transferable now owns the data (the memory pointing to it)
*
*/
NS_IMETHODIMP nsTransferable::SetTransferData(nsIDataFlavor * aDataFlavor, void * aData, PRUint32 aDataLen)
NS_IMETHODIMP nsTransferable::SetTransferData(nsString * aDataFlavor, void * aData, PRUint32 aDataLen)
{
if (aData == nsnull) {
return NS_ERROR_FAILURE;
}
nsAutoString mimeInQuestion;
aDataFlavor->GetMimeType(mimeInQuestion);
PRInt32 i;
for (i=0;i<mDataArray->Count();i++) {
DataStruct * data = (DataStruct *)mDataArray->ElementAt(i);
nsAutoString mime;
data->mFlavor->GetMimeType(mime);
if (mimeInQuestion.Equals(mime)) {
if (aDataFlavor->Equals(*data->mFlavor)) {
if (nsnull != data->mData) {
delete[] data->mData;
}
@ -215,34 +177,27 @@ NS_IMETHODIMP nsTransferable::SetTransferData(nsIDataFlavor * aDataFlavor, void
*
*
*/
NS_IMETHODIMP nsTransferable::AddDataFlavor(nsIDataFlavor * aDataFlavor)
NS_IMETHODIMP nsTransferable::AddDataFlavor(nsString * aDataFlavor)
{
if (nsnull == aDataFlavor) {
return NS_ERROR_FAILURE;
}
nsAutoString mimeInQuestion;
aDataFlavor->GetMimeType(mimeInQuestion);
// Do we have the data flavor already?
PRInt32 i;
for (i=0;i<mDataArray->Count();i++) {
DataStruct * data = (DataStruct *)mDataArray->ElementAt(i);
nsAutoString mime;
data->mFlavor->GetMimeType(mime);
if (mimeInQuestion.Equals(mime)) {
if (aDataFlavor->Equals(*data->mFlavor)) {
return NS_ERROR_FAILURE;
}
}
// Create a new "slot" for the data
DataStruct * data = new DataStruct;
data->mFlavor = aDataFlavor;
data->mFlavor = new nsString(*aDataFlavor);
data->mData = nsnull;
data->mDataLen = 0;
NS_ADDREF(aDataFlavor);
mDataArray->AppendElement((void *)data);
return NS_OK;
@ -251,23 +206,21 @@ NS_IMETHODIMP nsTransferable::AddDataFlavor(nsIDataFlavor * aDataFlavor)
*
*
*/
NS_IMETHODIMP nsTransferable::RemoveDataFlavor(nsIDataFlavor * aDataFlavor)
NS_IMETHODIMP nsTransferable::RemoveDataFlavor(nsString * aDataFlavor)
{
if (nsnull == aDataFlavor) {
return NS_ERROR_FAILURE;
}
nsAutoString mimeInQuestion;
aDataFlavor->GetMimeType(mimeInQuestion);
// Do we have the data flavor already?
PRInt32 i;
for (i=0;i<mDataArray->Count();i++) {
DataStruct * data = (DataStruct *)mDataArray->ElementAt(i);
nsAutoString mime;
data->mFlavor->GetMimeType(mime);
if (mimeInQuestion.Equals(mime)) {
delete data;
if (aDataFlavor->Equals(*data->mFlavor)) {
delete data->mFlavor;
if (data->mData) {
delete[] data->mData;
}
mDataArray->RemoveElementAt(i);
return NS_OK;
}
@ -319,7 +272,7 @@ NS_IMETHODIMP nsTransferable::GetConverter(nsIFormatConverter ** aConverter)
// intrinsic knowledge or input data converters.
//
NS_IMETHODIMP
nsTransferable :: FlavorsTransferableCanImport ( nsISupportsArray** outFlavorList )
nsTransferable :: FlavorsTransferableCanImport ( nsVoidArray** outFlavorList )
{
if ( !outFlavorList )
return NS_ERROR_INVALID_ARG;
@ -331,17 +284,16 @@ nsTransferable :: FlavorsTransferableCanImport ( nsISupportsArray** outFlavorLis
nsCOMPtr<nsIFormatConverter> converter;
GetConverter(getter_AddRefs(converter));
if ( converter ) {
nsCOMPtr<nsISupportsArray> convertedList;
converter->GetInputDataFlavors(getter_AddRefs(convertedList));
if ( convertedList ) {
nsVoidArray * convertedList;
converter->GetInputDataFlavors(&convertedList);
if ( nsnull != convertedList ) {
PRUint32 i;
PRUint32 cnt;
nsresult rv = convertedList->Count(&cnt);
if (NS_FAILED(rv)) return rv;
PRUint32 cnt = convertedList->Count();
for (i=0;i<cnt;i++) {
nsCOMPtr<nsISupports> temp = getter_AddRefs(convertedList->ElementAt(i));
(*outFlavorList)->AppendElement(temp); // this addref's for us
nsString * temp = (nsString *)convertedList->ElementAt(i);
(*outFlavorList)->AppendElement(temp);
} // foreach flavor that can be converted to
delete convertedList;
}
} // if a converter exists
@ -357,7 +309,7 @@ nsTransferable :: FlavorsTransferableCanImport ( nsISupportsArray** outFlavorLis
// intrinsic knowledge or output data converters.
//
NS_IMETHODIMP
nsTransferable :: FlavorsTransferableCanExport ( nsISupportsArray** outFlavorList )
nsTransferable :: FlavorsTransferableCanExport ( nsVoidArray** outFlavorList )
{
if ( !outFlavorList )
return NS_ERROR_INVALID_ARG;
@ -369,15 +321,13 @@ nsTransferable :: FlavorsTransferableCanExport ( nsISupportsArray** outFlavorLis
nsCOMPtr<nsIFormatConverter> converter;
GetConverter(getter_AddRefs(converter));
if ( converter ) {
nsCOMPtr<nsISupportsArray> convertedList;
converter->GetOutputDataFlavors(getter_AddRefs(convertedList));
if ( convertedList ) {
nsVoidArray * convertedList;
converter->GetOutputDataFlavors(&convertedList);
if ( nsnull != convertedList ) {
PRUint32 i;
PRUint32 cnt;
nsresult rv = convertedList->Count(&cnt);
if (NS_FAILED(rv)) return rv;
PRUint32 cnt = convertedList->Count();
for (i=0;i<cnt;i++) {
nsCOMPtr<nsISupports> temp = getter_AddRefs(convertedList->ElementAt(i));
nsString * temp = (nsString *)convertedList->ElementAt(i);
(*outFlavorList)->AppendElement(temp); // this addref's for us
} // foreach flavor that can be converted to
}

View File

@ -25,8 +25,8 @@
#include "nsCOMPtr.h"
class nsISupportsArray;
class nsIDataFlavor;
class nsVoidArray;
class nsString;
class nsDataObj;
class nsVoidArray;
@ -35,7 +35,7 @@ class nsVoidArray;
* XP Transferable wrapper
*/
class nsTransferable : public nsITransferable, public nsIGenericTransferable
class nsTransferable : public nsITransferable
{
public:
@ -47,22 +47,20 @@ public:
//nsITransferable
NS_IMETHOD FlavorsTransferableCanExport ( nsISupportsArray** outFlavorList ) ;
NS_IMETHOD GetTransferDataFlavors(nsISupportsArray ** aDataFlavorList);
NS_IMETHOD IsDataFlavorSupported(nsIDataFlavor * aFlavor);
NS_IMETHOD FlavorsTransferableCanExport ( nsVoidArray** outFlavorList ) ;
NS_IMETHOD GetTransferDataFlavors(nsVoidArray ** aDataFlavorList);
// Transferable still owns |aData|. Do not delete it.
NS_IMETHOD GetTransferData(nsIDataFlavor * aFlavor, void ** aData, PRUint32 * aDataLen);
NS_IMETHOD GetTransferData(nsString * aFlavor, void ** aData, PRUint32 * aDataLen);
NS_IMETHOD_(PRBool) IsLargeDataSet();
//nsIGenericTransferable
NS_IMETHOD FlavorsTransferableCanImport ( nsISupportsArray** outFlavorList ) ;
NS_IMETHOD FlavorsTransferableCanImport ( nsVoidArray** outFlavorList ) ;
// Transferable consumes |aData|. Do not delete it.
NS_IMETHOD SetTransferData(nsIDataFlavor * aFlavor, void * aData, PRUint32 aDataLen);
NS_IMETHOD SetTransferData(nsString * aFlavor, void * aData, PRUint32 aDataLen);
NS_IMETHOD AddDataFlavor(nsIDataFlavor * aDataFlavor);
NS_IMETHOD RemoveDataFlavor(nsIDataFlavor * aDataFlavor);
NS_IMETHOD AddDataFlavor(nsString * aDataFlavor);
NS_IMETHOD RemoveDataFlavor(nsString * aDataFlavor);
NS_IMETHOD SetConverter(nsIFormatConverter * aConverter);
NS_IMETHOD GetConverter(nsIFormatConverter ** aConverter);
@ -70,7 +68,7 @@ public:
protected:
nsVoidArray * mDataArray;
nsVoidArray * mDataArray;
nsCOMPtr<nsIFormatConverter> mFormatConv;
};

View File

@ -16,9 +16,9 @@
* Reserved.
*/
#include "nsIDataFlavor.h"
#include "nsString.h"
#include "nsWidgetsCID.h"
#include "nsISupportsArray.h"
#include "nsVoidArray.h"
#include "nsRepository.h"
// These are temporary
@ -37,7 +37,7 @@
#include "nsHTMLToTXTSinkStream.h"
#include "nsXIFDTD.h"
#include "nsIDataFlavor.h"
#include "nsString.h"
#include "nsWidgetsCID.h"
#include "nsXIFFormatConverter.h"
@ -47,10 +47,6 @@ static NS_DEFINE_IID(kIXIFFormatConverterIID, NS_IFORMATCONVERTER_IID);
static NS_DEFINE_IID(kCParserIID, NS_IPARSER_IID);
static NS_DEFINE_IID(kCParserCID, NS_PARSER_IID);
static NS_DEFINE_IID(kIDataFlavorIID, NS_IDATAFLAVOR_IID);
static NS_DEFINE_IID(kCDataFlavorCID, NS_DATAFLAVOR_CID);
NS_IMPL_ADDREF(nsXIFFormatConverter)
NS_IMPL_RELEASE(nsXIFFormatConverter)
@ -98,28 +94,15 @@ nsresult nsXIFFormatConverter::QueryInterface(const nsIID& aIID, void** aInstanc
}
static void AddFlavor(nsISupportsArray * aArray, const nsString & aMime, const nsString & aReadable)
{
nsIDataFlavor * flavor;
nsresult rv = nsComponentManager::CreateInstance(kCDataFlavorCID, nsnull, kIDataFlavorIID, (void**) &flavor);
if (NS_OK == rv) {
flavor->Init(aMime, aReadable);
if (nsnull != flavor) {
aArray->AppendElement(flavor);
}
}
}
/**
*
*
*/
NS_IMETHODIMP nsXIFFormatConverter::GetInputDataFlavors(nsISupportsArray ** aDataFlavorList)
NS_IMETHODIMP nsXIFFormatConverter::GetInputDataFlavors(nsVoidArray ** aDataFlavorList)
{
nsISupportsArray * array;
nsresult rv = NS_NewISupportsArray(&array);
if (NS_OK == rv) {
AddFlavor(array, kXIFMime, "XIF");
nsVoidArray * array = new nsVoidArray();
if (nsnull != array) {
array->AppendElement(new nsString(kXIFMime));
*aDataFlavorList = array;
}
return NS_OK;
@ -129,15 +112,14 @@ NS_IMETHODIMP nsXIFFormatConverter::GetInputDataFlavors(nsISupportsArray ** aDat
*
*
*/
NS_IMETHODIMP nsXIFFormatConverter::GetOutputDataFlavors(nsISupportsArray ** aDataFlavorList)
NS_IMETHODIMP nsXIFFormatConverter::GetOutputDataFlavors(nsVoidArray ** aDataFlavorList)
{
nsISupportsArray * array;
nsresult rv = NS_NewISupportsArray(&array);
if (NS_OK == rv) {
AddFlavor(array, kXIFMime, "XIF");
AddFlavor(array, kTextMime, "Text");
AddFlavor(array, kAOLMailMime, "AOLMail");
AddFlavor(array, kHTMLMime, "HTML");
nsVoidArray * array = new nsVoidArray();
if (nsnull != array) {
array->AppendElement(new nsString(kXIFMime));
array->AppendElement(new nsString(kTextMime));
array->AppendElement(new nsString(kAOLMailMime));
array->AppendElement(new nsString(kHTMLMime));
*aDataFlavorList = array;
}
return NS_OK;
@ -149,25 +131,19 @@ NS_IMETHODIMP nsXIFFormatConverter::GetOutputDataFlavors(nsISupportsArray ** aDa
*
*
*/
NS_IMETHODIMP nsXIFFormatConverter::CanConvert(nsIDataFlavor * aFromDataFlavor, nsIDataFlavor * aToDataFlavor)
NS_IMETHODIMP nsXIFFormatConverter::CanConvert(nsString * aFromDataFlavor, nsString * aToDataFlavor)
{
// This method currently only converts from XIF to the others
nsAutoString fromMimeInQuestion;
aFromDataFlavor->GetMimeType(fromMimeInQuestion);
if (!fromMimeInQuestion.Equals(kXIFMime)) {
if (!aFromDataFlavor->Equals(kXIFMime)) {
return NS_ERROR_FAILURE;
}
nsAutoString toMimeInQuestion;
aToDataFlavor->GetMimeType(toMimeInQuestion);
if (toMimeInQuestion.Equals(kTextMime)) {
if (aToDataFlavor->Equals(kTextMime)) {
return NS_OK;
} else if (toMimeInQuestion.Equals(kHTMLMime)) {
} else if (aToDataFlavor->Equals(kHTMLMime)) {
return NS_OK;
} else if (toMimeInQuestion.Equals(kAOLMailMime)) {
} else if (aToDataFlavor->Equals(kAOLMailMime)) {
return NS_OK;
}
return NS_ERROR_FAILURE;
@ -177,36 +153,31 @@ NS_IMETHODIMP nsXIFFormatConverter::CanConvert(nsIDataFlavor * aFromDataFlavor,
*
*
*/
NS_IMETHODIMP nsXIFFormatConverter::Convert(nsIDataFlavor * aFromDataFlavor, void * aFromData, PRUint32 aDataLen,
nsIDataFlavor * aToDataFlavor, void ** aToData, PRUint32 * aDataToLen)
NS_IMETHODIMP nsXIFFormatConverter::Convert(nsString * aFromDataFlavor, void * aFromData, PRUint32 aDataLen,
nsString * aToDataFlavor, void ** aToData, PRUint32 * aDataToLen)
{
// This method currently only converts from XIF to the others
nsAutoString fromMimeInQuestion;
aFromDataFlavor->GetMimeType(fromMimeInQuestion);
if (!fromMimeInQuestion.Equals(kXIFMime)) {
if (!aFromDataFlavor->Equals(kXIFMime)) {
return NS_ERROR_FAILURE;
}
nsAutoString toMimeInQuestion;
aToDataFlavor->GetMimeType(toMimeInQuestion);
nsAutoString text;
nsAutoString srcText;
srcText.SetString((char *)aFromData, aDataLen);
if (toMimeInQuestion.Equals(kTextMime)) {
if (aToDataFlavor->Equals(kTextMime)) {
if (NS_OK == ConvertFromXIFToText(srcText, text)) {
*aToData = (void *)text.ToNewCString();
*aDataToLen = text.Length();
}
} else if (toMimeInQuestion.Equals(kHTMLMime)) {
} else if (aToDataFlavor->Equals(kHTMLMime)) {
if (NS_OK == ConvertFromXIFToHTML(srcText, text)) {
*aToData = (void *)text.ToNewCString();
*aDataToLen = text.Length();
}
} else if (toMimeInQuestion.Equals(kAOLMailMime)) {
} else if (aToDataFlavor->Equals(kAOLMailMime)) {
if (NS_OK == ConvertFromXIFToAOLMail(srcText, text)) {
*aToData = (void *)text.ToNewCString();
*aDataToLen = text.Length();

View File

@ -22,7 +22,7 @@
#include "nsIFormatConverter.h"
#include "nsString.h"
class nsIDataFlavor;
#include "nsITransferable.h" // for mime defs
class nsXIFFormatConverter : public nsIFormatConverter
{
@ -35,12 +35,12 @@ public:
NS_DECL_ISUPPORTS
//nsIXIFConverter
NS_IMETHOD GetInputDataFlavors(nsISupportsArray ** aDataFlavorList);
NS_IMETHOD GetOutputDataFlavors(nsISupportsArray ** aDataFlavorList);
NS_IMETHOD GetInputDataFlavors(nsVoidArray ** aDataFlavorList);
NS_IMETHOD GetOutputDataFlavors(nsVoidArray ** aDataFlavorList);
NS_IMETHOD CanConvert(nsIDataFlavor * aFromDataFlavor, nsIDataFlavor * aToDataFlavor);
NS_IMETHOD Convert(nsIDataFlavor * aFromDataFlavor, void * aFromData, PRUint32 aDataLen,
nsIDataFlavor * aToDataFlavor, void ** aToData, PRUint32 * aDataToLen);
NS_IMETHOD CanConvert(nsString * aFromDataFlavor, nsString * aToDataFlavor);
NS_IMETHOD Convert(nsString * aFromDataFlavor, void * aFromData, PRUint32 aDataLen,
nsString * aToDataFlavor, void ** aToData, PRUint32 * aDataToLen);
protected:
@ -48,7 +48,7 @@ protected:
NS_IMETHOD ConvertFromXIFToText(const nsString & aFromStr, nsString & aToStr);
NS_IMETHOD ConvertFromXIFToAOLMail(const nsString & aFromStr, nsString & aToStr);
nsISupportsArray * mDFList;
//nsVoidArray * mDFList;
};