1///////////////////////////////////////////////////////////////////////////////
2// Name:        wx/msw/ole/dataobj2.h
3// Purpose:     second part of platform specific wxDataObject header -
4//              declarations of predefined wxDataObjectSimple-derived classes
5// Author:      Vadim Zeitlin
6// Modified by:
7// Created:     21.10.99
8// RCS-ID:      $Id: dataobj2.h 40772 2006-08-23 13:38:45Z VZ $
9// Copyright:   (c) 1999 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
10// Licence:     wxWindows licence
11///////////////////////////////////////////////////////////////////////////////
12
13#ifndef _WX_MSW_OLE_DATAOBJ2_H
14#define _WX_MSW_OLE_DATAOBJ2_H
15
16// ----------------------------------------------------------------------------
17// wxBitmapDataObject is a specialization of wxDataObject for bitmap data
18//
19// NB: in fact, under MSW we support CF_DIB (and not CF_BITMAP) clipboard
20//     format and we also provide wxBitmapDataObject2 for CF_BITMAP (which is
21//     rarely used). This is ugly, but I haven't found a solution for it yet.
22// ----------------------------------------------------------------------------
23
24class WXDLLEXPORT wxBitmapDataObject : public wxBitmapDataObjectBase
25{
26public:
27    // ctors
28    wxBitmapDataObject(const wxBitmap& bitmap = wxNullBitmap)
29        : wxBitmapDataObjectBase(bitmap)
30        {
31            SetFormat(wxDF_DIB);
32
33            m_data = NULL;
34        }
35
36    // implement base class pure virtuals
37    virtual size_t GetDataSize() const;
38    virtual bool GetDataHere(void *buf) const;
39    virtual bool SetData(size_t len, const void *buf);
40
41    virtual size_t GetDataSize(const wxDataFormat& WXUNUSED(format)) const
42        { return GetDataSize(); }
43    virtual bool GetDataHere(const wxDataFormat& WXUNUSED(format),
44                             void *buf) const
45        { return GetDataHere(buf); }
46    virtual bool SetData(const wxDataFormat& WXUNUSED(format),
47                         size_t len, const void *buf)
48        { return SetData(len, buf); }
49
50private:
51    // the DIB data
52    void /* BITMAPINFO */ *m_data;
53
54    DECLARE_NO_COPY_CLASS(wxBitmapDataObject)
55};
56
57// ----------------------------------------------------------------------------
58// wxBitmapDataObject2 - a data object for CF_BITMAP
59//
60// FIXME did I already mention it was ugly?
61// ----------------------------------------------------------------------------
62
63class WXDLLEXPORT wxBitmapDataObject2 : public wxBitmapDataObjectBase
64{
65public:
66    // ctors
67    wxBitmapDataObject2(const wxBitmap& bitmap = wxNullBitmap)
68        : wxBitmapDataObjectBase(bitmap)
69        {
70        }
71
72    // implement base class pure virtuals
73    virtual size_t GetDataSize() const;
74    virtual bool GetDataHere(void *buf) const;
75    virtual bool SetData(size_t len, const void *buf);
76
77    virtual size_t GetDataSize(const wxDataFormat& WXUNUSED(format)) const
78        { return GetDataSize(); }
79    virtual bool GetDataHere(const wxDataFormat& WXUNUSED(format),
80                             void *buf) const
81        { return GetDataHere(buf); }
82    virtual bool SetData(const wxDataFormat& WXUNUSED(format),
83                         size_t len, const void *buf)
84        { return SetData(len, buf); }
85
86private:
87    DECLARE_NO_COPY_CLASS(wxBitmapDataObject2)
88};
89
90// ----------------------------------------------------------------------------
91// wxFileDataObject - data object for CF_HDROP
92// ----------------------------------------------------------------------------
93
94class WXDLLEXPORT wxFileDataObject : public wxFileDataObjectBase
95{
96public:
97    wxFileDataObject() { }
98
99    // implement base class pure virtuals
100    virtual bool SetData(size_t len, const void *buf);
101    virtual size_t GetDataSize() const;
102    virtual bool GetDataHere(void *pData) const;
103    virtual void AddFile(const wxString& file);
104
105    virtual size_t GetDataSize(const wxDataFormat& WXUNUSED(format)) const
106        { return GetDataSize(); }
107    virtual bool GetDataHere(const wxDataFormat& WXUNUSED(format),
108                             void *buf) const
109        { return GetDataHere(buf); }
110    virtual bool SetData(const wxDataFormat& WXUNUSED(format),
111                         size_t len, const void *buf)
112        { return SetData(len, buf); }
113
114private:
115    DECLARE_NO_COPY_CLASS(wxFileDataObject)
116};
117
118// ----------------------------------------------------------------------------
119// wxURLDataObject: data object for URLs
120// ----------------------------------------------------------------------------
121
122class WXDLLEXPORT wxURLDataObject : public wxDataObjectComposite
123{
124public:
125    // initialize with URL in ctor or use SetURL later
126    wxURLDataObject(const wxString& url = wxEmptyString);
127
128    // return the URL as string
129    wxString GetURL() const;
130
131    // Set a string as the URL in the data object
132    void SetURL(const wxString& url);
133
134    // override to set m_textFormat
135    virtual bool SetData(const wxDataFormat& format,
136                         size_t len,
137                         const void *buf);
138
139private:
140    // last data object we got data in
141    wxDataObjectSimple *m_dataObjectLast;
142
143    DECLARE_NO_COPY_CLASS(wxURLDataObject)
144};
145
146#endif // _WX_MSW_OLE_DATAOBJ2_H
147