From f820cbd6486920575f389144b170c97ee5bdcb0a Mon Sep 17 00:00:00 2001 From: "rods%netscape.com" Date: Sat, 17 Apr 1999 13:52:28 +0000 Subject: [PATCH] Switched over nsIGenericTransferable and added D&D Support --- editor/base/nsEditorEventListeners.cpp | 89 +++++++++++++------ .../libeditor/text/nsEditorEventListeners.cpp | 89 +++++++++++++------ 2 files changed, 120 insertions(+), 58 deletions(-) diff --git a/editor/base/nsEditorEventListeners.cpp b/editor/base/nsEditorEventListeners.cpp index 22211dbe3eb2..fa31cdc9d28c 100644 --- a/editor/base/nsEditorEventListeners.cpp +++ b/editor/base/nsEditorEventListeners.cpp @@ -43,7 +43,9 @@ static NS_DEFINE_IID(kIDOMCharacterDataIID, NS_IDOMCHARACTERDATA_IID); #include "nsIServiceManager.h" #include "nsWidgetsCID.h" #include "nsIClipboard.h" +#include "nsIDragService.h" #include "nsITransferable.h" +#include "nsIGenericTransferable.h" #include "nsIDataFlavor.h" #include "nsIFormatConverter.h" @@ -51,8 +53,11 @@ static NS_DEFINE_IID(kIDOMCharacterDataIID, NS_IDOMCHARACTERDATA_IID); static NS_DEFINE_IID(kIClipboardIID, NS_ICLIPBOARD_IID); static NS_DEFINE_CID(kCClipboardCID, NS_CLIPBOARD_CID); -static NS_DEFINE_IID(kITransferableIID, NS_ITRANSFERABLE_IID); -static NS_DEFINE_CID(kCTransferableCID, NS_TRANSFERABLE_CID); +static NS_DEFINE_IID(kIDragServiceIID, NS_IDRAGSERVICE_IID); +static NS_DEFINE_CID(kCDragServiceCID, NS_DRAGSERVICE_CID); + +static NS_DEFINE_IID(kIGenericTransferableIID, NS_IGENERICTRANSFERABLE_IID); +static NS_DEFINE_CID(kCGenericTransferableCID, NS_GENERICTRANSFERABLE_CID); static NS_DEFINE_IID(kIDataFlavorIID, NS_IDATAFLAVOR_IID); static NS_DEFINE_IID(kCDataFlavorCID, NS_DATAFLAVOR_CID); @@ -755,6 +760,16 @@ nsTextEditorDragListener::HandleEvent(nsIDOMEvent* aEvent) nsresult nsTextEditorDragListener::DragEnter(nsIDOMEvent* aDragEvent) { +#ifdef NEW_DRAG_AND_DROP + nsIDragService* dragService; + nsresult rv = nsServiceManager::GetService(kCDragServiceCID, + kIDragServiceIID, + (nsISupports **)&dragService); + if (NS_OK == rv) { + dragService->SetCanDrop(PR_TRUE); + NS_RELEASE(dragService); + } +#endif return NS_OK; } @@ -762,6 +777,16 @@ nsTextEditorDragListener::DragEnter(nsIDOMEvent* aDragEvent) nsresult nsTextEditorDragListener::DragOver(nsIDOMEvent* aDragEvent) { +#ifdef NEW_DRAG_AND_DROP + nsIDragService* dragService; + nsresult rv = nsServiceManager::GetService(kCDragServiceCID, + kIDragServiceIID, + (nsISupports **)&dragService); + if (NS_OK == rv) { + dragService->SetCanDrop(PR_TRUE); + NS_RELEASE(dragService); + } +#endif return NS_OK; } @@ -778,43 +803,49 @@ nsresult nsTextEditorDragListener::DragDrop(nsIDOMEvent* aMouseEvent) { -#ifdef NEW_CLIPBOARD_SUPPORT +#ifdef NEW_DRAG_AND_DROP nsString stuffToPaste; - nsIClipboard* clipboard; - nsresult rv = nsServiceManager::GetService(kCClipboardCID, - kIClipboardIID, - (nsISupports **)&clipboard); - nsITransferable *trans = 0; - rv = nsComponentManager::CreateInstance(kCTransferableCID, nsnull, kITransferableIID, (void**) &trans); + nsIDragService* dragService; + nsresult rv = nsServiceManager::GetService(kCDragServiceCID, + kIDragServiceIID, + (nsISupports **)&dragService); + if (NS_OK == rv) { + nsIGenericTransferable *genericTrans = 0; + rv = nsComponentManager::CreateInstance(kCGenericTransferableCID, nsnull, + kIGenericTransferableIID, (void**) &genericTrans); + if (NS_OK == rv) { + nsIDataFlavor *flavor = 0; + rv = nsComponentManager::CreateInstance(kCDataFlavorCID, nsnull, kIDataFlavorIID, (void**) &flavor); + if (NS_OK == rv) { + flavor->Init(kTextMime, "Text"); - //nsIFormatConverter * xifConverter; - //rv = nsComponentManager::CreateInstance(kCXIFFormatConverterCID, nsnull, kIFormatConverterIID, (void**) &xifConverter); + genericTrans->AddDataFlavor(flavor); - //trans->SetConverter(xifConverter); + nsCOMPtr trans = do_QueryInterface(genericTrans); + if (trans) { - nsIDataFlavor *flavor = 0; - rv = nsComponentManager::CreateInstance(kCDataFlavorCID, nsnull, kIDataFlavorIID, (void**) &flavor); - flavor->Init(kTextMime, "Text"); - trans->AddDataFlavor(flavor); + dragService->GetData(trans); - clipboard->GetData(trans); + char *str = 0; + PRUint32 len; + trans->GetTransferData(flavor, (void **)&str, &len); - char *str = 0; - PRUint32 len; - trans->GetTransferData(flavor, (void **)&str, &len); + if (str) { + if (str[len-1] == 0) { + len--; + } + stuffToPaste.SetString(str, len); + mEditor->InsertText(stuffToPaste); + } - if (str) { - if (str[len-1] == 0) { - len--; + } + NS_IF_RELEASE(flavor); + } + NS_IF_RELEASE(genericTrans); } - stuffToPaste.SetString(str, len); - mEditor->InsertText(stuffToPaste); + NS_IF_RELEASE(dragService); } - NS_IF_RELEASE(flavor); - NS_IF_RELEASE(trans); - NS_IF_RELEASE(clipboard); - #endif //mEditor->InsertText(nsAutoString("hello")); diff --git a/editor/libeditor/text/nsEditorEventListeners.cpp b/editor/libeditor/text/nsEditorEventListeners.cpp index 22211dbe3eb2..fa31cdc9d28c 100644 --- a/editor/libeditor/text/nsEditorEventListeners.cpp +++ b/editor/libeditor/text/nsEditorEventListeners.cpp @@ -43,7 +43,9 @@ static NS_DEFINE_IID(kIDOMCharacterDataIID, NS_IDOMCHARACTERDATA_IID); #include "nsIServiceManager.h" #include "nsWidgetsCID.h" #include "nsIClipboard.h" +#include "nsIDragService.h" #include "nsITransferable.h" +#include "nsIGenericTransferable.h" #include "nsIDataFlavor.h" #include "nsIFormatConverter.h" @@ -51,8 +53,11 @@ static NS_DEFINE_IID(kIDOMCharacterDataIID, NS_IDOMCHARACTERDATA_IID); static NS_DEFINE_IID(kIClipboardIID, NS_ICLIPBOARD_IID); static NS_DEFINE_CID(kCClipboardCID, NS_CLIPBOARD_CID); -static NS_DEFINE_IID(kITransferableIID, NS_ITRANSFERABLE_IID); -static NS_DEFINE_CID(kCTransferableCID, NS_TRANSFERABLE_CID); +static NS_DEFINE_IID(kIDragServiceIID, NS_IDRAGSERVICE_IID); +static NS_DEFINE_CID(kCDragServiceCID, NS_DRAGSERVICE_CID); + +static NS_DEFINE_IID(kIGenericTransferableIID, NS_IGENERICTRANSFERABLE_IID); +static NS_DEFINE_CID(kCGenericTransferableCID, NS_GENERICTRANSFERABLE_CID); static NS_DEFINE_IID(kIDataFlavorIID, NS_IDATAFLAVOR_IID); static NS_DEFINE_IID(kCDataFlavorCID, NS_DATAFLAVOR_CID); @@ -755,6 +760,16 @@ nsTextEditorDragListener::HandleEvent(nsIDOMEvent* aEvent) nsresult nsTextEditorDragListener::DragEnter(nsIDOMEvent* aDragEvent) { +#ifdef NEW_DRAG_AND_DROP + nsIDragService* dragService; + nsresult rv = nsServiceManager::GetService(kCDragServiceCID, + kIDragServiceIID, + (nsISupports **)&dragService); + if (NS_OK == rv) { + dragService->SetCanDrop(PR_TRUE); + NS_RELEASE(dragService); + } +#endif return NS_OK; } @@ -762,6 +777,16 @@ nsTextEditorDragListener::DragEnter(nsIDOMEvent* aDragEvent) nsresult nsTextEditorDragListener::DragOver(nsIDOMEvent* aDragEvent) { +#ifdef NEW_DRAG_AND_DROP + nsIDragService* dragService; + nsresult rv = nsServiceManager::GetService(kCDragServiceCID, + kIDragServiceIID, + (nsISupports **)&dragService); + if (NS_OK == rv) { + dragService->SetCanDrop(PR_TRUE); + NS_RELEASE(dragService); + } +#endif return NS_OK; } @@ -778,43 +803,49 @@ nsresult nsTextEditorDragListener::DragDrop(nsIDOMEvent* aMouseEvent) { -#ifdef NEW_CLIPBOARD_SUPPORT +#ifdef NEW_DRAG_AND_DROP nsString stuffToPaste; - nsIClipboard* clipboard; - nsresult rv = nsServiceManager::GetService(kCClipboardCID, - kIClipboardIID, - (nsISupports **)&clipboard); - nsITransferable *trans = 0; - rv = nsComponentManager::CreateInstance(kCTransferableCID, nsnull, kITransferableIID, (void**) &trans); + nsIDragService* dragService; + nsresult rv = nsServiceManager::GetService(kCDragServiceCID, + kIDragServiceIID, + (nsISupports **)&dragService); + if (NS_OK == rv) { + nsIGenericTransferable *genericTrans = 0; + rv = nsComponentManager::CreateInstance(kCGenericTransferableCID, nsnull, + kIGenericTransferableIID, (void**) &genericTrans); + if (NS_OK == rv) { + nsIDataFlavor *flavor = 0; + rv = nsComponentManager::CreateInstance(kCDataFlavorCID, nsnull, kIDataFlavorIID, (void**) &flavor); + if (NS_OK == rv) { + flavor->Init(kTextMime, "Text"); - //nsIFormatConverter * xifConverter; - //rv = nsComponentManager::CreateInstance(kCXIFFormatConverterCID, nsnull, kIFormatConverterIID, (void**) &xifConverter); + genericTrans->AddDataFlavor(flavor); - //trans->SetConverter(xifConverter); + nsCOMPtr trans = do_QueryInterface(genericTrans); + if (trans) { - nsIDataFlavor *flavor = 0; - rv = nsComponentManager::CreateInstance(kCDataFlavorCID, nsnull, kIDataFlavorIID, (void**) &flavor); - flavor->Init(kTextMime, "Text"); - trans->AddDataFlavor(flavor); + dragService->GetData(trans); - clipboard->GetData(trans); + char *str = 0; + PRUint32 len; + trans->GetTransferData(flavor, (void **)&str, &len); - char *str = 0; - PRUint32 len; - trans->GetTransferData(flavor, (void **)&str, &len); + if (str) { + if (str[len-1] == 0) { + len--; + } + stuffToPaste.SetString(str, len); + mEditor->InsertText(stuffToPaste); + } - if (str) { - if (str[len-1] == 0) { - len--; + } + NS_IF_RELEASE(flavor); + } + NS_IF_RELEASE(genericTrans); } - stuffToPaste.SetString(str, len); - mEditor->InsertText(stuffToPaste); + NS_IF_RELEASE(dragService); } - NS_IF_RELEASE(flavor); - NS_IF_RELEASE(trans); - NS_IF_RELEASE(clipboard); - #endif //mEditor->InsertText(nsAutoString("hello"));