Initial release
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
// This file is part of VSTGUI. It is subject to the license terms
|
||||
// in the LICENSE file found in the top-level directory of this
|
||||
// distribution and at http://github.com/steinbergmedia/vstgui/LICENSE
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "vstguibase.h"
|
||||
|
||||
namespace VSTGUI {
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
/// @brief interface for drag&drop and clipboard data
|
||||
//-----------------------------------------------------------------------------
|
||||
class IDataPackage : public AtomicReferenceCounted
|
||||
{
|
||||
public:
|
||||
enum Type {
|
||||
/** File type (UTF-8 C-String) */
|
||||
kFilePath = 0,
|
||||
/** Text type (UTF-8 C-String) */
|
||||
kText,
|
||||
/** Binary type */
|
||||
kBinary,
|
||||
|
||||
kError = -1
|
||||
};
|
||||
|
||||
virtual uint32_t getCount () const = 0;
|
||||
virtual uint32_t getDataSize (uint32_t index) const = 0;
|
||||
virtual Type getDataType (uint32_t index) const = 0;
|
||||
virtual uint32_t getData (uint32_t index, const void*& buffer, Type& type) const = 0;
|
||||
|
||||
protected:
|
||||
IDataPackage () {}
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
/** IDataPackage iterator
|
||||
*
|
||||
* @ingroup new_in_4_12
|
||||
*/
|
||||
struct DataPackageIterator
|
||||
{
|
||||
struct Item
|
||||
{
|
||||
IDataPackage::Type type {IDataPackage::Type::kError};
|
||||
uint32_t dataSize {0};
|
||||
const void* data {nullptr};
|
||||
};
|
||||
|
||||
DataPackageIterator (IDataPackage* pkg, uint32_t index = 0u) : pkg (pkg), index (index) {}
|
||||
|
||||
DataPackageIterator& operator++ ()
|
||||
{
|
||||
item = {};
|
||||
index++;
|
||||
return *this;
|
||||
}
|
||||
|
||||
const Item& operator->() const
|
||||
{
|
||||
gatherItem ();
|
||||
return item;
|
||||
}
|
||||
|
||||
const Item& operator* () const
|
||||
{
|
||||
gatherItem ();
|
||||
return item;
|
||||
}
|
||||
|
||||
bool operator!= (const DataPackageIterator& other) const
|
||||
{
|
||||
return other.pkg != pkg || other.index != index;
|
||||
}
|
||||
|
||||
uint32_t getIndex () const { return index; }
|
||||
|
||||
private:
|
||||
void gatherItem () const
|
||||
{
|
||||
if (item.data == nullptr && pkg && index < pkg->getCount ())
|
||||
item.dataSize = pkg->getData (index, item.data, item.type);
|
||||
}
|
||||
IDataPackage* pkg {nullptr};
|
||||
uint32_t index {0u};
|
||||
mutable Item item;
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
inline DataPackageIterator begin (IDataPackage* pkg) { return DataPackageIterator (pkg); }
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
inline DataPackageIterator end (IDataPackage* pkg)
|
||||
{
|
||||
return DataPackageIterator (pkg, pkg->getCount ());
|
||||
}
|
||||
|
||||
} // VSTGUI
|
||||
Reference in New Issue
Block a user