allow drop of files into Composer (create image or link as appropriate)

This commit is contained in:
brade%netscape.com 2000-05-12 14:57:03 +00:00
Родитель 78271287f8
Коммит de866a32ba
2 изменённых файлов: 122 добавлений и 0 удалений

Просмотреть файл

@ -63,6 +63,8 @@
#include "nsISupportsArray.h" #include "nsISupportsArray.h"
#include "nsVoidArray.h" #include "nsVoidArray.h"
#include "nsFileSpec.h" #include "nsFileSpec.h"
#include "nsIFile.h"
#include "nsIURL.h"
#include "nsIComponentManager.h" #include "nsIComponentManager.h"
#include "nsIServiceManager.h" #include "nsIServiceManager.h"
#include "nsWidgetsCID.h" #include "nsWidgetsCID.h"
@ -4394,6 +4396,7 @@ NS_IMETHODIMP nsHTMLEditor::PrepareTransferable(nsITransferable **transferable)
{ {
(*transferable)->AddDataFlavor(kJPEGImageMime); (*transferable)->AddDataFlavor(kJPEGImageMime);
(*transferable)->AddDataFlavor(kHTMLMime); (*transferable)->AddDataFlavor(kHTMLMime);
(*transferable)->AddDataFlavor(kFileMime);
} }
(*transferable)->AddDataFlavor(kUnicodeMime); (*transferable)->AddDataFlavor(kUnicodeMime);
} }
@ -4442,6 +4445,64 @@ NS_IMETHODIMP nsHTMLEditor::InsertFromTransferable(nsITransferable *transferable
rv = InsertText(stuffToPaste); rv = InsertText(stuffToPaste);
} }
} }
else if (flavor.EqualsWithConversion(kFileMime))
{
nsCOMPtr<nsIFile> fileObj ( do_QueryInterface(genericDataObj) );
if (fileObj && len > 0)
{
nsCOMPtr<nsIFileURL> fileURL;
rv = nsComponentManager::CreateInstance("component://netscape/network/standard-url", nsnull,
NS_GET_IID(nsIURL), getter_AddRefs(fileURL));
if (NS_FAILED(rv))
return rv;
if ( fileURL )
{
rv = fileURL->SetFile( fileObj );
if (NS_FAILED(rv))
return rv;
PRBool insertAsImage = PR_FALSE;
char *fileextension = nsnull;
rv = fileURL->GetFileExtension( &fileextension );
if ( NS_SUCCEEDED(rv) && fileextension )
{
if ( (nsCRT::strcasecmp( fileextension, "jpg" ) == 0 )
|| (nsCRT::strcasecmp( fileextension, "jpeg" ) == 0 )
|| (nsCRT::strcasecmp( fileextension, "gif" ) == 0 )
|| (nsCRT::strcasecmp( fileextension, "png" ) == 0 ) )
{
insertAsImage = PR_TRUE;
}
}
if (fileextension) nsCRT::free(fileextension);
char *urltext = nsnull;
rv = fileURL->GetSpec( &urltext );
if ( NS_SUCCEEDED(rv) && urltext && urltext[0] != 0)
{
len = strlen(urltext);
if ( insertAsImage )
{
stuffToPaste.AssignWithConversion ( "<IMG src=\"", 10);
stuffToPaste.AppendWithConversion ( urltext, len );
stuffToPaste.AppendWithConversion ( "\">" );
}
else /* insert as link */
{
stuffToPaste.AssignWithConversion ( "<A href=\"" );
stuffToPaste.AppendWithConversion ( urltext, len );
stuffToPaste.AppendWithConversion ( "\">" );
stuffToPaste.AppendWithConversion ( urltext, len );
stuffToPaste.AppendWithConversion ( "</A>" );
}
nsAutoEditBatch beginBatching(this);
rv = InsertHTML(stuffToPaste);
}
if (urltext) nsCRT::free(urltext);
}
}
}
else if (flavor.EqualsWithConversion(kJPEGImageMime)) else if (flavor.EqualsWithConversion(kJPEGImageMime))
{ {
// Insert Image code here // Insert Image code here

Просмотреть файл

@ -63,6 +63,8 @@
#include "nsISupportsArray.h" #include "nsISupportsArray.h"
#include "nsVoidArray.h" #include "nsVoidArray.h"
#include "nsFileSpec.h" #include "nsFileSpec.h"
#include "nsIFile.h"
#include "nsIURL.h"
#include "nsIComponentManager.h" #include "nsIComponentManager.h"
#include "nsIServiceManager.h" #include "nsIServiceManager.h"
#include "nsWidgetsCID.h" #include "nsWidgetsCID.h"
@ -4394,6 +4396,7 @@ NS_IMETHODIMP nsHTMLEditor::PrepareTransferable(nsITransferable **transferable)
{ {
(*transferable)->AddDataFlavor(kJPEGImageMime); (*transferable)->AddDataFlavor(kJPEGImageMime);
(*transferable)->AddDataFlavor(kHTMLMime); (*transferable)->AddDataFlavor(kHTMLMime);
(*transferable)->AddDataFlavor(kFileMime);
} }
(*transferable)->AddDataFlavor(kUnicodeMime); (*transferable)->AddDataFlavor(kUnicodeMime);
} }
@ -4442,6 +4445,64 @@ NS_IMETHODIMP nsHTMLEditor::InsertFromTransferable(nsITransferable *transferable
rv = InsertText(stuffToPaste); rv = InsertText(stuffToPaste);
} }
} }
else if (flavor.EqualsWithConversion(kFileMime))
{
nsCOMPtr<nsIFile> fileObj ( do_QueryInterface(genericDataObj) );
if (fileObj && len > 0)
{
nsCOMPtr<nsIFileURL> fileURL;
rv = nsComponentManager::CreateInstance("component://netscape/network/standard-url", nsnull,
NS_GET_IID(nsIURL), getter_AddRefs(fileURL));
if (NS_FAILED(rv))
return rv;
if ( fileURL )
{
rv = fileURL->SetFile( fileObj );
if (NS_FAILED(rv))
return rv;
PRBool insertAsImage = PR_FALSE;
char *fileextension = nsnull;
rv = fileURL->GetFileExtension( &fileextension );
if ( NS_SUCCEEDED(rv) && fileextension )
{
if ( (nsCRT::strcasecmp( fileextension, "jpg" ) == 0 )
|| (nsCRT::strcasecmp( fileextension, "jpeg" ) == 0 )
|| (nsCRT::strcasecmp( fileextension, "gif" ) == 0 )
|| (nsCRT::strcasecmp( fileextension, "png" ) == 0 ) )
{
insertAsImage = PR_TRUE;
}
}
if (fileextension) nsCRT::free(fileextension);
char *urltext = nsnull;
rv = fileURL->GetSpec( &urltext );
if ( NS_SUCCEEDED(rv) && urltext && urltext[0] != 0)
{
len = strlen(urltext);
if ( insertAsImage )
{
stuffToPaste.AssignWithConversion ( "<IMG src=\"", 10);
stuffToPaste.AppendWithConversion ( urltext, len );
stuffToPaste.AppendWithConversion ( "\">" );
}
else /* insert as link */
{
stuffToPaste.AssignWithConversion ( "<A href=\"" );
stuffToPaste.AppendWithConversion ( urltext, len );
stuffToPaste.AppendWithConversion ( "\">" );
stuffToPaste.AppendWithConversion ( urltext, len );
stuffToPaste.AppendWithConversion ( "</A>" );
}
nsAutoEditBatch beginBatching(this);
rv = InsertHTML(stuffToPaste);
}
if (urltext) nsCRT::free(urltext);
}
}
}
else if (flavor.EqualsWithConversion(kJPEGImageMime)) else if (flavor.EqualsWithConversion(kJPEGImageMime))
{ {
// Insert Image code here // Insert Image code here