Module: wine Branch: master Commit: 0ef59050c6c855907fc1a2b2f04fbe5ef2816e14 URL: http://source.winehq.org/git/wine.git/?a=commit;h=0ef59050c6c855907fc1a2b2f0...
Author: Mariusz Pluciński vshader@gmail.com Date: Thu Sep 23 15:37:54 2010 +0200
gameux: Add stub of IGameStatistics interface implementation.
---
dlls/gameux/gamestatistics.c | 224 +++++++++++++++++++++++++++++++++++- dlls/gameux/tests/gamestatistics.c | 2 +- 2 files changed, 222 insertions(+), 4 deletions(-)
diff --git a/dlls/gameux/gamestatistics.c b/dlls/gameux/gamestatistics.c index 0b872ac..6978173 100644 --- a/dlls/gameux/gamestatistics.c +++ b/dlls/gameux/gamestatistics.c @@ -31,10 +31,221 @@
WINE_DEFAULT_DEBUG_CHANNEL(gameux);
-/* - * IGameStatisticsMgr implementation +/******************************************************************************* + * IGameStatistics implementation */ +typedef struct _GameStatisticsImpl +{ + const struct IGameStatisticsVtbl *lpVtbl; + LONG ref; +} GameStatisticsImpl; + +static inline GameStatisticsImpl *impl_from_IGameStatistics( IGameStatistics *iface ) +{ + return (GameStatisticsImpl *)((char*)iface - FIELD_OFFSET(GameStatisticsImpl, lpVtbl)); +} +static inline IGameStatistics *IGameStatistics_from_impl( GameStatisticsImpl* This ) +{ + return (struct IGameStatistics*)&This->lpVtbl; +} + + +static HRESULT WINAPI GameStatisticsImpl_QueryInterface( + IGameStatistics *iface, + REFIID riid, + void **ppvObject) +{ + GameStatisticsImpl *This = impl_from_IGameStatistics( iface ); + + TRACE("%p %s %p\n", This, debugstr_guid( riid ), ppvObject ); + + *ppvObject = NULL; + + if ( IsEqualGUID( riid, &IID_IUnknown ) || + IsEqualGUID( riid, &IID_IGameStatistics ) ) + { + *ppvObject = iface; + } + else + { + FIXME("interface %s not implemented\n", debugstr_guid(riid)); + return E_NOINTERFACE; + } + + IGameStatistics_AddRef( iface ); + return S_OK; +} + +static ULONG WINAPI GameStatisticsImpl_AddRef(IGameStatistics *iface) +{ + GameStatisticsImpl *This = impl_from_IGameStatistics( iface ); + LONG ref; + + ref = InterlockedIncrement(&This->ref); + + TRACE("(%p): ref=%d\n", This, ref); + return ref; +} + +static ULONG WINAPI GameStatisticsImpl_Release(IGameStatistics *iface) +{ + GameStatisticsImpl *This = impl_from_IGameStatistics( iface ); + LONG ref; + + ref = InterlockedDecrement( &This->ref ); + TRACE("(%p): ref=%d\n", This, ref); + + if ( ref == 0 ) + { + TRACE("freeing IGameStatistics\n"); + HeapFree( GetProcessHeap(), 0, This ); + } + + return ref; +} + +static HRESULT WINAPI GameStatisticsImpl_GetMaxCategoryLength( + IGameStatistics *iface, + UINT *cch) +{ + FIXME("stub\n"); + return E_NOTIMPL; +} + +static HRESULT WINAPI GameStatisticsImpl_GetMaxNameLength( + IGameStatistics *iface, + UINT *cch) +{ + FIXME("stub\n"); + return E_NOTIMPL; +}
+static HRESULT WINAPI GameStatisticsImpl_GetMaxValueLength( + IGameStatistics *iface, + UINT *cch) +{ + FIXME("stub\n"); + return E_NOTIMPL; +} + +static HRESULT WINAPI GameStatisticsImpl_GetMaxCategories( + IGameStatistics *iface, + WORD *pMax) +{ + FIXME("stub\n"); + return E_NOTIMPL; +} + +static HRESULT WINAPI GameStatisticsImpl_GetMaxStatsPerCategory( + IGameStatistics *iface, + WORD *pMax) +{ + FIXME("stub\n"); + return E_NOTIMPL; +} + +static HRESULT WINAPI GameStatisticsImpl_SetCategoryTitle( + IGameStatistics *iface, + WORD categoryIndex, + LPCWSTR title) +{ + FIXME("stub\n"); + return E_NOTIMPL; +} + +static HRESULT WINAPI GameStatisticsImpl_GetCategoryTitle( + IGameStatistics *iface, + WORD categoryIndex, + LPWSTR *pTitle) +{ + FIXME("stub\n"); + return E_NOTIMPL; +} + +static HRESULT WINAPI GameStatisticsImpl_GetStatistic( + IGameStatistics *iface, + WORD categoryIndex, + WORD statIndex, + LPWSTR *pName, + LPWSTR *pValue) +{ + FIXME("stub\n"); + return E_NOTIMPL; +} + +static HRESULT WINAPI GameStatisticsImpl_SetStatistic( + IGameStatistics *iface, + WORD categoryIndex, + WORD statIndex, + LPCWSTR name, + LPCWSTR value) +{ + FIXME("stub\n"); + return E_NOTIMPL; +} + +static HRESULT WINAPI GameStatisticsImpl_Save( + IGameStatistics *iface, + BOOL trackChanges) +{ + FIXME("stub\n"); + return E_NOTIMPL; +} + +static HRESULT WINAPI GameStatisticsImpl_SetLastPlayedCategory( + IGameStatistics *iface, + UINT categoryIndex) +{ + FIXME("stub\n"); + return E_NOTIMPL; +} + +static HRESULT WINAPI GameStatisticsImpl_GetLastPlayedCategory( + IGameStatistics *iface, + UINT *pCategoryIndex) +{ + FIXME("stub\n"); + return E_NOTIMPL; +} + +static const struct IGameStatisticsVtbl GameStatisticsImplVtbl = +{ + GameStatisticsImpl_QueryInterface, + GameStatisticsImpl_AddRef, + GameStatisticsImpl_Release, + GameStatisticsImpl_GetMaxCategoryLength, + GameStatisticsImpl_GetMaxNameLength, + GameStatisticsImpl_GetMaxValueLength, + GameStatisticsImpl_GetMaxCategories, + GameStatisticsImpl_GetMaxStatsPerCategory, + GameStatisticsImpl_SetCategoryTitle, + GameStatisticsImpl_GetCategoryTitle, + GameStatisticsImpl_GetStatistic, + GameStatisticsImpl_SetStatistic, + GameStatisticsImpl_Save, + GameStatisticsImpl_SetLastPlayedCategory, + GameStatisticsImpl_GetLastPlayedCategory +}; + + +HRESULT create_IGameStatistics(GameStatisticsImpl** ppStats) +{ + TRACE("(%p)\n", ppStats); + + *ppStats = HeapAlloc( GetProcessHeap(), 0, sizeof(**ppStats)); + if(!(*ppStats)) + return E_OUTOFMEMORY; + + (*ppStats)->lpVtbl = &GameStatisticsImplVtbl; + (*ppStats)->ref = 1; + + TRACE("returing coclass: %p\n", *ppStats); + return S_OK; +} + +/******************************************************************************* + * IGameStatisticsMgr implementation + */ typedef struct _GameStatisticsMgrImpl { const struct IGameStatisticsMgrVtbl *lpVtbl; @@ -117,6 +328,7 @@ static HRESULT STDMETHODCALLTYPE GameStatisticsMgrImpl_GetGameStatistics( WCHAR lpApplicationId[49]; DWORD dwLength = sizeof(lpApplicationId); GAME_INSTALL_SCOPE installScope; + GameStatisticsImpl *statisticsImpl;
TRACE("(%p, %s, 0x%x, %p, %p)\n", iface, debugstr_w(GDFBinaryPath), openType, pOpenResult, ppiStats);
@@ -150,7 +362,13 @@ static HRESULT STDMETHODCALLTYPE GameStatisticsMgrImpl_GetGameStatistics( if(SUCCEEDED(hr)) { TRACE("found app id: %s\n", debugstr_w(lpApplicationId)); - FIXME("creating instance of IGameStatistics not yet implemented\n"); + hr = create_IGameStatistics(&statisticsImpl); + } + + if(SUCCEEDED(hr)) + { + *ppiStats = IGameStatistics_from_impl(statisticsImpl); + FIXME("loading game statistics not yet implemented\n"); hr = E_NOTIMPL; }
diff --git a/dlls/gameux/tests/gamestatistics.c b/dlls/gameux/tests/gamestatistics.c index 87b1066..7641157 100644 --- a/dlls/gameux/tests/gamestatistics.c +++ b/dlls/gameux/tests/gamestatistics.c @@ -239,7 +239,7 @@ static void test_gamestatisticsmgr( void ) /* now, allow to create */ hr = IGameStatisticsMgr_GetGameStatistics(gsm, sExeName, GAMESTATS_OPEN_OPENORCREATE, &dwOpenResult, &gs); todo_wine ok(SUCCEEDED(hr), "GetGameStatistics returned error: 0x%x\n", hr); - todo_wine ok(gs!=NULL, "GetGameStatistics did not return valid interface pointer\n"); + ok(gs!=NULL, "GetGameStatistics did not return valid interface pointer\n"); if(gs) { /* test of limit values returned from interface */