]> git.saurik.com Git - wxWidgets.git/commitdiff
added dobjcmn.cpp
authorVadim Zeitlin <vadim@wxwidgets.org>
Thu, 21 Oct 1999 00:22:47 +0000 (00:22 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Thu, 21 Oct 1999 00:22:47 +0000 (00:22 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@4087 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

distrib/msw/tmake/filelist.txt
include/wx/gtk/dataobj2.h [new file with mode: 0644]
include/wx/gtk1/dataobj2.h [new file with mode: 0644]
src/common/dobjcmn.cpp [new file with mode: 0644]

index ce30526b92c93b10b508d921de40249970b0dee6..7de559b05b4733576ae2135b414e5c2cdb6c93d2 100644 (file)
@@ -102,6 +102,7 @@ db.cpp      C
 dbtable.cpp    C
 dcbase.cpp     C
 dlgcmn.cpp     C
+dobjcmn.cpp    C
 docmdi.cpp     C
 docview.cpp    C
 dynarray.cpp   C       B
@@ -613,7 +614,9 @@ colour.h    K
 combobox.h     K
 control.h      K
 cursor.h       K
+dataform.h     K
 dataobj.h      K
+dataobj2.h     K
 dc.h   K
 dcclient.h     K
 dcmemory.h     K
@@ -672,7 +675,9 @@ colour.h    F
 combobox.h     F
 control.h      F
 cursor.h       F
+dataform.h     F
 dataobj.h      F
+dataobj2.h     F
 dc.h   F
 dcclient.h     F
 dcmemory.h     F
diff --git a/include/wx/gtk/dataobj2.h b/include/wx/gtk/dataobj2.h
new file mode 100644 (file)
index 0000000..8f42fa8
--- /dev/null
@@ -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_
+
diff --git a/include/wx/gtk1/dataobj2.h b/include/wx/gtk1/dataobj2.h
new file mode 100644 (file)
index 0000000..8f42fa8
--- /dev/null
@@ -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_
+
diff --git a/src/common/dobjcmn.cpp b/src/common/dobjcmn.cpp
new file mode 100644 (file)
index 0000000..f806dcd
--- /dev/null
@@ -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;
+}
+