added dobjcmn.cpp
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@4087 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -102,6 +102,7 @@ db.cpp C
|
|||||||
dbtable.cpp C
|
dbtable.cpp C
|
||||||
dcbase.cpp C
|
dcbase.cpp C
|
||||||
dlgcmn.cpp C
|
dlgcmn.cpp C
|
||||||
|
dobjcmn.cpp C
|
||||||
docmdi.cpp C
|
docmdi.cpp C
|
||||||
docview.cpp C
|
docview.cpp C
|
||||||
dynarray.cpp C B
|
dynarray.cpp C B
|
||||||
@@ -613,7 +614,9 @@ colour.h K
|
|||||||
combobox.h K
|
combobox.h K
|
||||||
control.h K
|
control.h K
|
||||||
cursor.h K
|
cursor.h K
|
||||||
|
dataform.h K
|
||||||
dataobj.h K
|
dataobj.h K
|
||||||
|
dataobj2.h K
|
||||||
dc.h K
|
dc.h K
|
||||||
dcclient.h K
|
dcclient.h K
|
||||||
dcmemory.h K
|
dcmemory.h K
|
||||||
@@ -672,7 +675,9 @@ colour.h F
|
|||||||
combobox.h F
|
combobox.h F
|
||||||
control.h F
|
control.h F
|
||||||
cursor.h F
|
cursor.h F
|
||||||
|
dataform.h F
|
||||||
dataobj.h F
|
dataobj.h F
|
||||||
|
dataobj2.h F
|
||||||
dc.h F
|
dc.h F
|
||||||
dcclient.h F
|
dcclient.h F
|
||||||
dcmemory.h F
|
dcmemory.h F
|
||||||
|
72
include/wx/gtk/dataobj2.h
Normal file
72
include/wx/gtk/dataobj2.h
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: gtk/dataobj2.h
|
||||||
|
// Purpose: declaration of standard wxDataObjectSimple-derived classes
|
||||||
|
// Author: Robert Roebling
|
||||||
|
// Created: 19.10.99 (extracted from gtk/dataobj.h)
|
||||||
|
// RCS-ID: $Id$
|
||||||
|
// Copyright: (c) 1998, 1999 Vadim Zeitlin, Robert Roebling
|
||||||
|
// Licence: wxWindows license
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef _WX_GTK_DATAOBJ2_H_
|
||||||
|
#define _WX_GTK_DATAOBJ2_H_
|
||||||
|
|
||||||
|
#ifdef __GNUG__
|
||||||
|
#pragma interface "dataobj.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// wxBitmapDataObject is a specialization of wxDataObject for bitmaps
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
class wxBitmapDataObject : public wxBitmapDataObjectBase
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// ctors
|
||||||
|
wxBitmapDataObject();
|
||||||
|
wxBitmapDataObject(const wxBitmap& bitmap);
|
||||||
|
|
||||||
|
// destr
|
||||||
|
~wxBitmapDataObject();
|
||||||
|
|
||||||
|
// override base class virtual to update PNG data too
|
||||||
|
virtual void SetBitmap(const wxBitmap& bitmap);
|
||||||
|
|
||||||
|
void *GetPngData() const { return m_pngData; }
|
||||||
|
|
||||||
|
// implement base class pure virtuals
|
||||||
|
// ----------------------------------
|
||||||
|
|
||||||
|
virtual size_t GetDataSize() const { return m_pngSize; }
|
||||||
|
virtual bool GetDataHere(void *buf) const;
|
||||||
|
virtual bool SetData(size_t len, const void *buf);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void Init() { m_pngData = (void *)NULL; m_pngSize = 0; }
|
||||||
|
void Clear() { free(m_pngData); }
|
||||||
|
void ClearAll() { Clear(); Init(); }
|
||||||
|
|
||||||
|
private:
|
||||||
|
size_t m_pngSize;
|
||||||
|
void *m_pngData;
|
||||||
|
|
||||||
|
void DoConvertToPng();
|
||||||
|
};
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// wxFileDataObject is a specialization of wxDataObject for file names
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
class wxFileDataObject : public wxFileDataObjectBase
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// implement base class pure virtuals
|
||||||
|
// ----------------------------------
|
||||||
|
|
||||||
|
virtual size_t GetDataSize() const;
|
||||||
|
virtual bool GetDataHere(void *buf) const;
|
||||||
|
virtual bool SetData(size_t len, const void *buf);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // _WX_GTK_DATAOBJ2_H_
|
||||||
|
|
72
include/wx/gtk1/dataobj2.h
Normal file
72
include/wx/gtk1/dataobj2.h
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: gtk/dataobj2.h
|
||||||
|
// Purpose: declaration of standard wxDataObjectSimple-derived classes
|
||||||
|
// Author: Robert Roebling
|
||||||
|
// Created: 19.10.99 (extracted from gtk/dataobj.h)
|
||||||
|
// RCS-ID: $Id$
|
||||||
|
// Copyright: (c) 1998, 1999 Vadim Zeitlin, Robert Roebling
|
||||||
|
// Licence: wxWindows license
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef _WX_GTK_DATAOBJ2_H_
|
||||||
|
#define _WX_GTK_DATAOBJ2_H_
|
||||||
|
|
||||||
|
#ifdef __GNUG__
|
||||||
|
#pragma interface "dataobj.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// wxBitmapDataObject is a specialization of wxDataObject for bitmaps
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
class wxBitmapDataObject : public wxBitmapDataObjectBase
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// ctors
|
||||||
|
wxBitmapDataObject();
|
||||||
|
wxBitmapDataObject(const wxBitmap& bitmap);
|
||||||
|
|
||||||
|
// destr
|
||||||
|
~wxBitmapDataObject();
|
||||||
|
|
||||||
|
// override base class virtual to update PNG data too
|
||||||
|
virtual void SetBitmap(const wxBitmap& bitmap);
|
||||||
|
|
||||||
|
void *GetPngData() const { return m_pngData; }
|
||||||
|
|
||||||
|
// implement base class pure virtuals
|
||||||
|
// ----------------------------------
|
||||||
|
|
||||||
|
virtual size_t GetDataSize() const { return m_pngSize; }
|
||||||
|
virtual bool GetDataHere(void *buf) const;
|
||||||
|
virtual bool SetData(size_t len, const void *buf);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void Init() { m_pngData = (void *)NULL; m_pngSize = 0; }
|
||||||
|
void Clear() { free(m_pngData); }
|
||||||
|
void ClearAll() { Clear(); Init(); }
|
||||||
|
|
||||||
|
private:
|
||||||
|
size_t m_pngSize;
|
||||||
|
void *m_pngData;
|
||||||
|
|
||||||
|
void DoConvertToPng();
|
||||||
|
};
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// wxFileDataObject is a specialization of wxDataObject for file names
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
class wxFileDataObject : public wxFileDataObjectBase
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// implement base class pure virtuals
|
||||||
|
// ----------------------------------
|
||||||
|
|
||||||
|
virtual size_t GetDataSize() const;
|
||||||
|
virtual bool GetDataHere(void *buf) const;
|
||||||
|
virtual bool SetData(size_t len, const void *buf);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // _WX_GTK_DATAOBJ2_H_
|
||||||
|
|
272
src/common/dobjcmn.cpp
Normal file
272
src/common/dobjcmn.cpp
Normal file
@@ -0,0 +1,272 @@
|
|||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: common/dobjcmn.cpp
|
||||||
|
// Purpose: implementation of data object methods common to all platforms
|
||||||
|
// Author: Vadim Zeitlin, Robert Roebling
|
||||||
|
// Modified by:
|
||||||
|
// Created: 19.10.99
|
||||||
|
// RCS-ID: $Id$
|
||||||
|
// Copyright: (c) wxWindows Team
|
||||||
|
// Licence: wxWindows license
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// declarations
|
||||||
|
// ============================================================================
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// headers
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#ifdef __GNUG__
|
||||||
|
#pragma implementation "dataobjbase.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "wx/wxprec.h"
|
||||||
|
|
||||||
|
#ifdef __BORLANDC__
|
||||||
|
#pragma hdrstop
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WX_PRECOMP
|
||||||
|
#include "wx/app.h"
|
||||||
|
#include "wx/debug.h"
|
||||||
|
#endif // WX_PRECOMP
|
||||||
|
|
||||||
|
#include "wx/dataobj.h"
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// lists
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#include "wx/listimpl.cpp"
|
||||||
|
|
||||||
|
WX_DEFINE_LIST(wxSimpleDataObjectList);
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// implementation
|
||||||
|
// ============================================================================
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// wxDataObjectBase
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
wxDataObjectBase::~wxDataObjectBase()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// wxDataObjectComposite
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
wxDataObjectSimple *
|
||||||
|
wxDataObjectComposite::GetObject(const wxDataFormat& format) const
|
||||||
|
{
|
||||||
|
wxSimpleDataObjectList::Node *node = m_dataObjects.GetFirst();
|
||||||
|
while ( node )
|
||||||
|
{
|
||||||
|
wxDataObjectSimple *dataObj = node->GetData();
|
||||||
|
|
||||||
|
if ( dataObj->GetFormat() == format )
|
||||||
|
{
|
||||||
|
return dataObj;
|
||||||
|
}
|
||||||
|
|
||||||
|
node = node->GetNext();
|
||||||
|
}
|
||||||
|
|
||||||
|
return (wxDataObjectSimple *)NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxDataObjectComposite::Add(wxDataObjectSimple *dataObject, bool preferred)
|
||||||
|
{
|
||||||
|
if ( preferred )
|
||||||
|
m_preferred = m_dataObjects.GetCount();
|
||||||
|
|
||||||
|
m_dataObjects.Append( dataObject );
|
||||||
|
}
|
||||||
|
|
||||||
|
wxDataFormat
|
||||||
|
wxDataObjectComposite::GetPreferredFormat(Direction WXUNUSED(dir)) const
|
||||||
|
{
|
||||||
|
wxSimpleDataObjectList::Node *node = m_dataObjects.Item( m_preferred );
|
||||||
|
|
||||||
|
wxCHECK_MSG( node, wxDF_INVALID, wxT("no preferred format") );
|
||||||
|
|
||||||
|
wxDataObjectSimple* dataObj = node->GetData();
|
||||||
|
|
||||||
|
return dataObj->GetFormat();
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t wxDataObjectComposite::GetFormatCount(Direction WXUNUSED(dir)) const
|
||||||
|
{
|
||||||
|
// TODO what about the Get/Set only formats?
|
||||||
|
return m_dataObjects.GetCount();
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxDataObjectComposite::GetAllFormats(wxDataFormat *formats,
|
||||||
|
Direction WXUNUSED(dir)) const
|
||||||
|
{
|
||||||
|
size_t n = 0;
|
||||||
|
wxSimpleDataObjectList::Node *node;
|
||||||
|
for ( node = m_dataObjects.GetFirst(); node; node = node->GetNext() )
|
||||||
|
{
|
||||||
|
// TODO if ( !outputOnlyToo ) && this one counts ...
|
||||||
|
formats[n++] = node->GetData()->GetFormat();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t wxDataObjectComposite::GetDataSize(const wxDataFormat& format) const
|
||||||
|
{
|
||||||
|
wxDataObjectSimple *dataObj = GetObject(format);
|
||||||
|
|
||||||
|
wxCHECK_MSG( dataObj, 0,
|
||||||
|
wxT("unsupported format in wxDataObjectComposite"));
|
||||||
|
|
||||||
|
return dataObj->GetDataSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxDataObjectComposite::GetDataHere(const wxDataFormat& format,
|
||||||
|
void *buf) const
|
||||||
|
{
|
||||||
|
wxDataObjectSimple *dataObj = GetObject(format);
|
||||||
|
|
||||||
|
wxCHECK_MSG( dataObj, FALSE,
|
||||||
|
wxT("unsupported format in wxDataObjectComposite"));
|
||||||
|
|
||||||
|
return dataObj->GetDataHere(buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxDataObjectComposite::SetData(const wxDataFormat& format,
|
||||||
|
size_t len,
|
||||||
|
const void *buf)
|
||||||
|
{
|
||||||
|
wxDataObjectSimple *dataObj = GetObject(format);
|
||||||
|
|
||||||
|
wxCHECK_MSG( dataObj, FALSE,
|
||||||
|
wxT("unsupported format in wxDataObjectComposite"));
|
||||||
|
|
||||||
|
return dataObj->SetData(len, buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// wxTextDataObject
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
size_t wxTextDataObject::GetDataSize() const
|
||||||
|
{
|
||||||
|
return GetTextLength();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxTextDataObject::GetDataHere(void *buf) const
|
||||||
|
{
|
||||||
|
strcpy((char *)buf, GetText().mb_str());
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxTextDataObject::SetData(size_t WXUNUSED(len), const void *buf)
|
||||||
|
{
|
||||||
|
SetText(wxString((const char *)buf));
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// wxFileDataObjectBase
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
wxString wxFileDataObjectBase::GetFilenames() const
|
||||||
|
{
|
||||||
|
wxString str;
|
||||||
|
size_t count = m_filenames.GetCount();
|
||||||
|
for ( size_t n = 0; n < count; n++ )
|
||||||
|
{
|
||||||
|
str << m_filenames[n] << wxT('\0');
|
||||||
|
}
|
||||||
|
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxFileDataObjectBase::SetFilenames(const wxChar* filenames)
|
||||||
|
{
|
||||||
|
m_filenames.Empty();
|
||||||
|
|
||||||
|
wxString current;
|
||||||
|
for ( const wxChar *pc = filenames; ; pc++ )
|
||||||
|
{
|
||||||
|
if ( *pc )
|
||||||
|
{
|
||||||
|
current += *pc;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( !current )
|
||||||
|
{
|
||||||
|
// 2 consecutive NULs - this is the end of the string
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_filenames.Add(current);
|
||||||
|
current.Empty();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// wxCustomDataObject
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
wxCustomDataObject::~wxCustomDataObject()
|
||||||
|
{
|
||||||
|
Free();
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxCustomDataObject::TakeData(size_t size, void *data)
|
||||||
|
{
|
||||||
|
Free();
|
||||||
|
|
||||||
|
m_size = size;
|
||||||
|
m_data = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
void *wxCustomDataObject::Alloc(size_t size)
|
||||||
|
{
|
||||||
|
return (void *)new char[size];
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxCustomDataObject::Free()
|
||||||
|
{
|
||||||
|
delete [] m_data;
|
||||||
|
m_size = 0;
|
||||||
|
m_data = (void *)NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t wxCustomDataObject::GetDataSize() const
|
||||||
|
{
|
||||||
|
return GetSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxCustomDataObject::GetDataHere(void *buf) const
|
||||||
|
{
|
||||||
|
void *data = GetData();
|
||||||
|
if ( !data )
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
memcpy(buf, data, GetSize());
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxCustomDataObject::SetData(size_t len, const void *buf)
|
||||||
|
{
|
||||||
|
Free();
|
||||||
|
|
||||||
|
m_data = Alloc(size);
|
||||||
|
if ( !m_data )
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
memcpy(m_data, buf, m_size = len);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
Reference in New Issue
Block a user