blob: d2bb2a7b44b5b01734fb3bb3b00408f47151aabd [file] [log] [blame]
/*
* Copyright (C) 2004 Apple Computer, Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
// An implementation of the clipboard class from IE that talks to the Cocoa Pasteboard
#ifndef KWQCLIPBOARD_H_
#define KWQCLIPBOARD_H_
#include "KWQPixmap.h"
#include "xml/dom2_eventsimpl.h"
#ifdef __OBJC__
@class NSImage;
@class NSPasteboard;
#else
class NSImage;
class NSPasteboard;
#endif
typedef unsigned NSDragOperation;
class KWQKHTMLPart;
class KWQClipboard : public DOM::ClipboardImpl
{
public:
// security mechanisms
typedef enum {
Numb, ImageWritable, Writable, TypesReadable, Readable
} AccessPolicy;
KWQClipboard(bool forDragging, NSPasteboard *pasteboard, AccessPolicy policy, KWQKHTMLPart *part = 0);
virtual ~KWQClipboard();
bool isForDragging() const;
DOM::DOMString dropEffect() const;
void setDropEffect(const DOM::DOMString &s);
DOM::DOMString effectAllowed() const;
void setEffectAllowed(const DOM::DOMString &s);
void clearData(const DOM::DOMString &type);
void clearAllData();
DOM::DOMString getData(const DOM::DOMString &type, bool &success) const;
bool setData(const DOM::DOMString &type, const DOM::DOMString &data);
// extensions beyond IE's API
virtual QStringList types() const;
QPoint dragLocation() const; // same point as client passed us
QPixmap dragImage() const;
void setDragImage(const QPixmap &, const QPoint &);
DOM::NodeImpl *dragImageElement();
void setDragImageElement(DOM::NodeImpl *, const QPoint &);
// Methods for getting info in Cocoa's type system
NSImage *dragNSImage(NSPoint *loc); // loc converted from dragLoc, based on whole image size
bool sourceOperation(NSDragOperation *op) const;
bool destinationOperation(NSDragOperation *op) const;
void setSourceOperation(NSDragOperation op);
void setDestinationOperation(NSDragOperation op);
void setAccessPolicy(AccessPolicy policy);
AccessPolicy accessPolicy() const;
void setDragHasStarted() { m_dragStarted = true; }
private:
void setDragImage(const QPixmap &pm, DOM::NodeImpl *, const QPoint &loc);
NSPasteboard *m_pasteboard;
bool m_forDragging;
DOM::DOMString m_dropEffect;
DOM::DOMString m_effectAllowed;
QPoint m_dragLoc;
QPixmap m_dragImage;
khtml::SharedPtr<DOM::NodeImpl> m_dragImageElement;
AccessPolicy m_policy;
int m_changeCount;
bool m_dragStarted;
KWQKHTMLPart *m_part; // used on the source side to generate dragging images
};
#endif