git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2710 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			142 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			142 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
///////////////////////////////////////////////////////////////////////////////
 | 
						|
// Name:        dataobj.h
 | 
						|
// Purpose:     common data object classes
 | 
						|
// Author:      Robert Roebling, Vadim Zeitlin
 | 
						|
// Modified by:
 | 
						|
// Created:     26.05.99
 | 
						|
// RCS-ID:      $Id$
 | 
						|
// Copyright:   (c) wxWindows Team
 | 
						|
// Licence:     wxWindows license
 | 
						|
///////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
#ifndef _WX_DATAOBJ_H_BASE_
 | 
						|
#define _WX_DATAOBJ_H_BASE_
 | 
						|
 | 
						|
#if defined(__WXMSW__)
 | 
						|
// ----------------------------------------------------------------------------
 | 
						|
// wxDataFormat identifies the single format of data
 | 
						|
// ----------------------------------------------------------------------------
 | 
						|
 | 
						|
class WXDLLEXPORT wxDataFormat
 | 
						|
{
 | 
						|
public:
 | 
						|
    // the clipboard formats under Win32 are UINTs
 | 
						|
    typedef unsigned int NativeFormat;
 | 
						|
 | 
						|
    wxDataFormat(NativeFormat format = wxDF_INVALID) { m_format = format; }
 | 
						|
    wxDataFormat& operator=(NativeFormat format)
 | 
						|
        { m_format = format; return *this; }
 | 
						|
 | 
						|
    // defautl copy ctor/assignment operators ok
 | 
						|
 | 
						|
    // comparison (must have both versions)
 | 
						|
    bool operator==(wxDataFormatId format) const
 | 
						|
        { return m_format == (NativeFormat)format; }
 | 
						|
    bool operator!=(wxDataFormatId format) const
 | 
						|
        { return m_format != (NativeFormat)format; }
 | 
						|
    bool operator==(const wxDataFormat& format) const
 | 
						|
        { return m_format == format.m_format; }
 | 
						|
    bool operator!=(const wxDataFormat& format) const
 | 
						|
        { return m_format != format.m_format; }
 | 
						|
 | 
						|
    // explicit and implicit conversions to NativeFormat which is one of
 | 
						|
    // standard data types (implicit conversion is useful for preserving the
 | 
						|
    // compatibility with old code)
 | 
						|
    NativeFormat GetFormatId() const { return m_format; }
 | 
						|
    operator NativeFormat() const { return m_format; }
 | 
						|
 | 
						|
    // this only works with standard ids
 | 
						|
    void SetId(wxDataFormatId format) { m_format = format; }
 | 
						|
 | 
						|
    // string ids are used for custom types - this SetId() must be used for
 | 
						|
    // application-specific formats
 | 
						|
    wxString GetId() const;
 | 
						|
    void SetId(const wxChar *format);
 | 
						|
 | 
						|
private:
 | 
						|
    // returns TRUE if the format is one of those defined in wxDataFormatId
 | 
						|
    bool IsStandard() const { return m_format > 0 && m_format < wxDF_MAX; }
 | 
						|
 | 
						|
    NativeFormat m_format;
 | 
						|
};
 | 
						|
 | 
						|
    #include "wx/msw/ole/dataobj.h"
 | 
						|
#elif defined(__WXMOTIF__)
 | 
						|
    #include "wx/motif/dataobj.h"
 | 
						|
#elif defined(__WXGTK__)
 | 
						|
    #include "wx/gtk/dataobj.h"
 | 
						|
#elif defined(__WXQT__)
 | 
						|
    #include "wx/qt/dnd.h"
 | 
						|
#elif defined(__WXMAC__)
 | 
						|
    #include "wx/mac/dnd.h"
 | 
						|
#elif defined(__WXSTUBS__)
 | 
						|
    #include "wx/stubs/dnd.h"
 | 
						|
#endif
 | 
						|
 | 
						|
// ---------------------------------------------------------------------------
 | 
						|
// wxPrivateDataObject is a specialization of wxDataObject for app specific
 | 
						|
// data (of some given kind, derive directly from wxDataObject if you wish to
 | 
						|
// efficiently support multiple formats)
 | 
						|
// ---------------------------------------------------------------------------
 | 
						|
 | 
						|
class WXDLLEXPORT wxPrivateDataObject : public wxDataObject
 | 
						|
{
 | 
						|
#ifdef __WXGTK__
 | 
						|
    DECLARE_DYNAMIC_CLASS( wxPrivateDataObject )
 | 
						|
#endif
 | 
						|
 | 
						|
public:
 | 
						|
    wxPrivateDataObject();
 | 
						|
    virtual ~wxPrivateDataObject() { Free(); }
 | 
						|
 | 
						|
    // get the format object - it is used to decide whether we support the
 | 
						|
    // given output format or not
 | 
						|
    wxDataFormat& GetFormat() { return m_format; }
 | 
						|
 | 
						|
    // set data. will make copy of the data
 | 
						|
    void SetData( const void *data, size_t size );
 | 
						|
 | 
						|
    // returns pointer to data
 | 
						|
    void *GetData() const { return m_data; }
 | 
						|
 | 
						|
    // get the size of the data
 | 
						|
    virtual size_t GetSize() const;
 | 
						|
 | 
						|
    // copy data to the given buffer
 | 
						|
    virtual void WriteData( void *dest ) const;
 | 
						|
 | 
						|
    // these functions are provided for wxGTK compatibility, their usage is
 | 
						|
    // deprecated - use GetFormat().SetId() instead
 | 
						|
    void SetId( const wxString& id ) { m_format.SetId(id); }
 | 
						|
    wxString GetId() const { return m_format.GetId(); }
 | 
						|
 | 
						|
    // implement the base class pure virtuals
 | 
						|
    virtual wxDataFormat GetPreferredFormat() const
 | 
						|
        { return m_format; }
 | 
						|
    virtual bool IsSupportedFormat(wxDataFormat format) const
 | 
						|
        { return m_format == format; }
 | 
						|
    virtual size_t GetDataSize() const
 | 
						|
        { return m_size; }
 | 
						|
    virtual void GetDataHere(void *dest) const
 | 
						|
        { WriteData(dest); }
 | 
						|
 | 
						|
    // the function which really copies the data - called by WriteData() above
 | 
						|
    // and uses GetSize() to get the size of the data
 | 
						|
    void WriteData( const void *data, void *dest ) const;
 | 
						|
 | 
						|
private:
 | 
						|
    // free the data
 | 
						|
    inline void Free();
 | 
						|
 | 
						|
    // the data
 | 
						|
    size_t     m_size;
 | 
						|
    void      *m_data;
 | 
						|
 | 
						|
    // the data format
 | 
						|
    wxDataFormat m_format;
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
#endif
 | 
						|
    // _WX_DATAOBJ_H_BASE_
 |