foobar2000 SDK  2015-01-14
Public Member Functions | Data Fields | Protected Types | Protected Member Functions | Static Protected Member Functions | Private Types | Private Member Functions | Private Attributes
IDataObjectUtils::CDataObjectBase

#include <IDataObjectUtils.h>

+ Inheritance diagram for IDataObjectUtils::CDataObjectBase:

Public Member Functions

 COM_QI_SIMPLE (IDataObject) HRESULT STDMETHODCALLTYPE GetData(FORMATETC *formatetc
 
HRESULT STDMETHODCALLTYPE DAdvise (FORMATETC *pFormatetc, DWORD advf, IAdviseSink *pAdvSink, DWORD *pdwConnection)
 
HRESULT STDMETHODCALLTYPE DUnadvise (DWORD dwConnection)
 
HRESULT STDMETHODCALLTYPE EnumDAdvise (IEnumSTATDATA **ppenumAdvise)
 
HRESULT STDMETHODCALLTYPE EnumFormatEtc (DWORD dwDirection, IEnumFORMATETC **ppenumFormatetc)
 
HRESULT STDMETHODCALLTYPE GetCanonicalFormatEtc (FORMATETC *in, FORMATETC *out)
 
HRESULT STDMETHODCALLTYPE GetDataHere (FORMATETC *formatetc, STGMEDIUM *medium)
 
HRESULT STDMETHODCALLTYPE QueryGetData (FORMATETC *formatetc)
 
HRESULT STDMETHODCALLTYPE SetData (FORMATETC *pFormatetc, STGMEDIUM *pmedium, BOOL fRelease)
 

Data Fields

STGMEDIUM * medium
 

Protected Types

typedef pfc::list_base_t< FORMATETC > TFormatList
 

Protected Member Functions

HRESULT CreateIEnumFORMATETC (IEnumFORMATETC **outptr) const throw ()
 
virtual void EnumFormats (TFormatList &out) const
 
virtual HRESULT RenderData (UINT format, DWORD aspect, LONG dataIndex, stream_writer_formatter<> &out) const
 
virtual HRESULT RenderDataTest (UINT format, DWORD aspect, LONG dataIndex) const
 

Static Protected Member Functions

static void AddFormat (TFormatList &out, UINT code)
 

Private Types

typedef pfc::map_t< FORMATETC, pfc::array_t< t_uint8 >, comparator_FORMATETCt_entries
 

Private Member Functions

HRESULT GetData_internal (FORMATETC *formatetc, STGMEDIUM *medium, bool bHere)
 

Private Attributes

t_entries m_entries
 

Detailed Description

Definition at line 52 of file IDataObjectUtils.h.

Member Typedef Documentation

Definition at line 178 of file IDataObjectUtils.h.

Definition at line 134 of file IDataObjectUtils.h.

Member Function Documentation

static void IDataObjectUtils::CDataObjectBase::AddFormat ( TFormatList out,
UINT  code 
)
inlinestaticprotected

Definition at line 136 of file IDataObjectUtils.h.

136  {
137  FORMATETC fmt = {};
138  fmt.dwAspect = DVASPECT_CONTENT;
139  fmt.lindex = -1;
140  fmt.cfFormat = code;
141  for(t_size medWalk = 0; medWalk < 32; ++medWalk) {
142  const DWORD med = 1 << medWalk;
143  if ((DataBlockToSTGMEDIUM_SupportedTymeds & med) != 0) {
144  fmt.tymed = med;
145  out.add_item(fmt);
146  }
147  }
148  }
static const DWORD DataBlockToSTGMEDIUM_SupportedTymeds
size_t t_size
Definition: int_types.h:48
IDataObjectUtils::CDataObjectBase::COM_QI_SIMPLE ( IDataObject  )
HRESULT IDataObjectUtils::CDataObjectBase::CreateIEnumFORMATETC ( IEnumFORMATETC **  outptr) const
throw (
)
inlineprotected

Definition at line 159 of file IDataObjectUtils.h.

159  {
160  try {
162  EnumFormats(out);
163  return SHCreateStdEnumFmtEtc((UINT)out.get_count(), out.get_ptr(), outptr);
164  } FB2K_COM_CATCH;
165  }
virtual void EnumFormats(TFormatList &out) const
HRESULT STDMETHODCALLTYPE IDataObjectUtils::CDataObjectBase::DAdvise ( FORMATETC *  pFormatetc,
DWORD  advf,
IAdviseSink *  pAdvSink,
DWORD *  pdwConnection 
)
inline

Definition at line 114 of file IDataObjectUtils.h.

114 {return OLE_E_ADVISENOTSUPPORTED;}
HRESULT STDMETHODCALLTYPE IDataObjectUtils::CDataObjectBase::DUnadvise ( DWORD  dwConnection)
inline

Definition at line 115 of file IDataObjectUtils.h.

115 {return OLE_E_ADVISENOTSUPPORTED;}
HRESULT STDMETHODCALLTYPE IDataObjectUtils::CDataObjectBase::EnumDAdvise ( IEnumSTATDATA **  ppenumAdvise)
inline

Definition at line 116 of file IDataObjectUtils.h.

116 {return OLE_E_ADVISENOTSUPPORTED;}
HRESULT STDMETHODCALLTYPE IDataObjectUtils::CDataObjectBase::EnumFormatEtc ( DWORD  dwDirection,
IEnumFORMATETC **  ppenumFormatetc 
)
inline

Definition at line 83 of file IDataObjectUtils.h.

83  {
84  if (dwDirection == DATADIR_GET) {
85  if (ppenumFormatetc == NULL) return E_INVALIDARG;
86  return CreateIEnumFORMATETC(ppenumFormatetc);
87  } else if (dwDirection == DATADIR_SET) {
88  return E_NOTIMPL;
89  } else {
90  return E_INVALIDARG;
91  }
92  }
HRESULT CreateIEnumFORMATETC(IEnumFORMATETC **outptr) const
virtual void IDataObjectUtils::CDataObjectBase::EnumFormats ( TFormatList out) const
inlineprotectedvirtual

Definition at line 150 of file IDataObjectUtils.h.

150  {
151  pfc::avltree_t<UINT> formats;
152  for(t_entries::const_iterator walk = m_entries.first(); walk.is_valid(); ++walk) {
153  formats.add_item( walk->m_key.cfFormat );
154  }
155  for(pfc::const_iterator<UINT> walk = formats.first(); walk.is_valid(); ++walk) {
156  AddFormat(out, *walk);
157  }
158  }
bool is_valid() const
Definition: iterators.h:24
static void AddFormat(TFormatList &out, UINT code)
const_iterator first() const
Definition: avltree.h:485
t_storage & add_item(t_param const &p_item)
Definition: avltree.h:380
iterator first()
Definition: map.h:229
HRESULT STDMETHODCALLTYPE IDataObjectUtils::CDataObjectBase::GetCanonicalFormatEtc ( FORMATETC *  in,
FORMATETC *  out 
)
inline

Definition at line 75 of file IDataObjectUtils.h.

75  {
76  //check this again
77  if (in == NULL || out == NULL)
78  return E_INVALIDARG;
79  *out = *in;
80  return DATA_S_SAMEFORMATETC;
81  }
HRESULT IDataObjectUtils::CDataObjectBase::GetData_internal ( FORMATETC *  formatetc,
STGMEDIUM *  medium,
bool  bHere 
)
inlineprivate

Definition at line 167 of file IDataObjectUtils.h.

167  {
168  if (formatetc == NULL || medium == NULL) return E_INVALIDARG;
169 
170  try {
172  HRESULT hr = RenderData(formatetc->cfFormat,formatetc->dwAspect,formatetc->lindex,out);
173  if (FAILED(hr)) return hr;
174  return DataBlockToSTGMEDIUM(out.m_buffer.get_ptr(),out.m_buffer.get_size(),medium,formatetc->tymed,bHere);
175  } FB2K_COM_CATCH;
176  }
const t_item * get_ptr() const
Definition: array.h:213
HRESULT DataBlockToSTGMEDIUM(const void *blockPtr, t_size blockSize, STGMEDIUM *medium, DWORD tymed, bool bHere)
virtual HRESULT RenderData(UINT format, DWORD aspect, LONG dataIndex, stream_writer_formatter<> &out) const
t_size get_size() const
Definition: array.h:130
HRESULT STDMETHODCALLTYPE IDataObjectUtils::CDataObjectBase::GetDataHere ( FORMATETC *  formatetc,
STGMEDIUM *  medium 
)
inline

Definition at line 60 of file IDataObjectUtils.h.

60  {
61  return GetData_internal(formatetc,medium,true);
62  }
HRESULT GetData_internal(FORMATETC *formatetc, STGMEDIUM *medium, bool bHere)
HRESULT STDMETHODCALLTYPE IDataObjectUtils::CDataObjectBase::QueryGetData ( FORMATETC *  formatetc)
inline

Definition at line 64 of file IDataObjectUtils.h.

64  {
65  if (formatetc == NULL) return E_INVALIDARG;
66 
67  if ((DataBlockToSTGMEDIUM_SupportedTymeds & formatetc->tymed) == 0) return DV_E_TYMED;
68 
69  try {
70  return RenderDataTest(formatetc->cfFormat,formatetc->dwAspect,formatetc->lindex);
71  } FB2K_COM_CATCH;
72  }
static const DWORD DataBlockToSTGMEDIUM_SupportedTymeds
virtual HRESULT RenderDataTest(UINT format, DWORD aspect, LONG dataIndex) const
virtual HRESULT IDataObjectUtils::CDataObjectBase::RenderData ( UINT  format,
DWORD  aspect,
LONG  dataIndex,
stream_writer_formatter<> &  out 
) const
inlineprotectedvirtual

Definition at line 118 of file IDataObjectUtils.h.

118  {
119  FORMATETC fmt = {};
120  fmt.cfFormat = format; fmt.dwAspect = aspect; fmt.lindex = dataIndex;
121  const pfc::array_t<t_uint8> * entry = m_entries.query_ptr(fmt);
122  if (entry != NULL) {
123  out.write_raw(entry->get_ptr(), entry->get_size());
124  return S_OK;
125  }
126  return DV_E_FORMATETC;
127  }
const t_item * get_ptr() const
Definition: array.h:213
const t_storage_value * query_ptr(const _t_key &p_key) const
Definition: map.h:64
void write_raw(const void *p_buffer, t_size p_bytes)
t_size get_size() const
Definition: array.h:130
virtual HRESULT IDataObjectUtils::CDataObjectBase::RenderDataTest ( UINT  format,
DWORD  aspect,
LONG  dataIndex 
) const
inlineprotectedvirtual

Definition at line 128 of file IDataObjectUtils.h.

128  {
129  FORMATETC fmt = {};
130  fmt.cfFormat = format; fmt.dwAspect = aspect; fmt.lindex = dataIndex;
131  if (m_entries.have_item(fmt)) return S_OK;
132  return DV_E_FORMATETC;
133  }
bool have_item(const _t_key &p_key) const
Definition: map.h:39
HRESULT STDMETHODCALLTYPE IDataObjectUtils::CDataObjectBase::SetData ( FORMATETC *  pFormatetc,
STGMEDIUM *  pmedium,
BOOL  fRelease 
)
inline

Definition at line 94 of file IDataObjectUtils.h.

94  {
95  try {
96  ReleaseStgMediumScope relScope(fRelease ? pmedium : NULL);
97  if (pFormatetc == NULL || pmedium == NULL) return E_INVALIDARG;
98 
99  /*TCHAR buf[256];
100  if (GetClipboardFormatName(pFormatetc->cfFormat,buf,PFC_TABSIZE(buf)) > 0) {
101  buf[PFC_TABSIZE(buf)-1] = 0;
102  OutputDebugString(TEXT("SetData: ")); OutputDebugString(buf); OutputDebugString(TEXT("\n"));
103  } else {
104  OutputDebugString(TEXT("SetData: unknown clipboard format.\n"));
105  }*/
106 
108  HRESULT state = STGMEDIUMToDataBlock(*pmedium,temp);
109  if (FAILED(state)) return state;
110  m_entries.set(*pFormatetc,temp);
111  return S_OK;
112  } FB2K_COM_CATCH;
113  }
HRESULT STGMEDIUMToDataBlock(const STGMEDIUM &med, pfc::array_t< t_uint8 > &out)
void set(const _t_key &p_key, const _t_value &p_value)
Definition: map.h:22

Field Documentation

t_entries IDataObjectUtils::CDataObjectBase::m_entries
private

Definition at line 179 of file IDataObjectUtils.h.

STGMEDIUM* IDataObjectUtils::CDataObjectBase::medium
Initial value:
{
return GetData_internal(formatetc,medium,false)

Definition at line 56 of file IDataObjectUtils.h.


The documentation for this class was generated from the following file: