/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
 *
 * The contents of this file are subject to the Netscape Public License
 * Version 1.0 (the "NPL"); you may not use this file except in
 * compliance with the NPL.  You may obtain a copy of the NPL at
 * http://www.mozilla.org/NPL/
 *
 * Software distributed under the NPL is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
 * for the specific language governing rights and limitations under the
 * NPL.
 *
 * The Initial Developer of this code under the NPL is Netscape
 * Communications Corporation.  Portions created by Netscape are
 * Copyright (C) 1998 Netscape Communications Corporation.  All Rights
 * Reserved.
 */

//	CBrowserDragTask.cp



#include "CBrowserDragTask.h"

#include "resgui.h"

// ---------------------------------------------------------------------------
//		¥ CBrowserDragTask
// ---------------------------------------------------------------------------

CBrowserDragTask::CBrowserDragTask(
	const EventRecord&		inEventRecord)
	:	super(inEventRecord)
{
}	

// ---------------------------------------------------------------------------
//		¥ ~CBrowserDragTask
// ---------------------------------------------------------------------------
											
CBrowserDragTask::~CBrowserDragTask()
{
}	


//
// AddFlavorBookmark
//
// This flavor is currently used by the Proxy Icon and the Personal Toolbar
// to shuttle around url/title information. The data format is plain text in
// the form of URL<cr>Title.
//
// This flavor may or may not contain data. The proxy icon, for example, would want to 
// include the data so that if it is dropped in the NavCenter, the NC could 
// determine if the drop was allowable based on the URL.
//
// NOTE: THIS FLAVOR WILL NOT BE USED BY THE PERSONAL TOOLBAR IN THE FUTURE
// AND WILL ONLY BE USED BY THE PROXY ICON. AS A RESULT, IT WILL BE MOVED
// INTO CProxyDragTask.
//
void
CBrowserDragTask::AddFlavorBookmark(ItemReference inItemRef, const char* inData)
{
	OSErr theErr = ::AddDragItemFlavor(
									mDragRef,
									inItemRef,
									emBookmarkDrag,
									inData,			
									inData ? strlen(inData) + 1 : 0,
									flavorSenderTranslated | flavorSenderOnly);
	ThrowIfOSErr_(theErr);
}							


//
// AddFlavorBookmarkFile
//
// This flavor is used for creating a bookmark file in the Finder instead of a clipping when
// icons are dragged to the desktop.
//
// The data will be fulfilled in a DoSendData proc.
// 
void
CBrowserDragTask::AddFlavorBookmarkFile(ItemReference inItemRef)
{	
	// Promise a file of type emBookmarkFile
	
	PromiseHFSFlavor promise;
	
	promise.fileType 		= emBookmarkFile;
	promise.fileCreator 	= emSignature;
	promise.fdFlags 		= 0;
	promise.promisedFlavor	= emBookmarkFileDrag;

	// Promise to create a file for the emBookmark flavor, where the actual
	// FSSpec is promised in the emBookmark flavor below
	
	OSErr theErr = ::AddDragItemFlavor(
									mDragRef,
									inItemRef,
									flavorTypePromiseHFS,
									&promise,
									sizeof(PromiseHFSFlavor),
									0);
	ThrowIfOSErr_(theErr);
	
	theErr = ::AddDragItemFlavor(
									mDragRef,
									inItemRef,
									emBookmarkFileDrag,
									nil,
									0,
									flavorNotSaved | flavorSenderTranslated);
	ThrowIfOSErr_(theErr);
}	


//
// AddFlavorURL
//
// This flavor is used to communicate the current URL with other applications, such
// as text editors, etc. It is basically the 'TEXT' flavor.
//
// No data is sent with this flavor, relying on a DoDragSendData() to get it out later.
// This prevents us from running into an odd problem where the CTheadView class wants to
// interpret the data as something that it isn't. This won't happen when no data is sent.
//
void
CBrowserDragTask::AddFlavorURL(ItemReference inItemRef)
{
	// TEXT flavor (drag an URL within Netscape). Set flavorSenderTranslated
	// so that the Finder *won't* try to put this in a clipping file.
	// We'd rather save the file itself.

	OSErr theErr = ::AddDragItemFlavor(
									mDragRef,
									inItemRef,
									'TEXT',
									nil,
									0,
									flavorSenderTranslated);
	ThrowIfOSErr_(theErr);
}	

// ---------------------------------------------------------------------------
//		¥ AddFlavors
// ---------------------------------------------------------------------------

void
CBrowserDragTask::AddFlavors( DragReference inDragRef )
{		
// NOTE: I'm passing |this| as the item ref because that's the way it was in the past
//			and i don't want to break anything.
	AddFlavorBookmark(static_cast<ItemReference>(this));
	AddFlavorBookmarkFile(static_cast<ItemReference>(this));
	AddFlavorURL(static_cast<ItemReference>(this));
}