2003-08-23 01:53:27 +02:00
/* IDirectMusicCommandTrack Implementation
*
2004-01-20 01:21:40 +01:00
* Copyright ( C ) 2003 - 2004 Rok Mandeljc
2003-08-23 01:53:27 +02:00
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 2 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU Library General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 59 Temple Place - Suite 330 , Boston , MA 02111 - 1307 , USA .
*/
# include "dmstyle_private.h"
WINE_DEFAULT_DEBUG_CHANNEL ( dmstyle ) ;
WINE_DECLARE_DEBUG_CHANNEL ( dmfile ) ;
/*****************************************************************************
* IDirectMusicCommandTrack implementation
*/
/* IDirectMusicCommandTrack IUnknown part: */
2004-01-20 01:21:40 +01:00
HRESULT WINAPI IDirectMusicCommandTrack_IUnknown_QueryInterface ( LPUNKNOWN iface , REFIID riid , LPVOID * ppobj ) {
ICOM_THIS_MULTI ( IDirectMusicCommandTrack , UnknownVtbl , iface ) ;
2004-02-25 02:30:03 +01:00
TRACE ( " (%p, %s, %p) \n " , This , debugstr_dmguid ( riid ) , ppobj ) ;
2003-08-23 01:53:27 +02:00
2004-01-20 01:21:40 +01:00
if ( IsEqualIID ( riid , & IID_IUnknown ) ) {
* ppobj = ( LPUNKNOWN ) & This - > UnknownVtbl ;
IDirectMusicCommandTrack_IUnknown_AddRef ( ( LPUNKNOWN ) & This - > UnknownVtbl ) ;
return S_OK ;
} else if ( IsEqualIID ( riid , & IID_IDirectMusicTrack )
| | IsEqualIID ( riid , & IID_IDirectMusicTrack8 ) ) {
* ppobj = ( LPDIRECTMUSICTRACK8 ) & This - > TrackVtbl ;
IDirectMusicCommandTrack_IDirectMusicTrack_AddRef ( ( LPDIRECTMUSICTRACK8 ) & This - > TrackVtbl ) ;
2003-08-23 01:53:27 +02:00
return S_OK ;
} else if ( IsEqualIID ( riid , & IID_IPersistStream ) ) {
2004-01-20 01:21:40 +01:00
* ppobj = ( LPPERSISTSTREAM ) & This - > PersistStreamVtbl ;
IDirectMusicCommandTrack_IPersistStream_AddRef ( ( LPPERSISTSTREAM ) & This - > PersistStreamVtbl ) ;
2003-08-23 01:53:27 +02:00
return S_OK ;
}
2004-01-20 01:21:40 +01:00
2004-02-25 02:30:03 +01:00
WARN ( " (%p, %s, %p): not found \n " , This , debugstr_dmguid ( riid ) , ppobj ) ;
2003-08-23 01:53:27 +02:00
return E_NOINTERFACE ;
}
2004-01-20 01:21:40 +01:00
ULONG WINAPI IDirectMusicCommandTrack_IUnknown_AddRef ( LPUNKNOWN iface ) {
ICOM_THIS_MULTI ( IDirectMusicCommandTrack , UnknownVtbl , iface ) ;
2005-01-24 12:31:45 +01:00
ULONG ref = InterlockedIncrement ( & This - > ref ) ;
TRACE ( " (%p): AddRef from %ld \n " , This , ref - 1 ) ;
2005-01-24 20:33:23 +01:00
DMSTYLE_LockModule ( ) ;
2005-01-24 12:31:45 +01:00
return ref ;
2003-08-23 01:53:27 +02:00
}
2004-01-20 01:21:40 +01:00
ULONG WINAPI IDirectMusicCommandTrack_IUnknown_Release ( LPUNKNOWN iface ) {
ICOM_THIS_MULTI ( IDirectMusicCommandTrack , UnknownVtbl , iface ) ;
2005-01-24 12:31:45 +01:00
ULONG ref = InterlockedDecrement ( & This - > ref ) ;
TRACE ( " (%p): ReleaseRef to %ld \n " , This , ref ) ;
2003-08-23 01:53:27 +02:00
if ( ref = = 0 ) {
HeapFree ( GetProcessHeap ( ) , 0 , This ) ;
}
2005-01-24 20:33:23 +01:00
DMSTYLE_UnlockModule ( ) ;
2003-08-23 01:53:27 +02:00
return ref ;
}
2005-05-30 12:01:08 +02:00
static const IUnknownVtbl DirectMusicCommandTrack_Unknown_Vtbl = {
2004-01-20 01:21:40 +01:00
IDirectMusicCommandTrack_IUnknown_QueryInterface ,
IDirectMusicCommandTrack_IUnknown_AddRef ,
IDirectMusicCommandTrack_IUnknown_Release
} ;
2003-08-23 01:53:27 +02:00
2004-01-20 01:21:40 +01:00
/* IDirectMusicCommandTrack IDirectMusicTrack8 part: */
HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_QueryInterface ( LPDIRECTMUSICTRACK8 iface , REFIID riid , LPVOID * ppobj ) {
ICOM_THIS_MULTI ( IDirectMusicCommandTrack , TrackVtbl , iface ) ;
return IDirectMusicCommandTrack_IUnknown_QueryInterface ( ( LPUNKNOWN ) & This - > UnknownVtbl , riid , ppobj ) ;
}
2003-08-23 01:53:27 +02:00
2004-01-20 01:21:40 +01:00
ULONG WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_AddRef ( LPDIRECTMUSICTRACK8 iface ) {
ICOM_THIS_MULTI ( IDirectMusicCommandTrack , TrackVtbl , iface ) ;
return IDirectMusicCommandTrack_IUnknown_AddRef ( ( LPUNKNOWN ) & This - > UnknownVtbl ) ;
2003-08-23 01:53:27 +02:00
}
2004-01-20 01:21:40 +01:00
ULONG WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_Release ( LPDIRECTMUSICTRACK8 iface ) {
ICOM_THIS_MULTI ( IDirectMusicCommandTrack , TrackVtbl , iface ) ;
return IDirectMusicCommandTrack_IUnknown_Release ( ( LPUNKNOWN ) & This - > UnknownVtbl ) ;
}
HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_Init ( LPDIRECTMUSICTRACK8 iface , IDirectMusicSegment * pSegment )
2003-08-23 01:53:27 +02:00
{
2004-01-20 01:21:40 +01:00
ICOM_THIS_MULTI ( IDirectMusicCommandTrack , TrackVtbl , iface ) ;
FIXME ( " (%p, %p): stub \n " , This , pSegment ) ;
return S_OK ;
}
2003-08-23 01:53:27 +02:00
2004-01-20 01:21:40 +01:00
HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_InitPlay ( LPDIRECTMUSICTRACK8 iface , IDirectMusicSegmentState * pSegmentState , IDirectMusicPerformance * pPerformance , void * * ppStateData , DWORD dwVirtualTrack8ID , DWORD dwFlags )
{
ICOM_THIS_MULTI ( IDirectMusicCommandTrack , TrackVtbl , iface ) ;
2003-08-23 01:53:27 +02:00
FIXME ( " (%p, %p, %p, %p, %ld, %ld): stub \n " , This , pSegmentState , pPerformance , ppStateData , dwVirtualTrack8ID , dwFlags ) ;
return S_OK ;
}
2004-01-20 01:21:40 +01:00
HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_EndPlay ( LPDIRECTMUSICTRACK8 iface , void * pStateData )
2003-08-23 01:53:27 +02:00
{
2004-01-20 01:21:40 +01:00
ICOM_THIS_MULTI ( IDirectMusicCommandTrack , TrackVtbl , iface ) ;
2003-08-23 01:53:27 +02:00
FIXME ( " (%p, %p): stub \n " , This , pStateData ) ;
return S_OK ;
}
2004-01-20 01:21:40 +01:00
HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_Play ( LPDIRECTMUSICTRACK8 iface , void * pStateData , MUSIC_TIME mtStart , MUSIC_TIME mtEnd , MUSIC_TIME mtOffset , DWORD dwFlags , IDirectMusicPerformance * pPerf , IDirectMusicSegmentState * pSegSt , DWORD dwVirtualID )
2003-08-23 01:53:27 +02:00
{
2004-01-20 01:21:40 +01:00
ICOM_THIS_MULTI ( IDirectMusicCommandTrack , TrackVtbl , iface ) ;
2003-08-23 01:53:27 +02:00
FIXME ( " (%p, %p, %ld, %ld, %ld, %ld, %p, %p, %ld): stub \n " , This , pStateData , mtStart , mtEnd , mtOffset , dwFlags , pPerf , pSegSt , dwVirtualID ) ;
return S_OK ;
}
2004-01-20 01:21:40 +01:00
HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_GetParam ( LPDIRECTMUSICTRACK8 iface , REFGUID rguidType , MUSIC_TIME mtTime , MUSIC_TIME * pmtNext , void * pParam ) {
ICOM_THIS_MULTI ( IDirectMusicCommandTrack , TrackVtbl , iface ) ;
2004-02-25 02:30:03 +01:00
FIXME ( " (%p, %s, %ld, %p, %p): stub \n " , This , debugstr_dmguid ( rguidType ) , mtTime , pmtNext , pParam ) ;
2003-08-23 01:53:27 +02:00
return S_OK ;
}
2004-01-20 01:21:40 +01:00
HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_SetParam ( LPDIRECTMUSICTRACK8 iface , REFGUID rguidType , MUSIC_TIME mtTime , void * pParam ) {
ICOM_THIS_MULTI ( IDirectMusicCommandTrack , TrackVtbl , iface ) ;
2004-02-25 02:30:03 +01:00
FIXME ( " (%p, %s, %ld, %p): stub \n " , This , debugstr_dmguid ( rguidType ) , mtTime , pParam ) ;
2003-08-23 01:53:27 +02:00
return S_OK ;
}
2004-01-20 01:21:40 +01:00
HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_IsParamSupported ( LPDIRECTMUSICTRACK8 iface , REFGUID rguidType ) {
ICOM_THIS_MULTI ( IDirectMusicCommandTrack , TrackVtbl , iface ) ;
2003-08-23 01:53:27 +02:00
2004-02-25 02:30:03 +01:00
TRACE ( " (%p, %s): " , This , debugstr_dmguid ( rguidType ) ) ;
2003-08-23 01:53:27 +02:00
if ( IsEqualGUID ( rguidType , & GUID_CommandParam )
| | IsEqualGUID ( rguidType , & GUID_CommandParam2 )
| | IsEqualGUID ( rguidType , & GUID_CommandParamNext ) ) {
TRACE ( " param supported \n " ) ;
return S_OK ;
2004-01-20 01:21:40 +01:00
}
2003-08-23 01:53:27 +02:00
TRACE ( " param unsupported \n " ) ;
return DMUS_E_TYPE_UNSUPPORTED ;
}
2004-01-20 01:21:40 +01:00
HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_AddNotificationType ( LPDIRECTMUSICTRACK8 iface , REFGUID rguidNotificationType ) {
ICOM_THIS_MULTI ( IDirectMusicCommandTrack , TrackVtbl , iface ) ;
2004-02-25 02:30:03 +01:00
FIXME ( " (%p, %s): stub \n " , This , debugstr_dmguid ( rguidNotificationType ) ) ;
2003-08-23 01:53:27 +02:00
return S_OK ;
}
2004-01-20 01:21:40 +01:00
HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_RemoveNotificationType ( LPDIRECTMUSICTRACK8 iface , REFGUID rguidNotificationType ) {
ICOM_THIS_MULTI ( IDirectMusicCommandTrack , TrackVtbl , iface ) ;
2004-02-25 02:30:03 +01:00
FIXME ( " (%p, %s): stub \n " , This , debugstr_dmguid ( rguidNotificationType ) ) ;
2003-08-23 01:53:27 +02:00
return S_OK ;
}
2004-01-20 01:21:40 +01:00
HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_Clone ( LPDIRECTMUSICTRACK8 iface , MUSIC_TIME mtStart , MUSIC_TIME mtEnd , IDirectMusicTrack * * ppTrack ) {
ICOM_THIS_MULTI ( IDirectMusicCommandTrack , TrackVtbl , iface ) ;
2003-08-23 01:53:27 +02:00
FIXME ( " (%p, %ld, %ld, %p): stub \n " , This , mtStart , mtEnd , ppTrack ) ;
return S_OK ;
}
2004-01-20 01:21:40 +01:00
HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_PlayEx ( LPDIRECTMUSICTRACK8 iface , void * pStateData , REFERENCE_TIME rtStart , REFERENCE_TIME rtEnd , REFERENCE_TIME rtOffset , DWORD dwFlags , IDirectMusicPerformance * pPerf , IDirectMusicSegmentState * pSegSt , DWORD dwVirtualID ) {
ICOM_THIS_MULTI ( IDirectMusicCommandTrack , TrackVtbl , iface ) ;
2003-08-23 01:53:27 +02:00
FIXME ( " (%p, %p, %lli, %lli, %lli, %ld, %p, %p, %ld): stub \n " , This , pStateData , rtStart , rtEnd , rtOffset , dwFlags , pPerf , pSegSt , dwVirtualID ) ;
return S_OK ;
}
2004-01-20 01:21:40 +01:00
HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_GetParamEx ( LPDIRECTMUSICTRACK8 iface , REFGUID rguidType , REFERENCE_TIME rtTime , REFERENCE_TIME * prtNext , void * pParam , void * pStateData , DWORD dwFlags ) {
ICOM_THIS_MULTI ( IDirectMusicCommandTrack , TrackVtbl , iface ) ;
2004-02-25 02:30:03 +01:00
FIXME ( " (%p, %s, %lli, %p, %p, %p, %ld): stub \n " , This , debugstr_dmguid ( rguidType ) , rtTime , prtNext , pParam , pStateData , dwFlags ) ;
2003-08-23 01:53:27 +02:00
return S_OK ;
}
2004-01-20 01:21:40 +01:00
HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_SetParamEx ( LPDIRECTMUSICTRACK8 iface , REFGUID rguidType , REFERENCE_TIME rtTime , void * pParam , void * pStateData , DWORD dwFlags ) {
ICOM_THIS_MULTI ( IDirectMusicCommandTrack , TrackVtbl , iface ) ;
2004-02-25 02:30:03 +01:00
FIXME ( " (%p, %s, %lli, %p, %p, %ld): stub \n " , This , debugstr_dmguid ( rguidType ) , rtTime , pParam , pStateData , dwFlags ) ;
2003-08-23 01:53:27 +02:00
return S_OK ;
}
2004-01-20 01:21:40 +01:00
HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_Compose ( LPDIRECTMUSICTRACK8 iface , IUnknown * pContext , DWORD dwTrackGroup , IDirectMusicTrack * * ppResultTrack ) {
ICOM_THIS_MULTI ( IDirectMusicCommandTrack , TrackVtbl , iface ) ;
2003-08-23 01:53:27 +02:00
FIXME ( " (%p, %p, %ld, %p): stub \n " , This , pContext , dwTrackGroup , ppResultTrack ) ;
return S_OK ;
}
2004-01-20 01:21:40 +01:00
HRESULT WINAPI IDirectMusicCommandTrack_IDirectMusicTrack_Join ( LPDIRECTMUSICTRACK8 iface , IDirectMusicTrack * pNewTrack , MUSIC_TIME mtJoin , IUnknown * pContext , DWORD dwTrackGroup , IDirectMusicTrack * * ppResultTrack ) {
ICOM_THIS_MULTI ( IDirectMusicCommandTrack , TrackVtbl , iface ) ;
2003-08-23 01:53:27 +02:00
FIXME ( " (%p, %p, %ld, %p, %ld, %p): stub \n " , This , pNewTrack , mtJoin , pContext , dwTrackGroup , ppResultTrack ) ;
return S_OK ;
}
2005-05-30 12:01:08 +02:00
static const IDirectMusicTrack8Vtbl DirectMusicCommandTrack_Track_Vtbl = {
2004-01-20 01:21:40 +01:00
IDirectMusicCommandTrack_IDirectMusicTrack_QueryInterface ,
IDirectMusicCommandTrack_IDirectMusicTrack_AddRef ,
IDirectMusicCommandTrack_IDirectMusicTrack_Release ,
IDirectMusicCommandTrack_IDirectMusicTrack_Init ,
IDirectMusicCommandTrack_IDirectMusicTrack_InitPlay ,
IDirectMusicCommandTrack_IDirectMusicTrack_EndPlay ,
IDirectMusicCommandTrack_IDirectMusicTrack_Play ,
IDirectMusicCommandTrack_IDirectMusicTrack_GetParam ,
IDirectMusicCommandTrack_IDirectMusicTrack_SetParam ,
IDirectMusicCommandTrack_IDirectMusicTrack_IsParamSupported ,
IDirectMusicCommandTrack_IDirectMusicTrack_AddNotificationType ,
IDirectMusicCommandTrack_IDirectMusicTrack_RemoveNotificationType ,
IDirectMusicCommandTrack_IDirectMusicTrack_Clone ,
IDirectMusicCommandTrack_IDirectMusicTrack_PlayEx ,
IDirectMusicCommandTrack_IDirectMusicTrack_GetParamEx ,
IDirectMusicCommandTrack_IDirectMusicTrack_SetParamEx ,
IDirectMusicCommandTrack_IDirectMusicTrack_Compose ,
IDirectMusicCommandTrack_IDirectMusicTrack_Join
2003-08-23 01:53:27 +02:00
} ;
2004-01-20 01:21:40 +01:00
/* IDirectMusicCommandTrack IPersistStream part: */
HRESULT WINAPI IDirectMusicCommandTrack_IPersistStream_QueryInterface ( LPPERSISTSTREAM iface , REFIID riid , LPVOID * ppobj ) {
ICOM_THIS_MULTI ( IDirectMusicCommandTrack , PersistStreamVtbl , iface ) ;
return IDirectMusicCommandTrack_IUnknown_QueryInterface ( ( LPUNKNOWN ) & This - > UnknownVtbl , riid , ppobj ) ;
2003-08-23 01:53:27 +02:00
}
2004-01-20 01:21:40 +01:00
ULONG WINAPI IDirectMusicCommandTrack_IPersistStream_AddRef ( LPPERSISTSTREAM iface ) {
ICOM_THIS_MULTI ( IDirectMusicCommandTrack , PersistStreamVtbl , iface ) ;
return IDirectMusicCommandTrack_IUnknown_AddRef ( ( LPUNKNOWN ) & This - > UnknownVtbl ) ;
2003-08-23 01:53:27 +02:00
}
2004-01-20 01:21:40 +01:00
ULONG WINAPI IDirectMusicCommandTrack_IPersistStream_Release ( LPPERSISTSTREAM iface ) {
ICOM_THIS_MULTI ( IDirectMusicCommandTrack , PersistStreamVtbl , iface ) ;
return IDirectMusicCommandTrack_IUnknown_Release ( ( LPUNKNOWN ) & This - > UnknownVtbl ) ;
2003-08-23 01:53:27 +02:00
}
2004-01-20 01:21:40 +01:00
HRESULT WINAPI IDirectMusicCommandTrack_IPersistStream_GetClassID ( LPPERSISTSTREAM iface , CLSID * pClassID ) {
2003-08-23 01:53:27 +02:00
return E_NOTIMPL ;
}
2004-01-20 01:21:40 +01:00
HRESULT WINAPI IDirectMusicCommandTrack_IPersistStream_IsDirty ( LPPERSISTSTREAM iface ) {
2003-08-23 01:53:27 +02:00
return E_NOTIMPL ;
}
2004-01-20 01:21:40 +01:00
HRESULT WINAPI IDirectMusicCommandTrack_IPersistStream_Load ( LPPERSISTSTREAM iface , IStream * pStm ) {
ICOM_THIS_MULTI ( IDirectMusicCommandTrack , PersistStreamVtbl , iface ) ;
2003-08-23 01:53:27 +02:00
FOURCC chunkID ;
2004-01-20 01:21:40 +01:00
DWORD chunkSize , dwSizeOfStruct , nrCommands ;
2003-08-23 01:53:27 +02:00
LARGE_INTEGER liMove ; /* used when skipping chunks */
IStream_Read ( pStm , & chunkID , sizeof ( FOURCC ) , NULL ) ;
IStream_Read ( pStm , & chunkSize , sizeof ( DWORD ) , NULL ) ;
TRACE_ ( dmfile ) ( " : %s chunk (size = %ld) " , debugstr_fourcc ( chunkID ) , chunkSize ) ;
switch ( chunkID ) {
case DMUS_FOURCC_COMMANDTRACK_CHUNK : {
2004-01-20 01:21:40 +01:00
int count ;
2003-08-23 01:53:27 +02:00
TRACE_ ( dmfile ) ( " : command track chunk \n " ) ;
IStream_Read ( pStm , & dwSizeOfStruct , sizeof ( DWORD ) , NULL ) ;
if ( dwSizeOfStruct ! = sizeof ( DMUS_IO_COMMAND ) ) {
2004-01-20 01:21:40 +01:00
TRACE_ ( dmfile ) ( " : declared size of struct (=%ld) != actual size (=%i); indicates older direct music version \n " , dwSizeOfStruct , sizeof ( DMUS_IO_COMMAND ) ) ;
2003-08-23 01:53:27 +02:00
}
chunkSize - = sizeof ( DWORD ) ; /* now chunk size is one DWORD shorter */
2004-01-20 01:21:40 +01:00
nrCommands = chunkSize / dwSizeOfStruct ; /* and this is the number of commands */
/* load each command seperately in new entry */
for ( count = 0 ; count < nrCommands ; count + + ) {
2005-03-24 22:01:35 +01:00
LPDMUS_PRIVATE_COMMAND pNewCommand = HeapAlloc ( GetProcessHeap ( ) , HEAP_ZERO_MEMORY , sizeof ( DMUS_PRIVATE_COMMAND ) ) ;
2004-01-20 01:21:40 +01:00
IStream_Read ( pStm , & pNewCommand - > pCommand , dwSizeOfStruct , NULL ) ;
list_add_tail ( & This - > Commands , & pNewCommand - > entry ) ;
2003-08-23 01:53:27 +02:00
}
2004-01-20 01:21:40 +01:00
TRACE_ ( dmfile ) ( " : reading finished \n " ) ;
This - > pDesc - > dwValidData | = DMUS_OBJ_LOADED ;
break ;
}
2003-08-23 01:53:27 +02:00
default : {
TRACE_ ( dmfile ) ( " : unexpected chunk; loading failed) \n " ) ;
liMove . QuadPart = chunkSize ;
IStream_Seek ( pStm , liMove , STREAM_SEEK_CUR , NULL ) ; /* skip the rest of the chunk */
return E_FAIL ;
}
}
2004-01-20 01:21:40 +01:00
/* DEBUG: dumps whole band track object tree: */
if ( TRACE_ON ( dmstyle ) ) {
int r = 0 ;
DMUS_PRIVATE_COMMAND * tmpEntry ;
struct list * listEntry ;
TRACE ( " *** IDirectMusicCommandTrack (%p) *** \n " , ( LPDIRECTMUSICTRACK8 ) This - > TrackVtbl ) ;
TRACE ( " - Commands: \n " ) ;
LIST_FOR_EACH ( listEntry , & This - > Commands ) {
tmpEntry = LIST_ENTRY ( listEntry , DMUS_PRIVATE_COMMAND , entry ) ;
TRACE ( " - Command[%i]: \n " , r ) ;
TRACE ( " - mtTime = %li \n " , tmpEntry - > pCommand . mtTime ) ;
TRACE ( " - wMeasure = %d \n " , tmpEntry - > pCommand . wMeasure ) ;
TRACE ( " - bBeat = %i \n " , tmpEntry - > pCommand . bBeat ) ;
TRACE ( " - bCommand = %i \n " , tmpEntry - > pCommand . bCommand ) ;
TRACE ( " - bGrooveLevel = %i \n " , tmpEntry - > pCommand . bGrooveLevel ) ;
TRACE ( " - bGrooveRange = %i \n " , tmpEntry - > pCommand . bGrooveRange ) ;
TRACE ( " - bRepeatMode = %i \n " , tmpEntry - > pCommand . bRepeatMode ) ;
r + + ;
}
}
2003-08-23 01:53:27 +02:00
return S_OK ;
}
2004-01-20 01:21:40 +01:00
HRESULT WINAPI IDirectMusicCommandTrack_IPersistStream_Save ( LPPERSISTSTREAM iface , IStream * pStm , BOOL fClearDirty ) {
2003-08-23 01:53:27 +02:00
return E_NOTIMPL ;
}
2004-01-20 01:21:40 +01:00
HRESULT WINAPI IDirectMusicCommandTrack_IPersistStream_GetSizeMax ( LPPERSISTSTREAM iface , ULARGE_INTEGER * pcbSize ) {
2003-08-23 01:53:27 +02:00
return E_NOTIMPL ;
}
2005-05-30 12:01:08 +02:00
static const IPersistStreamVtbl DirectMusicCommandTrack_PersistStream_Vtbl = {
2004-01-20 01:21:40 +01:00
IDirectMusicCommandTrack_IPersistStream_QueryInterface ,
IDirectMusicCommandTrack_IPersistStream_AddRef ,
IDirectMusicCommandTrack_IPersistStream_Release ,
IDirectMusicCommandTrack_IPersistStream_GetClassID ,
IDirectMusicCommandTrack_IPersistStream_IsDirty ,
IDirectMusicCommandTrack_IPersistStream_Load ,
IDirectMusicCommandTrack_IPersistStream_Save ,
IDirectMusicCommandTrack_IPersistStream_GetSizeMax
2003-08-23 01:53:27 +02:00
} ;
2004-01-20 01:21:40 +01:00
/* for ClassFactory */
HRESULT WINAPI DMUSIC_CreateDirectMusicCommandTrack ( LPCGUID lpcGUID , LPVOID * ppobj , LPUNKNOWN pUnkOuter ) {
IDirectMusicCommandTrack * track ;
track = HeapAlloc ( GetProcessHeap ( ) , HEAP_ZERO_MEMORY , sizeof ( IDirectMusicCommandTrack ) ) ;
if ( NULL = = track ) {
2004-12-22 16:13:20 +01:00
* ppobj = NULL ;
2004-01-20 01:21:40 +01:00
return E_OUTOFMEMORY ;
}
track - > UnknownVtbl = & DirectMusicCommandTrack_Unknown_Vtbl ;
track - > TrackVtbl = & DirectMusicCommandTrack_Track_Vtbl ;
track - > PersistStreamVtbl = & DirectMusicCommandTrack_PersistStream_Vtbl ;
track - > pDesc = HeapAlloc ( GetProcessHeap ( ) , HEAP_ZERO_MEMORY , sizeof ( DMUS_OBJECTDESC ) ) ;
DM_STRUCT_INIT ( track - > pDesc ) ;
track - > pDesc - > dwValidData | = DMUS_OBJ_CLASS ;
memcpy ( & track - > pDesc - > guidClass , & CLSID_DirectMusicCommandTrack , sizeof ( CLSID ) ) ;
track - > ref = 0 ; /* will be inited by QueryInterface */
list_init ( & track - > Commands ) ;
return IDirectMusicCommandTrack_IUnknown_QueryInterface ( ( LPUNKNOWN ) & track - > UnknownVtbl , lpcGUID , ppobj ) ;
}