From 163b104cb2c5a09d14bf7fcacab57e6fa704b005 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20P=C3=B6sel?= Date: Sun, 13 Jan 2013 11:49:53 +0000 Subject: Added sndVol sources (not adopted; old addons version, does someone has newer version?) git-svn-id: http://svn.miranda-ng.org/main/trunk@3093 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/!NotAdopted/sndVol/IcoLib.h | 25 ++ plugins/!NotAdopted/sndVol/dmutil.cpp | 689 ++++++++++++++++++++++++++++++ plugins/!NotAdopted/sndVol/dmutil.h | 126 ++++++ plugins/!NotAdopted/sndVol/dxutil.cpp | 226 ++++++++++ plugins/!NotAdopted/sndVol/dxutil.h | 49 +++ plugins/!NotAdopted/sndVol/m_cluiframes.h | 128 ++++++ plugins/!NotAdopted/sndVol/nosnd.ico | Bin 0 -> 2550 bytes plugins/!NotAdopted/sndVol/optionsdlg.cpp | 146 +++++++ plugins/!NotAdopted/sndVol/optionsdlg.h | 1 + plugins/!NotAdopted/sndVol/playSnd.cpp | 137 ++++++ plugins/!NotAdopted/sndVol/playSnd.h | 24 ++ plugins/!NotAdopted/sndVol/plugin.cpp | 362 ++++++++++++++++ plugins/!NotAdopted/sndVol/plugin.h | 42 ++ plugins/!NotAdopted/sndVol/resource.h | 24 ++ plugins/!NotAdopted/sndVol/snd.ico | Bin 0 -> 2550 bytes plugins/!NotAdopted/sndVol/sndVol.dsp | 163 +++++++ plugins/!NotAdopted/sndVol/sndVol.dsw | 29 ++ plugins/!NotAdopted/sndVol/sndVol.rc | 96 +++++ 18 files changed, 2267 insertions(+) create mode 100644 plugins/!NotAdopted/sndVol/IcoLib.h create mode 100644 plugins/!NotAdopted/sndVol/dmutil.cpp create mode 100644 plugins/!NotAdopted/sndVol/dmutil.h create mode 100644 plugins/!NotAdopted/sndVol/dxutil.cpp create mode 100644 plugins/!NotAdopted/sndVol/dxutil.h create mode 100644 plugins/!NotAdopted/sndVol/m_cluiframes.h create mode 100644 plugins/!NotAdopted/sndVol/nosnd.ico create mode 100644 plugins/!NotAdopted/sndVol/optionsdlg.cpp create mode 100644 plugins/!NotAdopted/sndVol/optionsdlg.h create mode 100644 plugins/!NotAdopted/sndVol/playSnd.cpp create mode 100644 plugins/!NotAdopted/sndVol/playSnd.h create mode 100644 plugins/!NotAdopted/sndVol/plugin.cpp create mode 100644 plugins/!NotAdopted/sndVol/plugin.h create mode 100644 plugins/!NotAdopted/sndVol/resource.h create mode 100644 plugins/!NotAdopted/sndVol/snd.ico create mode 100644 plugins/!NotAdopted/sndVol/sndVol.dsp create mode 100644 plugins/!NotAdopted/sndVol/sndVol.dsw create mode 100644 plugins/!NotAdopted/sndVol/sndVol.rc diff --git a/plugins/!NotAdopted/sndVol/IcoLib.h b/plugins/!NotAdopted/sndVol/IcoLib.h new file mode 100644 index 0000000000..86666553dd --- /dev/null +++ b/plugins/!NotAdopted/sndVol/IcoLib.h @@ -0,0 +1,25 @@ +typedef struct { + int cbSize; + char *pszSection; //section name used to group icons + char *pszDescription; //description for options dialog + char *pszName; //name to refer to icon when playing and in db + char *pszDefaultFile; //default icon file to use + int iDefaultIndex; +} SKINICONDESC; + +// +// Add a icon into options UI +// +// wParam = (WPARAM)0 +// lParam = (LPARAM)(SKINICONDESC*)sid; +// +#define MS_SKIN2_ADDICON "Skin2/Icons/AddIcon" +// +// Retrieve HICON with name specified in lParam +// Returned HICON SHOULDN'T be destroyed, it managed by IcoLib +// +#define MS_SKIN2_GETICON "Skin2/Icons/GetIcon" +// +// Icons change notification +// +#define ME_SKIN2_ICONSCHANGED "Skin2/IconsChanged" diff --git a/plugins/!NotAdopted/sndVol/dmutil.cpp b/plugins/!NotAdopted/sndVol/dmutil.cpp new file mode 100644 index 0000000000..4e2767ac27 --- /dev/null +++ b/plugins/!NotAdopted/sndVol/dmutil.cpp @@ -0,0 +1,689 @@ +//----------------------------------------------------------------------------- +// File: DMUtil.cpp +// +// Desc: DirectMusic framework classes for playing DirectMusic segments and +// DirectMusic scripts. Feel free to use this class as a starting point +// for adding extra functionality. +// +// Copyright (c) 1999-2001 Microsoft Corp. All rights reserved. +//----------------------------------------------------------------------------- +#define STRICT +#include +#include +#include +#include +#include "DMUtil.h" +#include "DXUtil.h" + + + + +//----------------------------------------------------------------------------- +// Name: CMusicManager::CMusicManager() +// Desc: Constructs the class +//----------------------------------------------------------------------------- +CMusicManager::CMusicManager() +{ + m_pLoader = NULL; + m_pPerformance = NULL; + + // Initialize COM + HRESULT hr = CoInitialize(NULL); + m_bCleanupCOM = SUCCEEDED(hr); +} + + + + +//----------------------------------------------------------------------------- +// Name: CMusicManager::~CMusicManager() +// Desc: Destroys the class +//----------------------------------------------------------------------------- +CMusicManager::~CMusicManager() +{ + SAFE_RELEASE( m_pLoader ); + + if( m_pPerformance ) + { + // If there is any music playing, stop it. + m_pPerformance->Stop( NULL, NULL, 0, 0 ); + m_pPerformance->CloseDown(); + + SAFE_RELEASE( m_pPerformance ); + } + + if( m_bCleanupCOM ) + CoUninitialize(); +} + + + + +//----------------------------------------------------------------------------- +// Name: CMusicManager::Initialize() +// Desc: Inits DirectMusic using a standard audio path +//----------------------------------------------------------------------------- +HRESULT CMusicManager::Initialize( HWND hWnd, DWORD dwPChannels, DWORD dwDefaultPathType ) +{ + HRESULT hr; + + // Create loader object + if( FAILED( hr = CoCreateInstance( CLSID_DirectMusicLoader, NULL, CLSCTX_INPROC, + IID_IDirectMusicLoader8, (void**)&m_pLoader ) ) ) + return DXTRACE_ERR( TEXT("CoCreateInstance"), hr ); + + // Create performance object + if( FAILED( hr = CoCreateInstance( CLSID_DirectMusicPerformance, NULL, CLSCTX_INPROC, + IID_IDirectMusicPerformance8, (void**)&m_pPerformance ) ) ) + return DXTRACE_ERR( TEXT("CoCreateInstance"), hr ); + + // Initialize the performance with the standard audio path. + // This initializes both DirectMusic and DirectSound and + // sets up the synthesizer. Typcially its easist to use an + // audio path for playing music and sound effects. + if( FAILED( hr = m_pPerformance->InitAudio( NULL, NULL, hWnd, dwDefaultPathType, + dwPChannels, DMUS_AUDIOF_ALL, NULL ) ) ) + { + if( hr == DSERR_NODRIVER ) + { + DXTRACE( "Warning: No sound card found\n" ); + return hr; + } + + return DXTRACE_ERR( TEXT("InitAudio"), hr ); + } + + return S_OK; +} + + + + +//----------------------------------------------------------------------------- +// Name: CMusicManager::SetSearchDirectory() +// Desc: Sets the search directory. If not called, the current working +// directory is used to load content. +//----------------------------------------------------------------------------- +HRESULT CMusicManager::SetSearchDirectory( const TCHAR* strMediaPath ) +{ + if( NULL == m_pLoader ) + return E_UNEXPECTED; + + // DMusic only takes wide strings + WCHAR wstrMediaPath[MAX_PATH]; + DXUtil_ConvertGenericStringToWide( wstrMediaPath, strMediaPath ); + + return m_pLoader->SetSearchDirectory( GUID_DirectMusicAllTypes, + wstrMediaPath, FALSE ); +} + + + + +//----------------------------------------------------------------------------- +// Name: CMusicManager::GetDefaultAudioPath() +// Desc: +//----------------------------------------------------------------------------- +IDirectMusicAudioPath8* CMusicManager::GetDefaultAudioPath() +{ + IDirectMusicAudioPath8* pAudioPath = NULL; + if( NULL == m_pPerformance ) + return NULL; + + m_pPerformance->GetDefaultAudioPath( &pAudioPath ); + return pAudioPath; +} + + + + +//----------------------------------------------------------------------------- +// Name: CMusicManager::CollectGarbage() +// Desc: Tells the loader to cleanup any garbage from previously +// released objects. +//----------------------------------------------------------------------------- +VOID CMusicManager::CollectGarbage() +{ + if( m_pLoader ) + m_pLoader->CollectGarbage(); +} + + + + +//----------------------------------------------------------------------------- +// Name: CMusicManager::CreateSegmentFromFile() +// Desc: +//----------------------------------------------------------------------------- +HRESULT CMusicManager::CreateSegmentFromFile( CMusicSegment** ppSegment, + TCHAR* strFileName, + BOOL bDownloadNow, + BOOL bIsMidiFile ) +{ + HRESULT hr; + IDirectMusicSegment8* pSegment = NULL; + + // DMusic only takes wide strings + WCHAR wstrFileName[MAX_PATH]; + DXUtil_ConvertGenericStringToWide( wstrFileName, strFileName ); + + if ( FAILED( hr = m_pLoader->LoadObjectFromFile( CLSID_DirectMusicSegment, + IID_IDirectMusicSegment8, + wstrFileName, + (LPVOID*) &pSegment ) ) ) + { + if( hr == DMUS_E_LOADER_FAILEDOPEN ) + return hr; + return DXTRACE_ERR( TEXT("LoadObjectFromFile"), hr ); + } + + *ppSegment = new CMusicSegment( m_pPerformance, m_pLoader, pSegment ); + if (!*ppSegment) + return E_OUTOFMEMORY; + + if( bIsMidiFile ) + { + if( FAILED( hr = pSegment->SetParam( GUID_StandardMIDIFile, + 0xFFFFFFFF, 0, 0, NULL ) ) ) + return DXTRACE_ERR( TEXT("SetParam"), hr ); + } + + if( bDownloadNow ) + { + if( FAILED( hr = (*ppSegment)->Download() ) ) + return DXTRACE_ERR( TEXT("Download"), hr ); + } + + return S_OK; +} + + + + +//----------------------------------------------------------------------------- +// Name: CMusicManager::CreateSegmentFromResource() +// Desc: +//----------------------------------------------------------------------------- +HRESULT CMusicManager::CreateSegmentFromResource( CMusicSegment** ppSegment, + TCHAR* strResource, + TCHAR* strResourceType, + BOOL bDownloadNow, + BOOL bIsMidiFile ) +{ + HRESULT hr; + IDirectMusicSegment8* pSegment = NULL; + HRSRC hres = NULL; + void* pMem = NULL; + DWORD dwSize = 0; + DMUS_OBJECTDESC objdesc; + + // Find the resource + hres = FindResource( NULL,strResource,strResourceType ); + if( NULL == hres ) + return E_FAIL; + + // Load the resource + pMem = (void*)LoadResource( NULL, hres ); + if( NULL == pMem ) + return E_FAIL; + + // Store the size of the resource + dwSize = SizeofResource( NULL, hres ); + + // Set up our object description + ZeroMemory(&objdesc,sizeof(DMUS_OBJECTDESC)); + objdesc.dwSize = sizeof(DMUS_OBJECTDESC); + objdesc.dwValidData = DMUS_OBJ_MEMORY | DMUS_OBJ_CLASS; + objdesc.guidClass = CLSID_DirectMusicSegment; + objdesc.llMemLength =(LONGLONG)dwSize; + objdesc.pbMemData = (BYTE*)pMem; + + if (FAILED ( hr = m_pLoader->GetObject( &objdesc, + IID_IDirectMusicSegment8, + (void**)&pSegment ) ) ) + { + if( hr == DMUS_E_LOADER_FAILEDOPEN ) + return hr; + return DXTRACE_ERR( TEXT("LoadObjectFromFile"), hr ); + } + + *ppSegment = new CMusicSegment( m_pPerformance, m_pLoader, pSegment ); + if( NULL == *ppSegment ) + return E_OUTOFMEMORY; + + if( bIsMidiFile ) + { + // Do this to make sure that the default General MIDI set + // is connected appropriately to the MIDI file and + // all instruments sound correct. + if( FAILED( hr = pSegment->SetParam( GUID_StandardMIDIFile, + 0xFFFFFFFF, 0, 0, NULL ) ) ) + return DXTRACE_ERR( TEXT("SetParam"), hr ); + } + + if( bDownloadNow ) + { + // The segment needs to be download first before playing. + // However, some apps may want to wait before calling this + // to because the download allocates memory for the + // instruments. The more instruments currently downloaded, + // the more memory is in use by the synthesizer. + if( FAILED( hr = (*ppSegment)->Download() ) ) + return DXTRACE_ERR( TEXT("Download"), hr ); + } + + return S_OK; +} + + + + +//----------------------------------------------------------------------------- +// Name: CMusicManager::CreateScriptFromFile() +// Desc: +//----------------------------------------------------------------------------- +HRESULT CMusicManager::CreateScriptFromFile( CMusicScript** ppScript, + TCHAR* strFileName ) +{ + HRESULT hr; + IDirectMusicScript* pScript = NULL; + + // DMusic only takes wide strings + WCHAR wstrFileName[MAX_PATH]; + DXUtil_ConvertGenericStringToWide( wstrFileName, strFileName ); + + if ( FAILED( hr = m_pLoader->LoadObjectFromFile( CLSID_DirectMusicScript, + IID_IDirectMusicScript8, + wstrFileName, + (LPVOID*) &pScript ) ) ) + return DXTRACE_ERR_NOMSGBOX( TEXT("LoadObjectFromFile"), hr ); + + if ( FAILED( hr = pScript->Init( m_pPerformance, NULL ) ) ) + return DXTRACE_ERR( TEXT("Init"), hr ); + + *ppScript = new CMusicScript( m_pPerformance, m_pLoader, pScript ); + if (!*ppScript) + return E_OUTOFMEMORY; + + return hr; +} + + + + +//----------------------------------------------------------------------------- +// Name: CMusicManager::CreateChordMapFromFile() +// Desc: +//----------------------------------------------------------------------------- +HRESULT CMusicManager::CreateChordMapFromFile( IDirectMusicChordMap8** ppChordMap, + TCHAR* strFileName ) +{ + // DMusic only takes wide strings + WCHAR wstrFileName[MAX_PATH]; + DXUtil_ConvertGenericStringToWide( wstrFileName, strFileName ); + + return m_pLoader->LoadObjectFromFile( CLSID_DirectMusicChordMap, + IID_IDirectMusicChordMap8, + wstrFileName, (LPVOID*) ppChordMap ); +} + + + + +//----------------------------------------------------------------------------- +// Name: CMusicManager::CreateChordMapFromFile() +// Desc: +//----------------------------------------------------------------------------- +HRESULT CMusicManager::CreateStyleFromFile( IDirectMusicStyle8** ppStyle, + TCHAR* strFileName ) +{ + // DMusic only takes wide strings + WCHAR wstrFileName[MAX_PATH]; + DXUtil_ConvertGenericStringToWide( wstrFileName, strFileName ); + + return m_pLoader->LoadObjectFromFile( CLSID_DirectMusicStyle, + IID_IDirectMusicStyle8, + wstrFileName, (LPVOID*) ppStyle ); +} + + + + +//----------------------------------------------------------------------------- +// Name: CMusicManager::GetMotifFromStyle() +// Desc: +//----------------------------------------------------------------------------- +HRESULT CMusicManager::GetMotifFromStyle( IDirectMusicSegment8** ppMotif8, + TCHAR* strStyle, TCHAR* strMotif ) +{ + HRESULT hr; + IDirectMusicStyle8* pStyle = NULL; + IDirectMusicSegment* pMotif = NULL; + + if( FAILED( hr = CreateStyleFromFile( &pStyle, strStyle ) ) ) + return DXTRACE_ERR( TEXT("CreateStyleFromFile"), hr ); + + if( pStyle ) + { + // DMusic only takes wide strings + WCHAR wstrMotif[MAX_PATH]; + DXUtil_ConvertGenericStringToWide( wstrMotif, strMotif ); + + hr = pStyle->GetMotif( wstrMotif, &pMotif ); + SAFE_RELEASE( pStyle ); + + if( FAILED( hr ) ) + return DXTRACE_ERR( TEXT("GetMotif"), hr ); + + pMotif->QueryInterface( IID_IDirectMusicSegment8, (LPVOID*) ppMotif8 ); + } + + return S_OK; +} + + + + +//----------------------------------------------------------------------------- +// Name: CMusicSegment::CMusicSegment() +// Desc: Constructs the class +//----------------------------------------------------------------------------- +CMusicSegment::CMusicSegment( IDirectMusicPerformance8* pPerformance, + IDirectMusicLoader8* pLoader, + IDirectMusicSegment8* pSegment ) +{ + m_pPerformance = pPerformance; + m_pLoader = pLoader; + m_pSegment = pSegment; + m_pEmbeddedAudioPath = NULL; + m_bDownloaded = FALSE; + + // Try to pull out an audio path from the segment itself if there is one. + // This embedded audio path will be used instead of the default + // audio path if the app doesn't wish to use an overriding audio path. + IUnknown* pConfig = NULL; + if( SUCCEEDED( m_pSegment->GetAudioPathConfig( &pConfig ) ) ) + { + m_pPerformance->CreateAudioPath( pConfig, TRUE, &m_pEmbeddedAudioPath ); + SAFE_RELEASE( pConfig ); + } + +} + + + + +//----------------------------------------------------------------------------- +// Name: CMusicSegment::~CMusicSegment() +// Desc: Destroys the class +//----------------------------------------------------------------------------- +CMusicSegment::~CMusicSegment() +{ + if( m_pSegment ) + { + // Tell the loader that this object should now be released + if( m_pLoader ) + m_pLoader->ReleaseObjectByUnknown( m_pSegment ); + + if( m_bDownloaded ) + { + if( m_pEmbeddedAudioPath ) + m_pSegment->Unload( m_pEmbeddedAudioPath ); + else + m_pSegment->Unload( m_pPerformance ); + } + + SAFE_RELEASE( m_pEmbeddedAudioPath ); + SAFE_RELEASE( m_pSegment ); + } + + m_pPerformance = NULL; +} + + + + +//----------------------------------------------------------------------------- +// Name: CMusicSegment::Play() +// Desc: Plays the sound using voice management flags. Pass in DSBPLAY_LOOPING +// in the dwFlags to loop the sound +//----------------------------------------------------------------------------- +HRESULT CMusicSegment::Play( DWORD dwFlags, IDirectMusicAudioPath8* pAudioPath ) +{ + if( m_pSegment == NULL || m_pPerformance == NULL ) + return CO_E_NOTINITIALIZED; + + if( !m_bDownloaded ) + return E_FAIL; + + // If an audio path was passed in then use it, otherwise + // use the embedded audio path if there was one. + if( pAudioPath == NULL && m_pEmbeddedAudioPath != NULL ) + pAudioPath = m_pEmbeddedAudioPath; + + // If pAudioPath is NULL then this plays on the default audio path. + return m_pPerformance->PlaySegmentEx( m_pSegment, 0, NULL, dwFlags, + 0, 0, NULL, pAudioPath ); +} + + + + + +//----------------------------------------------------------------------------- +// Name: CMusicSegment::Download() +// Desc: +//----------------------------------------------------------------------------- +HRESULT CMusicSegment::Download( IDirectMusicAudioPath8* pAudioPath ) +{ + HRESULT hr; + + if( m_pSegment == NULL ) + return CO_E_NOTINITIALIZED; + + // If no audio path was passed in, then download + // to the embedded audio path if it exists + // else download to the performance + if( pAudioPath == NULL ) + { + if( m_pEmbeddedAudioPath ) + hr = m_pSegment->Download( m_pEmbeddedAudioPath ); + else + hr = m_pSegment->Download( m_pPerformance ); + } + else + { + hr = m_pSegment->Download( pAudioPath ); + } + + if ( SUCCEEDED( hr ) ) + m_bDownloaded = TRUE; + + return hr; +} + + + + +//----------------------------------------------------------------------------- +// Name: CMusicSegment::Unload() +// Desc: +//----------------------------------------------------------------------------- +HRESULT CMusicSegment::Unload( IDirectMusicAudioPath8* pAudioPath ) +{ + HRESULT hr; + + if( m_pSegment == NULL ) + return CO_E_NOTINITIALIZED; + + // If no audio path was passed in, then unload + // from the embedded audio path if it exists + // else unload from the performance + if( pAudioPath == NULL ) + { + if( m_pEmbeddedAudioPath ) + hr = m_pSegment->Unload( m_pEmbeddedAudioPath ); + else + hr = m_pSegment->Unload( m_pPerformance ); + } + else + { + hr = m_pSegment->Unload( pAudioPath ); + } + + if ( SUCCEEDED( hr ) ) + m_bDownloaded = FALSE; + + return hr; +} + + + + +//----------------------------------------------------------------------------- +// Name: CMusicSegment::IsPlaying() +// Desc: +//----------------------------------------------------------------------------- +BOOL CMusicSegment::IsPlaying() +{ + if( m_pSegment == NULL || m_pPerformance == NULL ) + return CO_E_NOTINITIALIZED; + + return ( m_pPerformance->IsPlaying( m_pSegment, NULL ) == S_OK ); +} + + + + +//----------------------------------------------------------------------------- +// Name: CMusicSegment::Stop() +// Desc: Stops the sound from playing +//----------------------------------------------------------------------------- +HRESULT CMusicSegment::Stop( DWORD dwFlags ) +{ + if( m_pSegment == NULL || m_pPerformance == NULL ) + return CO_E_NOTINITIALIZED; + + return m_pPerformance->Stop( m_pSegment, NULL, 0, dwFlags );; +} + + + + +//----------------------------------------------------------------------------- +// Name: CMusicSegment::SetRepeats() +// Desc: +//----------------------------------------------------------------------------- +HRESULT CMusicSegment::SetRepeats( DWORD dwRepeats ) +{ + if( m_pSegment == NULL ) + return CO_E_NOTINITIALIZED; + + return m_pSegment->SetRepeats( dwRepeats ); +} + + + + +//----------------------------------------------------------------------------- +// Name: CMusicSegment::GetStyle() +// Desc: +//----------------------------------------------------------------------------- +HRESULT CMusicSegment::GetStyle( IDirectMusicStyle8** ppStyle, DWORD dwStyleIndex ) +{ + // Get the Style from the Segment by calling the Segment's GetData() with + // the data type GUID_StyleTrackStyle. 0xffffffff indicates to look at + // tracks in all TrackGroups in the segment. The first 0 indicates to + // retrieve the Style from the first Track in the indicated TrackGroup. + // The second 0 indicates to retrieve the Style from the beginning of the + // segment, i.e. time 0 in Segment time. If this Segment was loaded from a + // section file, there is only one Style and it is at time 0. + return m_pSegment->GetParam( GUID_IDirectMusicStyle, 0xffffffff, dwStyleIndex, + 0, NULL, (VOID*)ppStyle ); +} + + + +//----------------------------------------------------------------------------- +// Name: CMusicScript::CMusicScript() +// Desc: Constructs the class +//----------------------------------------------------------------------------- +CMusicScript::CMusicScript( IDirectMusicPerformance8* pPerformance, + IDirectMusicLoader8* pLoader, + IDirectMusicScript8* pScript ) +{ + m_pPerformance = pPerformance; + m_pLoader = pLoader; + m_pScript = pScript; +} + + + + +//----------------------------------------------------------------------------- +// Name: CMusicScript::~CMusicScript() +// Desc: Destroys the class +//----------------------------------------------------------------------------- +CMusicScript::~CMusicScript() +{ + if( m_pLoader ) + { + // Tell the loader that this object should now be released + m_pLoader->ReleaseObjectByUnknown( m_pScript ); + m_pLoader = NULL; + } + + SAFE_RELEASE( m_pScript ); + m_pPerformance = NULL; +} + + + + +//----------------------------------------------------------------------------- +// Name: CMusicScript::Play() +// Desc: Calls a routine in the script +//----------------------------------------------------------------------------- +HRESULT CMusicScript::CallRoutine( TCHAR* strRoutine ) +{ + // DMusic only takes wide strings + WCHAR wstrRoutine[MAX_PATH]; + DXUtil_ConvertGenericStringToWide( wstrRoutine, strRoutine ); + + return m_pScript->CallRoutine( wstrRoutine, NULL ); +} + + + + +//----------------------------------------------------------------------------- +// Name: CMusicScript::SetVariableNumber() +// Desc: Sets the value of a variable in the script +//----------------------------------------------------------------------------- +HRESULT CMusicScript::SetVariableNumber( TCHAR* strVariable, LONG lValue ) +{ + // DMusic only takes wide strings + WCHAR wstrVariable[MAX_PATH]; + DXUtil_ConvertGenericStringToWide( wstrVariable, strVariable ); + + return m_pScript->SetVariableNumber( wstrVariable, lValue, NULL ); +} + + + + +//----------------------------------------------------------------------------- +// Name: CMusicScript::GetVariableNumber() +// Desc: Gets the value of a variable in the script +//----------------------------------------------------------------------------- +HRESULT CMusicScript::GetVariableNumber( TCHAR* strVariable, LONG* plValue ) +{ + // DMusic only takes wide strings + WCHAR wstrVariable[MAX_PATH]; + DXUtil_ConvertGenericStringToWide( wstrVariable, strVariable ); + + return m_pScript->GetVariableNumber( wstrVariable, plValue, NULL ); +} + + + diff --git a/plugins/!NotAdopted/sndVol/dmutil.h b/plugins/!NotAdopted/sndVol/dmutil.h new file mode 100644 index 0000000000..99cc464e61 --- /dev/null +++ b/plugins/!NotAdopted/sndVol/dmutil.h @@ -0,0 +1,126 @@ +//----------------------------------------------------------------------------- +// File: DMUtil.h +// +// Desc: +// +// Copyright (c) 1999-2001 Microsoft Corp. All rights reserved. +//----------------------------------------------------------------------------- +#ifndef DMUTIL_H +#define DMUTIL_H + +#include +#include +#include + + +//----------------------------------------------------------------------------- +// Classes used by this header +//----------------------------------------------------------------------------- +class CMusicManager; +class CMusicSegment; +class CMusicScript; + + + + +//----------------------------------------------------------------------------- +// Name: class CMusicManager +// Desc: +//----------------------------------------------------------------------------- +class CMusicManager +{ +protected: + BOOL m_bCleanupCOM; + IDirectMusicLoader8* m_pLoader; + IDirectMusicPerformance8* m_pPerformance; + +public: + CMusicManager(); + ~CMusicManager(); + + inline IDirectMusicLoader8* GetLoader() { return m_pLoader; } + inline IDirectMusicPerformance8* GetPerformance() { return m_pPerformance; } + IDirectMusicAudioPath8* GetDefaultAudioPath(); + + HRESULT Initialize( HWND hWnd, DWORD dwPChannels = 128, DWORD dwDefaultPathType = DMUS_APATH_DYNAMIC_STEREO ); + + HRESULT SetSearchDirectory( const TCHAR* strMediaPath ); + VOID CollectGarbage(); + + HRESULT CreateSegmentFromFile( CMusicSegment** ppSegment, TCHAR* strFileName, + BOOL bDownloadNow = TRUE, BOOL bIsMidiFile = FALSE ); + HRESULT CreateScriptFromFile( CMusicScript** ppScript, TCHAR* strFileName ); + + HRESULT CreateChordMapFromFile( IDirectMusicChordMap8** ppChordMap, TCHAR* strFileName ); + HRESULT CreateStyleFromFile( IDirectMusicStyle8** ppStyle, TCHAR* strFileName ); + HRESULT GetMotifFromStyle( IDirectMusicSegment8** ppMotif, TCHAR* strStyle, TCHAR* wstrMotif ); + + HRESULT CreateSegmentFromResource( CMusicSegment** ppSegment, TCHAR* strResource, TCHAR* strResourceType, + BOOL bDownloadNow = TRUE, BOOL bIsMidiFile = FALSE ); +}; + + + + +//----------------------------------------------------------------------------- +// Name: class CMusicSegment +// Desc: Encapsulates functionality of an IDirectMusicSegment +//----------------------------------------------------------------------------- +class CMusicSegment +{ +protected: + IDirectMusicSegment8* m_pSegment; + IDirectMusicLoader8* m_pLoader; + IDirectMusicPerformance8* m_pPerformance; + IDirectMusicAudioPath8* m_pEmbeddedAudioPath; + BOOL m_bDownloaded; + +public: + CMusicSegment( IDirectMusicPerformance8* pPerformance, + IDirectMusicLoader8* pLoader, + IDirectMusicSegment8* pSegment ); + virtual ~CMusicSegment(); + + inline IDirectMusicSegment8* GetSegment() { return m_pSegment; } + HRESULT GetStyle( IDirectMusicStyle8** ppStyle, DWORD dwStyleIndex = 0 ); + + HRESULT SetRepeats( DWORD dwRepeats ); + HRESULT Play( DWORD dwFlags = DMUS_SEGF_SECONDARY, IDirectMusicAudioPath8* pAudioPath = NULL ); + HRESULT Stop( DWORD dwFlags = 0 ); + HRESULT Download( IDirectMusicAudioPath8* pAudioPath = NULL ); + HRESULT Unload( IDirectMusicAudioPath8* pAudioPath = NULL ); + + BOOL IsPlaying(); +}; + + + + +//----------------------------------------------------------------------------- +// Name: class CMusicScript +// Desc: Encapsulates functionality of an IDirectMusicScript +//----------------------------------------------------------------------------- +class CMusicScript +{ +protected: + IDirectMusicScript8* m_pScript; + IDirectMusicLoader8* m_pLoader; + IDirectMusicPerformance8* m_pPerformance; + +public: + CMusicScript( IDirectMusicPerformance8* pPerformance, + IDirectMusicLoader8* pLoader, + IDirectMusicScript8* pScript ); + virtual ~CMusicScript(); + + inline IDirectMusicScript8* GetScript() { return m_pScript; } + + HRESULT CallRoutine( TCHAR* strRoutine ); + HRESULT SetVariableNumber( TCHAR* strVariable, LONG lValue ); + HRESULT GetVariableNumber( TCHAR* strVariable, LONG* plValue ); +}; + + + + +#endif // DMUTIL_H diff --git a/plugins/!NotAdopted/sndVol/dxutil.cpp b/plugins/!NotAdopted/sndVol/dxutil.cpp new file mode 100644 index 0000000000..7cf3ecd863 --- /dev/null +++ b/plugins/!NotAdopted/sndVol/dxutil.cpp @@ -0,0 +1,226 @@ +//----------------------------------------------------------------------------- +// File: DXUtil.cpp +// +// Desc: Shortcut macros and functions for using DX objects +// +// +// Copyright (c) 1997-2001 Microsoft Corporation. All rights reserved +//----------------------------------------------------------------------------- +#define STRICT +#include +#include +#include +#include +#include +#include "DXUtil.h" + +//----------------------------------------------------------------------------- +// Name: DXUtil_ConvertAnsiStringToWide() +// Desc: This is a UNICODE conversion utility to convert a CHAR string into a +// WCHAR string. cchDestChar defaults -1 which means it +// assumes strDest is large enough to store strSource +//----------------------------------------------------------------------------- +VOID DXUtil_ConvertAnsiStringToWide( WCHAR* wstrDestination, const CHAR* strSource, + int cchDestChar ) +{ + if( wstrDestination==NULL || strSource==NULL ) + return; + + if( cchDestChar == -1 ) + cchDestChar = strlen(strSource)+1; + + MultiByteToWideChar( CP_ACP, 0, strSource, -1, + wstrDestination, cchDestChar-1 ); + + wstrDestination[cchDestChar-1] = 0; +} + + + + +//----------------------------------------------------------------------------- +// Name: DXUtil_ConvertWideStringToAnsi() +// Desc: This is a UNICODE conversion utility to convert a WCHAR string into a +// CHAR string. cchDestChar defaults -1 which means it +// assumes strDest is large enough to store strSource +//----------------------------------------------------------------------------- +VOID DXUtil_ConvertWideStringToAnsi( CHAR* strDestination, const WCHAR* wstrSource, + int cchDestChar ) +{ + if( strDestination==NULL || wstrSource==NULL ) + return; + + if( cchDestChar == -1 ) + cchDestChar = wcslen(wstrSource)+1; + + WideCharToMultiByte( CP_ACP, 0, wstrSource, -1, strDestination, + cchDestChar-1, NULL, NULL ); + + strDestination[cchDestChar-1] = 0; +} + + + + +//----------------------------------------------------------------------------- +// Name: DXUtil_ConvertGenericStringToAnsi() +// Desc: This is a UNICODE conversion utility to convert a TCHAR string into a +// CHAR string. cchDestChar defaults -1 which means it +// assumes strDest is large enough to store strSource +//----------------------------------------------------------------------------- +VOID DXUtil_ConvertGenericStringToAnsi( CHAR* strDestination, const TCHAR* tstrSource, + int cchDestChar ) +{ + if( strDestination==NULL || tstrSource==NULL || cchDestChar == 0 ) + return; + +#ifdef _UNICODE + DXUtil_ConvertWideStringToAnsi( strDestination, tstrSource, cchDestChar ); +#else + if( cchDestChar == -1 ) + { + strcpy( strDestination, tstrSource ); + } + else + { + strncpy( strDestination, tstrSource, cchDestChar ); + strDestination[cchDestChar-1] = '\0'; + } +#endif +} + + + + +//----------------------------------------------------------------------------- +// Name: DXUtil_ConvertGenericStringToWide() +// Desc: This is a UNICODE conversion utility to convert a TCHAR string into a +// WCHAR string. cchDestChar defaults -1 which means it +// assumes strDest is large enough to store strSource +//----------------------------------------------------------------------------- +VOID DXUtil_ConvertGenericStringToWide( WCHAR* wstrDestination, const TCHAR* tstrSource, + int cchDestChar ) +{ + if( wstrDestination==NULL || tstrSource==NULL || cchDestChar == 0 ) + return; + +#ifdef _UNICODE + if( cchDestChar == -1 ) + { + wcscpy( wstrDestination, tstrSource ); + } + else + { + wcsncpy( wstrDestination, tstrSource, cchDestChar ); + wstrDestination[cchDestChar-1] = L'\0'; + } +#else + DXUtil_ConvertAnsiStringToWide( wstrDestination, tstrSource, cchDestChar ); +#endif +} + + + + +//----------------------------------------------------------------------------- +// Name: DXUtil_ConvertAnsiStringToGeneric() +// Desc: This is a UNICODE conversion utility to convert a CHAR string into a +// TCHAR string. cchDestChar defaults -1 which means it +// assumes strDest is large enough to store strSource +//----------------------------------------------------------------------------- +VOID DXUtil_ConvertAnsiStringToGeneric( TCHAR* tstrDestination, const CHAR* strSource, + int cchDestChar ) +{ + if( tstrDestination==NULL || strSource==NULL || cchDestChar == 0 ) + return; + +#ifdef _UNICODE + DXUtil_ConvertAnsiStringToWide( tstrDestination, strSource, cchDestChar ); +#else + if( cchDestChar == -1 ) + { + strcpy( tstrDestination, strSource ); + } + else + { + strncpy( tstrDestination, strSource, cchDestChar ); + tstrDestination[cchDestChar-1] = '\0'; + } +#endif +} + + + + +//----------------------------------------------------------------------------- +// Name: DXUtil_ConvertAnsiStringToGeneric() +// Desc: This is a UNICODE conversion utility to convert a WCHAR string into a +// TCHAR string. cchDestChar defaults -1 which means it +// assumes strDest is large enough to store strSource +//----------------------------------------------------------------------------- +VOID DXUtil_ConvertWideStringToGeneric( TCHAR* tstrDestination, const WCHAR* wstrSource, + int cchDestChar ) +{ + if( tstrDestination==NULL || wstrSource==NULL || cchDestChar == 0 ) + return; + +#ifdef _UNICODE + if( cchDestChar == -1 ) + { + wcscpy( tstrDestination, wstrSource ); + } + else + { + wcsncpy( tstrDestination, wstrSource, cchDestChar ); + tstrDestination[cchDestChar-1] = L'\0'; + } +#else + DXUtil_ConvertWideStringToAnsi( tstrDestination, wstrSource, cchDestChar ); +#endif +} + +//----------------------------------------------------------------------------- +// Name: _DbgOut() +// Desc: Outputs a message to the debug stream +//----------------------------------------------------------------------------- +HRESULT _DbgOut( TCHAR* strFile, DWORD dwLine, HRESULT hr, TCHAR* strMsg ) +{ + TCHAR buffer[256]; + wsprintf( buffer, _T("%s(%ld): "), strFile, dwLine ); + OutputDebugString( buffer ); + OutputDebugString( strMsg ); + + if( hr ) + { + wsprintf( buffer, _T("(hr=%08lx)\n"), hr ); + OutputDebugString( buffer ); + } + + OutputDebugString( _T("\n") ); + + return hr; +} + + + + +//----------------------------------------------------------------------------- +// Name: DXUtil_Trace() +// Desc: Outputs to the debug stream a formatted string with a variable- +// argument list. +//----------------------------------------------------------------------------- +VOID DXUtil_Trace( TCHAR* strMsg, ... ) +{ +#if defined(DEBUG) | defined(_DEBUG) + TCHAR strBuffer[512]; + + va_list args; + va_start(args, strMsg); + _vsntprintf( strBuffer, 512, strMsg, args ); + va_end(args); + + OutputDebugString( strBuffer ); +#else + UNREFERENCED_PARAMETER(strMsg); +#endif +} diff --git a/plugins/!NotAdopted/sndVol/dxutil.h b/plugins/!NotAdopted/sndVol/dxutil.h new file mode 100644 index 0000000000..cfded98bcd --- /dev/null +++ b/plugins/!NotAdopted/sndVol/dxutil.h @@ -0,0 +1,49 @@ +//----------------------------------------------------------------------------- +// File: DXUtil.h +// +// Desc: Helper functions and typing shortcuts for DirectX programming. +// +// Copyright (c) 1997-2001 Microsoft Corporation. All rights reserved +//----------------------------------------------------------------------------- +#ifndef DXUTIL_H +#define DXUTIL_H + +//----------------------------------------------------------------------------- +// UNICODE support for converting between CHAR, TCHAR, and WCHAR strings +//----------------------------------------------------------------------------- +VOID DXUtil_ConvertAnsiStringToWide( WCHAR* wstrDestination, const CHAR* strSource, int cchDestChar = -1 ); +VOID DXUtil_ConvertWideStringToAnsi( CHAR* strDestination, const WCHAR* wstrSource, int cchDestChar = -1 ); +VOID DXUtil_ConvertGenericStringToAnsi( CHAR* strDestination, const TCHAR* tstrSource, int cchDestChar = -1 ); +VOID DXUtil_ConvertGenericStringToWide( WCHAR* wstrDestination, const TCHAR* tstrSource, int cchDestChar = -1 ); +VOID DXUtil_ConvertAnsiStringToGeneric( TCHAR* tstrDestination, const CHAR* strSource, int cchDestChar = -1 ); +VOID DXUtil_ConvertWideStringToGeneric( TCHAR* tstrDestination, const WCHAR* wstrSource, int cchDestChar = -1 ); + +//----------------------------------------------------------------------------- +// Miscellaneous helper functions +//----------------------------------------------------------------------------- +#define SAFE_DELETE(p) { if(p) { delete (p); (p)=NULL; } } +#define SAFE_DELETE_ARRAY(p) { if(p) { delete[] (p); (p)=NULL; } } +#define SAFE_RELEASE(p) { if(p) { (p)->Release(); (p)=NULL; } } + +//----------------------------------------------------------------------------- +// Debug printing support +//----------------------------------------------------------------------------- +VOID DXUtil_Trace( TCHAR* strMsg, ... ); +HRESULT _DbgOut( TCHAR*, DWORD, HRESULT, TCHAR* ); + +#if defined(DEBUG) | defined(_DEBUG) + #define DXTRACE DXUtil_Trace +#else + #define DXTRACE sizeof +#endif + +#if defined(DEBUG) | defined(_DEBUG) + #define DEBUG_MSG(str) _DbgOut( __FILE__, (DWORD)__LINE__, 0, str ) +#else + #define DEBUG_MSG(str) (0L) +#endif + + + + +#endif // DXUTIL_H diff --git a/plugins/!NotAdopted/sndVol/m_cluiframes.h b/plugins/!NotAdopted/sndVol/m_cluiframes.h new file mode 100644 index 0000000000..d046439346 --- /dev/null +++ b/plugins/!NotAdopted/sndVol/m_cluiframes.h @@ -0,0 +1,128 @@ +/* +Miranda ICQ: the free icq client for MS Windows +Copyright (C) 2000-2 Richard Hughes, Roland Rabien & Tristan Van de Vreede + +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 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 "../../core/commonheaders.h" +//#pragma hdrstop + +//adds a frame window +//wParam=(CLISTFrame*) +//lParam=0 +//returns an integer, the frame id. +typedef struct tagCLISTFrame { + DWORD cbSize; + HWND hWnd ; + HICON hIcon; + int align; //al flags below + int height; + int Flags; //F_flags below + char *name; //frame window name,will be shown in menu + char *TBname; //titlebar caption + //COLORREF TBBackColour; //titlebar background colour +} CLISTFrame; +#define F_VISIBLE 1 //Frame visible +#define F_SHOWTB 2 //Show TitleBar +#define F_UNCOLLAPSED 4 //UnCollapse frame +#define F_LOCKED 8 //Lock Frame +#define F_NOBORDER 16 //Dont apply WS_BORDER style for window +#define F_SHOWTBTIP 32 //Show titlebar tooltip + + +// frame alignment +#define alTop 0x00000001 +#define alBottom 0x00000002 +#define alClient 0x00000004 //only one alClient frame +#define MS_CLIST_FRAMES_ADDFRAME "CListFrames/AddFrame" + +#define MS_CLIST_FRAMES_REMOVEFRAME "CListFrames/RemoveFrame" + +//shows all frames +//wParam=lParam=0 +//returns 0 on success, -1 on failure +#define MS_CLIST_FRAMES_SHOWALLFRAMES "CListFrames/ShowALLFrames" + +//shows the titlebars of all frames +//wParam=lParam=0 +//returns 0 on success, -1 on failure +#define MS_CLIST_FRAMES_SHOWALLFRAMESTB "CListFrames/ShowALLFramesTB" + +//hides the titlebars of all frames +//wParam=lParam=0 +//returns 0 on success, -1 on failure +#define MS_CLIST_FRAMES_HIDEALLFRAMESTB "CListFrames/HideALLFramesTB" + +//shows the frame if it is hidden, +//hides the frame if it is shown +//wParam=FrameId +//lParam=0 +//returns 0 on success, -1 on failure +#define MS_CLIST_FRAMES_SHFRAME "CListFrames/SHFrame" + +//shows the frame titlebar if it is hidden, +//hides the frame titlebar if it is shown +//wParam=FrameId +//lParam=0 +//returns 0 on success, -1 on failure +#define MS_CLIST_FRAMES_SHFRAMETITLEBAR "CListFrame/SHFrameTitleBar" + +//locks the frame if it is unlocked, +//unlock the frame if it is locked +//wParam=FrameId +//lParam=0 +//returns 0 on success, -1 on failure +#define MS_CLIST_FRAMES_ULFRAME "CListFrame/ULFrame" + +//collapses the frame if it is uncollapsed, +//uncollapses the frame if it is collapsed +//wParam=FrameId +//lParam=0 +//returns 0 on success, -1 on failure +#define MS_CLIST_FRAMES_UCOLLFRAME "CListFrame/UCOLLFrame" + +//redraws the frame +//wParam=FrameId, -1 for all frames +//lparam=FU_flags +//returns a pointer to option, -1 on failure +#define FU_TBREDRAW 1 //redraw titlebar +#define FU_FMREDRAW 2 //redraw Frame +#define FU_FMPOS 4 //update Frame position +#define MS_CLIST_FRAMES_UPDATEFRAME "CListFrame/UpdateFrame" + +//gets the frame options +//(HIWORLD)wParam=FrameId +//(LOWORD)wParam=FO_flag +//lParam=0 +//returns a pointer to option, -1 on failure +#define FO_FLAGS 0x0001 //return set of F_VISIBLE,F_SHOWTB,F_UNCOLLAPSED,F_LOCKED,F_NOBORDER,F_SHOWTBTIP +#define FO_NAME 0x0002 //Change name +#define FO_TBNAME 0x0003 //Change TB caption +#define FO_TBSTYLE 0x0004 //Change TB style +#define FO_TBEXSTYLE 0x0005 //Change TB exstyle +#define FO_ICON 0x0006 //Change icon +#define FO_HEIGHT 0x0007 //Change height +#define FO_ALIGN 0x0008 //Change align +#define FO_TBTIPNAME 0x0009 //Change TB tooltip + +#define MS_CLIST_FRAMES_GETFRAMEOPTIONS "CListFrame/GetFrameOptions" + +//sets the frame options +//(HIWORLD)wParam=FrameId +//(LOWORD)wParam=FO_flag +//lParam=value +//returns 0 on success, -1 on failure +#define MS_CLIST_FRAMES_SETFRAMEOPTIONS "CListFrame/SetFrameOptions" diff --git a/plugins/!NotAdopted/sndVol/nosnd.ico b/plugins/!NotAdopted/sndVol/nosnd.ico new file mode 100644 index 0000000000..231bc4187d Binary files /dev/null and b/plugins/!NotAdopted/sndVol/nosnd.ico differ diff --git a/plugins/!NotAdopted/sndVol/optionsdlg.cpp b/plugins/!NotAdopted/sndVol/optionsdlg.cpp new file mode 100644 index 0000000000..88443448c0 --- /dev/null +++ b/plugins/!NotAdopted/sndVol/optionsdlg.cpp @@ -0,0 +1,146 @@ +#include "plugin.h" +#include "playSnd.h" +#include "resource.h" +#include "optionsdlg.h" + +#include + +#pragma comment(lib, "comctl32.lib") + + +LRESULT CALLBACK GroupWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + switch( uMsg ) + { + case WM_LBUTTONDOWN: + ::MessageBox(0,"LB","",0); + return 0; + case WM_PAINT: + { + CallWindowProc((WNDPROC)GetWindowLong(hwnd, GWL_USERDATA), hwnd, uMsg, wParam, lParam); + + HDC hdc = GetDC(hwnd); + RECT rc; + char szTitle[256]; + HFONT oldfont; + int oldBk; + ZeroMemory(&rc, sizeof(rc)); + // Determine a size of the text + + oldBk = SetBkMode(hdc, TRANSPARENT); + oldfont = (HFONT)SelectObject(hdc, (HFONT)SendMessage(hwnd, WM_GETFONT, 0,0)); + SetBkMode(hdc, TRANSPARENT); + GetWindowText(hwnd, szTitle, sizeof(szTitle)); + DrawText(hdc, szTitle, lstrlen(szTitle), &rc, DT_SINGLELINE|DT_CALCRECT); + + rc.left += 8; rc.right += 8 + 16 + 4; + + FillRect(hdc, &rc, (HBRUSH) (COLOR_BTNFACE+1)); + DrawIconEx(hdc, rc.left+2, rc.top, hSoundOn, 16,16, 0, NULL, DI_NORMAL); + + rc.left += 2 + 16 + 2; + //rc.right += 2 + 16 + 2; + DrawText(hdc, szTitle, lstrlen(szTitle), &rc, DT_SINGLELINE|DT_WORD_ELLIPSIS); + + SetBkMode(hdc, oldBk); + + SelectObject(hdc, oldfont); + + ReleaseDC(hwnd, hdc); + + return 0; + } + } + + return CallWindowProc((WNDPROC)GetWindowLong(hwnd, GWL_USERDATA), hwnd, uMsg, wParam, lParam); +} +// +// OptionsDlgProc() +// this handles the options page +// verwaltet die Optionsseite +// +LRESULT CALLBACK OptionsDlgProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ) +{ + switch( uMsg ) + { + case WM_INITDIALOG: + { + HWND grp = GetDlgItem(hwndDlg, IDC_GRP); + + TranslateDialogDefault(hwndDlg); + CheckDlgButton(hwndDlg, IDC_AUTO, DBGetContactSettingByte(NULL,SERVICENAME,"AutoPreview", TRUE)?BST_CHECKED:BST_UNCHECKED); + CheckDlgButton(hwndDlg, IDC_MUTE, DBGetContactSettingByte(NULL,SERVICENAME,"MuteBtn", TRUE)?BST_CHECKED:BST_UNCHECKED); + + hwndOptSlider = GetDlgItem(hwndDlg, IDC_VOLUME); + SendDlgItemMessage(hwndDlg, IDC_VOLUME, TBM_SETRANGE, FALSE, MAKELONG(SLIDER_MIN,SLIDER_MAX)); + SendDlgItemMessage(hwndDlg, IDC_VOLUME, TBM_SETPOS, TRUE, DBGetContactSettingDword(NULL,SERVICENAME,"Volume",100)); + + SetWindowLong(grp, GWL_USERDATA, GetWindowLong(grp, GWL_WNDPROC)); + SetWindowLong(grp, GWL_WNDPROC, (LONG)GroupWndProc); + + return TRUE; + } + case WM_HSCROLL: + SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); + break; + + case WM_COMMAND: + if(LOWORD(wParam) == IDC_TEST) + { + //playSnd::g_bInOption = TRUE; + playSnd::SetVolume((DWORD)SendDlgItemMessage(hwndDlg, IDC_VOLUME, TBM_GETPOS, 0, 0)); + SkinPlaySound("RecvMsg"); + //playSnd::g_bInOption = FALSE; + return FALSE; + } + SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0,0); + break; + + case WM_NOTIFY: + switch(((LPNMHDR)lParam)->code) + { + case NM_RELEASEDCAPTURE: + if(IsDlgButtonChecked(hwndDlg, IDC_AUTO) == BST_CHECKED) + { + int value = (DWORD)SendDlgItemMessage(hwndDlg, IDC_VOLUME, TBM_GETPOS, 0, 0); + if(hwndSlider) SendMessage(hwndSlider, TBM_SETPOS, TRUE, value/SLIDER_DIV); + + //playSnd::g_bInOption = TRUE; + playSnd::SetVolume(value); + SkinPlaySound("RecvMsg"); + //playSnd::g_bInOption = FALSE; + } + break; + case PSN_APPLY: + { + int value = (DWORD)SendDlgItemMessage(hwndDlg, IDC_VOLUME, TBM_GETPOS, 0, 0); + if(hwndSlider) SendMessage(hwndSlider, TBM_SETPOS, TRUE, value/SLIDER_DIV); + playSnd::SetVolume(value); + DBWriteContactSettingDword(NULL, SERVICENAME, "Volume", value); + autoPreview = (BYTE)(IsDlgButtonChecked(hwndDlg, IDC_AUTO) == BST_CHECKED); + DBWriteContactSettingByte(NULL, SERVICENAME, "AutoPreview", autoPreview); + value = (BYTE)(IsDlgButtonChecked(hwndDlg, IDC_MUTE) == BST_CHECKED); + DBWriteContactSettingByte(NULL, SERVICENAME, "MuteBtn", value); + PostMessage(hwndFrame, WM_USER, value, 0); + + return TRUE; + } + case PSN_RESET: + { + int value = DBGetContactSettingDword(NULL,SERVICENAME,"Volume",100); + SendDlgItemMessage(hwndDlg, IDC_VOLUME, TBM_SETPOS, TRUE, value); + if(hwndSlider) SendMessage(hwndSlider, TBM_SETPOS, TRUE, value/SLIDER_DIV); + playSnd::SetVolume(value); + + return TRUE; + } + } + break; + + case WM_DESTROY: + hwndOptSlider = NULL; + return FALSE; + } + + return FALSE; +} diff --git a/plugins/!NotAdopted/sndVol/optionsdlg.h b/plugins/!NotAdopted/sndVol/optionsdlg.h new file mode 100644 index 0000000000..ae4080788e --- /dev/null +++ b/plugins/!NotAdopted/sndVol/optionsdlg.h @@ -0,0 +1 @@ +LRESULT CALLBACK OptionsDlgProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ); \ No newline at end of file diff --git a/plugins/!NotAdopted/sndVol/playSnd.cpp b/plugins/!NotAdopted/sndVol/playSnd.cpp new file mode 100644 index 0000000000..9b084ca4f1 --- /dev/null +++ b/plugins/!NotAdopted/sndVol/playSnd.cpp @@ -0,0 +1,137 @@ +#include "plugin.h" +#include "playSnd.h" + +namespace playSnd +{ + +CMusicManager* g_pMusicManager = NULL; +CMusicSegment* g_pMusicSegment = NULL; +HANDLE g_hDMusicMessageEvent = NULL; +DWORD g_dwVolume = -77777; +BOOL g_bInOption = FALSE; + + +HRESULT Init() +{ + HRESULT hr; + g_pMusicManager = new CMusicManager(); + + if( FAILED( hr = g_pMusicManager->Initialize( NULL ) ) ) + return DXTRACE_ERR( TEXT("Initialize"), hr ); + + return S_OK; +} + +void Destroy() +{ + SAFE_DELETE( g_pMusicSegment ); + SAFE_DELETE( g_pMusicManager ); +} + +//----------------------------------------------------------------------------- +// Name: LoadSegmentFile() +// Desc: +//----------------------------------------------------------------------------- +HRESULT LoadSegmentFile( char* strFileName ) +{ + HRESULT hr; + + // Free any previous segment, and make a new one + SAFE_DELETE( g_pMusicSegment ); + + // Have the loader collect any garbage now that the old + // segment has been released + g_pMusicManager->CollectGarbage(); + + // Set the media path based on the file name (something like C:\MEDIA) + // to be used as the search directory for finding DirectMusic content + // related to this file. + TCHAR strMediaPath[MAX_PATH]; + _tcscpy( strMediaPath, strFileName ); + TCHAR* strLastSlash = _tcsrchr(strMediaPath, TEXT('\\')); + if(strLastSlash != NULL) + { + *strLastSlash = 0; + if( FAILED( hr = g_pMusicManager->SetSearchDirectory( strMediaPath ) ) ) + return DXTRACE_ERR( TEXT("SetSearchDirectory"), hr ); + } + else + { + if( FAILED( hr = g_pMusicManager->SetSearchDirectory( "" ) ) ) + return DXTRACE_ERR( TEXT("SetSearchDirectory"), hr ); + } + + // For DirectMusic must know if the file is a standard MIDI file or not + // in order to load the correct instruments. + BOOL bMidiFile = FALSE; + if( strstr( strFileName, ".mid" ) != NULL || + strstr( strFileName, ".rmi" ) != NULL ) + { + bMidiFile = TRUE; + } + + BOOL bWavFile = FALSE; + if( strstr( strFileName, ".wav" ) != NULL ) + { + bWavFile = TRUE; + } + + // Load the file into a DirectMusic segment + if( FAILED( g_pMusicManager->CreateSegmentFromFile( &g_pMusicSegment, strFileName, + TRUE, bMidiFile ) ) ) + { + // Not a critical failure, so just update the status + return E_FAIL; + } + + return S_OK; +} + +BOOL WINAPI PlaySound(char* pszSound, HMODULE hmod, DWORD fdwSound) +{ + /* + if(!g_bInOption) + { + DWORD volume = (DWORD)DBGetContactSettingDword(NULL, SERVICENAME, "Volume", 100); + + if(volume != g_dwVolume) + { + g_dwVolume = volume; + playSnd::SetVolume(g_dwVolume); + } + } + */ + HRESULT hr; + + if( FAILED( hr = LoadSegmentFile(pszSound) ) ) + return FALSE; + + if( FAILED( hr = g_pMusicSegment->SetRepeats( 0 ) ) ) + return FALSE; + + // Play the segment and wait. The DMUS_SEGF_BEAT indicates to play on the + // next beat if there is a segment currently playing. + if( FAILED( hr = g_pMusicSegment->Play( DMUS_SEGF_BEAT ) ) ) + return FALSE; + + return TRUE; +} + + +BOOL SetVolume(long Value) +{ + long value = (int)(log10(Value)/2.0*5000.0-4000.0); + IDirectMusicPerformance* pPerf = NULL; + if( g_pMusicManager ) + pPerf = g_pMusicManager->GetPerformance(); + if( NULL == pPerf ) + return FALSE; + + // Adjust the slider position to match GUID_PerfMasterTempo range + pPerf->SetGlobalParam(GUID_PerfMasterVolume, (void*)&value, sizeof(long)); + + return TRUE; +} + + +} diff --git a/plugins/!NotAdopted/sndVol/playSnd.h b/plugins/!NotAdopted/sndVol/playSnd.h new file mode 100644 index 0000000000..f9a6c3299f --- /dev/null +++ b/plugins/!NotAdopted/sndVol/playSnd.h @@ -0,0 +1,24 @@ +#include +#include +#include +#include +#include +#include +#include +#include "DMUtil.h" +#include "DXUtil.h" + +//----------------------------------------------------------------------------- +// Defines, constants, and global variables +//----------------------------------------------------------------------------- + +namespace playSnd +{ + extern BOOL g_bInOption; + + HRESULT Init(); + void Destroy(); + HRESULT LoadSegmentFile( TCHAR* strFileName ); + BOOL WINAPI PlaySound(char* pszSound, HMODULE hmod, DWORD fdwSound); + BOOL SetVolume(long Value); +} diff --git a/plugins/!NotAdopted/sndVol/plugin.cpp b/plugins/!NotAdopted/sndVol/plugin.cpp new file mode 100644 index 0000000000..f179dbb645 --- /dev/null +++ b/plugins/!NotAdopted/sndVol/plugin.cpp @@ -0,0 +1,362 @@ +#define _WIN32_WINNT 0x0500 +#include "plugin.h" +#include "playSnd.h" +#include "optionsdlg.h" +#include "resource.h" +#include "m_cluiframes.h" + +#include "IcoLib.h" + +HINSTANCE hInst; +PLUGINLINK *pluginLink; + +HWND hwndFrame = NULL, hwndMute = NULL, hwndSlider = NULL, hwndOptSlider = NULL; +HANDLE hHookSkinPlayingSound, hHookDbSettingChange, hHookSkinIconsChanged; +HHOOK hHookMouse; +bool showMute = TRUE; + +char szTitle[] = "sndVol"; +bool isEnabled = FALSE; +HICON hSoundOn = NULL, hSoundOff = NULL; +int isMuteVisible = FALSE; +int autoPreview = FALSE; + +char *szIconId[2] = {"sndVol_Off", "sndVol_On"}; +char *szIconName[2] = {"Off", "On"}; +int iIconId[2] = {-IDI_SND_OFF, -IDI_SND_ON}; + +PLUGININFO pluginInfo={ + sizeof( PLUGININFO ), + szTitle, + PLUGIN_MAKE_VERSION( 0,0,1,1 ), + "Volume control 4 Miranda's events sound", + "Denis Stanishevskiy // StDenis", + "stdenformiranda(at)fromru(dot)com", + "Copyright (c) 2005, Denis Stanishevskiy", + "", + 0, 0 +}; + +BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved) +{ + hInst=hinstDLL; + if(fdwReason == DLL_PROCESS_ATTACH) + DisableThreadLibraryCalls(GetModuleHandle("sndvol")); + return TRUE; +} + +__declspec(dllexport) PLUGININFO* MirandaPluginInfo(DWORD mirandaVersion) +{ + return &pluginInfo; +} + +HANDLE hMenuItem; + +int OnSkinPlayingSound(WPARAM wParam,LPARAM lParam) +{ + char * pszFile = (char *) lParam; + if(pszFile && (DBGetContactSettingByte(NULL,"Skin","UseSound",1) || (int)wParam==1)) + playSnd::PlaySound(pszFile, NULL, SND_ASYNC | SND_FILENAME | SND_NOWAIT); + return 0; +} + +int OnSkinIconsChanged(WPARAM wParam,LPARAM lParam) +{ + hSoundOff = (HICON)CallService(MS_SKIN2_GETICON, 0, (LPARAM)szIconId[0]); + hSoundOn = (HICON)CallService(MS_SKIN2_GETICON, 0, (LPARAM)szIconId[1]); + + int useSound = DBGetContactSettingByte(NULL,"Skin","UseSound",1); + DBWriteContactSettingByte(NULL,"Skin","UseSound",useSound); + SendMessage(hwndMute, BM_SETIMAGE,IMAGE_ICON,(LPARAM)(useSound?hSoundOn:hSoundOff)); + + return 0; +} + +int OnSettingChanged(WPARAM wParam,LPARAM lParam) +{ + if(wParam != 0 || lParam == NULL) return 0; + { + DBCONTACTWRITESETTING *dbcws=(DBCONTACTWRITESETTING*)lParam; + if(!strcmp(dbcws->szModule,"Skin")) + if(!strcmp(dbcws->szSetting,"UseSound")) + { + int useSound = dbcws->value.bVal; + SendMessage(hwndMute, BM_SETIMAGE,IMAGE_ICON,(LPARAM)(useSound?hSoundOn:hSoundOff)); + + return 0; + }; + } + + return 0; +} + +static int OnOptionsInit(WPARAM wParam,LPARAM lParam) +{ + OPTIONSDIALOGPAGE odp; + + ZeroMemory(&odp, sizeof(odp)); + + odp.cbSize = sizeof(odp); + odp.pszGroup = Translate("Events"); + odp.position = -200000000; + odp.hInstance = hInst; + odp.pszTemplate = MAKEINTRESOURCE(IDD_OPT); + odp.pszTitle = Translate("Sounds Volume"); + odp.pfnDlgProc = (DLGPROC)OptionsDlgProc; + odp.flags = ODPF_BOLDGROUPS; + CallService(MS_OPT_ADDPAGE, wParam, (LPARAM)&odp); + + return 0; +} + +BOOL __inline IsMouseInside(HWND hwnd) +{ + POINT pt; + HWND hwndAtPt; + + GetCursorPos(&pt); + hwndAtPt = WindowFromPoint(pt); + while(hwndAtPt != NULL) + { + if(hwndAtPt == hwnd) + return TRUE; + hwndAtPt = GetParent(hwndAtPt); + } + return FALSE; + //return (hwndAtPt == hwnd) || (GetParent(hwndAtPt) == hwnd); + //GetWindowRect(hwnd, &rc); + //return PtInRect(&rc, pt); +} + +LRESULT CALLBACK OnMouseHook(int code, WPARAM wParam, LPARAM lParam) +{ + if(code >= 0) + { + if(wParam == WM_MOUSEWHEEL) + { + //MOUSEHOOKSTRUCTEX *mhk = (MOUSEHOOKSTRUCTEX*)lParam; + MSLLHOOKSTRUCT *mhk = (MSLLHOOKSTRUCT*)lParam; + + if(IsMouseInside(hwndSlider)) + { + int count = (short)HIWORD(mhk->mouseData); + + PostMessage(hwndSlider, WM_MOUSEWHEEL, MAKEWPARAM(0,-count), MAKELPARAM(mhk->pt.x, mhk->pt.y)); + + return 1; + } + + } + } + return CallNextHookEx(hHookMouse, code, wParam, lParam); +} + + +static LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + switch(msg) + { + case WM_CREATE: + { +#define MUTE_W 20 +#define MUTE_H 20 + isMuteVisible = DBGetContactSettingByte(NULL,SERVICENAME,"MuteBtn", TRUE); + hwndMute = CreateWindow(MIRANDABUTTONCLASS, + "", + WS_CHILD | (isMuteVisible?WS_VISIBLE:0), + 1, + 1, + MUTE_W, + MUTE_H, + hwnd, + (HMENU)0, + (HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE), + NULL); + SendMessage(hwndMute, BUTTONSETASFLATBTN,0,0); + SendMessage(hwndMute, BM_SETIMAGE,IMAGE_ICON,(LPARAM)hSoundOn); + hwndSlider = CreateWindow(TRACKBAR_CLASS, + "", + WS_CHILD | WS_VISIBLE | TBS_NOTICKS, + MUTE_W+1, + 1, + 120, + MUTE_W, + hwnd, + (HMENU)0, + (HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE), + NULL); + //SendMessage(hwndSlider, TBM_SETRANGE, FALSE, MAKELONG(-10000/3,1000)); + SendMessage(hwndSlider, TBM_SETRANGE, FALSE, MAKELONG(SLIDER_MIN, SLIDER_MAX/SLIDER_DIV)); + SendMessage(hwndSlider, TBM_SETPOS, TRUE, DBGetContactSettingDword(NULL,SERVICENAME,"Volume",1000)/SLIDER_DIV); + + //SetWindowLong(hwndSlider, GWL_USERDATA, GetWindowLong(hwndSlider, GWL_WNDPROC)); + //SetWindowLong(hwndSlider, GWL_WNDPROC, (LONG)SliderWndProc); + + break; + } + case WM_COMMAND: + if((HWND)lParam == hwndMute) + { + int useSound = !DBGetContactSettingByte(NULL,"Skin","UseSound",1); + DBWriteContactSettingByte(NULL,"Skin","UseSound",useSound); + SendMessage(hwndMute, BM_SETIMAGE,IMAGE_ICON,(LPARAM)(useSound?hSoundOn:hSoundOff)); + } + break; + /* + case WM_MOUSEWHEEL: + { + int count = HIWORD(wParam); + break; + } + */ + case WM_USER: + ShowWindow(hwndMute, wParam?SW_SHOW:SW_HIDE); + isMuteVisible = wParam; + case WM_HSCROLL: + { + int value = (DWORD)SendMessage(hwndSlider, TBM_GETPOS, 0, 0)*SLIDER_DIV; + if(hwndOptSlider) + SendMessage(hwndOptSlider, TBM_SETPOS, TRUE, value); + else + DBWriteContactSettingDword(NULL, SERVICENAME, "Volume", value); + playSnd::SetVolume(value); + SkinPlaySound("RecvMsg"); + + break; + } + case WM_SIZE: + { + RECT rect; + // = DBGetContactSettingByte(NULL,SERVICENAME,"MuteBtn", TRUE);//IsWindowVisible(hwndMute); + + GetClientRect(hwnd,&rect); +#define SLIDER_H 18 + SetWindowPos(hwndSlider, 0, + rect.left+(isMuteVisible?MUTE_W:0)+1, rect.top+1+ (MUTE_H-SLIDER_H)/2, rect.right-rect.left-3-(isMuteVisible?MUTE_W:0), SLIDER_H, + SWP_NOZORDER); + InvalidateRect(hwnd, &rect, FALSE); + return 0; + } + case WM_NOTIFY: + switch(((LPNMHDR)lParam)->code) + { + case NM_RELEASEDCAPTURE: + { + int value = (DWORD)SendMessage(hwndSlider, TBM_GETPOS, 0, 0)*SLIDER_DIV; + + DBWriteContactSettingDword(NULL, SERVICENAME, "Volume", value); + if(hwndOptSlider) SendMessage(hwndOptSlider, TBM_SETPOS, TRUE, value); + playSnd::SetVolume(value); + //SkinPlaySound("RecvMsg"); + + break; + } + } + break; + } + return DefWindowProc(hwnd,msg,wParam,lParam); +} +#define WndClass "SNDVOL_WND" + +int OnModulesLoaded(WPARAM wparam,LPARAM lparam) +{ + if(!ServiceExists(MS_SKIN2_ADDICON)) + { + hSoundOn = (HICON)LoadImage(hInst,MAKEINTRESOURCE(IDI_SND_ON),IMAGE_ICON,GetSystemMetrics(SM_CXSMICON),GetSystemMetrics(SM_CYSMICON),0); + hSoundOff = (HICON)LoadImage(hInst,MAKEINTRESOURCE(IDI_SND_OFF),IMAGE_ICON,GetSystemMetrics(SM_CXSMICON),GetSystemMetrics(SM_CYSMICON),0); + } + else + { + SKINICONDESC sid; + char ModuleName[MAX_PATH]; + + sid.cbSize = sizeof(sid); + sid.pszSection = Translate("Sound Volume"); + GetModuleFileName(hInst, ModuleName, sizeof(ModuleName)); + sid.pszDefaultFile = ModuleName; +#define myLOAD_ICON(n, result)\ + sid.pszName = szIconId[n];\ + sid.pszDescription = szIconName[n];\ + sid.iDefaultIndex = iIconId[n];\ + CallService(MS_SKIN2_ADDICON, 0, (LPARAM)&sid);\ + result = (HICON)CallService(MS_SKIN2_GETICON, 0, (LPARAM)szIconId[n]); + + myLOAD_ICON(0, hSoundOff); + myLOAD_ICON(1, hSoundOn); + + hHookSkinIconsChanged = HookEvent(ME_SKIN2_ICONSCHANGED, OnSkinIconsChanged); + } + if(ServiceExists(MS_CLIST_FRAMES_ADDFRAME)) + { + WNDCLASSEX wcx; + CLISTFrame f; + + ZeroMemory( &wcx, sizeof( wcx ) ); + + wcx.cbSize = sizeof(WNDCLASSEX); + wcx.style = 0; + wcx.lpfnWndProc = WndProc; + wcx.cbClsExtra = 0; + wcx.cbWndExtra = 0; + wcx.hInstance = hInst; + wcx.hIcon = NULL; + wcx.hCursor = LoadCursor(hInst, IDC_ARROW); + wcx.hbrBackground = (HBRUSH)(COLOR_3DFACE+1); + wcx.lpszMenuName = NULL; + wcx.lpszClassName = WndClass; + wcx.hIconSm = NULL; + // + RegisterClassEx(&wcx); + // + hwndFrame = CreateWindow(WndClass, + NULL, + WS_CHILD|WS_VISIBLE, + 0, + 0, + 120, + MUTE_H+2, + (HWND)CallService( MS_CLUI_GETHWND, 0, 0 ), + NULL, + hInst, + NULL); + // + ZeroMemory(&f, sizeof(CLISTFrame)); + f.align = alBottom; + f.cbSize = sizeof(CLISTFrame); + f.height = MUTE_H+2; + f.Flags = F_VISIBLE; + f.hWnd = hwndFrame; + f.name = "SoundVolume"; + CallService(MS_CLIST_FRAMES_ADDFRAME,(int)&f,0); + } + return 0; +} + + +int __declspec(dllexport) Load(PLUGINLINK *link) +{ + pluginLink=link; + + playSnd::Init(); + hHookSkinPlayingSound = HookEvent(ME_SKIN_PLAYINGSOUND, OnSkinPlayingSound); + HookEvent(ME_OPT_INITIALISE, OnOptionsInit); + HookEvent(ME_SYSTEM_MODULESLOADED, OnModulesLoaded); + hHookDbSettingChange = HookEvent(ME_DB_CONTACT_SETTINGCHANGED, OnSettingChanged); + hHookMouse = SetWindowsHookEx(WH_MOUSE_LL, &OnMouseHook, hInst, 0); + //hHookMouse = SetWindowsHookEx(WH_MOUSE, &OnMouseHook, hInst, 0); + + return 0; +} + +int __declspec(dllexport) Unload(void) +{ + if(!ServiceExists(MS_SKIN2_ADDICON)) + { + DestroyIcon(hSoundOff); + DestroyIcon(hSoundOn); + UnhookEvent(hHookSkinIconsChanged); + } + UnhookEvent(hHookSkinPlayingSound); + playSnd::Destroy(); + return 0; +} \ No newline at end of file diff --git a/plugins/!NotAdopted/sndVol/plugin.h b/plugins/!NotAdopted/sndVol/plugin.h new file mode 100644 index 0000000000..529676a289 --- /dev/null +++ b/plugins/!NotAdopted/sndVol/plugin.h @@ -0,0 +1,42 @@ +#include "AggressiveOptimize.h" +#include +#include +#include "../../include/newpluginapi.h" +#include "../../include/m_system.h" +#include "../../include/m_database.h" +#include "../../include/m_protomod.h" +#include "../../include/m_protosvc.h" +#include "../../include/m_langpack.h" +#include "../../include/m_clist.h" +#include "../../include/m_options.h" +#include "../../include/m_clui.h" +#include "../../include/m_clc.h" +#include "../../include/m_utils.h" +#include "../../include/m_skin.h" +#include "../../include/m_button.h" +#include + + +#define SERVICENAME "sndVol" + +extern HINSTANCE hInst; +extern bool isEnabled; +extern HWND hwndFrame, hwndSlider, hwndOptSlider; +extern HICON hSoundOn, hSoundOff; +extern int autoPreview; + +#define SLIDER_MIN 1 +#define SLIDER_MAX 90 +#define SLIDER_DIV 6 + +#ifdef __cplusplus +extern "C" { +#endif + +int __declspec(dllexport) Load( PLUGINLINK *link ); +int __declspec(dllexport) Unload( void ); +__declspec(dllexport) PLUGININFO *MirandaPluginInfo( DWORD dwVersion ); + +#ifdef __cplusplus +} +#endif diff --git a/plugins/!NotAdopted/sndVol/resource.h b/plugins/!NotAdopted/sndVol/resource.h new file mode 100644 index 0000000000..5d4781b86e --- /dev/null +++ b/plugins/!NotAdopted/sndVol/resource.h @@ -0,0 +1,24 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Developer Studio generated include file. +// Used by sndVol.rc +// +#define IDD_OPT 101 +#define IDI_SND_ON 103 +#define IDI_SND_OFF 104 +#define IDC_SLIDER1 1000 +#define IDC_VOLUME 1000 +#define IDC_TEST 1001 +#define IDC_AUTO 1002 +#define IDC_GRP 1003 +#define IDC_MUTE 1004 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 104 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1004 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/plugins/!NotAdopted/sndVol/snd.ico b/plugins/!NotAdopted/sndVol/snd.ico new file mode 100644 index 0000000000..60f5752468 Binary files /dev/null and b/plugins/!NotAdopted/sndVol/snd.ico differ diff --git a/plugins/!NotAdopted/sndVol/sndVol.dsp b/plugins/!NotAdopted/sndVol/sndVol.dsp new file mode 100644 index 0000000000..aae0d71298 --- /dev/null +++ b/plugins/!NotAdopted/sndVol/sndVol.dsp @@ -0,0 +1,163 @@ +# Microsoft Developer Studio Project File - Name="sndVol" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 + +CFG=sndVol - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "sndVol.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "sndVol.mak" CFG="sndVol - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "sndVol - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE "sndVol - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "sndVol - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "sndVol_EXPORTS" /YX /FD /c +# ADD CPP /nologo /MD /W3 /GX /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "sndVol_EXPORTS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x809 /d "NDEBUG" +# ADD RSC /l 0x809 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib dxerr8.lib dxguid.lib advapi32.lib winmm.lib /nologo /dll /map /machine:I386 /out:"..\..\bin\Release\plugins\sndVol.dll" + +!ELSEIF "$(CFG)" == "sndVol - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "sndVol_EXPORTS" /YX /FD /GZ /c +# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "sndVol_EXPORTS" /YX /FD /GZ /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x809 /d "_DEBUG" +# ADD RSC /l 0x809 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib dxerr8.lib winmm.lib dxguid.lib /nologo /dll /debug /machine:I386 /out:"..\..\bin\Release\plugins\sndVol.dll" /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "sndVol - Win32 Release" +# Name "sndVol - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\dmutil.cpp +# End Source File +# Begin Source File + +SOURCE=.\dxutil.cpp +# End Source File +# Begin Source File + +SOURCE=.\optionsdlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\playSnd.cpp +# End Source File +# Begin Source File + +SOURCE=.\plugin.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=.\dmutil.h +# End Source File +# Begin Source File + +SOURCE=.\dxutil.h +# End Source File +# Begin Source File + +SOURCE=.\optionsdlg.h +# End Source File +# Begin Source File + +SOURCE=.\playSnd.h +# End Source File +# Begin Source File + +SOURCE=.\plugin.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# Begin Source File + +SOURCE=.\nosnd.ico +# End Source File +# Begin Source File + +SOURCE=.\resource.h +# End Source File +# Begin Source File + +SOURCE=.\snd.ico +# End Source File +# Begin Source File + +SOURCE=.\sndVol.rc +# End Source File +# Begin Source File + +SOURCE=.\volume.ico +# End Source File +# End Group +# End Target +# End Project diff --git a/plugins/!NotAdopted/sndVol/sndVol.dsw b/plugins/!NotAdopted/sndVol/sndVol.dsw new file mode 100644 index 0000000000..7e7ac094a5 --- /dev/null +++ b/plugins/!NotAdopted/sndVol/sndVol.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "sndVol"=".\sndVol.dsp" - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/plugins/!NotAdopted/sndVol/sndVol.rc b/plugins/!NotAdopted/sndVol/sndVol.rc new file mode 100644 index 0000000000..4b359471af --- /dev/null +++ b/plugins/!NotAdopted/sndVol/sndVol.rc @@ -0,0 +1,96 @@ +//Microsoft Developer Studio generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "afxres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// Russian resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_RUS) +#ifdef _WIN32 +LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT +#pragma code_page(1251) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_OPT DIALOGEX 0, 0, 296, 64 +STYLE DS_FIXEDSYS | WS_CHILD | WS_VISIBLE +EXSTYLE WS_EX_CONTROLPARENT +FONT 8, "MS Sans Serif" +BEGIN + GROUPBOX " Volume ",IDC_GRP,0,0,296,64 + CONTROL "Slider1",IDC_VOLUME,"msctls_trackbar32",TBS_NOTICKS | + WS_TABSTOP,6,13,284,17 + LTEXT "min",IDC_STATIC,6,27,12,8 + LTEXT "max",IDC_STATIC,276,27,14,8 + PUSHBUTTON "Preview",IDC_TEST,10,40,50,14 + CONTROL "Auto-preview",IDC_AUTO,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,65,40,57,15 + CONTROL "Mute button",IDC_MUTE,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,220,40,65,15 +END + + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE DISCARDABLE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE DISCARDABLE +BEGIN + "#include ""afxres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE DISCARDABLE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_SND_ON ICON DISCARDABLE "snd.ico" +IDI_SND_OFF ICON DISCARDABLE "nosnd.ico" +#endif // Russian resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + -- cgit v1.2.3