3 * Copyright (C) 2003 Rok Mandeljc
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU Library General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
24 #include "wine/debug.h"
26 #include "dmime_private.h"
28 WINE_DEFAULT_DEBUG_CHANNEL(dmusic
);
30 /* IDirectMusicGraph IUnknown parts follow: */
31 HRESULT WINAPI
IDirectMusicGraphImpl_QueryInterface (LPDIRECTMUSICGRAPH iface
, REFIID riid
, LPVOID
*ppobj
)
33 ICOM_THIS(IDirectMusicGraphImpl
,iface
);
35 if (IsEqualGUID(riid
, &IID_IUnknown
) ||
36 IsEqualGUID(riid
, &IID_IDirectMusicGraph
))
38 IDirectMusicGraphImpl_AddRef(iface
);
42 WARN("(%p)->(%s,%p),not found\n",This
,debugstr_guid(riid
),ppobj
);
46 ULONG WINAPI
IDirectMusicGraphImpl_AddRef (LPDIRECTMUSICGRAPH iface
)
48 ICOM_THIS(IDirectMusicGraphImpl
,iface
);
49 TRACE("(%p) : AddRef from %ld\n", This
, This
->ref
);
53 ULONG WINAPI
IDirectMusicGraphImpl_Release (LPDIRECTMUSICGRAPH iface
)
55 ICOM_THIS(IDirectMusicGraphImpl
,iface
);
56 ULONG ref
= --This
->ref
;
57 TRACE("(%p) : ReleaseRef to %ld\n", This
, This
->ref
);
60 HeapFree(GetProcessHeap(), 0, This
);
65 /* IDirectMusicGraph Interface follow: */
66 HRESULT WINAPI
IDirectMusicGraphImpl_StampPMsg (LPDIRECTMUSICGRAPH iface
, DMUS_PMSG
* pPMSG
)
68 ICOM_THIS(IDirectMusicGraphImpl
,iface
);
70 FIXME("(%p, %p): stub\n", This
, pPMSG
);
75 HRESULT WINAPI
IDirectMusicGraphImpl_InsertTool (LPDIRECTMUSICGRAPH iface
, IDirectMusicTool
* pTool
, DWORD
* pdwPChannels
, DWORD cPChannels
, LONG lIndex
)
78 IDirectMusicTool8Impl
* p
;
79 IDirectMusicTool8Impl
* toAdd
= (IDirectMusicTool8Impl
*) pTool
;
80 ICOM_THIS(IDirectMusicGraphImpl
,iface
);
82 FIXME("(%p, %p, %p, %ld, %li): use of pdwPChannels\n", This
, pTool
, pdwPChannels
, cPChannels
, lIndex
);
84 if (0 == This
->num_tools
) {
85 This
->pFirst
= This
->pLast
= toAdd
;
86 toAdd
->pPrev
= toAdd
->pNext
= NULL
;
87 } else if (lIndex
== 0 || lIndex
<= -This
->num_tools
) {
88 This
->pFirst
->pPrev
= toAdd
;
89 toAdd
->pNext
= This
->pFirst
;
92 } else if (lIndex
< 0) {
94 for (i
= 0; i
< -lIndex
; ++i
) {
97 toAdd
->pNext
= p
->pNext
;
98 if (p
->pNext
) p
->pNext
->pPrev
= toAdd
;
101 } else if (lIndex
>= This
->num_tools
) {
102 This
->pLast
->pNext
= toAdd
;
103 toAdd
->pPrev
= This
->pLast
;
106 } else if (lIndex
> 0) {
108 for (i
= 0; i
< lIndex
; ++i
) {
111 toAdd
->pPrev
= p
->pPrev
;
112 if (p
->pPrev
) p
->pPrev
->pNext
= toAdd
;
120 HRESULT WINAPI
IDirectMusicGraphImpl_GetTool (LPDIRECTMUSICGRAPH iface
, DWORD dwIndex
, IDirectMusicTool
** ppTool
)
123 IDirectMusicTool8Impl
* p
= NULL
;
124 ICOM_THIS(IDirectMusicGraphImpl
,iface
);
126 FIXME("(%p, %ld, %p): stub\n", This
, dwIndex
, ppTool
);
129 for (i
= 0; i
< dwIndex
&& i
< This
->num_tools
; ++i
) {
132 *ppTool
= (IDirectMusicTool
*) p
;
133 if (NULL
!= *ppTool
) {
134 IDirectMusicTool8Impl_AddRef((LPDIRECTMUSICTOOL8
) *ppTool
);
139 HRESULT WINAPI
IDirectMusicGraphImpl_RemoveTool (LPDIRECTMUSICGRAPH iface
, IDirectMusicTool
* pTool
)
141 ICOM_THIS(IDirectMusicGraphImpl
,iface
);
143 FIXME("(%p, %p): stub\n", This
, pTool
);
148 ICOM_VTABLE(IDirectMusicGraph
) DirectMusicGraph_Vtbl
=
150 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
151 IDirectMusicGraphImpl_QueryInterface
,
152 IDirectMusicGraphImpl_AddRef
,
153 IDirectMusicGraphImpl_Release
,
154 IDirectMusicGraphImpl_StampPMsg
,
155 IDirectMusicGraphImpl_InsertTool
,
156 IDirectMusicGraphImpl_GetTool
,
157 IDirectMusicGraphImpl_RemoveTool
160 /* for ClassFactory */
161 HRESULT WINAPI
DMUSIC_CreateDirectMusicGraph (LPCGUID lpcGUID
, LPDIRECTMUSICGRAPH
*ppDMGrph
, LPUNKNOWN pUnkOuter
)
163 if (IsEqualGUID (lpcGUID
, &IID_IDirectMusicGraph
))
166 return E_NOINTERFACE
;
168 WARN("No interface found\n");
170 return E_NOINTERFACE
;